我一直在用
Swift制作一个简单的UIBezierPath动画.该路径包括创建带有彩色边框的圆角矩形.动画必须是彩色边框的绘图.为此,我创建了一个带有UIBezierPath(roundedRect :,cornerRadius:)的CAShapeLayer
let layer = CAShapeLayer() var viewPrueba = UIView() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view,typically from a nib. viewPrueba = UIView(frame: CGRectMake(self.view.frame.width/2-100,self.view.frame.height/2 - 100,200,200)) self.view.addSubview(viewPrueba) let path = UIBezierPath(roundedRect: CGRectMake(0,200),cornerRadius: 40.0) layer.path = path.CGPath layer.fillColor = UIColor.clearColor().CGColor layer.strokeColor = UIColor.blueColor().CGColor layer.strokeStart = 0.0 layer.strokeEnd = 0.0 layer.lineWidth = 4.0 layer.lineJoin = kCALineJoinRound viewPrueba.layer.addSublayer(layer) let tapGR = UITapGestureRecognizer(target: self,action: #selector(ViewController.anim)) self.view.addGestureRecognizer(tapGR) } func anim() { let anim1 = CABasicAnimation(keyPath: "strokeEnd") anim1.fromValue = 0.0 anim1.toValue = 1.0 anim1.duration = 4.0 anim1.repeatCount = 0 anim1.autoreverses = false anim1.removedOnCompletion = false anim1.additive = true anim1.fillMode = kCAFillModeForwards self.layer.addAnimation(anim1,forKey: "strokeEnd") }`
它工作得很好唯一的问题是动画从广场的左上角开始,而不是从顶部中心开始.我怎样才能做到这一点?
为了实现这一点,我发现唯一的事情是用一个圆圈而不是一个矩形,这不是我们想要的.
谢谢
解决方法
CoreAnimate动画与UIBezierPath绘制的顺序相同.
系统方法
系统方法
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius;
返回从左上方绘制的UIBezierPath,因此您的动画从左上角开始.
但是您可以创建自己的UIBezierPath绘制表格中心:
func centerStartBezierPath(frame:CGRect,cornerRadius:CGFloat) -> UIBezierPath { let path = UIBezierPath() path.moveToPoint(CGPointMake(frame.width/2.0,0)) path.addLineToPoint(CGPointMake(frame.width-cornerRadius,0)) path.addArcWithCenter(CGPointMake(frame.width-cornerRadius,cornerRadius),radius: cornerRadius,startAngle: CGFloat(-M_PI/2),endAngle: 0,clockwise: true) path.addLineToPoint(CGPointMake(frame.width,frame.height-cornerRadius)) path.addArcWithCenter(CGPointMake(frame.width-cornerRadius,frame.height-cornerRadius),startAngle: 0,endAngle: CGFloat(M_PI/2),clockwise: true) path.addLineToPoint(CGPointMake(cornerRadius,frame.height)) path.addArcWithCenter(CGPointMake(cornerRadius,startAngle: CGFloat(M_PI/2),endAngle: CGFloat(M_PI),clockwise: true) path.addLineToPoint(CGPointMake(0,cornerRadius)) path.addArcWithCenter(CGPointMake(cornerRadius,startAngle: CGFloat(M_PI),endAngle: CGFloat(M_PI*3/2),clockwise: true) path.closePath() path.applyTransform(CGAffineTransformMakeTranslation(frame.origin.x,frame.origin.y)) return path; }
它的工作原理如下:您也可以更改代码,并从任何点开始.