class LoadingView: UIView {
// 主layer
var shapeLayer:CAShapeLayer!
// 圆形layer
var layer1:CAShapeLayer!
override func awakeFromNib() {
super.awakeFromNib()
setUI()
}
override init(frame: CGRect) {
super.init(frame: frame)
setUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutSubviews() {
super.layoutSubviews()
shapeLayer.frame = self.bounds
// 创建梯形layer
let leftLayer = CAGradientLayer()
leftLayer.frame = CGRect.init(x: 0, y: 0, width: self.frame.size.width / 2, height: self.frame.size.width)// CGRectMake(0, 0, 240, 120)
leftLayer.colors = [UIColor.init(white: 1, alpha: 0.5).cgColor, UIColor.init(white: 1, alpha: 1).cgColor]
leftLayer.startPoint = CGPoint.init(x: 0, y: 0)// CGPointMake(0, 0.5)
leftLayer.endPoint = CGPoint.init(x: 0, y: 1)//CGPointMake(1, 0.5)
shapeLayer.addSublayer(leftLayer)
let rightLayer = CAGradientLayer()
rightLayer.frame = CGRect.init(x: self.frame.size.width / 2, y: 0, width: self.frame.size.width / 2, height: self.frame.size.width)// CGRectMake(0, 120, 240, 120)
rightLayer.colors = [UIColor.init(white: 1, alpha: 0.6).cgColor, UIColor.init(white: 1, alpha: 0).cgColor]
rightLayer.startPoint = CGPoint.init(x: 0, y: 0)// CGPointMake(0, 0.5)
rightLayer.endPoint = CGPoint.init(x: 0, y: 1)// CGPointMake(1, 0.5)
shapeLayer.addSublayer(rightLayer)
// 创建一个圆形layer
layer1 = CAShapeLayer()
layer1.frame = self.bounds
layer1.path = UIBezierPath(arcCenter: CGPoint.init(x: self.frame.size.width / 2, y: self.frame.size.width / 2), radius: self.frame.size.width / 2 - 2, startAngle: 0, endAngle: 2 * CGFloat(Double.pi), clockwise: true).cgPath
layer1.lineWidth = 2
layer1.lineJoin = CAShapeLayerLineJoin.round
layer1.strokeColor = UIColor.black.cgColor
layer1.fillColor = UIColor.clear.cgColor
layer1.strokeEnd = 1
// 根据laery1 的layer形状在 shaperLayer 中截取出来一个layer
shapeLayer.mask = layer1
}
func setUI() {
shapeLayer = CAShapeLayer()
self.layer.addSublayer(shapeLayer)
}
var isAnimated: Bool = false
/**
旋转动画
*/
func startLoading() {
if isAnimated {
return
}
isAnimated = true
let animation = CABasicAnimation(keyPath: "transform.rotation.z")
animation.isRemovedOnCompletion = false
animation.fromValue = 2 * Double.pi
animation.toValue = 0
animation.duration = 1.25
animation.repeatCount = HUGE
self.layer.add(animation, forKey: "")
}
func endLoading() {
isAnimated = false
self.layer.removeAllAnimations()
}
}
网友评论