我有这个形状,我在drawRect()中绘制
var rectanglePath = UIBezierPath() override func drawRect(rect: CGRect) { rectanglePath = UIBezierPath(rect: self.bounds) rectanglePath.fillWithBlendMode(kCGBlendModeMultiply,alpha: 0.7) layer.shouldRasterize = true }
当调用prepareForEditing函数时,我想为rectanglePath设置动画.我试过了
func prepareForEditing(editing:Bool){ UIView.animateWithDuration(0.5,animations: { self.rectanglePath = makeNewShape() } ) }
什么都没发生.你能告诉我我的代码有什么问题吗?
要为CGPath设置动画,您不能使用UIView.animation方法.
我创建了自定义UIView子类来向您展示如何为CGPaths形状设置动画,请参考注释并根据您的要求进行修改:
我创建了自定义UIView子类来向您展示如何为CGPaths形状设置动画,请参考注释并根据您的要求进行修改:
class MyView: UIView { let shapeLayer = CAShapeLayer() let maskLayer = CAShapeLayer() var rectanglePath = UIBezierPath() override func didMovetoSuperview() { super.didMovetoSuperview() backgroundColor = UIColor.clear // initial shape of the view rectanglePath = UIBezierPath(rect: bounds) // Create initial shape of the view shapeLayer.path = rectanglePath.cgPath shapeLayer.strokeColor = UIColor.black.cgColor shapeLayer.fillColor = UIColor.clear.cgColor layer.addSublayer(shapeLayer) //mask layer maskLayer.path = shapeLayer.path maskLayer.position = shapeLayer.position layer.mask = maskLayer } func prepareForEditing(editing:Bool){ let animation = CABasicAnimation(keyPath: "path") animation.duration = 2 // Your new shape here animation.tovalue = UIBezierPath(ovalIn: bounds).cgPath animation.timingFunction = camediatimingFunction(name: kcamediatimingFunctionEaSEOut) // The next two line preserves the final shape of animation,// if you remove it the shape will return to the original shape after the animation finished animation.fillMode = kCAFillModeForwards animation.isRemovedOnCompletion = false shapeLayer.add(animation,forKey: nil) maskLayer.add(animation,forKey: nil) } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。