iPhone进入横向模式时执行方法

时间:2011-07-08 17:43:17

标签: iphone objective-c ipad events delegates

当iPhone进入横向或纵向模式时是否会调用一个代理?当iPhone旋转时,我需要更改样式并将对象放在不同的位置。我是否必须使用加速度计?此外,如果存在这样的委托,我必须在界面构建器中创建连接。我是客观的新手......

3 个答案:

答案 0 :(得分:7)

注册以收听方向更改通知。

UIDevice *device = [UIDevice currentDevice];
    //Tell it to start monitoring the accelerometer for orientation             
[device beginGeneratingDeviceOrientationNotifications];
    //Get the notification centre for the app   
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];    
[nc addObserver:self selector:@selector(orientationChanged:)        name:UIDeviceOrientationDidChangeNotification
         object:device];

实施orientationChanged:方法,该方法将在设备更改方向时调用。你可以放置代码来检查方向类型并调用你的方法。

- (void)orientationChanged:(NSNotification *)note
{
    NSLog(@"Orientation  has changed: %d", [[note object] orientation]);
}

删除dealloc中的通知。

[[NSNotificationCenter defaultCenter] removeObserver:self];
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

查看博客文章

Reacting to iPhone's orientation

答案 1 :(得分:1)

在视图控制器中实现didRotateFromInterfaceOrientation

  

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

答案 2 :(得分:0)

您可以让UIDevice为方向事件生成通知。请参阅documentation for UIDevice

如果您需要随时检测更改,可以考虑在应用的代理中调用-beginGeneratingDeviceOrientationNotifications

另外,如果您使用UIViewController,则有

  • shouldAutorotateToInterfaceOrientation:
  • willRotateToInterfaceOrientation: duration:
  • didRotateFromInterfaceOrientation: