当iPhone进入横向或纵向模式时是否会调用一个代理?当iPhone旋转时,我需要更改样式并将对象放在不同的位置。我是否必须使用加速度计?此外,如果存在这样的委托,我必须在界面构建器中创建连接。我是客观的新手......
答案 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];
查看博客文章
答案 1 :(得分:1)
在视图控制器中实现didRotateFromInterfaceOrientation
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
答案 2 :(得分:0)
您可以让UIDevice为方向事件生成通知。请参阅documentation for UIDevice。
如果您需要随时检测更改,可以考虑在应用的代理中调用-beginGeneratingDeviceOrientationNotifications
。
另外,如果您使用UIViewController
,则有
shouldAutorotateToInterfaceOrientation:
willRotateToInterfaceOrientation: duration:
didRotateFromInterfaceOrientation: