我在下面有这个代码,可以识别设备何时改变方向,如果方向是左右横向,他又回到肖像:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter]
addObserver:self selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:[UIDevice currentDevice]];
- (void) orientationChanged:(NSNotification *)note{
UIDevice * device = note.object;
if(device.orientation == UIDeviceOrientationLandscapeRight){
[[UIDevice currentDevice] setValue:
[NSNumber numberWithInteger: UIInterfaceOrientationPortrait]
forKey:@"orientation"];
}
if(device.orientation == UIDeviceOrientationLandscapeLeft){
[[UIDevice currentDevice] setValue:
[NSNumber numberWithInteger: UIInterfaceOrientationPortrait]
forKey:@"orientation"];
}
}
当我运行项目并将设备的方向向右或向左更改为横向时,此代码会识别并将方向更改为纵向,但如果我将设备再次向左或向右旋转,则代码不起作用我的设备保持横向模式,为什么?以及如何解决这个问题?
答案 0 :(得分:0)
我不知道我是否正确但是尝试从viewWillAppear
发出通知 -(void)viewWillDisappear:(BOOL)animated
{
[super viewWillAppear] ;
[[NSNotificationCenter defaultCenter]
addObserver:self selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:[UIDevice currentDevice]];
}
答案 1 :(得分:0)
最好在viewWillAppear
中注册通知并在viewWillDisappear
方法中取消注册。因此,只有在您的视图出现时才会收到通知。
实施如下:
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear] ;
[[NSNotificationCenter defaultCenter]
addObserver:self selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:[UIDevice currentDevice]];
}
-(void)viewWillDisappear:(BOOL)animated
{
// Removing observer for lead created notification
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
如果UIDeviceOrientationDidChangeNotification
没有解决您的问题,请尝试使用StatusBarOrientationNotification,如下所示。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarOrientationChange:) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];
- (void)statusBarOrientationChange:(NSNotification *)note {
UIInterfaceOrientation orientation = [note.userInfo[UIApplicationStatusBarOrientationUserInfoKey] integerValue];
// handle changes
}
答案 2 :(得分:0)
您应该使用标准方法(例如supportedInterfaceOrientations
和shouldAutorotate
)锁定控制器的旋转,而不是使用私有API并从AppStore中删除。