淺嘗UIAppearance的使用

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

 public protocol UIAppearance : NSObjectProtocol

首先來看看該協(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  

對于第一個方法,就是獲取某一種視圖類的appearance對象,通過該對象可以設置一些對全局有效的屬性,比如我們平時可能經常設置的tintColor,backgroundColor屬性等妓雾。如果我們要修改UINavigationBar的tintColor屬性,我們可以將下列代碼寫在AppleDelegate里的didFinishLaunchingWithOptions方法里颅痊。

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

但是這里有一點需要注意的是使用appearance設置UI效果最好采用全局的設置横侦,在所有界面初始化前開始設置,否則可能失效柬赐。

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

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

//這里需要說明的是,在swift中并沒有像OC當中的那樣通過[object class]獲取到類對象,不過在swift中我們可以通過object.dynamicType獲取對象的類肛宋。

對于第三個方法,是iOS8.0后添加的方法,該方法的參數類型是UITraitCollection,返回的仍然是一個appearance對象,對于該種類型的參數,作者也沒有過于深入的研究,這里只是簡單的的理解州藕。UITraitCollection是iOS8.0新推出的一個類,這個類封裝了像水平和豎直方向的 Size Class 等信息。該類型的對象是定義在一個名字為UITraitEnvironment的協(xié)議中,該協(xié)議默認被UIView與UIViewController等遵守.酝陈〈膊#可以直接通過View或者controller的traitCollection屬性獲取該對象。如果沒有指定某一控件的traitCollection屬性,那么將使用其父控件的traitCollection屬性值沉帮。

下面是根據第三個方法所做的一個小示例锈死。

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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末待牵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子喇勋,更是在濱河造成了極大的恐慌缨该,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件川背,死亡現(xiàn)場離奇詭異压彭,居然都是意外死亡,警方通過查閱死者的電腦和手機渗常,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汗盘,“玉大人皱碘,你說我怎么就攤上這事∫酰” “怎么了癌椿?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長菱阵。 經常有香客問我踢俄,道長,這世上最難降的妖魔是什么晴及? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任都办,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘琳钉。我一直安慰自己势木,他們只是感情好,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布歌懒。 她就那樣靜靜地躺著啦桌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪及皂。 梳的紋絲不亂的頭發(fā)上甫男,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音验烧,去河邊找鬼板驳。 笑死,一個胖子當著我的面吹牛噪窘,可吹牛的內容都是我干的笋庄。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼倔监,長吁一口氣:“原來是場噩夢啊……” “哼直砂!你這毒婦竟也來了?” 一聲冷哼從身側響起浩习,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤静暂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谱秽,有當地人在樹林里發(fā)現(xiàn)了一具尸體洽蛀,經...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年疟赊,在試婚紗的時候發(fā)現(xiàn)自己被綠了郊供。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡近哟,死狀恐怖驮审,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情吉执,我是刑警寧澤疯淫,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站戳玫,受9級特大地震影響熙掺,放射性物質發(fā)生泄漏。R本人自食惡果不足惜咕宿,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一币绩、第九天 我趴在偏房一處隱蔽的房頂上張望蜡秽。 院中可真熱鬧,春花似錦类浪、人聲如沸载城。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诉瓦。三九已至,卻和暖如春力细,著一層夾襖步出監(jiān)牢的瞬間睬澡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工眠蚂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留煞聪,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓逝慧,卻偏偏與公主長得像昔脯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子笛臣,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫云稚、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • “再幫我辦一件事沈堡,以后你就自由了静陈。”白衣男子對著窗子說 “好”一道清靈的聲音由漆黑的夜晚傳來诞丽,并不見人影 一道白光...
    花落微涼m清幽閱讀 282評論 0 0
  • 1 正月初五恰逢情人節(jié)鲸拥,小城富麗華大酒店,觥籌交錯僧免,笑語喧嘩刑赶,賓客盡歡。 二十年未見的高中同學重聚一堂懂衩,自然而然的...
    有故事的牛魔王閱讀 561評論 0 1
  • VSync 虛擬化 為了提高UI的響應速度角撞, Android重新設計了VSync的相應邏輯。 先來看下VSync的...
    大大世界閱讀 3,871評論 0 5