如何在iphone / ipod中控制设备的方向?

时间:2009-07-14 23:34:19

标签: iphone

我必须在纵向模式下旋转设备,但是当我使用

(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    //[[[UIApplication sharedApplication]keyWindow]subviews removeFromSuperview ];
  // return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
    return YES;
}

下面的代码,它在模拟器上工作正常,但当我用来在设备中安装代码时,它会使设备非常敏感,如果我只是稍微更改设备中的位置,它就会执行此代码并转到查看即时通讯显示手机的旋转 比任何人都告诉我,我怎么能控制设备的灵敏度我的意思是我只是想当用户完成90'旋转的位置比我的代码应该执行但它只是执行,如果只是摇动手机在相同的位置。

感谢您的帮助

Balraj verma

2 个答案:

答案 0 :(得分:1)

您可能想要缓冲方向信息;也就是说,只有在您从传感器接收到多个指示,其方向与您当前显示的方向不同时才更改方向。

答案 1 :(得分:0)

根据我对您所写内容的理解,当设备旋转时,您的应用程序过于敏感?很难理解为什么会这样;您所包含的代码表明您的申请表愿意接受任何轮换,但您之前没有说明如何处理轮换事件。

根据信息,我只能建议您在代码中添加一个检查(可能是处理旋转事件的位置)并使用以下方式从设备获取方向:

[[UIDevice currentDevice] orientation];

将返回UIInterfaceOrientation枚举,说明设备的当前方向。

UIDeviceOrientationPortrait
UIDeviceOrientationPortraitUpsideDown
UIDeviceOrientationLandscapeLeft
UIDeviceOrientationLandscapeRight

然后,您可以使用它来确定是否需要更改方向。 (注意:这是iPhone OS 2.0。我相信OS 3.0有更多包括面朝上/朝下等)。

- (void) didRotate:(NSNotification *)notification
{   
   UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

   if (orientation == UIDeviceOrientationLandscapeRight)
   {
       NSLog(@"Landscape Right!");
   }
}

如果您发现方向切换太快,您可能想要缓冲信息,创建几个可以在切换到新方向之前进行比较的采样点。