0

現在、いくつかの写真を含むスクロールビューがあります。電話を横向きに回転させると、スクロールビューの画像が大きくなり (フルスクリーン)、画面全体が画像で覆われるようになります。縦向きに戻すと、フルスクリーンの画像が削除されます。

回転の変化を検出するために、viewDidLoad でこれまでに行ったこと:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleOrientationChange) name:UIDeviceOrientationDidChangeNotification object:nil];

そしてそれを処理するには:

- (void)handleOrientationChange
{
    if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) ||
    ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) {
        UIImageView *fullScreenImage = [[UIImageView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        [fullScreenImage setImage:[UIImage imageNamed:[[PflanzenSingletonClass sharedManager] loadStringFromUserDefaultsForKey:CurrentScrollViewImage]]];
        [fullScreenImage setTag:999];
        [self.view addSubview:fullScreenImage];
    } else
    {
        [[[self.view subviews] objectAtIndex:([[self.view subviews] count] - 1)] removeFromSuperview];
    }
}

しかし、期待どおりに機能していません(確かに私のせいです)。

  1. ImageView は実際にはフルスクリーンではありません。ナビゲーション バーがまだ表示されている
  2. 画像が横向きに回転されていません (向きの変更が行われる直前にメソッドが呼び出されますか??)
  3. 2.のせいで画像が伸びています。
  4. アニメーションでこれをもっとスムーズにしたいと思います。開始点は、スクロールビューの矩形です。

何か案は?どうもありがとう。

4

1 に答える 1

0

これを ViewController で処理する場合は、通知を使用する代わりに次のメソッドをオーバーライドできます。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)

ImageView を全画面表示にする (そしてナビゲーション バーの上に表示する) には、keyWindow に追加します。

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
[imageView setFrame:keyWindow.bounds];
[keyWindow addSubview:imageView];

アップデート。

また、モーダルに表示される別の UIViewController で UIImageView を表示することもできます。この ViewController 実装メソッドで

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toOrientation {
    if (UIInterfaceOrientationIsPortrait(toOrientation)) {
        [self dismissModalViewControllerAnimated:];
    }
}

また、アプリケーションが横向きと縦向きの両方をサポートしていることを確認してください。概要タブまたは App-Info.plist で編集できます。また、次のメソッドをオーバーライドすることにより、特定のコントローラーに対して指定することもできます。

iOS6 の場合:

- (BOOL)shouldAutorotate;
- supportedInterfaceOrientations;

iOS5 の場合:

- (BOOL)shouldAutorotateToInterfaceOrientation:
于 2013-01-29T11:36:22.270 に答える