
學(xué)習(xí)Swift也有了一段時間,但由于身體原因,中間來了個小插曲,讓我對Swift的學(xué)習(xí)進度慢了下來,但卻不曾削弱我對Swift的深愛。如今身體恢復(fù),我已再次加大馬力,向目標奮進。
經(jīng)常一個人坐在靜謐寬敞卻不通風(fēng)的空間,點著幾盞日光燈,敲著手中的代碼,實現(xiàn)一個又一個小功能。不通風(fēng)那是因為人都走了,空調(diào)被迫停止工作(沒想到吧),只點幾盞燈,那是因為不但可以省電,而且可以營造那么一丟丟小情調(diào)。不近視的我經(jīng)常會在敲碼時戴上防輻射眼鏡,沒辦法,人人都得懂得愛護自己嘛~
因為swift,讓我認識了不少大牛大神~比如說關(guān)東升,劉銘,小波,老鎮(zhèn),StrongX等等,這里是指我認識他們,他們并不認識我。(他們怎么可能會認識我)
關(guān)東升老師,是一個非常權(quán)威人物。他的書銷量都是不錯不錯的,就是視頻有點貴。其中swift開發(fā)指南適合初學(xué)者學(xué)習(xí)語法,不知道新版出了沒有。
劉銘老師,要說在Swift培訓(xùn)界能用“官方”兩字形容的話,劉銘老師算是其一。咬字清晰,正兒八經(jīng),直戳要點。估計他的教學(xué)宗旨是簡潔明了,輕盈快捷。語速語氣上確實像新聞主播一樣,第一感覺就是“正式”和“權(quán)威”。認識劉銘老師是從他的書《Swift應(yīng)用開發(fā)實戰(zhàn)》開始認識的。
小波老師(原名張云波)就恰恰相反,估計在語言編排上面沒有怎么下功夫,不過也很好,用接地氣的方式,用通俗易懂的語言讓學(xué)者們感覺到高手在民間吶!說起怎么認識小波老師的,那得從百度云說起咯!據(jù)我觀察,百度云流傳的培訓(xùn)視頻當(dāng)中,小波老師的份額倒是非??捎^的。人家可以一年四季連載,非常給力,相當(dāng)不錯。
老鎮(zhèn)(原名曾偉)老師風(fēng)格則是居于劉銘老師跟云波老師之間,特點是幽默風(fēng)趣。在他的教學(xué)視頻中可以經(jīng)常聽到杜蕾斯杜蕾斯運動,讓你想忘都忘不掉。最可愛的時候則是給他自己賣廣告的時候。教程里語速平穩(wěn)順耳,非常適合配上耳機去傾聽??珊薜氖窃谒娜豪飶臎]逮住過他。
StrongX老師也挺出名的,語言風(fēng)格非常貼合大眾喜愛,咬字清晰明朗,就像某電臺的男主播。雖然我聽過他的教程并不是很多,但是從他的簡書所發(fā)表的文章中就可以知道他是一個多么樂于分享的人,當(dāng)然文章的水平那也是杠杠滴。
各個老師各有所長,風(fēng)格各異,有時間去聽聽他們的課吧。
收藏了以下Swift網(wǎng)址,也是他們駐扎的基地:
花川學(xué)院:http://www.hcxy.me/
極客學(xué)院:http://www.jikexueyuan.com/
51CTO學(xué)院:http://edu.51cto.com/
Swiftv課堂:http://www.swiftv.cn
騰訊課堂:http://ke.qq.com/
接下來我要記錄一下學(xué)習(xí)layer所感。(跟著老鎮(zhèn)學(xué)的)
在iOS開發(fā)中,處理的一個又一個UIView,實際是在操作CALayer。那么為什么不直接對CALayer進行編程呢?那是因為CALayer繼承自NSObject,主要是用于圖層的處理以及動畫,而UIView繼承自UIResponder,可以處理交互事件。
由此,可以認為UIView就是對CALayer的一個簡單封裝,圖像繪制、動畫都是CALayer做的。有過開發(fā)經(jīng)驗的朋友都知道,蘋果在UIView里面封裝了一套動畫接口,但是利用這些接口,只是可以做一些簡單、不靈活的動畫。如果想在底層做一些改變,想實現(xiàn)一些特別的動畫,這是學(xué)會掌控Core Animation以外,別無他選。(摘自網(wǎng)絡(luò))
代碼都在AppDelegate的didFinishLaunchingWithOptions的執(zhí)行,為的是方便,一啟動則實現(xiàn)效果,當(dāng)然也可以在其他視圖控制器里面實現(xiàn)。
- 1.先定義一個window,為的是后面addSubview.設(shè)置window的背景顏色,或者可以設(shè)置成圖片。后面把window激活一下。
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
// self.window?.backgroundColor = UIColor.whiteColor()
self.window?.backgroundColor = UIColor(patternImage: UIImage(named: "swift_logo")!)
self.window?.makeKeyAndVisible()
- 2.實例化一個根控制器,并作為window的根控制器(必須)。
let vc = UIViewController(nibName: nil, bundle: nil)
vc.view = UIView(frame:UIScreen.mainScreen().bounds)
self.window?.rootViewController = vc
// window必須添加一個根控制器。但是后面,可以直接用window來addSubview。也可以用vc.view.addSubview。
// vc.view.addSubview的前提是設(shè)置了他的view。這樣才能用vc的view來addSubView。
// vc加載的subView們在window加載的subView們下面。所以先看到的是window的subview。
// 如果要添加一個新的視圖控制器,則需要在vc的基礎(chǔ)上presentViewController。
- 3.定義一個UIView。
let alertView = UIView(frame: CGRectMake(self.window!.bounds.width/2 - 250 / 2 ,self.window!.bounds.height/2 - 250/2,250,250))
alertView.backgroundColor = UIColor(patternImage: UIImage(named: "swift_logo")!)
// alertView.backgroundColor = UIColor.blueColor()
alertView.alpha = 1
alertView.layer.cornerRadius = 125
// 定義一個陰影
alertView.layer.shadowOffset = CGSizeMake(0, 10)
alertView.layer.shadowColor = UIColor.greenColor().CGColor
alertView.layer.shadowOpacity = 1
alertView.layer.shadowRadius = 10
// 陰影默認是跟隨view的邊界。view在上面設(shè)置成了圓形,所以陰影是圓形,如果想定義成方形,可通過下面代碼設(shè)置。
// let shadowP = CGPathCreateMutable()
// CGPathAddRect(shadowP, nil,alertView.bounds)
// alertView.layer.shadowPath = shadowP
// 下面一句如果設(shè)置為true,則把陰影也去掉了。如果又想陰影,又想填充一個圖片,則可通過alertView.backgroundColor =UIColor(patternImage: UIImage(named: "swift_logo")!)方式填充,
// 而非通過設(shè)置layer.contents= UIImage(named: "swift_logo")?.CGImage 加載。但layer.contents填充圖片方式好處是可以任意調(diào)整圖片的顯示方式。
// alertView.layer.masksToBounds = true
// CALayer有一個contents屬性,它在OC中是id類型,在Swift中是AnyObject類型,這意味著它可以是任何類型對象。
// 但在實踐中,如果給這個屬性賦值的不是CGImage類型,圖層會是一片空白。
// 它的這個奇怪的現(xiàn)象是因為MAC OS原因造成的,在MAC OS系統(tǒng)上,給它賦值CGImage或者NSImage都是起作用的。
// 但是在iOS系統(tǒng),如果將UIImage賦值給它,圖層只會是一片空白。(注意,視圖指的是UIView,圖層指的是CALayer)
/*
kCAGravityCenter
kCAGravityTop
kCAGravityBottom
kCAGravityLeft
kCAGravityRight
kCAGravityTopLeft
kCAGravityTopRight
kCAGravityBottomLeft
kCAGravityBottomRight
kCAGravityResize
kCAGravityResizeAspect
kCAGravityResizeAspectFill
*/
// 相當(dāng)于UIImageView的contentMode屬性,可以設(shè)置圖片顯示樣式
// alertView.layer.contents = UIImage(named: "swift_logo")?.CGImage
// alertView.layer.contentsGravity = kCAGravityResizeAspectFill
//
// contentsScale定義了CGImage的像素尺寸和視圖大小比例,默認情況下為1.0
// 如何理解這句話,我是這么理解的,屏幕有非retina屏幕(像素和尺寸是1:1)
// 還有retina屏幕,像素和尺寸比是2:1
// 現(xiàn)在還出現(xiàn)了@3x圖片,像素和尺寸比理論上是3:1,但實際上在顯示的時候,蘋果進行了調(diào)整(具體可以看ios9的新特性)
// 那么,像我下面這么寫,就是說像素點按照屏幕來調(diào)整,如果是非retaina,那么就是1:1,如果是retina,就是2:1
// alertView.layer.contentsScale = UIScreen.mainScreen().scale
- 4.加載alertView
// vc.view.addSubview(alertView)
self.window?.addSubview(alertView)