美文网首页Swift学习swift程序员
Swift_ios_layer层常用属性那些事(1)

Swift_ios_layer层常用属性那些事(1)

作者: ChinaSwift | 来源:发表于2016-01-10 22:34 被阅读2578次
    革码者基地 -经验分享-

    学习Swift也有了一段时间,但由于身体原因,中间来了个小插曲,让我对Swift的学习进度慢了下来,但却不曾削弱我对Swift的深爱。如今身体恢复,我已再次加大马力,向目标奋进。

    经常一个人坐在静谧宽敞却不通风的空间,点着几盏日光灯,敲着手中的代码,实现一个又一个小功能。不通风那是因为人都走了,空调被迫停止工作(没想到吧),只点几盏灯,那是因为不但可以省电,而且可以营造那么一丢丢小情调。不近视的我经常会在敲码时戴上防辐射眼镜,没办法,人人都得懂得爱护自己嘛~

    因为swift,让我认识了不少大牛大神~比如说关东升,刘铭,小波,老镇,StrongX等等,这里是指我认识他们,他们并不认识我。(他们怎么可能会认识我)

    关东升老师,是一个非常权威人物。他的书销量都是不错不错的,就是视频有点贵。其中swift开发指南适合初学者学习语法,不知道新版出了没有。

    刘铭老师,要说在Swift培训界能用“官方”两字形容的话,刘铭老师算是其一。咬字清晰,正儿八经,直戳要点。估计他的教学宗旨是简洁明了,轻盈快捷。语速语气上确实像新闻主播一样,第一感觉就是“正式”和“权威”。认识刘铭老师是从他的书《Swift应用开发实战》开始认识的。

    小波老师(原名张云波)就恰恰相反,估计在语言编排上面没有怎么下功夫,不过也很好,用接地气的方式,用通俗易懂的语言让学者们感觉到高手在民间呐!说起怎么认识小波老师的,那得从百度云说起咯!据我观察,百度云流传的培训视频当中,小波老师的份额倒是非常可观的。人家可以一年四季连载,非常给力,相当不错。

    老镇(原名曾伟)老师风格则是居于刘铭老师跟云波老师之间,特点是幽默风趣。在他的教学视频中可以经常听到杜蕾斯杜蕾斯运动,让你想忘都忘不掉。最可爱的时候则是给他自己卖广告的时候。教程里语速平稳顺耳,非常适合配上耳机去倾听。可恨的是在他的群里从没逮住过他。

    StrongX老师也挺出名的,语言风格非常贴合大众喜爱,咬字清晰明朗,就像某电台的男主播。虽然我听过他的教程并不是很多,但是从他的简书所发表的文章中就可以知道他是一个多么乐于分享的人,当然文章的水平那也是杠杠滴。

    各个老师各有所长,风格各异,有时间去听听他们的课吧。

    收藏了以下Swift网址,也是他们驻扎的基地:
    花川学院:http://www.hcxy.me/
    极客学院:http://www.jikexueyuan.com/
    51CTO学院:http://edu.51cto.com/
    Swiftv课堂:http://www.swiftv.cn
    腾讯课堂:http://ke.qq.com/

    接下来我要记录一下学习layer所感。(跟着老镇学的)

    在iOS开发中,处理的一个又一个UIView,实际是在操作CALayer。那么为什么不直接对CALayer进行编程呢?那是因为CALayer继承自NSObject,主要是用于图层的处理以及动画,而UIView继承自UIResponder,可以处理交互事件。

    由此,可以认为UIView就是对CALayer的一个简单封装,图像绘制、动画都是CALayer做的。有过开发经验的朋友都知道,苹果在UIView里面封装了一套动画接口,但是利用这些接口,只是可以做一些简单、不灵活的动画。如果想在底层做一些改变,想实现一些特别的动画,这是学会掌控Core Animation以外,别无他选。(摘自网络)

    代码都在AppDelegate的didFinishLaunchingWithOptions的执行,为的是方便,一启动则实现效果,当然也可以在其他视图控制器里面实现。

    • 1.先定义一个window,为的是后面addSubview.设置window的背景颜色,或者可以设置成图片。后面把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的前提是设置了他的view。这样才能用vc的view来addSubView。
    //        vc加载的subView们在window加载的subView们下面。所以先看到的是window的subview。        
    //        如果要添加一个新的视图控制器,则需要在vc的基础上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在上面设置成了圆形,所以阴影是圆形,如果想定义成方形,可通过下面代码设置。
    //   let shadowP = CGPathCreateMutable()
    //   CGPathAddRect(shadowP, nil,alertView.bounds)
    //   alertView.layer.shadowPath = shadowP
    
    //        下面一句如果设置为true,则把阴影也去掉了。如果又想阴影,又想填充一个图片,则可通过alertView.backgroundColor =UIColor(patternImage: UIImage(named: "swift_logo")!)方式填充,
    //        而非通过设置layer.contents= UIImage(named: "swift_logo")?.CGImage 加载。但layer.contents填充图片方式好处是可以任意调整图片的显示方式。
    //   alertView.layer.masksToBounds = true
    
    //        CALayer有一个contents属性,它在OC中是id类型,在Swift中是AnyObject类型,这意味着它可以是任何类型对象。
    //        但在实践中,如果给这个属性赋值的不是CGImage类型,图层会是一片空白。
    //        它的这个奇怪的现象是因为MAC OS原因造成的,在MAC OS系统上,给它赋值CGImage或者NSImage都是起作用的。
    //        但是在iOS系统,如果将UIImage赋值给它,图层只会是一片空白。(注意,视图指的是UIView,图层指的是CALayer)
                /*
                kCAGravityCenter
                kCAGravityTop
                kCAGravityBottom
                kCAGravityLeft
                kCAGravityRight
                kCAGravityTopLeft
                kCAGravityTopRight
                kCAGravityBottomLeft
                kCAGravityBottomRight
                kCAGravityResize
                kCAGravityResizeAspect
                kCAGravityResizeAspectFill
                */       
    //        相当于UIImageView的contentMode属性,可以设置图片显示样式
    //    alertView.layer.contents = UIImage(named: "swift_logo")?.CGImage
    //    alertView.layer.contentsGravity = kCAGravityResizeAspectFill      
    //
    //        contentsScale定义了CGImage的像素尺寸和视图大小比例,默认情况下为1.0
    //        如何理解这句话,我是这么理解的,屏幕有非retina屏幕(像素和尺寸是1:1)
    //        还有retina屏幕,像素和尺寸比是2:1
    //        现在还出现了@3x图片,像素和尺寸比理论上是3:1,但实际上在显示的时候,苹果进行了调整(具体可以看ios9的新特性)
    //        那么,像我下面这么写,就是说像素点按照屏幕来调整,如果是非retaina,那么就是1:1,如果是retina,就是2:1
    //    alertView.layer.contentsScale = UIScreen.mainScreen().scale
    
    • 4.加载alertView
    //    vc.view.addSubview(alertView)
            self.window?.addSubview(alertView)
    

    相关文章

      网友评论

      本文标题:Swift_ios_layer层常用属性那些事(1)

      本文链接:https://www.haomeiwen.com/subject/wayqkttx.html