一個(gè)UIScreen代表了一個(gè)顯示屏,iOS設(shè)備至少有一個(gè)自身的主顯示屏,同時(shí)也有可能外接其他的顯示設(shè)備。如果想將內(nèi)容顯示到屏幕上,需要設(shè)置UIWindow實(shí)例的screen屬性為對(duì)應(yīng)的UIScreen對(duì)象。
+ mainScreen
iOS設(shè)備自身的主屏幕對(duì)象。
+ screens
包含所有屏幕對(duì)象的數(shù)組,包括設(shè)備主屏和外接顯示屏,設(shè)備主屏永遠(yuǎn)是索引為0的screen對(duì)象。
mirroredScreen (read-only)
如果外接顯示屏當(dāng)前顯示內(nèi)容為主屏的鏡像,那么它的mirroredScreen屬性就是設(shè)備的主屏對(duì)象,否則為nil。當(dāng)創(chuàng)建一個(gè)新的window對(duì)象并添加一些其他顯示內(nèi)容后,設(shè)置window對(duì)象的screen屬性為相應(yīng)外接屏對(duì)象,則此時(shí)外接屏不再顯示主屏鏡像,而顯示新window對(duì)象的內(nèi)容,若想重新顯示鏡像,則設(shè)置新window對(duì)象的screen屬性為nil。
coordinateSpace(read-only)
該屬性為id<UICoordinateSpace>
類型,代表屏幕的當(dāng)前坐標(biāo)空間,通常情況下匹配設(shè)備的當(dāng)前方向。在iOS8之前,screen和window對(duì)象的坐標(biāo)空間不會(huì)隨著設(shè)備的轉(zhuǎn)動(dòng)而轉(zhuǎn)動(dòng),它們總是保持正向豎屏方向。從iOS8開始,screen和window對(duì)象的坐標(biāo)空間會(huì)隨著設(shè)備的轉(zhuǎn)動(dòng)而改變,通常情況下匹配當(dāng)前的設(shè)備方向(如果view controller支持該方向的話)。
協(xié)議UICoordinateSpace
定義了一組方法用于在一塊屏幕上的不同坐標(biāo)空間(例如嵌套的各級(jí)view)之間轉(zhuǎn)換。自定義類可以實(shí)現(xiàn)該協(xié)議用以與不同的view的坐標(biāo)空間進(jìn)行轉(zhuǎn)換。在實(shí)現(xiàn)時(shí),可以通過screen的坐標(biāo)空間作為中轉(zhuǎn),來實(shí)現(xiàn)自定義的坐標(biāo)空間到view的坐標(biāo)空間的轉(zhuǎn)換。此外,該協(xié)議還定義了一個(gè)bounds屬性代表在自身坐標(biāo)空間下的邊界。
- convertPoint:toCoordinateSpace:
- convertPoint:fromCoordinateSpace:
- convertRect:toCoordinateSpace:
- convertRect:fromCoordinateSpace:
fixedCoordinateSpace(read-only)
該屬性同coordinateSpace
一樣也為id<UICoordinateSpace>
類型,但是固定的只代表屏幕正向豎屏的坐標(biāo)空間。可以用于一些需要依賴屏幕正向豎屏坐標(biāo)空間的計(jì)算。比如存儲(chǔ)一些坐標(biāo)點(diǎn),若當(dāng)前坐標(biāo)空間不是屏幕正向豎屏坐標(biāo)空間,則可以通過該屬性轉(zhuǎn)換后保存,當(dāng)取出時(shí),則可以正確的再轉(zhuǎn)換到當(dāng)前的屏幕坐標(biāo)空間了。
bounds(read-only)
當(dāng)前坐標(biāo)空間下的屏幕邊界,匹配設(shè)備方向。
nativeBounds(read-only)
始終基于正向豎屏的坐標(biāo)空間,與bounds以點(diǎn)為單位不同,該屬性以像素為單位,表示物理屏幕的邊界。比如設(shè)備是iPhone6Plus,則值為{{0, 0}, {1080, 1920}}
scale(read-only)
當(dāng)前屏幕所在設(shè)備的坐標(biāo)空間與以點(diǎn)為單位的邏輯坐標(biāo)空間的比值。比如設(shè)備是iPhone6Plus,那么比值是1242 x 2208對(duì)應(yīng)414 x 736為3。
nativeScale(read-only)
與scale不同,該屬性表示設(shè)備屏幕物理分辨率與邏輯坐標(biāo)空間的比值。比如設(shè)備是iPhone6Plus,那么比值是1080 x 1920對(duì)應(yīng)414 x 736為2.608696。
currentMode
該屬性為UIScreenMode
類型。許多外接屏幕支持多種的分辨率和單像素寬高比,UIScreenMode類封裝了這些信息,屏幕分辨率以像素為單位。currentMode默認(rèn)值是該屏幕的最高分辨率,可以設(shè)置該值為availableModes數(shù)組中支持的其他值。應(yīng)在將screen對(duì)象賦值給window前修改該屬性。
preferredMode(read-only)
首選的UIScreenMode。
availableModes
該屏幕對(duì)象支持的所有UIScreenMode組成的數(shù)組。
- displayLinkWithTarget:selector:
返回CADisplayLink對(duì)象,使繪圖代碼與屏幕刷新頻率同步。
brightness
表示屏幕的亮度,只有主屏支持該屬性,可設(shè)置的值得范圍是0-1
wantsSoftwareDimming
表示是否通過軟件計(jì)算使屏幕亮度相比只是通過硬件設(shè)置的更暗,開啟會(huì)有性能影響(ps:肉眼沒看出差別-_-!)
overscanCompensation
針對(duì)外接顯示屏,補(bǔ)償過掃描的策略
typedef enum {
// 縮放使所有內(nèi)容顯示
UIScreenOverscanCompensationScale,
// 減小screen的bounds讓所有內(nèi)容顯示
UIScreenOverscanCompensationInsetBounds,
// 不縮放,通過overscanCompensationInsets指定的內(nèi)邊距的內(nèi)容不會(huì)被裁掉。
UIScreenOverscanCompensationNone,
} UIScreenOverscanCompensation;
overscanCompensationInsets
邊緣避免被過掃描裁掉的內(nèi)邊距,由于UIScreenOverscanCompensationNone策略
- snapshotViewAfterScreenUpdates:
返回一個(gè)當(dāng)前屏幕的快照view,參數(shù)指明是否跟蹤最近的改變。可用于全屏動(dòng)畫。
focusedView
iOS9.0屬性,?
supportsFocus
iOS9.0屬性,?
相關(guān)通知
// object是screen本身,沒有userInfo字典。應(yīng)用啟動(dòng)前連接的屏幕不會(huì)發(fā)送連接通知
UIScreenDidConnectNotification
UIScreenDidDisconnectNotification
UIScreenModeDidChangeNotification
UIScreenBrightnessDidChangeNotification
外部屏幕變化可以發(fā)生在應(yīng)用生命周期的任何時(shí)候,所以適合在AppDelegate中監(jiān)聽,當(dāng)應(yīng)用掛起時(shí),相應(yīng)的通知會(huì)排入隊(duì)列中,直到應(yīng)用重新運(yùn)行(包括后臺(tái)運(yùn)行)時(shí)推送。代碼示例可查看UIWindow介紹中的<外接屏幕顯示window>