欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

淺談iOS屏幕方向那點(diǎn)事兒

一般的應(yīng)用,只會(huì)支持豎屏正方向一個(gè)方向,支持多個(gè)屏幕方向的應(yīng)用還是比較少的。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了察隅免費(fèi)建站歡迎大家使用!

不過我在工作的項(xiàng)目中,跟這個(gè)屏幕方向接觸比較多,因?yàn)槲覀兪且粋€(gè)有界面的 SDK,要讓接入方接入的,一開始做沒什么經(jīng)驗(yàn),考慮到接入方本身的屏幕方向可能是多種的,所以我們直接上來就支持四個(gè)方向,然后就是各種轉(zhuǎn)屏的問題,90度旋轉(zhuǎn)、180讀旋轉(zhuǎn)、270度旋轉(zhuǎn),測(cè)試手都快轉(zhuǎn)斷了。

后來覺的根本沒必要,浪費(fèi)了很多時(shí)間在解決屏幕方向的問題上,后來就簡(jiǎn)化到讓接入方直接設(shè)置支持某個(gè)方向了。

一般的應(yīng)用不用搞的這么的復(fù)雜,只要支持一兩個(gè)屏幕方向就可以了。我也做一下跟屏幕方向有關(guān)的幾點(diǎn)總結(jié),希望能幫到一些開發(fā)者!

系統(tǒng)屏幕方向枚舉

通過查看文檔,用于控制系統(tǒng)屏幕方向的枚舉如下:

// iOS 6 之前用于控制屏幕方向的枚舉
typedef enum {
  UIInterfaceOrientationPortrait      = UIDeviceOrientationPortrait,
  UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
  UIInterfaceOrientationLandscapeLeft   = UIDeviceOrientationLandscapeRight,
  UIInterfaceOrientationLandscapeRight   = UIDeviceOrientationLandscapeLeft
} UIInterfaceOrientation;

// iOS 6 及之后版本用于控制屏幕方向的枚舉
typedef enum {
  UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait),
  UIInterfaceOrientationMaskLandscapeLeft = (1 << UIInterfaceOrientationLandscapeLeft),
  UIInterfaceOrientationMaskLandscapeRight = (1 << UIInterfaceOrientationLandscapeRight),
  UIInterfaceOrientationMaskPortraitUpsideDown = (1 << UIInterfaceOrientationPortraitUpsideDown),
  UIInterfaceOrientationMaskLandscape = (UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight),
  UIInterfaceOrientationMaskAll = (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft |
   UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortraitUpsideDown),
  UIInterfaceOrientationMaskAllButUpsideDown = (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft |
   UIInterfaceOrientationMaskLandscapeRight),
} UIInterfaceOrientationMask;

可以發(fā)現(xiàn):

  • iOS 6 及之后版本使用的 UIInterfaceOrientationMask 類型來控制屏幕屏幕方向,該類型也新增加了幾個(gè)枚舉取值,可用一個(gè)枚舉取值來代表多個(gè)屏幕方向。
  • 四個(gè)基本屏幕方向(上、下、左、右)中,UIInterfaceOrientationMask = (1 << UIInterfaceOrientation),所以,如果你的應(yīng)用中需要?jiǎng)討B(tài)的將 UIInterfaceOrientation 類型轉(zhuǎn)換成 UIInterfaceOrientationMask 類型的話,只需做一下上面的轉(zhuǎn)換即可,不需要通過 switch 來判斷再轉(zhuǎn)換。

怎么控制屏幕方向

在 iOS 的應(yīng)用中,有多種方式可以控制界面的屏幕方向,有全局的,有針對(duì) UIWindow 中界面的控制,也有針對(duì)單個(gè)界面。

單個(gè)界面控制

iOS 6之前

在 iOS 6 之前,單個(gè)界面的屏幕方向控制,都使用 UIViewController 類中的這個(gè)方法:

// 是否支持旋轉(zhuǎn)到某個(gè)屏幕方向
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
  return ((toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) |
       (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft));
}

默認(rèn)情況下,此方法只有參數(shù)為 UIInterfaceOrientationPortrait 時(shí),返回值才為真,即默認(rèn)只支持豎屏向上。上面的例子中,表示支持橫屏向右及橫屏向左兩個(gè)方向。

iOS 6及之后的版本

在 iOS 6 及之后的版本,單個(gè)界面的屏幕方向控制,要使用 UIViewController 在 iOS 6.0 中新增加的兩個(gè)方法:

// 是否支持轉(zhuǎn)屏
- (BOOL)shouldAutorotate
{
  return YES;
}

// 支持的屏幕方向,此處可直接返回 UIInterfaceOrientationMask 類型
// 也可以返回多個(gè) UIInterfaceOrientationMask 取或運(yùn)算后的值
- (NSUInteger)supportedInterfaceOrientations
{
  return UIInterfaceOrientationMaskLandscape;
}

