Skip to content

Instantly share code, notes, and snippets.

@nicolastinkl
Created November 13, 2015 06:52
Show Gist options
  • Save nicolastinkl/bcd2717a483874780da2 to your computer and use it in GitHub Desktop.
Save nicolastinkl/bcd2717a483874780da2 to your computer and use it in GitHub Desktop.
Create ovalInRect Curt round Red to draw
public extension CGFloat {
public func toRadians() -> CGFloat {
return (self * CGFloat(M_PI)) / 180.0
}
public func toDegrees() -> CGFloat {
return self * 180.0 / CGFloat(M_PI)
}
}
private var colorLayer:CALayer = {
return CALayer()
}()
private var layerView : UIView = {
return UIView(frame: CGRectMake(160,400,50,50))
}()
private let kRotationAnimation = "kRotationAnimation"
private let shapeLayer = CAShapeLayer()
private lazy var identityTransform: CATransform3D = {
var transform = CATransform3DIdentity
transform.m34 = CGFloat(1.0 / -500.0)
transform = CATransform3DRotate(transform, CGFloat(-90.0).toRadians(), 0.0, 0.0, 1.0)
return transform
}()
func shapeLayerTest(){
self.view.addSubview(layerView)
shapeLayer.lineWidth = 2.0
shapeLayer.fillColor = UIColor.clearColor().CGColor
shapeLayer.strokeColor = UIColor.redColor().CGColor
shapeLayer.actions = ["strokeEnd" : NSNull(), "transform" : NSNull()]
shapeLayer.anchorPoint = CGPoint(x: 0.5, y: 0.5)
shapeLayer.frame = layerView.bounds
let inset = shapeLayer.lineWidth / 2.0
shapeLayer.path = UIBezierPath(ovalInRect: CGRectInset(shapeLayer.bounds, inset, inset)).CGPath
shapeLayer.strokeEnd = min(0.9 * 100, 0.95) //处理画笔程度
shapeLayer.transform = identityTransform //处理角度
layerView.layer.addSublayer(shapeLayer)
if shapeLayer.animationForKey(kRotationAnimation) != nil { return }
let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation.z")
rotationAnimation.toValue = CGFloat(2 * M_PI) + currentDegree()
rotationAnimation.duration = 1.5
rotationAnimation.repeatCount = Float.infinity
rotationAnimation.removedOnCompletion = false
rotationAnimation.fillMode = kCAFillModeForwards
shapeLayer.addAnimation(rotationAnimation, forKey: kRotationAnimation)
}
private func currentDegree() -> CGFloat {
return shapeLayer.valueForKeyPath("transform.rotation.z") as! CGFloat
}
@nicolastinkl
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment