2009-12-29 90 views
4

我正在使用UIImagePicker访问我的iPhone应用程序上的相机。我希望能够为imagepicker提供两种不同的叠加层,具体取决于iPhone的方向。是否有可能做到这一点?看起来如果我将下面的方法放在拥有UIImagePickerController的类中,它根本不会被调用,并且在上面的任何uiviewcontroller中,只有在UIImagePickerController未处于活动状态时才会调用它。UIImagePickerController覆盖自动旋转

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

任何想法如何达到预期效果?

回答

3

该文档指出,UIImagePickerController仅支持纵向模式,因此可能没有支持这种方式。

如果你正在使用presentModalViewController:animated来显示imagepicker,那么我相信只有模态控制器才会得到像shouldAutorotateToInterfaceOrientation这样的消息。

通常情况下,您可能会继承UIImagePickerController以覆盖适当的方法,但似乎也不支持子类化。

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

编辑:

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

+0

我建议你尝试一下Nimrod在最后提出的建议:[NSNotificationCenter addObserver:用于UIDeviceOrientationDidChangeNotification。我这样做并将我自己的90度仿射变换应用于几个按钮和标签,然后当ImagePicker被解散时,使用设备方向来猜测用户想要用于图像的方向。虽然它很黑,但它很有用,我不认为它会冒犯苹果。但它不是真正的AutoRotation。 – 2013-06-14 16:05:19

+0

,或者比猜测想要的旋转更好,请使用myimage.imageOrientation。 – 2013-06-14 16:17:15

0

实际上,使用原始加速计数据,您可以确定何时替换叠加层,以便做到这一点!

0

可以使用变换覆盖的属性这样

cameraOverlayView.transform = CGAffineTransformMakeRotation(-3.141592/2)旋转所述覆盖图;