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

Swift_ios_layer层常用属性那些事(1)_第1张图片
革码者基地 -经验分享-

学习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))