IOS-swift 动画04 CALayer属性动画

CALayer 属性动画
新建layer 集成自CALayer 并定义属性 通过修改属性进行动画的执行
这一块比较简单就直接上代码了
DMEO效果
*图片传不上去...明天补上.*

//
//  DSProgressLayer.swift
//  AnimationStd
//
//  Created by 鲍东升 on 16/5/20.
//  Copyright © 2016年 鲍东升. All rights reserved.
//

import UIKit

class DSProgressLayer: CAShapeLayer {

    //MARK: - PropertyList
    var progress:CGFloat = 0
    var i_progress:CGFloat{
        set{
            self.progress = newValue
            self.setAnimatiion(self.progress, layer: self.pointerLayer)
        }
        get{
            return self.progress
        }
    }

    private lazy var pointerLayer:CAShapeLayer={
        var val=CAShapeLayer()
        return val
    }()


    //MARK: - Func
    override init() {
        super.init()
        self.prepareLayer(self,pointerLayer: pointerLayer)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    //MARK: - CustomFunc

    func prepareLayer(layer:CAShapeLayer,pointerLayer:CAShapeLayer) -> CAShapeLayer {

        layer.bounds = CGRect(x: 0, y: 0, width: 200, height: 200)
        layer.path = UIBezierPath(ovalInRect: layer.bounds).CGPath
        layer.fillColor = UIColor.clearColor().CGColor
        layer.strokeColor = UIColor.orangeColor().CGColor
        layer.lineWidth = 4

        pointerLayer.path = UIBezierPath(rect: CGRectMake(-2, -97,4, 97)).CGPath
        pointerLayer.fillColor = UIColor.cyanColor().CGColor
        pointerLayer.position = CGPoint(x: layer.bounds.size.width/2, y: layer.bounds.size.width/2)
        layer.addSublayer(pointerLayer)

        return layer
    }

    func setAnimatiion(progress:CGFloat,layer:CAShapeLayer) -> CAShapeLayer {
        layer.setAffineTransform(CGAffineTransformMakeRotation(progress * 2.0 * CGFloat(M_PI)))
        return layer
    }
}
//
//  ViewController.swift
//  LayerAnimation
//
//  Created by 鲍东升 on 16/5/20.
//  Copyright © 2016年 鲍东升. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    //MARK: - PropertyList

    var sliderValueChangeBlock:((slider:UISlider)->())?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        prepareView(view)
    }

    func prepareView(view:UIView) -> UIView {

        configLayer(view,layer:DSProgressLayer(),done:
            {
                (layer:DSProgressLayer)->()
                in
                self.configSlider(
                    UISlider(frame: CGRect(x: layer.frame.origin.x, y: 420, width: layer.frame.width, height: 20)),
                    layer: layer,done: {
                        (slider:UISlider)->()
                        in
                        view.addSubview(slider)
                })
            }
        )
        return view
    }

    func configLayer(view:UIView,layer:DSProgressLayer,done:((layer:DSProgressLayer)->()) ){
        view.layer.addSublayer(layer)
        layer.frame = CGRect(x: UIScreen.mainScreen().bounds.width/2 - 100, y: 200, width: 200, height: 200)
        done(layer: layer)
    }

    func configSlider(slider:UISlider,layer:DSProgressLayer,done:(slider:UISlider)->()){
        slider.addTarget(self, action: #selector(self.actionSliderValueChange(_:)), forControlEvents: UIControlEvents.ValueChanged)
        sliderValueChangeBlock = {
            (slider:UISlider)->()
            in
            layer.i_progress = CGFloat(slider.value)
        }

        func impSliderValueChange(slider:UISlider){
            layer.i_progress = CGFloat(slider.value)
        }

        done(slider: slider)
    }

    func actionSliderValueChange(slider:UISlider){
        if (sliderValueChangeBlock != nil) {
            sliderValueChangeBlock!(slider: slider)
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值