【问题标题】:UIImagePickerController overlay autorotateUIImagePickerController 覆盖自动旋转
【发布时间】:2009-12-29 14:23:53
【问题描述】:

我正在使用 UIImagePicker 访问我的 iPhone 应用程序上的相机。我希望能够为图像选择器提供两种不同的叠加层,具体取决于 iPhone 的方向。是否有可能做到这一点?似乎如果我将以下方法放在拥有 UIImagePickerController 的类中,它根本不会被调用,并且在上面的任何 uiviewcontroller 中,它只会在 UIImagePickerController 不活动时被调用。

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
   NSLog(@"shouldAutorotate called");
   return YES;
}

知道如何达到预期的效果吗?

【问题讨论】:

    标签: objective-c iphone cocoa-touch camera


    【解决方案1】:

    文档说 UIImagePickerController 仅支持纵向模式,因此可能没有支持的方式。

    如果您使用 presentModalViewController:animated 来显示图像选择器,那么我相信只有模态控制器会收到类似 shouldAutorotateToInterfaceOrientation 的消息。

    通常您可以将 UIImagePickerController 子类化以覆盖适当的方法,但似乎也不支持子类化。

    我怀疑您将不得不实际使用 UIAccelerometer 并在覆盖视图上手动旋转视图以响应加速消息。

    编辑:

    实际上,尝试使用 [NSNotificationCenter addObserver: for UIDeviceOrientationDidChangeNotification。

    【讨论】:

    • 我建议你试试 Nimrod 最后提出的建议:[NSNotificationCenter addObserver: for UIDeviceOrientationDidChangeNotification.我这样做了,并将我自己的 90 度仿射变换应用于一些按钮和标签,然后当 ImagePicker 被关闭时,使用设备方向来猜测用户想要的图像方向。它很hacky,但它有效,而且我认为它不会冒犯Apple。但这不是真正的自动旋转。
    • 或者,比猜测预期的旋转更好,使用 myimage.imageOrientation 。
    【解决方案2】:

    实际上使用原始加速度计数据,您可以确定何时更换叠加层,这样就做到了!

    【讨论】:

      【解决方案3】:

      您可以像这样使用叠加层的变换属性来旋转叠加层视图

      cameraOverlayView.transform = CGAffineTransformMakeRotation(-3.141592/2);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-12
        • 1970-01-01
        相关资源
        最近更新 更多