其中 - supportedInterfaceOrientations 方法在 iPad 中默認(rèn)取值為 UIInterfaceOrientationMaskAll,即默認(rèn)支持所有屏幕方向;而 iPhone 跟 iPod Touch 的默認(rèn)取值為 UIInterfaceOrientationMaskAllButUpsideDown,即支持除豎屏向下以外的三個(gè)方向。

在設(shè)備屏幕旋轉(zhuǎn)時(shí),系統(tǒng)會(huì)調(diào)用 - shouldAutorotate 方法檢查當(dāng)前界面是否支持旋轉(zhuǎn),只有 - shouldAutorotate 返回 YES 的時(shí)候,- supportedInterfaceOrientations 方法才會(huì)被調(diào)用,以確定是否需要旋轉(zhuǎn)界面。

UIWindow中的界面控制(iOS 6及以上版本才有效)

在 iOS 6 中,UIApplicationDelegate 協(xié)議中添加了一個(gè)可以指定 UIWindow 中的界面的屏幕方向的方法:

- (NSUInteger)application:(UIApplication *)application
    supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
  return UIInterfaceOrientationMaskLandscape;
}

此方法的默認(rèn)值為 Info.plist 中配置的 Supported interface orientations 項(xiàng)的值。

一般我們都不會(huì)創(chuàng)建其他的 UIWindow,所以通過這個(gè)方法,也可以達(dá)到全局控制。

全局控制

在應(yīng)用的 Info.plist 文件中,有一個(gè) Supported interface orientations 的配置,可以配置整個(gè)應(yīng)用的屏幕方向,如下圖:

淺談iOS 屏幕方向那點(diǎn)事兒

此配置其實(shí)跟工程中 Target 的 Summary 界面中的 Supported interface orientations 配置是一致的,修改任意一邊,另一個(gè)邊都會(huì)同步的修改。

淺談iOS 屏幕方向那點(diǎn)事兒

并且,應(yīng)用在啟動(dòng)時(shí),會(huì)使用 Info.plist 中的 Supported interface orientations 項(xiàng)中的第一個(gè)值作為啟動(dòng)動(dòng)畫的屏幕方向。按照此處截圖的取值,第一個(gè)取值為 Portrait(top home button),即豎屏反方向,所以此應(yīng)用在啟動(dòng)時(shí),會(huì)使用豎屏反方向顯示啟動(dòng)動(dòng)畫。

多種控制共存的規(guī)則

  • 一個(gè)界面最后支持的屏幕方向,是取 (全局控制 ∩ UIWindow 中的界面控制 ∩ 單個(gè)界面控制) 的交集,如果全局控制支持所有屏幕方向,UIWindow 中的界面控制支持橫屏,當(dāng)個(gè)界面中只是支持橫屏向右,那么最后界面只會(huì)以橫屏向右顯示,并且不支持旋轉(zhuǎn)到其他的方向。
  • 如果以上三種控制支持的屏幕方向最后的交集為空,iOS 5 跟 iOS 6 的處理有點(diǎn)不同,在 iOS 6 下,甚至?xí)苯訏伋?UIApplicationInvalidInterfaceOrientationException 的異常,然后直接崩潰,所以還是要保持這三個(gè)值的交集為非空。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

當(dāng)前名稱:淺談iOS屏幕方向那點(diǎn)事兒
鏈接分享:http://www.aaarwkj.com/article42/igojhc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、ChatGPT網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站維護(hù)、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
99久久久精品国产免费| 亚洲一区二区四区乱码在线| 日韩欧美中文在线一区二区| 欧美日韩免费r在线视频| 白色发布会在线观看免费| 日本高清不卡在线播放| 欧美午夜国产在线观看| 国产午夜视频成人无遮挡| 欧美精品国产亚洲另类| 欧美日韩精品亚洲成人精品| 日本一区二区在线高清| 一区二区人妻乳中文字幕| 日本道二区视频中文字幕| 一本久道久久综合狠狠老| 漂亮人妻被中出中文字幕| 国产麻豆精品免费喷白浆视频网站 | 国产丝袜在线精品丝袜不卡| 亚洲av永久精品一区二区三区| 国产中文字幕一区二区在线观看| 欧美日韩国产免费电影| 久久精品噜噜噜成人av农村| 亚洲最色最黄大片在线视频| 国产成人在线观看av| 丰满多毛熟妇的大阴户| 亚洲第一区二区国产精品| 小黄片视频免费在线播放| 亚洲伊人成综合人影院| 国产精品一品二品国精品| 午夜影院在线免费观看三区| 亚洲日本在线观看一区| 国产一区二区激情在线| 欧美日韩高清一区二区三区| 欧美中文字幕内射合集| 精品人妻少妇免费久久蜜臀av| 国产高潮精品呻吟久久av| 欧美亚洲尤物久久精品| 中文字幕一区二区三区网站| 深夜视频在线观看成人| 精品国产品国语在线不卡| 免费久久人人爽人人爽| 午夜情色视频在线观看|