2012-07-09 2 views
5

私はネストされたUIView秒の数が含まれている1 UIViewを保持し、1 UIViewControllerとストーリーボードを持っています。私は、このメソッドを実装するビューコントローラをサブクラス化:UIViewは風景の中にポートレートの寸法を持っていますか?

- (BOOL)shouldAutorotateToInterfaceOrientation: UIInterfaceOrientation)interfaceOrientation { 
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft); 
} 

私もInfo.plist

<key>UISupportedInterfaceOrientations</key> 
    <array> 
    <string>UIInterfaceOrientationLandscapeLeft</string> 
    <string>UIInterfaceOrientationLandscapeRight</string> 
    </array> 
<key>UIInterfaceOrientation</key> 
<string>UIInterfaceOrientationLandscapeLeft</string> 

を追加しました。

私はこれをやっているメインのUIViewののviewDidLoadで:

問題が制御され、代わりに予想される1024の唯一の756px幅で詳細については、以下のスクリーンショットを参照してください。 enter image description here私はウェブ全体を検索してきましたが、どこでもこの難解な問題の解決策を見つけることはできません。私は基本SDKとしてiOS5.1を設定してXcode 4.5を使用しています。

EDIT フレームを境界に置き換えて動作しています。しかし、私は何が起こっているのか理解していないので、フレームサイズでは動作しません。

答えて

11

この方法を実装します。

@property(非アトミック)CGRectフレーム

独自の座標系 にビューの位置とサイズを記述する境界矩形、。

@property(非アトミック)CGRect境界

使用限界ではなく、フレーム。

+0

ありがとう! 'フレーム'を境界線に置き換えることができます!しかし、なぜ私は本当に理解していないのですか?それをフレームで動作させる機会はありますか?なぜスーパービューとそれ自身の座標系でUIViewのサイズが違うのか分かりません – s1m0n

+0

ビューはウィンドウ上にあり、ウィンドウには内部のランドスケープモードがなければならないと私は理解しています。 trueの場合、ウインドウ座標系のビュー座標は、ウインドウがそのビューと一緒に回転し、そのサブビューの回転に合わせて回転を反映しません。理解を深めるために、座標系の知識をリフレッシュしたいと思うかもしれません(回転と多分、この場合には十分でなければなりません):http://en.wikipedia.org/wiki/Cartesian_coordinate_systemそれは私が覚えている学校の数学です。 –

+1

http://stackoverflow.com/questions/1210047/iphone-development-whats-the-difference-between-the-frame-and-the-boundsとリンクされた質問のいくつかを読むことはおそらく価値があります。 –

2

は、あなたが回転で自動サイズ変更したいどんな景色にautoresizingMaskを設定します。このように:

[myView setAutoresizingMask:UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingMaskFlexibleRightMargin]; 
+1

お返事ありがとうございます。しかし私は、私のアプリが自動回転するようなものではない。風景モードで十分です。だから、それは自動回転してはいけません。何でも、私はちょうどそれが正しいランドスケープディメンションを返すようにしてください。 – s1m0n

0

問題は、ランドスケープモードへのコードのあなたの行をロードする前にこの[PASectionView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, 180)]; [self addSubview:sectionView];を呼び出しているメソッドにメソッドの読み込み を呼び出しているので、それはビューコントローラクラスであれば、それならば、それは[PASectionView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 180)]; [self addSubview:sectionView];あるべきですあなたがViewDidLoad方法を手に入れた後、UIViewのサブクラスです。 今.hクラスであなたの問題を解決するために : 書き込みこの PASectionView * sectionView。 .mのクラスのスーパーのシステム座標 にビューの位置とサイズを記述するフレーム矩形、

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ 
    if (toInterfaceOrientation == UIInterfaceOrientationPortrait) 
{ 

} 
else // OrientationLandscape 
{ 
sectionView.frame = CGRect(sectionView.frame.origin.x,sectionView.frame.origin.y,self.view.frame.size.width,180);  
} 
0

あなたは、

あなたのサブビューのための自動サイズ変更マスクを設定し、あなたのサブビューをコードで追加された場合、スーパーにサブビューを追加する前にこのコード行を追加する必要があります。 yourSubView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

その他nibファイルにサブビューを追加した場合は、nibファイルのサブビューのプロパティで境界マグネットとサイズ変更マスクを選択します。

関連する問題