0

私はiPadが横向きと縦向きの両方でコンテンツを表示する必要があります..だから私はコードを実行し、各方向でコントロールの位置を実行しました.それは正常に動作します..私のコードは

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    if (interfaceOrientation == UIInterfaceOrientationLandscapeRight ||interfaceOrientation == UIInterfaceOrientationLandscapeLeft  ) {

        _viewContainer.frame = CGRectMake(342, 1, 681, 707);
        _viewtopic.frame = CGRectMake(1, 62, 343, 56);
        _viewpublicspeekingheaderleft.frame = CGRectMake(0, 6, 341, 58);
        _viewTableview.frame = CGRectMake(1, 118, 341, 590);
        _viewFooter.frame = CGRectMake(1, 716, 1024, 48);


  if (interfaceOrientation == UIInterfaceOrientationPortrait ||interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown  ) {

        _viewContainer.frame = CGRectMake(276, 1, 503, 946);
        _viewtopic.frame = CGRectMake(0, 58, 275, 50);
        _viewpublicspeekingheaderleft.frame = CGRectMake(0, 1, 275, 58);
        _viewTableview.frame = CGRectMake(1, 109, 274, 837);
        _viewFooter.frame = CGRectMake(1, 954, 767, 48);

    }

    return YES;
}

上記のコードは私にとっては正常に機能します。正しい位置にコントローラーがすべてあります..ここに私の問題があります.フルスクリーンを表示するにはタイマーを設定する必要があり、ビューコントローラーでいくつかのコントローラーを非表示にする必要があります.タイマーを 3 秒に設定し、3 秒後にいくつかのコントロールを非表示にし、フル スクリーンを表示するためにビュー コントローラーの他のコントローラーを配置します。

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Define the timer object

    NSTimer *timer;

   // Create the timer object

    timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self 
                                           selector:@selector(updateorientation:) userInfo:nil repeats:NO];
}

- (void) updateorientation:(NSTimer *)incomingTimer
{

    _tableTopic.hidden =YES;
    _viewtopic.hidden =YES;
    _viewpublicspeekingheaderleft.hidden =YES;
    _viewTableview.hidden =YES;
    _imgpulbicspeakingabovethetableview.hidden =YES;
    _topiclabel.hidden =YES;
    _lblpublicspeekingleft.hidden =YES;


    UIInterfaceOrientation orientation =[[UIApplication sharedApplication] statusBarOrientation];
    if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown ) {
        NSLog(@"portrait");// only works after a rotation, not on loading app

        _imgMicimage.frame = CGRectMake(69, 130, 635, 216);
          _txtContentofTopic.frame = CGRectMake(69, 354, 635, 203);
          _viewContainer.frame = CGRectMake(0, 0, 768, 1024);


    }
    UIInterfaceOrientation orientationLandscape =[[UIApplication sharedApplication] statusBarOrientation];
    if (orientationLandscape == UIDeviceOrientationLandscapeLeft || orientationLandscape == UIDeviceOrientationLandscapeRight ) {
        NSLog(@"landscape");

        _imgMicimage.frame = CGRectMake(93, 113, 836, 239);
        _txtContentofTopic.frame = CGRectMake(93, 360, 836, 203);
        _viewContainer.frame = CGRectMake(0, 0, 1024, 768);

    }
    }

それは正常に動作しますが、タイマーが起動した後、デバイスの向きを変更します。関数内の配列のみを取得し - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {ます。時間関数内の配列が必要です。これを解決する方法.

前もって感謝します。

}

4

1 に答える 1

1

でこの作業を行うべきではありません-shouldAutorotateToInterfaceOrientation:。この方法は、UI を回転させる必要があるかどうかを判断するためのものです (すぐに新しいシステムに取って代わられる予定です)。これらのメソッドを使用して、実際の回転に反応して UI をレイアウトする必要があります。

  • -willRotateToInterfaceOrientation:duration:
  • -willAnimateRotationToInterfaceOrientation:duration:
  • -didRotateFromInterfaceOrientation:

UIViewControllerそれらの詳細については、ドキュメントを参照してください。

iOS 5 では、-viewWillLayoutSubviews別の良い選択かもしれません。(コントローラーのビューが現在表示されていなくても呼び出されます。)

于 2012-07-31T14:09:22.113 に答える