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 回答