ios5跟ios6横竖屏支持及ipad和iphone设备的判断

ios5和ios6横竖屏支持及ipad和iphone设备的判断
ios5和ios6横竖屏支持及ipad和iphone设备的判断

判断是ipad还是iphone设备。此定义在PayViewControllerDemo-Prefix.pch

定义如下:

#define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)


#define iPhone UIUserInterfaceIdiomPhone


#define iPad UIUserInterfaceIdiomPad



// ios5下的横屏需要调用的函数

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

return UIInterfaceOrientationIsLandscape(interfaceOrientation);

}

ios5可以在每一个视图中取控制视图的方向,以及当视图切换不同方向时,去控制其子视图的布局,具体可以参照下列方式。

//界面视图里面有UIImageView和UIButton空间,当横竖屏时,坐标的改变。

@interface ViewController ()

{

    PayViewController *payview;

    UIImageView *drawViewipad;

    UIImageView *drawViewihone;

    UIButton *consumeBtnipone;

    UIButton *consumeBtnipd;

}


//6.0之前

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation

{

    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)

    {

        if (isPad == iPad)

        {

            drawViewipad.frame = CGRectMake(306, 150, 412, 120);

            consumeBtnipd.frame = CGRectMake(1024/2-280/2, 550, 280, 50);

        }

        else if (isPad == iPhone)

        {

            drawViewihone.frame = CGRectMake(155, 50, 170, 60);

            consumeBtnipone.frame = CGRectMake(170, 200, 140, 40);

        }

    }

    if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)

    {

        if (isPad == iPad)

        {

            drawViewipad.frame = CGRectMake(200, 150, 412, 120);

            consumeBtnipd.frame = CGRectMake(768/2-280/2, 550, 280, 50);

        }

        else if (isPad == iPhone)

        {

            drawViewihone.frame = CGRectMake(85, 50, 170, 60);

            consumeBtnipone.frame = CGRectMake(90, 200, 140, 40);

        }

    }

    return YES;

}


// ios6下的横屏需要调用的函数

-(BOOL)shouldAutorotate {

return YES;

}

-(NSUInteger)supportedInterfaceOrientations {

return UIInterfaceOrientationMaskAll;//支持4各方向的旋转。

}

然后在plist文件里面找到Supported interface orientations 选项,添加你想支持的方向,都有提示的。

设置这个选项需要和代码一直,否则会出问题。


接着看如何控制每一个界面的方向及在不同方向界面的布局,由于ios6不能单独控制每一个界面的方向,所以需要由主viewcontroller来设置界面的控制,如果你有navgation,那么需要定义一个navgation的类,然后在此类中定义控制子viewcontroller的代码,如下:

//ios6之后需要在top-most controller中来控制方向问题。

-(BOOL)shouldAutorotate

{

    return [self.viewControllers.lastObject shouldAutorotate];

}


-(NSUInteger)supportedInterfaceOrientations

{

    return [self.viewControllers.lastObject supportedInterfaceOrientations];

}


-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

{

    return [self.viewControllers.lastObject preferredInterfaceOrientationForPresentation];

}

如果没有navgation,那么就需要在appdelegate中去设置这段代码。

接着可以在任何子viewcontroller中来控制不同方向的view布局,可以参考子viewcontroller的代码布局,如下:


//ios6之后需要在top-most controller中来控制方向问题。

- (BOOL)shouldAutorotate

{

    return YES;

}


- (NSUInteger)supportedInterfaceOrientations

{

    //判断系统的版本是6.0以上的。

if ([[UIDevice currentDevice]systemVersion].floatValue >= 6.0)

    {

//判断设备当前的方向,然后重新布局不同方向的操作。

        UIInterfaceOrientation currentOrientation = [[UIApplication sharedApplication] statusBarOrientation];

        if (currentOrientation == UIInterfaceOrientationPortrait || currentOrientation == UIInterfaceOrientationPortraitUpsideDown)

        {

            if (isPad == iPad)

            {

                drawViewipad.frame = CGRectMake(200, 150, 412, 120);

                consumeBtnipd.frame = CGRectMake(768/2-280/2, 550, 280, 50);

            }

            else if (isPad == iPhone)

            {

                drawViewihone.frame = CGRectMake(85, 50, 170, 60);

                consumeBtnipone.frame = CGRectMake(90, 200, 140, 40);

            }

        }

        if (currentOrientation == UIInterfaceOrientationLandscapeLeft || currentOrientation == UIInterfaceOrientationLandscapeRight)

        {

            if (isPad == iPad)

            {

                drawViewipad.frame = CGRectMake(306, 150, 412, 120);

                consumeBtnipd.frame = CGRectMake(1024/2-280/2, 550, 280, 50);

            }

            else if (isPad == iPhone)

            {

                drawViewihone.frame = CGRectMake(155, 50, 170, 60);

                consumeBtnipone.frame = CGRectMake(170, 200, 140, 40);

            }

        }

    }

     return UIInterfaceOrientationMaskAll;

}


这样就能控制不同方向的任何操作和界面布局了。