Created
November 13, 2015 06:52
-
-
Save nicolastinkl/bcd2717a483874780da2 to your computer and use it in GitHub Desktop.
Create ovalInRect Curt round Red to draw
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} |
Author
nicolastinkl
commented
Nov 13, 2015
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment