1

iPhone の画面の向きに関する問題が発生しています。アプリケーションのベース SDK は ios 6.0 で、展開ターゲットは 4.3 で、ios 5.0 および 5.1 で実行されています

アプリケーションの plist ファイルでPortrait (bottom home button)Landscape (left home button)とを設定しLandscape (right home button)ました。私はユニバーサルアプリを開発しています。したがって、すべてのビューの- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientationメソッドで、条件付きportraitで iphone とlandscapeipad の両方を返します。

私のナビゲーションフローは次のとおりです。

最初のタブをUINavigatinController押すと、 に 2 つのビューが 1 つずつ表示されます。UITableViewControlerUINavigationControllerrootViewController

私の最後のviewControllerの- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientationメソッドでは、私が返しYESました。しかし、このビューはまったく回転していません。メソッドを呼び出すことすらありません- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration。:(

私の要件は、横向きと縦向きの両方を、アプリ全体ではなく、1 つの viewController のみにサポートすることです。

私を助けてください。

4

5 に答える 5

1

この向きの問題は、View Controller クラスのこのコードで解決できます。

#ifdef IOS_OLDER_THAN_6
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {

       return (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) || 
(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight);

}
#endif

#ifdef IOS_NEWER_OR_EQUAL_TO_6
-(BOOL)shouldAutorotate {

       return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
       return (UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight); //IOS_5
}
#endif

このコードを .pch ファイルで定義する必要があります。

コード :

 #define IOS_OLDER_THAN_6  ([[[UIDevice currentDevice] systemVersion] floatValue] < 6.0)
 #define IOS_NEWER_OR_EQUAL_TO_6 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6.0)

うまくいけば、うまくいきます。

ありがとう。

于 2012-10-22T11:16:08.097 に答える
0

これらすべてのメソッドを実装して、ios >= 4.3 バージョンのすべてのデバイスで機能するようにする必要があります。

// Autorotation (iOS <= 5.x)

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


// Autorotation (iOS >= 6.0)

- (BOOL) shouldAutorotate
{
    return YES;
}


-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}
于 2012-10-22T11:16:38.460 に答える
0

UIViewController はいくつありますか? たぶん2、3、またはそれ以上。

各ビューコントローラーでコードを追加してみてください

- (BOOL)shouldAutorotateToInterfaceOrientation:    (UIInterfaceOrientation)interfaceOrientation
{
NSLog(@"viewcontroller: %@", self);
return YES;
}

そして、どのView Controllerが回転通知を受け取るかがわかります。モーダルビューコントローラーの問題のようです。

于 2012-10-22T11:00:55.117 に答える
0
 -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)

  // setFrames=CGRectMake(x, y, w, h);

}
于 2012-10-22T11:05:44.390 に答える
0

iOS 6 の場合、代わりにsupportedInterfaceOrientations&を使用します。shouldAutorotateshouldAutorotateToInterfaceOrientation:

- (NSUInteger) supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape; (Check for device type here and return appropriate orientations)
}

- (BOOL) shouldAutorotate {
   return YES;
}
于 2012-10-22T10:48:00.287 に答える