IosiOS DeveloperiOS点点滴滴

关于界面旋转

2016-09-10  本文已影响849人  承灏_Wu

比如说我有一个需求,要求想要旋转的界面就旋转,想要不旋转的界面就不旋转,请问你怎么实现?

关于网上资料

其实网上的资料很多坑(说得我这简书好像不是网上资料一样-。-)有很多提供的方法本身都是没错的,但是都是复制来复制去(走右键不走心),所以缺少了一个关键的点比如说:方法应该写在哪里,什么情况下会调用

解决方法

手敲解决办法啊,各位大大不要复制少了,免得又成为被人嫌弃的网上资料。

在需要的地方修改我添加的这个属性。。。就可以了,比如说一个控制器的ViewDidLoad里面,改成YES,那么在旋转手机的时候,就会去判断这个值然后可以旋转,改成NO则反之。

说说通知

///屏幕旋转通知
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(handleDeviceOrientationDidChange:)
                                             name:UIDeviceOrientationDidChangeNotification
                                           object:nil
 ];
///屏幕旋转调用(自定义)
-(void)handleDeviceOrientationDidChange:(NSDictionary*)notification
    {
        UIDeviceOrientation  orientation = [UIDevice currentDevice].orientation;
        ///根据orientation也就是当前屏幕的方向来实现想要的方法比如UIDeviceOrientationPortrait之类
    }

手动转屏

打个比方,比如一个按钮的点击事件是改变屏幕朝向,可以在点击事件里面调用下面的方法来实现(这里是通过找到系统UIDevice类的设置屏幕方向方法,用currentDevice调用)

    - (void)setInterfaceOrientation:(UIInterfaceOrientation)orientation
    {
        if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)])
        {
            SEL selector = NSSelectorFromString(@"setOrientation:");
            NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
            [invocation setTarget:[UIDevice currentDevice]];
            [invocation setSelector:selector];
            [invocation setArgument:&orientation atIndex:2];
            [invocation invoke];
        }
    }

结束

到这里基本上就能够任性地使用你的屏幕旋转了。。。有什么高明的建议或者交流欢迎留言,谢谢。

上一篇下一篇

猜你喜欢

热点阅读