循环进度条帮助,Swift编程语言

时间:2014-10-24 09:01:18

标签: ios iphone xcode swift xcode6

我试图在swift中创建一个小型循环进度条,

这是我到目前为止所拥有的

 private var Timer:CGFloat = 100;

 override func update(currentTime: CFTimeInterval) 
 {
    /* Called before each frame is rendered */
    var StartAngle:CGFloat!
    var EndAngle:CGFloat!

    var circleTimer:UIBezierPath!

    StartAngle = CGFloat(M_PI * 1.5)
    EndAngle = StartAngle + CGFloat((M_PI * 2))

    var Progress:CGFloat = (EndAngle - StartAngle) * (Timer / 100) + StartAngle

    circleTimer.addArcWithCenter(CGPointMake(200, 200), radius: CGFloat(130), startAngle: StartAngle, endAngle: Progress, clockwise: true)

    Timer--;
}

运行App时出现此错误

" BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)"

在这一行

" circleTimer.addArcWithCenter(CGPointMake(200,200),radius:CGFloat(130),startAngle:StartAngle,endAngle:Progress,顺时针:true)"

我对Swift相当陌生(用其他语言编程),我似乎无法解决这个问题。

由于 路加

1 个答案:

答案 0 :(得分:2)

您尚未初始化circleTimer,因此circleTimer为零。您应首先将其初始化而不是调用

circleTimer.addArcWithCenter(CGPointMake(200, 200), radius: CGFloat(130), startAngle: StartAngle, endAngle: Progress, clockwise: true)

使用路径初始化

var circleTimer:UIBezierPath! = UIBezierPath()

也在draw rect

中写这个
 override func drawRect(rect: CGRect) {

    /* Called before each frame is rendered */
    var StartAngle:CGFloat!
    var EndAngle:CGFloat!

    var circleTimer:UIBezierPath! = UIBezierPath()
    StartAngle = CGFloat(M_PI * 1.5)
    EndAngle = StartAngle + CGFloat((M_PI * 2))

    var Progress:CGFloat = (EndAngle - StartAngle) * (Timer / 100) + StartAngle

     //Test this working fine
    //circleTimer.addArcWithCenter(CGPointMake(50, 50), radius: CGFloat(130), startAngle: 0.0, endAngle: Progress, clockwise: true)

    circleTimer.addArcWithCenter(CGPointMake(200, 200), radius: CGFloat(130), startAngle: StartAngle, endAngle: Progress, clockwise: true)

    Timer--;
    circleTimer.lineWidth = 20;
    UIColor.redColor().setStroke()
    circleTimer.stroke()
}
相关问题