我正在使用bezierPathByReversingPath()尝试制作动画圈。我终于找到了一种可以使用的方法,但是我在没有被“删除”的圆圈上看到了这个条。

代码:

@IBDesignable class circle: UIView {

    override func drawRect(rect: CGRect) {
        let center = CGPoint(x:bounds.width/2, y: bounds.height/2)

        let circlePath : UIBezierPath = UIBezierPath(arcCenter: center, radius:
            CGFloat(250), startAngle: CGFloat(0), endAngle: CGFloat(360), clockwise: true)
        let circlePath2 : UIBezierPath = UIBezierPath(arcCenter: center, radius:
            CGFloat(200), startAngle: CGFloat(0), endAngle: CGFloat(360), clockwise: true)

        circlePath.appendPath(circlePath2.bezierPathByReversingPath())
        circlePath.fill() //appendPath(circlePath.bezierPathByReversingPath())
    }
}

图片

ios - Swift:UIBezierPath bezierPathByReversingPath()问题-LMLPHP

附言如果您想举例说明我在做什么,那是iOS游戏“Dulp”中的成功/失败动画。

最佳答案

这是因为UIBezierPath(arcCenter: center, radius: CGFloat(250), startAngle: CGFloat(0), endAngle: CGFloat(360), clockwise: true)接受的是弧度,而不是您在此处指定的度。

因此,需要以弧度提供参数。

我创建了一个简单的函数,将度数转换为弧度。结果证明还不错。

这是函数:

func degreesToRadians(degree : Int) -> CGFloat
{
    return CGFloat(degree) * CGFloat(M_PI) / 180.0
}

用法:
let circlePath : UIBezierPath = UIBezierPath(arcCenter: center, radius: 250.0, startAngle: self.degreesToRadians(0), endAngle:
                                             self.degreesToRadians(360), clockwise: true)

let circlePath2 : UIBezierPath = UIBezierPath(arcCenter: center, radius: 200.0, startAngle: self.degreesToRadians(0), endAngle:
                                              self.degreesToRadians(360), clockwise: true)

或者可以创建一个协议扩展:
extension Double
{
    var degreesToRad : CGFloat
    {
        return CGFloat(self) * CGFloat(M_PI) / 180.0
    }
}

用法:
let circlePath : UIBezierPath = UIBezierPath(arcCenter: center, radius: 250.0, startAngle: 0.0.degreesToRad , endAngle: 360.0.degreesToRad, clockwise: true)

let circlePath2 : UIBezierPath = UIBezierPath(arcCenter: center, radius: 200.0, startAngle: 0.0.degreesToRad, endAngle: 360.0.degreesToRad, clockwise: true)

关于ios - Swift:UIBezierPath bezierPathByReversingPath()问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35075027/

10-13 03:53