我有一个UIView
课程,我将其添加到我的主UIViewController
,我需要在viewDidLoad
的应用启动时检查设备的方向(iPad)方法。但是因为该类是UIView
(不是UIViewController
),所以我无法使用willAnimateRotationToInterfaceOrientation
等方法。
所以我试图在我的UIView
课程中使用它:
if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) ||
([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) {
但是,使用一些断点进行测试,无论方向如何,都不会调用of语句,它会跳过它。那么你建议我做些什么来克服这个问题?
我需要以某种方式检测UIView类的方向。
感谢。
答案 0 :(得分:1)
你把支票放在哪里?该位置可以很容易地解释为什么它没有被调用。要获取轮换信息,您可以register for a notification,或让视图控制器在您的视图中调用方法。后者的示例代码:
// ViewController.m
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[self.customView willRotateToOrientation:toInterfaceOrientation];
}
// CustomView.m
- (void)willRotateToOrientation:(UIInterfaceOrientation)newOrientation {
// Handle rotation
}
视图控制器方法是您覆盖的方法;视图的方法应该在标题中声明。
<强>更新强> 或者,您可以在控制器的`viewWillAppear'中找到旋转:
// ViewController.m
- (void)viewWillAppear {
[self.customView willRotateToOrientation:[[UIDevice currentDevice] orientation];
}
将相应调用视图中的方法。
答案 1 :(得分:1)
您可以注意从NSNotificationCenter
注册定位通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
...
- (void)orientationChanged:(NSNotification *)notification
{
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
// do things
}
然而,这不是最理想的,因为当应用程序启动时,iPad可能会平放在桌面上,然后您将获得UIDeviceOrientationUnknown
。来过这里,完成了......
我最终做了这样一个微不足道的检查:
BOOL landscape = self.bounds.size.width > self.bounds.size.height;
if (landscape)
// landscape stuff
else
// portrait stuff
但在我的情况下,视图在旋转时改变了纵横比。如果这也是你的情况,它应该可以正常工作。