首先說明:這是一系列文章,參考本專題下其他的文章有助於你對本文的理解。
上一片介紹了CAShpeLayer,並且做了兩個示例,如果創造力比較強,就那些東西可以創造出你以前不敢想象的動畫效果。
今天我們接著來講一下CAReplication
CAReplication是一個復制圖層,可以按要求將layer復制出若干份,先來看看在CALayer的基礎上又增加了那些API
·
今天我以一個菊花為例,效果是這樣的Demo
這個可以作為tableView的下拉刷新的效果,當然我比較懶,是用了一個slider代替了tableView下拉的偏移量。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPsv7tcTKtc/Wuf2zzNKyuty88rWlo6zO0sPHvs20tL2o0ru49kNBUmVwbGljYXRvckxheWVysMmhozwvcD4NCjxwcmUgY2xhc3M9"brush:java;">
var replicatorLayer = CAReplicatorLayer()
replicatorLayer.frame = someView.bounds
someView.layer.addSublayer(replicatorLayer)
解釋
同樣someView為storyboard中創建的View
給定大小,並將其添加到someView的layer上
其實這一個菊花是有很多個重復的矩形layer組成的。那麼還需要一個矩形的layer
var instanceLayer = CALayer()
let layerWidth: CGFloat = 10.0
let midX = CGRectGetMidX(someView.bounds) - layerWidth / 2
instanceLayer.frame = CGRect(x: midX, y: 0.0, width: layerWidth, height: layerWidth * 2.5)
instanceLayer.backgroundColor = UIColor.whiteColor().CGColor
replicatorLayer.addSublayer(instanceLayer)
解釋這樣寫到這只是在視圖上放了一個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)
}
解釋添加動畫
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")
}
動畫我就不解釋,想了解動畫的請看本專題下之前的文章