UIImagePickerController覆盖自动旋转
我正在使用UIImagePicker访问我的iPhone应用程序上的相机。我希望能够为imagepicker提供两种不同的叠加层,具体取决于iPhone的方向。是否有可能做到这一点?看起来如果我将下面的方法放在拥有UIImagePickerController的类中,它根本不会被调用,并且在上面的任何uiviewcontroller中,只有在UIImagePickerController未处于活动状态时才会调用它。UIImagePickerController覆盖自动旋转
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
NSLog(@"shouldAutorotate called");
return YES;
}
任何想法如何达到预期效果?
该文档指出,UIImagePickerController仅支持纵向模式,因此可能没有支持这种方式。
如果你正在使用presentModalViewController:animated来显示imagepicker,那么我相信只有模态控制器才会得到像shouldAutorotateToInterfaceOrientation这样的消息。
通常情况下,您可能会继承UIImagePickerController以覆盖适当的方法,但似乎也不支持子类化。
我怀疑你将不得不实际使用UIAccelerometer并在你的覆盖视图上做手动视图旋转以响应加速消息。
编辑:
实际上,尝试使用[NSNotificationCenter的addObserver:为UIDeviceOrientationDidChangeNotification。
实际上,使用原始加速计数据,您可以确定何时替换叠加层,以便做到这一点!
可以使用变换覆盖的属性这样
cameraOverlayView.transform = CGAffineTransformMakeRotation(-3.141592/2)旋转所述覆盖图;
我建议你尝试一下Nimrod在最后提出的建议:[NSNotificationCenter addObserver:用于UIDeviceOrientationDidChangeNotification。我这样做并将我自己的90度仿射变换应用于几个按钮和标签,然后当ImagePicker被解散时,使用设备方向来猜测用户想要用于图像的方向。虽然它很黑,但它很有用,我不认为它会冒犯苹果。但它不是真正的AutoRotation。 – 2013-06-14 16:05:19
,或者比猜测想要的旋转更好,请使用myimage.imageOrientation。 – 2013-06-14 16:17:15