Swift_ios_layer層常用屬性那些事(1)

革碼者基地 -經(jīng)驗分享-

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

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

  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,688評論 6 30
  • 轉(zhuǎn)載:http://www.itdecent.cn/p/32fcadd12108 每個UIView有一個伙伴稱為l...
    F麥子閱讀 6,568評論 0 13
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,267評論 5 13
  • //設(shè)置尺寸為屏幕尺寸的時候self.window = [[UIWindow alloc] initWithFra...
    LuckTime閱讀 965評論 0 0
  • 轉(zhuǎn)自:http://www.code4app.com/blog-866962-1317.html1、設(shè)置UILab...
    MMOTE閱讀 1,887評論 1 1

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