将相机应用旋转复制到横向 IOS 6 iPhone

Posted

技术标签:

【中文标题】将相机应用旋转复制到横向 IOS 6 iPhone【英文标题】:Replicate camera app rotation to landscape IOS 6 iPhone 【发布时间】:2013-04-08 18:35:22 【问题描述】:

您好,我正在尝试复制当方向转换为横向时相机应用程序中可以看到的相同旋转。不幸的是,我没有运气。我需要使用 UIImagePickerController 为自定义 cameraOverlayView 进行设置。

从这个肖像(B 是 UIButtons)

|-----------|
|           |
|           |
|           |
|           |
|           |    
|           |
| B   B   B |
|-----------|

到这片风景

|----------------|
|              B |
|                |
|              B |
|                |
|              B |
|----------------|

换句话说,我希望按钮贴在原来的纵向底部并在它们的中心旋转。我正在使用情节提要并启用了自动布局。非常感谢任何帮助。

【问题讨论】:

前段时间问过同样的问题 - ***.com/questions/15377120/… 不幸的是仍然没有很好的答案。 好吧,我已经在 xcode 中摆弄过 Autolayout 约束,但它们显然特定于将元素锚定到当前方向底部而不是原始纵向底部。我的下一个尝试是尝试在运行时使用-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 设置约束@Aaron 你有什么建议吗? 【参考方案1】:

好的,所以我已经设法解决了这个问题。需要注意的是 UIImagePickerController 类仅根据 Apple documentation 支持纵向模式。

要捕获旋转,willRotateToInterfaceOrientation 在这里没有用,所以你必须使用通知。在运行时设置自动布局约束也不是可行的方法。

在 AppDelegate didFinishLaunchingWithOptions 中,您需要启用轮换通知:

// send notification on rotation
[[UIDevice currentDevice]beginGeneratingDeviceOrientationNotifications];

在cameraOverlayView UIViewControllerviewDidLoad方法中添加以下内容:

//add observer for the rotation notification
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil]; 

最后在cameraOverlay中添加orientationChanged:方法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 个 UIButton 应用旋转变换 btnCancel 和 btnSnap。这会在旋转设备时为您提供相机应用效果。 我仍然在控制台<Error>: CGAffineTransformInvert: singular matrix. 中收到警告,不知道为什么会发生这种情况,但这与相机视图有关。

希望以上内容有所帮助。

【讨论】:

谢谢。这对我很有帮助。

以上是关于将相机应用旋转复制到横向 IOS 6 iPhone的主要内容,如果未能解决你的问题,请参考以下文章

在横向屏幕上旋转不是 iPhone 5 和 iPhone 6 上的视图

如果应用程序以 iPhone 横向启动,iOS 13 应用程序窗口会在 iPhone 上错误地旋转

在 iPhone 的 iOS 7 中打开相机时横向模式下的方向问题

在 iOS OpenCV 相机中将相机预览旋转到人像

iPhone:如何防止视图旋转到横向视图?

如何使用索尼相机 API 获取实时取景方向