iPad方向检查UIView类?

时间:2011-10-15 18:03:51

标签: objective-c ipad uiview orientation

我有一个UIView课程,我将其添加到我的主UIViewController,我需要在viewDidLoad的应用启动时检查设备的方向(iPad)方法。但是因为该类是UIView(不是UIViewController),所以我无法使用willAnimateRotationToInterfaceOrientation等方法。

所以我试图在我的UIView课程中使用它:

if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) ||
    ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) {

但是,使用一些断点进行测试,无论方向如何,都不会调用of语句,它会跳过它。那么你建议我做些什么来克服这个问题?

我需要以某种方式检测UIView类的方向。

感谢。

2 个答案:

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

但在我的情况下,视图在旋转时改变了纵横比。如果这也是你的情况,它应该可以正常工作。