我正在尝试在旋转设备时隐藏视图控制器中的图像。我在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;
}
}
答案 0 :(得分:0)
由于您发布通知时可能会发生错误。
在方向更改发生之前, willAnimateRotationToInterfaceOrientation
被称为(因此方法名称中的“将”)。因此,如果我们从纵向转向横向,当前方向可能仍会被报告为纵向(可能不会,它取决于)。
现在,willAnimate...
调用会返回toInterfaceOrientation
- 的方向。
您在收到willAnimate
...来电时触发通知,并在通知电话[[UIDevice currentDevice]orientation]
内:将返回人像。您应该通过willAnimate
调用中提供的方向,而不是在通知方法中请求方向。
如果不清楚,则在旋转更改之前将一句话摘要willAnimateRotationToInterfaceOrientation
称为。