ios 旋屏学习笔记-原

一, 使用uinavigationcontroller并添加rootview
 

    如果使得所有的自视图都支持同样的旋转动作,比如四个方向的旋转,那么就可以逐个使用push的方法添加。而不用逐个设置,即便逐个设置也是没有效果的。 这个主要针对6.0,因为6.0之后都是以最top的controller旋转方式统一。即这种方法由uinavigationcontroller统 一。
二, 不使用push的方法,那么就需要为没有push的controller单独添加相应的方法来实现。这种情况适用于个别界面想采用不同的旋转方向或者不使用旋转。
// for 6.0

- (BOOL)shouldAutorotate
{
    return YES;
}
// for 6.0
- (NSUInteger)supportedInterfaceOrientations{
   
    return UIInterfaceOrientationMaskAll;
}
三, 为了兼容6.0之前的版本,需要在每个controller中书写其固定的方法
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

具体实现步骤:
1,appdelegate中实现如下:
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   
    // Override point for customization after app launch.
   
    self.rootView = [[ScrollPageController alloc]initWithNibName:@"ScrollPageController" bundle:nil];

// 这里注意,因为rootview最后是uinavigationcontroller,那么如果想控制scrollpagecontroller的旋转,那么必须子类化uinavigationcontroller,并在其中书写相应的方法。如果直接写在scroll里面是没有任何效果的!这个因为uinavigationcontroller此时才是真正的top view。可以书写uinavigationcontroller的类别的方式扩展这几个方法即可。这样之后所有的push的界面都不用重复写6.0相关实现旋屏的方法了,很简单。

    self.navController = [[UINavigationController alloc]initWithRootViewController:self.rootView];
    self.window.rootViewController = self.navController;
    //以下屏蔽的地方其他人建议这样区分,但是发现5.0的无法正确设置rootview么有旋转的效果。有的说4.0以及以下的版本才需要这样设置,但是本地么有这个版本的模拟器无法验证!
//    if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0){
//        // warning: addSubView doesn't work on iOS6
//        [self.window addSubview: navController.view];
//    }
//    else{
//        // use this mehod on ios6
//        [self.window setRootViewController:navController];
//    }
   
    //    [self.window addSubview:self.navController.view];
    [self.window makeKeyAndVisible];
    return YES;
}
2,书写类别,扩展uinavigationcontroller相关的方法
//
//  UINavigationController + Rotation.h
//  AePubReader
//
//  Created by Lisa Liu on 13-6-14.
//
//

@interface UINavigationController (Rotation)

@end

//
//  UINavigationController + Rotation.m
//  AePubReader
//
//  Created by Lisa Liu on 13-6-14.
//
//

#import "UINavigationController + Rotation.h"

@implementation UINavigationController (Rotation)

// for 6.0

- (BOOL)shouldAutorotate
{
    return YES;
}
// for 6.0
- (NSUInteger)supportedInterfaceOrientations{
   
    return UIInterfaceOrientationMaskAll;
}
// for 6.0 below
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}
@end
3,在其后每个controller中书写兼容6.0以下版本的方法并为每一个不使用push方法的controller加写6.0方法
- (BOOL)shouldAutorotate
{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations{
   
    return UIInterfaceOrientationMaskAll;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}
4,在info.plist文件中确保设置上了所有的方向。然后代码中实现返回支持所有的方向,否则还是只有默认的三个方向的测试过了。
posted @ 2013-07-15 17:06  如来藏  阅读(166)  评论(0编辑  收藏  举报