使用Swift3.0诠释UIView与CALayer

一.什么是UIView,什么是CALayer?

  • iOS中的一些控件UIButton,UILabel,UITextView等等,能产生交互的基本都是UIView
  • 在创建UIView对象时,UIView内部会自动创建一个CALayer层,通过UIView的layer属性可以访问这个层.当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的层上,绘图完毕后,系统会将层拷贝到屏幕上,于是就完成了UIView的显示(UIView本身不具备显示的功能,是它内部的层才有显示功能).

二.layer的作用

首选创建一个UIImageView对象
1.简单的头像圆角

imageView.layer.cornerRadius = 25
imageView.layer.masksToBounds = true

2.设置阴影

//阴影颜色
imageView.layer.shadowColor = UIColor.black.cgColor
//阴影偏移
imageView.layer.shadowOffset = CGSize.init(width: 0, height: 1)
//不透明度
imageView.layer.shadowOpacity = 0.5

3.设置控件的边框和颜色

imageView.layer.borderWidth = 1
imageView.layer.borderColor = UIColor.red.cgColor

4.设置旋转缩放等效果

imageView.layer.transform  = CATransform3DMakeRotation(CGFloat(M_PI_4), 0, 0, 1)

5.可以使用layer添加简单图层,或者图片图层

        let myLayer = CALayer()
        myLayer.bounds = CGRect.init(x: 0, y: 0, width: 100, height: 150)
        //设置层的位置
        myLayer.position = CGPoint.init(x: 100, y: 380)
        //这里用的是UIImage的CGImage属性,是一种CGImageRef类型的数据
        myLayer.contents = UIImage.init(named: "22.jpeg")?.cgImage
        myLayer.cornerRadius  = 10
        myLayer.masksToBounds = true
        self.view.layer.addSublayer(myLayer)
CALayer中使用cgImage数据类型的原因?
  • CALayer是定义在QuartzCore框架中的;CGImageRef、CGColorRef两种数据类型是定义在CoreGraphics框架中的;UIColor、UIImage是定义在UIKit框架中的
  • QuartzCore框架和CoreGraphics框架可以跨平台使(iOS和Mac OS X),UIKit只能在iOS中使用
  • 不过很多情况下,可以通过UIKit对象的特定方法,得到CoreGraphics对象,比如UIImage的CGImage方法可以返回一个CGImageRef

三.UIView和CALayer的选择

  • UIView比CALayer多了响应功能,UIView继承与UIResponder. CALayer直接继承与NSObject, CALayer不具有响应功能
  • 如果显示出来的东西需要跟用户进行交互的话,用UIView.如果不需要跟用户进行交互,用UIView或者CALayer都可以.CALayer不用处理响应事件性能会高一些,更加轻量级.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 12,711评论 6 30
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 10,519评论 5 13
  • CALayer1-简介 本文目录 一、什么是CALayer 二、CALayer的简单使用 回到顶部 一、什么是CA...
    白水灬煮一切阅读 7,357评论 0 8
  • 在iOS实际开发中常用的动画无非是以下四种:UIView动画,核心动画,帧动画,自定义转场动画。 1.UIView...
    请叫我周小帅阅读 8,365评论 1 23
  • UiView的一些代理 一.<NSCoding> 我们会在以下这些场合用到NSCoding: 1. XIB/Sto...
    爱笑的猫mi阅读 4,863评论 0 1