亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS開發中控制屏幕旋轉的編寫方法小結

2020-07-26 03:33:04
字體:
來源:轉載
供稿:網友

在iOS5.1 和 之前的版本中, 我們通常利用 shouldAutorotateToInterfaceOrientation: 來單獨控制某個UIViewController的旋屏方向支持,比如:

復制代碼 代碼如下:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

    return (interfaceOrientation == UIInterfaceOrientationPortrait); 

但是在iOS6中,這個方法被廢棄了,使用無效。
shouldAutorotateToInterfaceOrientation:
Returns a Boolean value indicating whether the view controller supports the specified orientation. (Deprecated in iOS 6.0. Override the supportedInterfaceOrientations andpreferredInterfaceOrientationForPresentation methods instead.)

實踐后會發現,通過supportedInterfaceOrientations的單獨控制是無法鎖定屏幕的。

復制代碼 代碼如下:

-(NSUInteger)supportedInterfaceOrientations 

    return UIInterfaceOrientationMaskPortrait; 

多次實驗后總結出控制屏幕旋轉支持方向的方法如下:
子類化UINavigationController,增加方法

復制代碼 代碼如下:

- (BOOL)shouldAutorotate 

    return self.topViewController.shouldAutorotate; 

 
- (NSUInteger)supportedInterfaceOrientations 

    return self.topViewController.supportedInterfaceOrientations; 


并且設定其為程序入口,或指定為 self.window.rootViewController
隨后添加自己的view controller,如果想禁止某個view controller的旋屏:(支持全部版本的控制)
復制代碼 代碼如下:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

    return (interfaceOrientation == UIInterfaceOrientationPortrait); 

 
-(BOOL)shouldAutorotate 

    return NO; 

 
-(NSUInteger)supportedInterfaceOrientations 

    return UIInterfaceOrientationMaskPortrait; 

如果想又開啟某個view controller的全部方向旋屏支持:

復制代碼 代碼如下:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 

 
-(NSUInteger)supportedInterfaceOrientations 

    return UIInterfaceOrientationMaskAllButUpsideDown; 

 
-(BOOL)shouldAutorotate 

    return YES; 

從而實現了對每個view controller的單獨控制。

順便提一下,如果整個應用所有view controller都不支持旋屏,那么干脆:

復制代碼 代碼如下:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 

     return UIInterfaceOrientationMaskPortrait; 


橫豎屏切換,視圖亂了怎么辦?
首先,我們必須了解一下下列4種狀態,它們被用來描述設備旋轉方向:

2015102495412717.png (408×178)

對于旋屏的處理,大致分為如下幾種情況和思路:
也許,你不需要旋屏支持,而希望鎖定屏幕

復制代碼 代碼如下:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

    return NO; 


也許,你需要支持旋屏,或者支持部分方向的旋屏
復制代碼 代碼如下:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {  
       return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 

也許,你的view有張背景圖,旋屏時系統幫助你拉伸了圖片,但是卻沒有管你的其它部件,比如button,你希望直接改變button的大小和位置

復制代碼 代碼如下:

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 

    if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) { 
        NSLog(@"現在是豎屏"); 
        [btn setFrame:CGRectMake(213, 442, 340, 46)]; 
    } 
    if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) { 
        NSLog(@"現在是橫屏"); 
        [btn setFrame:CGRectMake(280, 322, 460, 35)]; 
    } 


也許,你并不希望用絕對坐標去約束控件,而是希望讓它通過旋轉自己適應屏幕的旋轉
復制代碼 代碼如下:

- (void)viewDidLoad 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    UIDevice *device = [UIDevice currentDevice];  
    [device beginGeneratingDeviceOrientationNotifications]; 
    //利用 NSNotificationCenter 獲得旋轉信號 UIDeviceOrientationDidChangeNotification 
    NSNotificationCenter *ncenter = [NSNotificationCenter defaultCenter];  
    [ncenter addObserver:self selector:@selector(orientationChanged) name:UIDeviceOrientationDidChangeNotification object:device]; 

 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 

 
-(void)rotation_btn:(float)n 

    UIButton *robtn = self.btn; 
    robtn.transform = CGAffineTransformMakeRotation(n*M_PI/180.0); 

 
-(void)orientationChanged 

    UIDeviceOrientation orientaiton = [[UIDevice currentDevice] orientation]; 
     
    switch (orientaiton) { 
        caseUIDeviceOrientationPortrait:              
            [self  rotation_btn:0.0]; 
            break; 
        caseUIDeviceOrientationPortraitUpsideDown:   
            [self  rotation_btn:90.0*2]; 
            break; 
        caseUIDeviceOrientationLandscapeLeft:      
            [self  rotation_btn:90.0*3]; 
            break; 
        caseUIDeviceOrientationLandscapeRight:   
            [self  rotation_btn:90.0]; 
            break; 
        default: 
            break; 
    } 


也許,你需要autoresizesSubviews = YES
也許,你希望橫豎屏有不同的布局效果,需要準備2份Subview,在不同狀態去替換
當然不要忘記,需要調節設定圖示中的1、2處,

2015102495438507.png (258×296)

來幫助我們完成自己想要的適應效果。Example 動畫呈現的很清晰,^_^ 我就不再亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

