dnjiro’s 9VAe blog

誰でもアニメが作れる無料ソフト9VAeきゅうべえ開発者のブログ

9VAeきゅうべえiPad版 iPhoneでメニューバーを表示させる方法

9VAeきゅうべえiPad版が、iPhoneで動作させると、ビルドエラーがないのに、最初で落ちるのは、UIPopoverControllerが使えないためだった。

 

UIPopoverControllerは、メニューバーからプルダウンメニューを表示させるのにサンプルコードが使ってた。これが iPoneで使えないので、代わりを見つけないといけない。

 

そもそも、iPhoneの小さな画面でメニューバーがいるのか、出せるのかが問題になるが、ファイル開くとか、GIF出力とかメニューに入っているので、そのまま移植できたら作るのもメンテも楽である。それで参考になる記事を探す。

iPhone で ポップオーバーを使う

iPhoneでPopOverがなかったのは、入力中に外側の画面の表示をさせる仕様を作りたくなかったんでしょう。この記事によると、iOS9 以上なら回避策があるらしい。

iOS端末 画面サイズ・対応OS早見表 - 文系プログラマの勉強ノート

を見ると、iPhone6SからiOS9になってる。iPhone4s以降なら iOS9に上げられるらしい。

 

iPhone5の人は、iOS9に上げてもらうことにして、iOS9を最低レベルにしよう。ということで、iOS9を最低レベルにしてビルドしてみたが

 

iOS9にしてもUIPopoverControllerで落ちる

ios - Popover getting crashes in iPhone - Stack Overflow

 

下の記事によると、アプリの名前を iTunesにするとエラーが出なくなるらしい。

objective c - UIPopoverController for iphone not working? - Stack Overflow

しかし、ちょっと採用しにくいな。

 

ということで、Popoverを諦めて、iPhoneでよく使われるスライドメニューに変更してみよう。以下の記事にプロジェクトがついていたので、これを改造することにする。

How To Add a Slide-Out Sidebar Menu in iOS Apps | iOS Programming

 

新しいプロジェクトに 9VAeを追加すると、以下の記事と同じバグが発生。みんな同じところでつまずくわけだ。

ios - 'release' is unavailable: not available in automatic reference counting mode - Stack Overflow

答えはここにあるらしい

ios - Custom dealloc and ARC (Objective-C) - Stack Overflow

ARCは Auto Reference Countで、オブジェクトの解放を勝手にやってくれる仕組みらしい。エラーの起こった場所は、音楽を再生するときに、以前に使っていたオブジェクトがあれば解放せよというコードだったのだが、これを入れなくても、勝手に解放してくれるということかな。と考えて単にエラー箇所をコメントアウトした。

 

 プロジェクトからいらん画面を削除する

StoryBoardでオブジェクトを選んで、deleteキーを押すとホイホイ消せるようだ。とりあえずいらんもんを消す。時々プログラムを実行して、ちゃんと動くことを確かめながら消していくのがポイント。動かなくなったら元に戻す。

 

ここに、9VAeの Viewを追加するのだが、それは、次の記事にまとめる