マイクの答えは素晴らしいです!それを行うもう1つの素晴らしく単純な方法は、drawRectをsetNeedsDisplay()と組み合わせて使用することです。だらしないようですが、そうではありません:-)

上から開始して-90度で270度で終了する円を描画します。円の中心は(centerX、centerY)で、半径は指定されています。CurrentAngleは、minAngle(-90)からmaxAngle(270)までの、円の終点の現在の角度です。
// MARK: Properties
let centerX:CGFloat = 55
let centerY:CGFloat = 55
let radius:CGFloat = 50
var currentAngle:Float = -90
let minAngle:Float = -90
let maxAngle:Float = 270
drawRectでは、円の表示方法を指定します。
override func drawRect(rect: CGRect) {
    let context = UIGraphicsGetCurrentContext()
    let path = CGPathCreateMutable()
    CGPathAddArc(path, nil, centerX, centerY, radius, CGFloat(GLKMathDegreesToRadians(minAngle)), CGFloat(GLKMathDegreesToRadians(currentAngle)), false)
    CGContextAddPath(context, path)
    CGContextSetStrokeColorWithColor(context, UIColor.blueColor().CGColor)
    CGContextSetLineWidth(context, 3)
    CGContextStrokePath(context)
}
問題は、現在、currentAngleが変化していないため、円が静的であり、currentAngle = minAngleのように表示されないことです。
次にタイマーを作成し、そのタイマーが起動するたびにcurrentAngleを増やします。クラスの上部に、2つの火災のタイミングを追加します。
let timeBetweenDraw:CFTimeInterval = 0.01
initに、タイマーを追加します。
NSTimer.scheduledTimerWithTimeInterval(timeBetweenDraw, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
タイマーが作動したときに呼び出される関数を追加できます。
func updateTimer() {
    if currentAngle < maxAngle {
        currentAngle += 1
    }
}
悲しいことに、アプリを実行するとき、再度描画するシステムを指定しなかったため、何も表示されません。これは、setNeedsDisplay()を呼び出すことによって行われます。更新されたタイマー機能は次のとおりです。
func updateTimer() {
    if currentAngle < maxAngle {
        currentAngle += 1
        setNeedsDisplay()
    }
}
_ _ _
必要なすべてのコードはここにまとめられています:
import UIKit
import GLKit
class CircleClosing: UIView {
    // MARK: Properties
    let centerX:CGFloat = 55
    let centerY:CGFloat = 55
    let radius:CGFloat = 50
    var currentAngle:Float = -90
    let timeBetweenDraw:CFTimeInterval = 0.01
    // MARK: Init
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }
    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }
    func setup() {
        self.backgroundColor = UIColor.clearColor()
        NSTimer.scheduledTimerWithTimeInterval(timeBetweenDraw, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
    }
    // MARK: Drawing
    func updateTimer() {
        if currentAngle < 270 {
            currentAngle += 1
            setNeedsDisplay()
        }
    }
    override func drawRect(rect: CGRect) {
        let context = UIGraphicsGetCurrentContext()
        let path = CGPathCreateMutable()
        CGPathAddArc(path, nil, centerX, centerY, radius, -CGFloat(M_PI/2), CGFloat(GLKMathDegreesToRadians(currentAngle)), false)
        CGContextAddPath(context, path)
        CGContextSetStrokeColorWithColor(context, UIColor.blueColor().CGColor)
        CGContextSetLineWidth(context, 3)
        CGContextStrokePath(context)
    }
}
速度を変更する場合は、updateTimer関数、またはこの関数が呼び出される速度を変更するだけです。また、サークルが完了したら、タイマーを無効にすることもできますが、これは忘れていました:-)
注:ストーリーボードにサークルを追加するには、ビューを追加して選択し、そのIdentity Inspectorに移動して、ClassとしてCircleClosingを指定します。
乾杯!bRo