在设备旋转时隐藏UIView - 当设备处于水平状态时不起作用

时间:2011-09-25 20:12:02

标签: iphone ios uiview uideviceorientation

我正在尝试在旋转设备时隐藏视图控制器中的图像。我在PlayerViewController中发布通知,并在app delegate中监听它,它负责bannerView:

- (void)orientationChanged:(NSNotification *)notification {     

  UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

if ((orientation == UIDeviceOrientationLandscapeLeft) ||
    (orientation == UIDeviceOrientationLandscapeRight)) {

    bannerView.hidden = ([[self.navigationController visibleViewController] isKindOfClass:[PlayerViewController class]]) ? YES : NO;

} else {
    bannerView.hidden = NO;
}
}

PlayerViewController发送通知,app委托隐藏bannerView。但是,当设备平放在桌子上时,图像显示。垂直握持设备时工作正常但水平图像显示为奇数。

以下是发送通知的代码:

 - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
                                     duration:(NSTimeInterval)duration {

if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
 ... hide other stuff in this view controller
 }

为什么会发生这种奇怪的行为?

只有一个小小的更多信息。在模拟器中,图像显示设备处于倒置方向,即使我有:

- (BOOL)shouldAutorotateToInterfaceOrientation (UIInterfaceOrientation)interfaceOrientation
 {
if (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIDeviceOrientationPortrait) {
    return YES;
} else {
    return NO;
}
}

1 个答案:

答案 0 :(得分:0)

由于您发布通知时可能会发生错误。

在方向更改发生之前,

willAnimateRotationToInterfaceOrientation被称为(因此方法名称中的“将”)。因此,如果我们从纵向转向横向,当前方向可能仍会被报告为纵向(可能不会,它取决于)。

现在,willAnimate...调用会返回toInterfaceOrientation - 的方向。

您在收到willAnimate ...来电时触发通知,并在通知电话[[UIDevice currentDevice]orientation]内:将返回人像。您应该通过willAnimate调用中提供的方向,而不是在通知方法中请求方向。

如果不清楚,则在旋转更改之前将一句话摘要willAnimateRotationToInterfaceOrientation称为