淺嘗UIAppearance的使用

相信細(xì)心的大家會(huì)注意到UIView類中遵守了一個(gè)開(kāi)放的協(xié)議UIAppearance,于是作者抽時(shí)間做了一些小的嘗試。由于工作使用的是swift語(yǔ)言,因此給出的實(shí)例也是用swift寫的。

 public protocol UIAppearance : NSObjectProtocol

首先來(lái)看看該協(xié)議中都有哪些方法。

 1.public static func appearance() -> Self

 2.public static func appearanceWhenContainedInInstancesOfClasses(containerTypes: [AnyObject.Type]) -> Self

 3. public static funcappearanceForTraitCollection(trait: UITraitCollection) -> Self

 4.public static func appearanceForTraitCollection(trait: UITraitCollection, whenContainedInInstancesOfClasses containerTypes: [AnyObject.Type]) -> Self  

對(duì)于第一個(gè)方法,就是獲取某一種視圖類的appearance對(duì)象,通過(guò)該對(duì)象可以設(shè)置一些對(duì)全局有效的屬性,比如我們平時(shí)可能經(jīng)常設(shè)置的tintColor,backgroundColor屬性等。如果我們要修改UINavigationBar的tintColor屬性,我們可以將下列代碼寫在AppleDelegate里的didFinishLaunchingWithOptions方法里。

 UINavigationBar.appearance().tintColor = UIColor.yellowColor()

但是這里有一點(diǎn)需要注意的是使用appearance設(shè)置UI效果最好采用全局的設(shè)置,在所有界面初始化前開(kāi)始設(shè)置,否則可能失效。

第二個(gè)方法的大體用法是獲取一個(gè)視圖類中某種視圖的appearance對(duì)象,進(jìn)而可以設(shè)置一些全局的屬性,一經(jīng)設(shè)置,那么當(dāng)前該種視圖上的所有該種子視圖的這一屬性都將被設(shè)置。比如要實(shí)現(xiàn)添加到UIView上的Button的背景色都設(shè)置成黃色,代碼如下。

   UIButton.appearanceWhenContainedInInstancesOfClasses([UIView().dynamicType]).backgroundColor = UIColor.yellowColor() 

//這里需要說(shuō)明的是,在swift中并沒(méi)有像OC當(dāng)中的那樣通過(guò)[object class]獲取到類對(duì)象,不過(guò)在swift中我們可以通過(guò)object.dynamicType獲取對(duì)象的類。

對(duì)于第三個(gè)方法,是iOS8.0后添加的方法,該方法的參數(shù)類型是UITraitCollection,返回的仍然是一個(gè)appearance對(duì)象,對(duì)于該種類型的參數(shù),作者也沒(méi)有過(guò)于深入的研究,這里只是簡(jiǎn)單的的理解。UITraitCollection是iOS8.0新推出的一個(gè)類,這個(gè)類封裝了像水平和豎直方向的 Size Class 等信息。該類型的對(duì)象是定義在一個(gè)名字為UITraitEnvironment的協(xié)議中,該協(xié)議默認(rèn)被UIView與UIViewController等遵守.??梢灾苯油ㄟ^(guò)View或者controller的traitCollection屬性獲取該對(duì)象。如果沒(méi)有指定某一控件的traitCollection屬性,那么將使用其父控件的traitCollection屬性值。

下面是根據(jù)第三個(gè)方法所做的一個(gè)小示例。

 UIView.appearanceForTraitCollection(UIView().traitCollection).backgroundColor = UIColor.redColor() //這句代碼會(huì)將所有UIView類型的視圖的背景色設(shè)置成紅色,當(dāng)然這句代碼也寫在了AppleDelegate里的didFinishLaunchingWithOptions方法中。

寫到這里,對(duì)于第四個(gè)方法,大家只要看一下其方法名,就能猜測(cè)出是對(duì)方法二和方法三的一個(gè)綜合,返回的仍是appearance對(duì)象,只不過(guò)需要兩種類型的參數(shù),而這兩種類型正是方法二與方法三所需要的參數(shù)類型,這里就不再做測(cè)試,如果有興趣,可以親自去嘗試一下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,036評(píng)論 4 61
  • “再幫我辦一件事,以后你就自由了?!卑滓履凶訉?duì)著窗子說(shuō) “好”一道清靈的聲音由漆黑的夜晚傳來(lái),并不見(jiàn)人影 一道白光...
    花落微涼m清幽閱讀 366評(píng)論 0 0
  • 1 正月初五恰逢情人節(jié),小城富麗華大酒店,觥籌交錯(cuò),笑語(yǔ)喧嘩,賓客盡歡。 二十年未見(jiàn)的高中同學(xué)重聚一堂,自然而然的...
    有故事的牛魔王閱讀 663評(píng)論 0 1
  • VSync 虛擬化 為了提高UI的響應(yīng)速度, Android重新設(shè)計(jì)了VSync的相應(yīng)邏輯。 先來(lái)看下VSync的...
    大大世界閱讀 4,074評(píng)論 0 5

友情鏈接更多精彩內(nèi)容