Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Swift中为绘制饼图设置动画_Ios_Swift_Core Animation - Fatal编程技术网

Ios 在Swift中为绘制饼图设置动画

Ios 在Swift中为绘制饼图设置动画,ios,swift,core-animation,Ios,Swift,Core Animation,我试图在代码中设置一个“饼”形的动画,从一个完整的圆开始,然后以一个空的圆结束,每一步都要一次平滑地设置一块“饼”的动画,如下所示: 我创建的形状如下: func drawOval() { let newOvalPath = UIBezierPath() let ovalRect = CGRect(x: 0, y: 0, width: 100, height: 100) newOvalPath.addArcWithCenter(CGPoint(x: ovalRec

我试图在代码中设置一个“饼”形的动画,从一个完整的圆开始,然后以一个空的圆结束,每一步都要一次平滑地设置一块“饼”的动画,如下所示:

我创建的形状如下:

func drawOval() {

    let newOvalPath = UIBezierPath()
    let ovalRect = CGRect(x: 0, y: 0, width: 100, height: 100)

    newOvalPath.addArcWithCenter(CGPoint(x: ovalRect.midX, y: ovalRect.midY), radius: ovalRect.width / 2, startAngle: -10 * CGFloat(M_PI)/180, endAngle: -90 * CGFloat(M_PI)/180, clockwise: true)
    newOvalPath.addLineToPoint(CGPoint(x: ovalRect.midX, y: ovalRect.midY))
    newOvalPath.closePath()

    MyStyleKit.instance.ovalPath = newOvalPath

}

然后,我尝试根据NSTimer设置过渡动画,每秒钟调用一次此函数:

func updateOval() {

    startAngle += 30

    let newOvalPath = UIBezierPath()
    let ovalRect = CGRect(x: 0, y: 0, width: 100, height: 100)

    newOvalPath.addArcWithCenter(CGPoint(x: ovalRect.midX, y: ovalRect.midY), radius: ovalRect.width / 2, startAngle: startAngle * CGFloat(M_PI)/180, endAngle: -90 * CGFloat(M_PI)/180, clockwise: true)
    newOvalPath.addLineToPoint(CGPoint(x: ovalRect.midX, y: ovalRect.midY))
    newOvalPath.closePath()

    MyStyleKit.instance.ovalPath = newOvalPath
    MyStyleKit.instance.drawCircle()
    self.drawView.setNeedsDisplay()

}

问题是圆没有动画,它只是从一个角度突然改变到另一个角度。如何从一个位置到下一个位置平滑地设置动画?

因为我可以看到你每秒改变30度的角度。这就是为什么不能获得平滑动画。尝试每毫秒刷新视图1/30度,您将获得更加平滑的动画,因为我可以看到您每秒将角度更改30度。这就是为什么不能获得平滑动画。尝试每毫秒刷新视图1/30度,您将获得更加平滑的动画

屏幕以60帧/秒的速度刷新,即每16毫秒刷新一次。告诉某人每毫秒刷新几次没有多大意义。屏幕以每秒60帧的速度刷新,即每1600毫秒刷新一次。告诉某人每毫秒刷新一次这几次并没有多大意义。
func updateOval() {

    startAngle += 30

    let newOvalPath = UIBezierPath()
    let ovalRect = CGRect(x: 0, y: 0, width: 100, height: 100)

    newOvalPath.addArcWithCenter(CGPoint(x: ovalRect.midX, y: ovalRect.midY), radius: ovalRect.width / 2, startAngle: startAngle * CGFloat(M_PI)/180, endAngle: -90 * CGFloat(M_PI)/180, clockwise: true)
    newOvalPath.addLineToPoint(CGPoint(x: ovalRect.midX, y: ovalRect.midY))
    newOvalPath.closePath()

    MyStyleKit.instance.ovalPath = newOvalPath
    MyStyleKit.instance.drawCircle()
    self.drawView.setNeedsDisplay()

}