通過 Core Graphics 繪制漸變顏色

作者:Arthur Knopper初斑,原文鏈接舀寓,原文日期:2016-10-18
譯者:冬瓜蔗候;校對:星夜暮晨垒酬;定稿:CMB

Core Graphics 是一套非常強(qiáng)大的底層 API 接口集合。在這篇教程中淑蔚,我們將借助 Core Graphics 來創(chuàng)建漸變顏色。出于簡便起見愕撰,我們將創(chuàng)建線性漸變 (linear gradients)刹衫。所謂線性漸變,是從一個點到另外一個點顏色過渡的描述搞挣。我們將會創(chuàng)建一個從左向右漸變的視圖带迟。該教程的實驗環(huán)境是 Xcode 8 和 iOS 10。

首先打開 Xcode 創(chuàng)建一個 Single View Application囱桨。

點擊 Next仓犬。輸入 product name,填寫 IOS10DrawGradientsTutorial 然后將 Organization NameOrganization Identifier 這兩項按照你的習(xí)慣來填寫舍肠。將 Language 設(shè)置為 Swift 搀继,并且確定 Devices 選項為 iPhone窘面。

在我們的工程中添加一個新文件。選擇 iOS->Source->Cocoa Touch Class叽躯。將新的 Class 命名為 GradientView 并且確定其繼承自 UIView 類财边。

轉(zhuǎn)到 storyboard 中,在 Document Outline 選擇要編輯的視圖点骑,然后點擊 Identity Inspector 選項卡酣难,在 Custom Class 一欄中將 Class 選擇 GradientView

打開文件 gradientView.swift 黑滴,并修改 drawRect 方法:

override func draw(_ rect: CGRect) {
    // 1
    guard let currentContext = UIGraphicsGetCurrentContext() else { return }
       
    // 2
    currentContext.saveGState()
        
    // 3
    let colorSpace = CGColorSpaceCreateDeviceRGB()
        
    // 4
    let startColor = UIColor.red
    guard let startColorComponents = startColor.cgColor.components else { return }
        
    let endColor = UIColor.blue
    guard let endColorComponents = endColor.cgColor.components else { return }
        
    // 5
    let colorComponents: [CGFloat]
            = [startColorComponents[0], startColorComponents[1], startColorComponents[2], startColorComponents[3], endColorComponents[0], endColorComponents[1], endColorComponents[2], endColorComponents[3]]
        
    // 6
    let locations:[CGFloat] = [0.0, 1.0]
        
    // 7
    guard let gradient = CGGradient(colorSpace: colorSpace,colorComponents: colorComponents,locations: locations,count: 2) else { return }
        
    let startPoint = CGPoint(x: 0, y: self.bounds.height)
    let endPoint = CGPoint(x: self.bounds.width,y: self.bounds.height)
        
    // 8
    currentContext.drawLinearGradient(gradient, start: startPoint, end: endPoint, options: CGGradientDrawingOptions(rawValue: UInt32(0)))
        
    // 9
    currentContext.restoreGState()
}
  1. UIGraphicsGetCurrentContext 得到了圖形上下文 (graphical context)憨募,這里可以當(dāng)做一個新的畫布。
  2. 圖形上下文將被存儲袁辈,以便于之后的存儲操作馋嗜。
  3. CGColorSpace 描述的是顏色的域值范圍。大多情況下你會使用到 RGB 模式來描述顏色吵瞻。
  4. 這里我們定義一個漸變樣式的起始顏色和結(jié)束顏色葛菇。CGColor 對象是底層顏色接口的定義。這個接口方法會從 CGColor 中獲取指定顏色橡羞。
  5. 在這個數(shù)組中眯停,將 RGB 顏色分量和 alpha 值寫入。
  6. 在此處可以定義各種顏色的相對位置卿泽。
  7. CGGradient 用來描述漸變信息莺债。
  8. 這里漸變將沿縱軸 (vertical axis) 方向繪制。
  9. 存儲圖形上下文签夭。

編譯并運行我們的工程:

可以從我的 Github 上下載本篇文章的示例代碼齐邦。

本文由 SwiftGG 翻譯組翻譯,已經(jīng)獲得作者翻譯授權(quán)第租,最新文章請訪問 http://swift.gg措拇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市慎宾,隨后出現(xiàn)的幾起案子丐吓,更是在濱河造成了極大的恐慌,老刑警劉巖趟据,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件券犁,死亡現(xiàn)場離奇詭異,居然都是意外死亡汹碱,警方通過查閱死者的電腦和手機(jī)粘衬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人稚新,你說我怎么就攤上這事勘伺。” “怎么了枷莉?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵娇昙,是天一觀的道長。 經(jīng)常有香客問我笤妙,道長冒掌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任蹲盘,我火速辦了婚禮股毫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘召衔。我一直安慰自己铃诬,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布苍凛。 她就那樣靜靜地躺著趣席,像睡著了一般。 火紅的嫁衣襯著肌膚如雪醇蝴。 梳的紋絲不亂的頭發(fā)上宣肚,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機(jī)與錄音悠栓,去河邊找鬼霉涨。 笑死,一個胖子當(dāng)著我的面吹牛惭适,可吹牛的內(nèi)容都是我干的笙瑟。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼癞志,長吁一口氣:“原來是場噩夢啊……” “哼往枷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起今阳,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤师溅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盾舌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡蘸鲸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年妖谴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡膝舅,死狀恐怖嗡载,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仍稀,我是刑警寧澤洼滚,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站技潘,受9級特大地震影響遥巴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜享幽,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一铲掐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧值桩,春花似錦摆霉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至咳秉,卻和暖如春婉支,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滴某。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工磅摹, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人霎奢。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓户誓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親幕侠。 傳聞我的和親對象是個殘疾皇子帝美,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件晤硕、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,124評論 4 61
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理悼潭,服務(wù)發(fā)現(xiàn),斷路器舞箍,智...
    卡卡羅2017閱讀 134,716評論 18 139
  • 看過張國榮(哥哥)和張學(xué)友的一段視頻節(jié)目舰褪,二張同為演藝圈人士,對話自然精彩疏橄。 張學(xué)友曾經(jīng)問哥哥占拍,如何保持自己事業(yè)的...
    靜語YU閱讀 868評論 0 1
  • 這個故事要從小陽的一場夢來講略就,一天,小陽睡覺了晃酒,然后表牢,他做了一場夢,他夢見了:一個女孩贝次,在對著他笑崔兴,然后,他面臨...
    睡覺的石頭閱讀 413評論 2 1
  • 甜酒釀蛔翅,江南地區(qū)漢族小吃敲茄。是用蒸熟的江米(糯米)拌上酒酵(一種特殊的微生物酵母)發(fā)酵而成的一種甜米酒。酒釀也叫醪糟...
    唐三鏡酒坊閱讀 32,481評論 0 4