您的位置:首页 > 移动开发 > Swift

IOS-swift 动画04 CALayer属性动画

2016-05-21 00:20 393 查看
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)
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: