読者です 読者をやめる 読者になる 読者になる

shouldAutorotateToInterfaceOrientationと、interface builder

xcodeの、view-based applicationで作られるテンプレートの

view controller(以下、親view)に、

[self.view addSubview:viwer.view];

の様に、子のviewを追加していった場合、この子viewは、

shouldAutorotateToInterfaceOrientationで YESを返すように

を書いていても、回転されないのですね。

(viewcontrollerではなく、「view」を追加しているからって事ですよね、)

追加元の親viewは、

shouldAutorotateToInterfaceOrientationで YESを返すように

してあれば、その子となる、上記の追加viewも当然回転されますが、

interface builder上で調整できる、回転のレイアウト調整は適用されませんでした。

(子自身ではなく親が回転と言う事だから、という事ですよね)

で、この子を、自動レイアウト調整をしたいと思ったのですが・・

どうにも出来なく、大本の一番上の階層(window)に

追加されている親viewをremoveFromSuperViewして、

子のviewを追加してみると、回転時に自動レイアウト調整されるようになりました。

恐らく、何かしらの設定で回避できそうな気もすごくするのですが、

現状では、

・interface builder上での回転に対するレイアウト調整は、

viewControllerの中の、1つのviewに対してしか実行されない

ということなのかな・・と思っています。

うーん・・・

※2010/9/24 追記

[UIViewcontroller presentModalViewController:view]

を使い、viewcontrollerの上にviewを置くと、

それぞれのviewで

shouldAutorotateToInterfaceOrientation

に値が来て、別々に管理できました。

なのでこれを使えば解決できそうです!

(ただ、この方法で追加すると、

viewDidLoadよりも

shouldAutorotateToInterfaceOrientation

の方が先に呼ばれるようなので、

初期化のタイミングは調整する必要がありました。)

また、縦用、横用のレイアウトを作るには、

interface builderの画面右上の矢印を押して

回転させてそれぞれのレイアウトを確認しつつ、

Tool→size inspectorのAuto sizingで縦用と横用、

なるべくスクリプトをいじらなくてフィットするようにしていきますが、

必ずしもここできちんとフィットしているように見えても、

動かしてみると違った見え方になってしまうこともあったので、

やはり全て確認していかないといけないですね。

(当たり前か・・。でもこのinterfacebuilderの回転のレイアウトって結構完成度が高くて、

ほとんどそのまま出ると思っていたんですよね・・。)