您的位置:首页 > 移动开发 > IOS开发

iOS 屏幕旋转问题

2015-10-26 14:51 393 查看
http://blog.csdn.net/wudizhukk/article/details/8674393

self.interfaceOrientation或[[UIApplication sharedApplication] statusBarOrientation]

 if (self.interfaceOrientation==UIDeviceOrientationLandscapeRight) {

XXOO

}

不旋转,保持竖屏

//iOS 5

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation

{

        return (toInterfaceOrientation == UIInterfaceOrientationPortrait);

}

//iOS 6

- (BOOL)shouldAutorotate

{

        return NO;

}

- (NSUInteger)supportedInterfaceOrientations

{

        return UIInterfaceOrientationMaskPortrait;

}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

{

        return UIInterfaceOrientationPortrait;

}

始终保持横屏

//iOS 5

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation

{

        return (toInterfaceOrientation == self.preferredInterfaceOrientationForPresentation);

}

//iOS 6

- (BOOL) shouldAutorotate

{

        return YES;

}

- (NSUInteger)supportedInterfaceOrientations

{

        return UIInterfaceOrientationMaskLandscapeRight;

}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

{

        return UIInterfaceOrientationLandscapeRight;

}

在使用UINavigationController时发现,无论怎么设置上面方法的返回,都无法控制UINavigationController的旋转,这似乎是iOS的一个bug。但无论如何,以下是stackflow上面的一个解决方法:

 1 @implementation UINavigationController (Rotation_IOS6)

 2 -(BOOL)shouldAutorotate {

 3     return [[self.viewControllers lastObject] shouldAutorotate];

 4 }

 5 

 6 -(NSUInteger)supportedInterfaceOrientations {

 7     return [[self.viewControllers lastObject] supportedInterfaceOrientations];

 8 }

 9 

10 - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {

11     return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];

12 }

13 @end

屏幕旋转方法调用流程

要翻转的时候,首先响应的方法:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

return YES则支持翻转,NO则不支持。

紧接着

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

被调用。这个方法是发生在翻转开始之前。一般用来禁用某些控件或者停止某些正在进行的活动,比如停止视频播放。

再来是

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

这个方法发生在翻转的过程中,一般用来定制翻转后各个控件的位置、大小等。可以用另外两个方法来代替:willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:   和  willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:

最后调用的是

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

这个方法发生在整个翻转完成之后。一般用来重新启用某些控件或者继续翻转之前被暂停的活动,比如继续视频播放
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: