1

我遇到了有关 iphone 屏幕方向的问题。我的应用程序的基础 sdk 是 ios 6.0,部署目标是 4.3,并在 ios 5.0 和 5.1 上运行

在应用程序的 plist 文件中,我设置了Portrait (bottom home button),Landscape (left home button)Landscape (right home button). 我正在开发一个通用应用程序。因此,在每个视图的- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation方法中,我都会有条件地返回portraitiphone 和landscapeipad。

我的导航流程是:

UINavigatinController推送的UITableViewControler第一个选项卡UINavigationControllerrootViewController.

在我最后一个 viewController 的- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation方法中,我返回了YES. 但是这个视图的应用程序根本没有旋转。甚至没有调用- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration方法。:(

我的要求是只支持一个视图控制器而不是整个应用程序的横向和纵向方向。

请帮我。

4

5 回答 5

1

您可以通过视图控制器类中的此代码解决此方向问题。

#ifdef IOS_OLDER_THAN_6
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {

       return (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) || 
(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight);

}
#endif

#ifdef IOS_NEWER_OR_EQUAL_TO_6
-(BOOL)shouldAutorotate {

       return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
       return (UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight); //IOS_5
}
#endif

您必须在 .pch 文件中定义此代码。

代码 :

 #define IOS_OLDER_THAN_6  ([[[UIDevice currentDevice] systemVersion] floatValue] < 6.0)
 #define IOS_NEWER_OR_EQUAL_TO_6 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6.0)

希望它有效。

谢谢。

于 2012-10-22T11:16:08.097 回答
0

你有多少个 UIViewController?也许是 2、3 或更多。

尝试在每个视图控制器添加代码

- (BOOL)shouldAutorotateToInterfaceOrientation:    (UIInterfaceOrientation)interfaceOrientation
{
NSLog(@"viewcontroller: %@", self);
return YES;
}

你会知道,哪个视图控制器接收旋转通知。模态视图控制器似乎有问题。

于 2012-10-22T11:00:55.117 回答
0

对于 iOS 6,使用supportedInterfaceOrientations&shouldAutorotate代替shouldAutorotateToInterfaceOrientation:

- (NSUInteger) supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape; (Check for device type here and return appropriate orientations)
}

- (BOOL) shouldAutorotate {
   return YES;
}
于 2012-10-22T10:48:00.287 回答
0
 -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)

  // setFrames=CGRectMake(x, y, w, h);

}
于 2012-10-22T11:05:44.390 回答
0

您应该实现所有这些方法以使其适用于所有具有 ios >= 4.3 版本的设备。

// Autorotation (iOS <= 5.x)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
        return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft||interfaceOrientation==UIInterfaceOrientationLandscapeRight||interfaceOrientation == UIInterfaceOrientationPortrait) ;
}


// Autorotation (iOS >= 6.0)

- (BOOL) shouldAutorotate
{
    return YES;
}


-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}
于 2012-10-22T11:16:38.460 回答