app中为了防止其实页面旋转,一般会配置禁止旋转,但特别的页面如视频等等就需要旋转,这里就要做相关处理了,
例如点击了全屏按钮:就
if([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
SEL selector = NSSelectorFromString(@"setOrientation:");
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:[UIDevice currentDevice]];
int val = UIInterfaceOrientationLandscapeRight;
[invocation setArgument:&val atIndex:2];
[invocation invoke];
}
回到小屏幕时:
if([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
SEL selector = NSSelectorFromString(@"setOrientation:");
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:[UIDevice currentDevice]];
int val = UIDeviceOrientationPortrait;
[invocation setArgument:&val atIndex:2];
[invocation invoke];
}
然后在需要旋转的页面写个观察者:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(DeviceOrientation:)
name:UIDeviceOrientationDidChangeNotification
object:nil
];
#pragma mark 屏幕旋转
-(void)DeviceOrientation:(NSNotification *)noti
{
UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
switch (orientation)
{
case UIDeviceOrientationPortrait: {
[UIView animateWithDuration:0.25 animations:^{//小屏
self.view.transform = CGAffineTransformMakeRotation(0);
}];
}
break;
case UIDeviceOrientationLandscapeLeft: {
[UIView animateWithDuration:0.25 animations:^{//大屏
self.view.transform = CGAffineTransformMakeRotation(M_PI*0.5);
}];
}
break;
default:
break;
}
}