UIImagePickerController覆盖层自动旋转

5

我正在使用UIImagePicker在我的iPhone应用程序中访问相机。我希望能够根据iPhone的方向拥有两个不同的覆盖层。这是可能的吗?如果我将以下方法放置在拥有UIImagePickerController的类中,它似乎根本没有被调用,在任何上面的uiviewcontroller中,只有当UIImagePickerController不活动时才会调用。

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

有什么想法可以实现所需的效果吗?
3个回答

3
文档说明UIImagePickerController仅支持竖屏模式,因此可能没有支持的方法来实现这一点。如果您使用presentModalViewController:animated来显示图像选择器,则我认为只有模态控制器会收到shouldAutorotateToInterfaceOrientation等消息。通常情况下,您可以子类化UIImagePickerController以覆盖适当的方法,但似乎也不支持子类化。我怀疑您将不得不实际使用UIAccelerometer,并在响应加速度消息时对覆盖视图进行手动视图旋转。编辑:实际上,请尝试使用[NSNotificationCenter addObserver: for UIDeviceOrientationDidChangeNotification。

我建议您尝试Nimrod在结尾提出的方法:使用[NSNotificationCenter addObserver: for UIDeviceOrientationDidChangeNotification]。我已经这样做了,并对一些按钮和标签应用了自己的90度仿射变换,然后当ImagePicker被解除时,使用设备方向来猜测用户打算为图像选择的方向。这是一个hacky的方法,但它可以工作,而且我认为它不会冒犯苹果公司。但这不是真正的自动旋转。 - Ben Wheeler
不要猜测旋转方向,最好使用myimage.imageOrientation。 - Ben Wheeler

0

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


0
您可以使用覆盖层的 transform 属性来旋转覆盖层,如下所示:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接