国产成人精品视| 91免费观看网站| 欧美成人免费一级人片100| 亚洲欧美国产va在线影院| 亚洲成人av在线| 国产+成+人+亚洲欧洲| 91探花福利精品国产自产在线| 国内精品久久久久影院 日本资源| 国产精品成人久久久久| 欧美中文字幕在线视频| 欧美成人精品一区二区三区| 国产欧美日韩免费| 欧美成人小视频| 亚洲天堂网在线观看| 国产婷婷色综合av蜜臀av| 欧美小视频在线| 久久久久久久av| 久久久久女教师免费一区| 午夜精品在线观看| 国产一区二区三区四区福利| 91精品免费看| 国产精品福利在线观看| 98午夜经典影视| 91经典在线视频| 久久综合伊人77777| 欧洲s码亚洲m码精品一区| 国产成人精品久久二区二区91| 欧美国产精品va在线观看| 国产有码在线一区二区视频| 久久激情视频久久| 日韩精品在线观看一区| 色综合久综合久久综合久鬼88| 精品成人在线视频| 精品中文字幕在线| 久久久国产成人精品| 久久久久久久久久国产精品| 久久久在线免费观看| 国产成人综合亚洲| 亚洲激情在线视频| 国产亚洲aⅴaaaaaa毛片| 北条麻妃99精品青青久久| 久久精品91久久久久久再现| 亚洲免费高清视频| 亚洲天堂男人天堂女人天堂| 色综合天天狠天天透天天伊人| 亚洲精品中文字幕有码专区| 亚洲一区中文字幕在线观看| 国产精品欧美一区二区| 欧美成人性生活| 国产精品6699| 97久久精品视频| 91精品国产综合久久香蕉的用户体验| 亚洲人午夜精品免费| 日韩视频―中文字幕| 欧美美女18p| 日韩av中文字幕在线免费观看| 亚洲美女www午夜| 全亚洲最色的网站在线观看| 91中文字幕在线| 亚洲剧情一区二区| 久久久久久久久91| 国产精品a久久久久久| 国产精品自产拍在线观| 中文字幕亚洲一区二区三区| 国产一区二区在线免费| 久久久亚洲天堂| 8090成年在线看片午夜| 最近中文字幕mv在线一区二区三区四区| 日韩成人小视频| 最近的2019中文字幕免费一页| 欧美成人黑人xx视频免费观看| 91精品久久久久久久久久久久久久| 久久亚洲国产精品成人av秋霞| 久久国产加勒比精品无码| 久久亚洲精品中文字幕冲田杏梨| 91久久国产综合久久91精品网站| 色妞一区二区三区| 992tv成人免费视频| 亚洲色图国产精品| 欧美一级电影在线| 日韩精品www| 国产一区二区动漫| 欧美国产视频日韩| 97超级碰碰碰久久久| 国产一区二区欧美日韩| 最近免费中文字幕视频2019| 精品动漫一区二区三区| 久久99热精品| 久久久精品免费视频| 日韩成人在线网站| 日韩高清电影好看的电视剧电影| 米奇精品一区二区三区在线观看| 亚洲国产欧美久久| 亚洲国产精品一区二区久| 国产精品日韩av| 欧美最猛黑人xxxx黑人猛叫黄| 国产精品黄页免费高清在线观看| 国产ts人妖一区二区三区| 亚洲毛茸茸少妇高潮呻吟| 中国china体内裑精亚洲片| 91天堂在线视频| 国产精品偷伦免费视频观看的| 国产偷国产偷亚洲清高网站| 欧美亚洲在线观看| 国产精品尤物福利片在线观看| 久久精品国产成人| 欧美精品电影免费在线观看| 国产精品91久久| 亚洲3p在线观看| 亚洲激情视频网| 亚洲mm色国产网站| 欧美夫妻性生活视频| 国产日韩在线精品av| www国产亚洲精品久久网站| 久久全球大尺度高清视频| 欧美寡妇偷汉性猛交| 国产精品视频白浆免费视频| 国产精品精品视频| 欧美性高潮床叫视频| 亚洲最大福利视频| 欧美性感美女h网站在线观看免费| 欧美极品少妇全裸体| 国产成人一区二区| 久久天天躁狠狠躁夜夜躁2014| 亚洲成人性视频| 68精品国产免费久久久久久婷婷| 国产成人精品电影| 国产精品视频久久久| 色妞久久福利网| 国产精品h片在线播放| 国产精品久久久久91| 亚洲男女自偷自拍图片另类| 中文字幕在线日韩| 久久影视电视剧免费网站| 国产精品久久久久久久久久久新郎| 欧美激情伊人电影| 插插插亚洲综合网| 国产丝袜一区二区三区免费视频| 中文字幕av一区二区| 日韩中文字幕免费| 久久躁狠狠躁夜夜爽| 日本乱人伦a精品| 国产精品久久一区主播| 欧美精品久久久久| 亚洲一区二区少妇| 自拍偷拍亚洲精品| 91精品综合久久久久久五月天| 国产精品av在线播放| 日韩精品在线视频| 日本高清+成人网在线观看| 国语自产精品视频在线看| 国内精品美女av在线播放| 久久免费视频观看| 国产精品成av人在线视午夜片| 欧美又大又粗又长| 亚洲欧美精品在线| 亚洲黄色在线观看| 欧美日韩免费网站| 久久激情五月丁香伊人| 欧美影院久久久| 欧美精品在线免费| 精品视频久久久久久久| 国产欧美精品一区二区| 亚洲第一色中文字幕|