您的位置:首页 > 产品设计 > UI/UE

iOS 8下UIImagePickerController弹出拍照界面后,镜头旋转了90°

2016-03-21 17:05 609 查看
最近项目中的UIImagePickerController在iOS 8.1上使用的时候,出现了一个蛋疼的问题,pad水平放置,推出UIImagePickerController,拍照的时候发现,镜头莫名的旋转了90°,也就是说如果你去拍一个站着的人,发现他是躺着的,,,项目是限制Landscape两个方向的,试了网上一些解决办法,都是不行,至今没弄明白原因,除了iOS 8.1其他都正常,但是先上一个解决办法吧,不然boss吃了我:

注意要点

只有先水平放置present出UIImagePickerController时,才会出现问题

此时设备的orientation应该是face up

// 调整imagePickerController的方向,弥补iOS8时水平放置pad,imagePickerController默认竖屏,导致镜头旋转90°
NSString *version = [[[UIDevice currentDevice] systemVersion] substringToIndex:3];
if ([[UIDevice currentDevice] orientation] == 5 && [version isEqualToString:@"8.1"]) { // face up
if ([[UIApplication sharedApplication] statusBarOrientation] == 4) { // 如果应用处于landscaperight
imagePicker.cameraViewTransform = CGAffineTransformMakeRotation(M_PI_2); // 顺时针旋转
}
else if ([[UIApplication sharedApplication] statusBarOrientation] == 3) { // 如果应用处于landscapeleft
imagePicker.cameraViewTransform = CGAffineTransformMakeRotation(-M_PI_2); // 逆时针旋转
}
}


可以看出,其实就是将cameraView旋转成正常方向。

———————–2016-4-6————————–

最近发现上面的解决方式仍然有问题:现在imagePicker打开相机时,镜头是正常的,但是旋转pad,镜头又再次旋转90°。

增加了一段代码,完善后的地址:http://blog.csdn.net/u010731949/article/details/51075337

思路是:监听设备旋转通知,当设备旋转监听到pad旋转到UIDeviceOrientationPortraitUpsideDown、或者UIDeviceOrientationPortrait时,恢复imagePicker到原来的镜头方向_imagePicker.cameraViewTransform = CGAffineTransformMakeRotation(0); 当然如果默认应用是竖屏的,那么相应的对旋转到UIDeviceOrientationLandScape方向进行处理

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientChange:) name:UIDeviceOrientationDidChangeNotification object:nil];

- (void)orientChange:(NSNotification *)noti {
NSDictionary *notiDict = [noti userInfo];
UIDeviceOrientation orient = [UIDevice currentDevice].orientation;
switch (orient) {
case UIDeviceOrientationPortraitUpsideDown:
case UIDeviceOrientationPortrait:
_imagePicker.cameraViewTransform =
CGAffineTransformMakeRotation(0);
break;
default:
break;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息