尝试在按钮单击时重新启动UIBezierPath

时间:2015-01-26 15:07:25

标签: ios swift uibezierpath

我试图通过点击按钮重新启动UIBezierPath。

我试着玩弄不透明度。

基本上,我有3个箭头可以在动画中绘制,然后如果用户点击动画按钮,我希望它们重新制作动画。

这是我绘制箭头的原因:

func animateArrow(firstPoint: CGPoint, endPoint:CGPoint) {

    let arrow = UIBezierPath.bezierPathWithArrowFromPoint(firstPoint, endPoint: endPoint, tailWidth: 7.5, headWidth: 15, headLength: 15)

    let arrowPath = CAShapeLayer()

    arrowPath.path = arrow.CGPath
    arrowPath.fillColor = UIColor.whiteColor().CGColor
    arrowPath.strokeColor = UIColor.blackColor().CGColor

    let opacityAnim = CABasicAnimation()
    opacityAnim.keyPath = "opacity"
    opacityAnim.fromValue = NSNumber(float: 0.0)
    opacityAnim.toValue = NSNumber(float: 0.7)
    opacityAnim.duration = 1.0

    arrowPath.addAnimation(opacityAnim, forKey: "opacity")
    arrowPath.opacity = 0.7

    self.view.layer.addSublayer(arrowPath)

}

这是动画部分:

        dispatch_after(time, dispatch_get_main_queue(), {
            self.colorize(labelArray[b.toInt()!], color:self.cyan)
            self.animateArrow(pointArray[a.toInt()!], endPoint: pointArray[b.toInt()!])
        })
        dispatch_after(time2, dispatch_get_main_queue(), {
            self.colorize(labelArray[c.toInt()!], color:self.cyan)
            self.animateArrow(pointArray[b.toInt()!], endPoint: pointArray[c.toInt()!])
        })
        dispatch_after(time3, dispatch_get_main_queue(), {
            self.colorize(labelArray[d.toInt()!], color:self.red)
            self.animateArrow(pointArray[c.toInt()!], endPoint: pointArray[d.toInt()!])
            self.animateButton.enabled = true
        })

1 个答案:

答案 0 :(得分:0)

您可以通过从按钮点击事件中的视图中删除sublayer来清除您添加的所有子图层。

请确保在单独的叠加视图中绘制路径,而不是包含按钮和其他UI的基础视图。如果在主视图中使用下面的代码,UIView图层也将被删除。

func clicked (button:UIButton) {
    for layer in viewToClear.layer.sublayers as [CALayer]
    {
        layer.removeFromSuperlayer()
    }
}