CALayer

layer是层,每个view上都会最少有一个layer,view上的可视化内容其实都是层。

CALayer展示实例

        let customView = UIView(frame: CGRectMake(0, 0, 100, 100))
customView.center = view.center
view.addSubview(customView) let layer = customView.layer
layer.backgroundColor = UIColor.brownColor().CGColor
layer.masksToBounds = true
layer.cornerRadius = 50.0
layer.borderWidth = 2
layer.borderColor = UIColor.blackColor().CGColor
layer.shadowColor = UIColor.blackColor().CGColor
layer.shadowOpacity = 0.8
layer.shadowOffset = CGSizeMake(15, 5)
layer.contents = UIImage(named: "icon.png")?.CGImage

上面是一些常用的属性,更多属性请自行参考:

  • backgroundColor:背景颜色
  • masksToBounds:将超过layer展示范围的内容剪掉
  • cornerRadius:设置圆角
  • borderWidth:边框宽度
  • borderColor:边框颜色
  • shadowColor:阴影颜色
  • shadowOpacity:阴影的透明度 0.0 ~ 1.0
  • shadowOffset:阴影的位置 (masksToBounds为true时 不显示阴影)
  • contents:设置图层上的内容

CALayer的显式动画和隐式动画

        // 先把layer添加到主图层上
let customLayer = CALayer()
customLayer.bounds = CGRectMake(0.0, 0.0, 100, 100)
customLayer.position = CGPointMake(150, 200)
customLayer.backgroundColor = UIColor.blackColor().CGColor
view.layer.addSublayer(customLayer) self.customLayer = customLayer override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { // 开启事务
CATransaction.begin()
// 设置动画时间
CATransaction.setValue(NSNumber(double: 2.0), forKey: kCATransactionAnimationDuration)
customLayer.position = CGPointMake(50.0, 50.0)
customLayer.backgroundColor = UIColor.redColor().CGColor
customLayer.cornerRadius = 50.0
// 提交事务
CATransaction.commit()
}

上面的例子是执行显示动画,这样一些不具有隐式动画的属性被修改后也可以做出动画效果,比如:cornerRadius。

具有隐式动画的属性在修改值的时候不需要做任何动画处理就会出现动画效果。

一些具有隐式动画的属性(更多属性请看官方文档或进入文件查看,都会有标注的):

  • position
  • backgroundColor
  • bounds

如果修改这些属性不想执行隐式动画可以这样做

        // 开启事务
CATransaction.begin()
// 设置是否执行动画
CATransaction.setValue(kCFBooleanTrue, forKey: kCATransactionDisableActions)
customLayer.position = CGPointMake(50.0, 50.0)
customLayer.backgroundColor = UIColor.redColor().CGColor
// 提交事务
CATransaction.commit()

CATextLayer

        let textLayer = CATextLayer()
textLayer.bounds = CGRectMake(0, 0, 300, 100)
textLayer.position = CGPointMake(10, 200)
textLayer.anchorPoint = CGPointMake(0.0, 0.0)
textLayer.backgroundColor = UIColor.yellowColor().CGColor
textLayer.string = "一些字符串,一些字符串,一些字符串,一些字符串,"
textLayer.cornerRadius = 10
textLayer.alignmentMode = kCAAlignmentCenter
textLayer.wrapped = false
textLayer.truncationMode = kCATruncationEnd
textLayer.contentsScale = UIScreen.mainScreen().scale
let font = UIFont(name: "Helvetica-Bold", size: 13)
let fontRef = CGFontCreateWithFontName(font!.fontName)
textLayer.font = fontRef!
textLayer.fontSize = font!.pointSize
textLayer.foregroundColor = UIColor.blackColor().CGColor
view.layer.addSublayer(textLayer) self.textLayer = textLayer

一些常用属性(更多参照官方文档):

  • string:要显示的字符串,可以是富文本,有隐式动画。
  • alignmentMode:排列模式(居中,靠左,靠右),有隐式动画。
  • wrapped:包裹字符串(是否换行显示)。
  • trancationMode:裁剪字符串模式,当超出范围时指定如何裁剪字符串。
  • contentsScale:内容缩放,需要设置为屏幕的scale,否则可能会出现字体模糊现象。
  • font:字体,有隐式动画。
  • fontSize:字体大小,有隐式动画。
  • foregroundColor:字体颜色,有隐式动画。

