嗨,我试图复制可在相机应用取向时转移到景观中看到相同的旋转。 不幸的是我有没有运气。 我需要设置了与的UIImagePickerController定制cameraOverlayView。
从这个画像(B是UIButtons)
|-----------|
| |
| |
| |
| |
| |
| |
| B B B |
|-----------|
这个景观
|----------------|
| B |
| |
| B |
| |
| B |
|----------------|
换句话说,我想的按钮固守原有画像底部和旋转他们的中心。 我用故事板和自动布局已启用。 任何帮助是极大的赞赏。
好了,我已经成功地排序了这一点。 在这里要注意的是UIImagePickerController类支持肖像模式只能按照苹果公司的文档 。
为了捕捉旋转willRotateToInterfaceOrientation
没用在这里,所以你必须使用notificatons。 在运行时也设置自动布局约束上是不是要走的路。
在AppDelegate中didFinishLaunchingWithOptions
需要启用旋转通知:
// send notification on rotation
[[UIDevice currentDevice]beginGeneratingDeviceOrientationNotifications];
在viewDidLoad
的cameraOverlayView的方法UIViewController
添加以下内容:
//add observer for the rotation notification
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
最后补充orientationChanged:
方法将cameraOverlay UIViewController
- (void)orientationChanged:(NSNotification *)notification
{
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
double rotation = 0;
switch (orientation) {
case UIDeviceOrientationPortrait:
rotation = 0;
break;
case UIDeviceOrientationPortraitUpsideDown:
rotation = M_PI;
break;
case UIDeviceOrientationLandscapeLeft:
rotation = M_PI_2;
break;
case UIDeviceOrientationLandscapeRight:
rotation = -M_PI_2;
break;
case UIDeviceOrientationFaceDown:
case UIDeviceOrientationFaceUp:
case UIDeviceOrientationUnknown:
default:
return;
}
CGAffineTransform transform = CGAffineTransformMakeRotation(rotation);
[UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
self.btnCancel.transform = transform;
self.btnSnap.transform = transform;
}completion:nil];
}
上面的代码适用于2个UIButtons我使用在这种情况下btnCancel和btnSnap旋转变换。 旋转设备时,这给你的相机应用效果。 我仍然在控制台得到一个警告<Error>: CGAffineTransformInvert: singular matrix.
不知道为什么会这样,但它是值得做的摄像机视图。
希望以上帮助。