簡易スライドビューア [7] iPad対応〜ユニバーサルアプリを作る

2010年9月20日月曜日 | Published in | 4 コメント

このエントリーをはてなブックマークに追加

[前回]

ユニバーサルアプリにしてiPadに入れてみた。

iPad対応


このサイトが参考になった。
3時間でiPhoneアプリをiPad対応にした : 管理人@Yoski

以下、記録。


1. ターゲットを iPad用にアップグレード


ターゲット上で右クリックして「現在のターゲットを iPad 用にアップグレード...」を選ぶ。
ユニバーサルアプリ(1つでiPhone/iPadに対応)にするのか、デバイス毎に別々のアプリとするのかを聞かれる。今回は「One Universal application」を選択。
すると "Resource-iPad" というグループが作成された。ただ中身は何も入っていなかった。

2. XIBを iPad用に作成


EasyGallery では2つのXcodeが作成した2つの XIBファイルを使っている。
MainWindow.xib
EasyGalleryViewController.xib
これらを iPad用に新規に作成する。

まず MainWindow.xib から。InterfaceBuilderでファイルを開いた後、「File」メニューから「Create iPad Version」を選択する。
すると MainWindow.xib をコピーした新しい XIBファイルが生成される。
名前を MainWindow-iPad.xib として保存する。この名前は Info.plist の設定と一致させておく必要がある。1. でターゲットをアップグレードした時に Info.plist にはデフォルトで "Main nib file base name (iPad)" が追加されている。値は "MainWindow-iPad"。

同様にして EasyGalleryViewController.xib も iPad用に新規作成する。名前は後ろに "-iPad" をつけて EasyGalleryViewController-iPad.xib とした。

なお「File」メニューで「Create iPad Version Using Autoresizing Masks」を選ぶと、Autoresizing Masksが iPad用に自動的に摘要される。大抵の場合、ビューのサイズを iPad用に拡大するのでこれは便利。

これで完了。


実機で実行


あっさり動いた。


横にすればちゃんと回転する。拡大時の回転も問題なし。


これはちょっと嬉しい。


その他


EasyGalleryViewController-iPad.xib はソースコード上に名前が現れない。また新規に作った MainWindow-iPad.xib の NIB Name は "EasyGalleryViewController" のまま。
自動的に"-iPad"が付くファイルを探してXIBを読み込んでいるようだ。画像等と同じく暗黙のルールがあるのだろうか。リファレンスを探したがこれについの説明は見つけられなかった。

10/8追記)iPhone用の XIBが使われていたことが判明。やっぱりこの設定を変える必要がある。


ソースコード


GitHubからどうぞ。
EasyGallery at 2010-09-20 from xcatsan's iOS-Sample-Code - GitHub


- - - -
わかってはいたけれど同じソースで iPhone/iPad 両方が動くのはすごいな。実際にアプリを作るときには作業量が増えるので大変だとは思うけれど。

Responses

  1. 匿名
    2011年8月19日 13:37

    初めまして。UIScrollViewの勉強がしたくてここにたどり着きました。拝見させていただいたものを自分で書いてみているのですが、試しにUISplitViewの右ペインDetailViewに入れてみたところ、landscape時になぜか画像が「上へずれて」しまいます。UIScrolViewのFrameの設定なんだと思うんですが。。アドバイスいただけませんでしょうか?

  2. 匿名
    2011年8月19日 13:37

    初めまして。UIScrollViewの勉強がしたくてここにたどり着きました。拝見させていただいたものを自分で書いてみているのですが、試しにUISplitViewの右ペインDetailViewに入れてみたところ、landscape時になぜか画像が「上へずれて」しまいます。UIScrolViewのFrameの設定なんだと思うんですが。。アドバイスいただけませんでしょうか?

  3. xcatsan says:
    2011年8月20日 7:10

    おはようございます。landscape 時の表示位置のずれは、たぶん指摘の通り UIScrollView の設定に原因があります。これは回転して landscape にした時に UIScrollView の Frame および contentSize が回転前の状態のままだからです。つまり portlate の 縦長の長方形に合わせた Frame/contentSize のまま landscape を表示しようとしているためにズレます。これを解消するには画面の向きに応じて Frame/contentSize を設定してやる必要があります。

    下記に図があるので参考にしてみてください。
    http://cocoadays.blogspot.com/2010/09/4.html


    参考になればと思います。
    では。

  4. xcatsan says:
    2011年8月20日 7:10

    おはようございます。landscape 時の表示位置のずれは、たぶん指摘の通り UIScrollView の設定に原因があります。これは回転して landscape にした時に UIScrollView の Frame および contentSize が回転前の状態のままだからです。つまり portlate の 縦長の長方形に合わせた Frame/contentSize のまま landscape を表示しようとしているためにズレます。これを解消するには画面の向きに応じて Frame/contentSize を設定してやる必要があります。

    下記に図があるので参考にしてみてください。
    http://cocoadays.blogspot.com/2010/09/4.html


    参考になればと思います。
    では。

  5. 匿名
    2011年8月29日 12:05

    アドバイスいただきありがとうございます。以前コメント欄にて質問させていただいたものです。
    FrameやcontetntSizeを変更しても、どうにもうまくいきませんでした。
     実は、nibファイル無しでソースを作成していたのですが、nibファイルを作成して、UIScrollViewを置き、portlaitとlandscapeの双方の設定(というかUIScrollViewの位置)をきちんとおいてやることでうまく動きました。
    ありがとうございました(__)

  6. 匿名
    2011年8月29日 12:05

    アドバイスいただきありがとうございます。以前コメント欄にて質問させていただいたものです。
    FrameやcontetntSizeを変更しても、どうにもうまくいきませんでした。
     実は、nibファイル無しでソースを作成していたのですが、nibファイルを作成して、UIScrollViewを置き、portlaitとlandscapeの双方の設定(というかUIScrollViewの位置)をきちんとおいてやることでうまく動きました。
    ありがとうございました(__)

  7. xcatsan says:
    2011年9月1日 0:01

    こんばんは。
    あまりお役に立てなかったようですね ;;;
    でも解決できたようで何よりです。

    ではでは。

  8. xcatsan says:
    2011年9月1日 0:01

    こんばんは。
    あまりお役に立てなかったようですね ;;;
    でも解決できたようで何よりです。

    ではでは。

Leave a Response

人気の投稿(過去 30日間)