CALayer -- 备忘的更多相关文章

  1. Objective-C教程备忘单

    终极版本的Objective-C教程备忘单帮助你进行iOS开发. 想开始创建你的第一个iOS应用程序么?那么看一下这篇很棒的教程吧:Create your first iOS 7 Hello Worl ...

  2. GIS部分理论知识备忘随笔

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.高斯克吕格投影带换算 某坐标的经度为112度,其投影的6度带和3度带 ...

  3. python序列,字典备忘

    初识python备忘: 序列:列表,字符串,元组len(d),d[id],del d[id],data in d函数:cmp(x,y),len(seq),list(seq)根据字符串创建列表,max( ...

  4. Vi命令备忘

    备忘 Ctrl+u:向文件首翻半屏: Ctrl+d:向文件尾翻半屏: Ctrl+f:向文件尾翻一屏: Ctrl+b:向文件首翻一屏: Esc:从编辑模式切换到命令模式: ZZ:命令模式下保存当前文件所 ...

  5. ExtJs4常用配置方法备忘

    viewport布局常用属性 new Ext.Viewport({ layout: "border", renderTo: Ext.getBody(), defaults: { b ...

  6. [备忘] Automatically reset Windows Update components

    这两天遇到Windows 10的更新问题,官方有一个小工具,可以用来修复Windows Update的问题,备忘如下 https://support.microsoft.com/en-us/kb/97 ...

  7. ECMAScript 5(ES5)中bind方法简介备忘

    一直以来对和this有关的东西模糊不清,譬如call.apply等等.这次看到一个和bind有关的笔试题,故记此文以备忘. bind和call以及apply一样,都是可以改变上下文的this指向的.不 ...

  8. MFC通过txt查找文件并进行复制-备忘

    MFC基于对话框的Demo txt中每行一个23位的卡号. 文件夹中包含以卡号命名的图像文件.(fpt或者bmp文件) 要求遍历文件夹,找到txt中卡号所对应的图像文件,并复制出来. VC6.0写的. ...

  9. php 相关模块备忘

    在安装php的时候,不管是编译安装: ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...

随机推荐

  1. 释放Linux磁盘空间的一种方法

        1.用df 检查发现/根目录可用空间为0   [root@/]#df -h   2.用du检查发现 各目录占用的空间都很少,有约3G的空间莫名其妙地丢了.   [root@/]# du -m ...

  2. vim乱码处理

    编辑~/.vimrc文件,加上如下几行: set fileencodings=utf-8set termencoding=utf-8set encoding=utf-8

  3. 功能测试中遇到的一些有意思的bug

    2016.1.25 1.  Xss攻击型的bug Xss攻击即跨站脚步攻击,通过插入恶意脚本 ,实现对用户浏览器的控制. Bug现象:新增物品时,物品名称输入一段JavaScript代码,在提交时此代 ...

  4. oracle ebs中并发程序定义查询sql

    ---concurrent program define SELECT FCPV.CONCURRENT_PROGRAM_ID, FCPV.CONCURRENT_PROGRAM_NAME, FCPV.U ...

  5. OpenSSH Client信息泄露和缓冲区溢出漏洞

    一.风险简述: 2016年1月14日OpenSSH发布官方公告称,OpenSSH Client 5.4~7.1版本中未公开说明的功能(Roaming)存在信息泄漏和缓冲区溢出漏洞,此漏洞可能导致您通过 ...

  6. modelsim将波形文件保存下来却不打开图形界面

    vsim -c -do sim.tcl -l sim.log 波形怎么保存啊,我想把波形保存下来,但不显示,想看那个信号时在加上,不然信号全部出来了太乱了 在do文件里写add wave -r *ru ...

  7. nyoj 32 组合数

    组合数 时间限制:3000 ms  |            内存限制:65535 KB 难度:3   描述 找出从自然数1.2.... .n(0<n<10)中任取r(0<r< ...

  8. 使用 Date 和 SimpleDateFormat 类表示时间

    在程序开发中,经常需要处理日期和时间的相关数据,此时我们可以使用 java.util 包中的Date类.这个类最主要的作用就是获取当前时间,我们来看下Date的类的使用: Date d=new Dat ...

  9. WebUploader——一个页面多个实例上传图片

    WebUploader官方例子看的不是很清楚,自己也是费了点劲自己写了一下. 需求:一个单页需要多个实例来上传,一次可上传多张 条件:后台接收C# 首先:引入webuploader     webup ...

  10. android实现倒计时

    前言  在打开爱奇艺等app的欢迎界面的时候,右上角有一个倒计时的控件.倒计时完了以后进入主界面.现在我们来实现这个功能. 方法一 利用java的类Timer,TimerTask还有android的H ...