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

来源:互联网 发布:王国祥白先勇 知乎 编辑:程序博客网 时间:2024/04/29 19:48

最近项目中的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;  }
1 0
原创粉丝点击