【結局どう直したか】
didRotateFromInterfaceOrientationで回していたレイアウト用のメソッドをviewWillLayoutSubviewsでも実行した
iOS5までは、didRotateFromInterfaceOrientationが起動時にも動いてくれてたのでよかったんですが、iOS6だと「横向きに起動したとき」に動いてくれないんですね。
なので、didRotateFromInterfaceOrientationではなく、viewWillLayoutSubviewsでコードを実行する必要がある、と。
ところがviewWillLayoutSubviewsはiOS5以降の機能なので、必然的にiOS4.x系統は死にます。
もっともそれ以外のいろんな点でiOS4系のサポートはやりたくないので寧ろこういう理由がついて嬉しい限りですが!
#iOS5以降でないとUIStepperとかの一部コンポーネントは動かないし…
「iPhoneSDK」カテゴリーアーカイブ
iOS6め…
「iOS6」「iPad」「横向き状態で起動」という3要件を満たすと起動時の画面構成がおかしくなる、という珍現象を発見してログを仕込んで挙動を見る。
なんで挙動(ログを仕込んだ場所を通る回数とデバッグコンソールに出力する値)が全然違うんだよ!
ちなみに上記の条件以外では正常動作するので直すのが非常に面倒(単純に弄ると大丈夫な部分まで影響を与えそう)そうというのが何とも。
どうしてこうなった…
メソッドを動的に指定する
hogehogeというNSStringで指定した名前のメソッドへのセレクタは
NSSelectorFromString(hogehoge)
というのは分かったのだが、このセレクタに引数が欲しいときにどうすればいいのか分からなかった。
メソッド名が固定なら@selector(hogehoge:)でいいんだけどなぁ…と思いつつ検索を深めていくと、意外な事実
メソッド名の末尾にコロンつければいい
つまり@”hogehoge:”というNSStringを指定すればいい、ということらしい。
本日のヒトコト
「完全2値画像じゃないとマスク画像に使えない」
#Retina用マスク画像を1/2縮小して非Retina用画像として
#済ませようとすると、大抵エッジ部分に半透明黒が出来てこの法則が崩れる
所謂UIPickerViewについての記事
手抜きと言われようが何だろうが情報が散逸して重複しても情報量ないしなぁと思うのでこの記事見れば使えるようになるんじゃないかとご紹介。
IB使わないなら、IBOutletとIBで定義してる部分を代行すればいいので、alloc、init(initWithFrameではないのに注意)かまして、delegateとdatasourceを設定すればあとは一緒。
UIView派生クラスなので、普通にaddSubViewで張り付ければOK。表示座標が設定したければinit後にframeを取ってきてorigin.xとorigin.yを変えて再設定すればいい。
UIPickerViewを複数使うなら(今月のゴメンナサイでも触れたけど)tagを設定してswitch~case分岐で対応するとかがいいのではないかと。
複数のUIGestureRecognizerを登録して競合させない
#日記に潤いを与えるためにここに記載
#そのうち隔離とかする予定…またBlog増えるのかw
情報元
複数のUIGestureReconizerに対応するためには、デリゲートメソッド
gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
を作ってやって、こいつでYESを返せばいい。
これは「gestureRecognizeで指定されたジェスチャ」が「shouldRecognizeSimultaneouslyWithGestureRecognizer」と同時にジェスチャを認識していいか、というお話。
「Tapしてドラッグする」ジェスチャで、タップ開始点が必要なときにこいつを使おうかと。