您好,欢迎访问一九零五行业门户网

iOS 动画Animation-4-4: CALayer子类:CAReplicatorLayer_html/css_WEB-ITnose

首先说明:这是一系列文章,参考本专题下其他的文章有助于你对本文的理解。
上一片介绍了cashpelayer,并且做了两个示例,如果创造力比较强,就那些东西可以创造出你以前不敢想象的动画效果。
今天我们接着来讲一下careplication
careplication是一个复制图层,可以按要求将layer复制出若干份,先来看看在calayer的基础上又增加了那些api
api 描述
instancecount 重复实例layer(以下简称实例)的个数
instancedelay 实例持续的时间
instancetransform 实例动画
instancecolor 实例颜色
instanceredoffset 红色偏移
instancegreenoffset 绿色偏移
instanceblueoffset 蓝色偏移
instancealphaoffset 透明度偏移
·
今天我以一个菊花为例,效果是这样的demo下载
这个可以作为tableview的下拉刷新的效果,当然我比较懒,是用了一个slider代替了tableview下拉的偏移量。
他的实现过程也很简单,我们就创建一个careplicatorlayer吧。
var replicatorlayer = careplicatorlayer()replicatorlayer.frame = someview.boundssomeview.layer.addsublayer(replicatorlayer)
解释
同样someview为storyboard中创建的view
给定大小,并将其添加到someview的layer上 其实这一个菊花是有很多个重复的矩形layer组成的。那么还需要一个矩形的layer
var instancelayer = calayer()let layerwidth: cgfloat = 10.0let midx = cgrectgetmidx(someview.bounds) - layerwidth / 2instancelayer.frame = cgrect(x: midx, y: 0.0, width: layerwidth, height: layerwidth * 2.5)instancelayer.backgroundcolor = uicolor.whitecolor().cgcolorreplicatorlayer.addsublayer(instancelayer)
解释
这里创建的小矩形layer叫instancelayer
将其添加到replicatorlayer上 这样写到这只是在视图上放了一个replicatorlayer,然后又添加了一个矩形layer,接下来就可以开始设置replicatorlayer的属性了
先设定颜色
replicatorlayer.instancecolor = uicolor.graycolor().cgcolor// replicatorlayer.instanceredoffset = 0.0// replicatorlayer.instancegreenoffset = 0.0// replicatorlayer.instanceblueoffset = 0.0// replicatorlayer.instancealphaoffset = 0.0
解释
颜色偏移量自己尝试着调一下,看看有什么变化 在storyboard上创建一个slider,用拖线的方式生成一个势力的人的方法
@ibaction func slider(sender: uislider) { let count: int = int(sender.value * 30) replicatorlayer.instancecount = count if sender.value == 1 { replicatorlayer.instancedelay = cftimeinterval(1.0 / double(count)) addanimation() }else{ if faderanimation != nil { instancelayer.opacity = 1.0 instancelayer.removeanimationforkey(fader) } } replicatorlayer.instancetransform = catransform3dmakerotation(cgfloat(float(m_pi * 2.0) * sender.value / float(count)), 0.0, 0.0, 1.0) }
解释
设置instanccount根据slider的值发生变化,int类型
持续1秒,cftimeinterval类型,在这里代表的是生成count个layer所需要的时间
在slider的值不为1.0的时候,将动画去除,并且不透明度设为1
instancetransform,设置动画,上面是3d动画绕z轴旋转的角度 添加动画
func addanimation() { faderanimation = cabasicanimation(keypath: opacity) faderanimation.fromvalue = 1.0 faderanimation.tovalue = 0.0 faderanimation.duration = 1 faderanimation.repeatcount = float(int.max) instancelayer.opacity = 0.0 instancelayer.addanimation(faderanimation, forkey: fader) }
动画我就不解释,想了解动画的请看本专题下之前的文章
其它类似信息

推荐信息