2013-07-25 41 views
0

有没有办法检测到屏幕即将旋转,但也阻止了这种旋转的发生?实质上,我试图实现一个界面,就像内置的相机应用程序一样,当设备从纵向移动到横向(反之亦然)时,控制对象在其中旋转,但子视图的布局实际上并未改变。iOS:检测屏幕旋转,但阻止其实际发生?

我可以得到有关设备方向通告变化在于:

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(deviceOrientationDidChange:) 
    name:UIDeviceOrientationDidChangeNotification 
    object:nil]; 

,我可以通过使画像的唯一支持的方向旋转防止干脆,但如果我这样做,UIDeviceOrientationDidChangeNotification将不会触发的。

有没有办法让我得到我的蛋糕,吃呢?

感谢,

A.炖登特

回答

0

你仍然可以使你的应用程序的支持只是肖像,旋转阻止,并赶上与加速度计的旋转动作。

下面是一些代码来执行此:

头文件:

@interface MyController : UIViewController <UIAccelerometerDelegate> 

@property(nonatomic, assign) UIInterfaceOrientation interfaceOrientation; 

@end 

在实现文件:

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration*)acceleration; 
{ 
    CGFloat x = -[acceleration x]; 
    CGFloat y = [acceleration y]; 
    CGFloat angle = atan2(y, x); 

    if (angle >= -2.25f && angle <= -0.25f) 
    { 
     self.interfaceOrientation = UIInterfaceOrientationPortrait; 
    } 
    else if (angle >= -1.75f && angle <= 0.75f) 
    { 
     self.interfaceOrientation = UIInterfaceOrientationLandscapeRight; 
    } 
    else if(angle >= 0.75f && angle <= 2.25f) 
    { 
     self.interfaceOrientation = UIInterfaceOrientationPortraitUpsideDown; 
    } 
    else if (angle <= -2.25f || angle >= 2.25f) 
    { 
     self.interfaceOrientation = UIInterfaceOrientationLandscapeLeft; 
    } 
} 

只记得在某个地方取消加速度计,就像在你viewWillDisappear:

-(void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    [[UIAccelerometer sharedAccelerometer] setDelegate:nil]; 

} 

请提供一些反馈,如果工作与否。