2014-07-22 2 views
3

Я пытаюсь оживить дугу, используя UIBezierPath, когда пользователь нажимает на этот настраиваемый элемент управления. Путь безье просто щелкает вперед без какой-либо анимации.Анимация кругового прогресса с Swift

Причина, по которой я переопределяю drawrect, заключается в том, что я хочу отобразить этот пользовательский элемент управления в построителе интерфейса. Есть ли хороший подход для отображения кругового прогресса в построителе интерфейса и охарактеризовать прогресс?

Вот мой код:

import Foundation 
import UIKit 
import QuartzCore 

@IBDesignable class CircleControl:UIControl { 
    @IBInspectable var progressTotal:CGFloat = 100 

    @IBInspectable var progressCounter:CGFloat = 20 
    { 
    willSet(newProgressCounter) { 
     let animation = CABasicAnimation(keyPath: "strokeEnd") 
     animation.duration = 0.5; 
     animation.toValue = newProgressCounter; 
     animation.delegate = self; 
     layer.addAnimation(animation, forKey: "strokeEnd") 
    } 

    didSet { 
     setNeedsDisplay() 
    } 
    } 

    override func drawRect(rect: CGRect) { 
     let center = CGPointMake(bounds.size.width/2, bounds.size.height/2) 
     let radius = bounds.size.width/2; 
     let pi = CGFloat(M_PI) 
     let sliceAngle:CGFloat = (2 * pi)/progressTotal 

     let progressAngle:CGFloat = sliceAngle * progressCounter 
     let startAngle:CGFloat = CGFloat(-M_PI_2) + sliceAngle 
     let endAngle:CGFloat = startAngle + progressAngle; 

     let path = UIBezierPath() 
     path.addArcWithCenter(center, radius: radius - 5, startAngle: startAngle, endAngle: endAngle, clockwise: true) 
     path.lineWidth = 5 
     path.stroke() 
    } 

    override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) { 
     println("touch") 

     self.progressCounter = 80 
    } 

    override func touchesEnded(touches: NSSet!, withEvent event: UIEvent!) { 
     self.progressCounter = 20 
    } 
} 
+0

Вы пытаетесь анимировать внутри IB? – Jeef

ответ

0

Вы не можете анимировать внутри IB. Возможно, вы сможете сделать это на игровой площадке, но IB предназначен только для макета - это не анимация. Вы должны предварительно просмотреть в тренажере или игровых площадках.