我知道有很多人问过这个问题,但我找不到解决这个问题的正确答案,我的问题是:如何在预览视图上制作照片(用户点击捕获按钮后,然后转到预览视图让用户预览)不镜像,这可以在UIImagePickerController中修复,我知道如何旋转照片,UIImageOrientation
中的枚举内容UIImageOrientationUp
,我知道这是什么意思。
我在用户点击捕获按钮之后拍摄照片,然后转到预览视图并使用我有镜像的照片来覆盖默认照片(使用cameraOverlayView
),我可以通过 @“_ UIImagePickerControllerUserDidCaptureItem”检测用户点击捕获按钮使用NSNotificationCenter
,但我发现无法获取照片。
我使用cameraViewTransform
,但当用户在底部或顶部的 Home 按钮上拍摄照片(前置摄像头)时,预览视图上的图像不是镜像,而是{左侧或右侧的{1}}按钮,用户点击捕获之前手机上的图像有问题,但预览视图上的图像不是mirror.use Home
通知。
AVCaptureDeviceDidStartRunningNotification
答案 0 :(得分:2)
最后,我无法在UIImagePickerController
中解决此问题,但我使用AVFoundation
和CoreMotion
来解决此问题,您可以看到AVCam
//init the motionManager
- (void)initializeMotionManager{
motionManager = [[CMMotionManager alloc] init];
motionManager.accelerometerUpdateInterval = .1;
motionManager.gyroUpdateInterval = .1;
[motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue]
withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
if (!error) {
[self outputAccelertionData:accelerometerData.acceleration];
}
else{
NSLog_DEBUG(@"%@", error);
}
}];
}
//detect the device orientation
- (void)outputAccelertionData:(CMAcceleration)acceleration{
if (acceleration.x >= 0.75) {
_orientationNew = UIInterfaceOrientationLandscapeLeft;
}
else if (acceleration.x <= -0.75) {
_orientationNew = UIInterfaceOrientationLandscapeRight;
}
else if (acceleration.y <= -0.75) {
_orientationNew = UIInterfaceOrientationPortrait;
}
else if (acceleration.y >= 0.75) {
_orientationNew = UIInterfaceOrientationPortraitUpsideDown;
}
else {
// Consider same as last time
return;
}
if (_orientationNew == _orientationLast)
return;
_orientationLast = _orientationNew;
}