你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS 動畫Animation-4-4: CALayer子類:CAReplicatorLayer

iOS 動畫Animation-4-4: CALayer子類:CAReplicatorLayer

編輯:IOS開發綜合

首先說明:這是一系列文章,參考本專題下其他的文章有助於你對本文的理解。

上一片介紹了CAShpeLayer,並且做了兩個示例,如果創造力比較強,就那些東西可以創造出你以前不敢想象的動畫效果。

今天我們接著來講一下CAReplication
CAReplication是一個復制圖層,可以按要求將layer復制出若干份,先來看看在CALayer的基礎上又增加了那些API

API 描述 instanceCount 重復實例Layer(以下簡稱實例)的個數 instanceDelay 實例持續的時間 instanceTransform 實例動畫 instanceColor 實例顏色 instanceRedOffset 紅色偏移 instanceGreenOffset 綠色偏移 instanceBlueOffset 藍色偏移 instanceAlphaOffset 透明度偏移

·
今天我以一個菊花為例,效果是這樣的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)
解釋
這裡創建的小矩形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")

    }

動畫我就不解釋,想了解動畫的請看本專題下之前的文章

   
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved