Xcode
iOS
Swift

【swift】swiftでルーレットを作る

ルーレットが欲しくて作ってみました
↓完成イメージはこのような感じです
ezgif.com-resize.gif

コード

ルーレット画像を回転させて実現。
回転速度を変更する場合は、
rouletteImage.layer.speed = 2.0
の部分を変更します。

// ボタンフラグ
var buttonStartFlg = true

// ボタン
@IBOutlet weak var startButton: UIButton!
// ルーレット画像
@IBOutlet weak var rouletteImage: UIImageView!

// スタートボタンを押した際のIBAction
@IBAction func tapStartButton(_ sender: UIButton) {

    let animation = CABasicAnimation(keyPath: "transform.rotation")
    animation.isRemovedOnCompletion = false
    animation.fillMode = kCAFillModeForwards

    if buttonStartFlg {
        startButton.setImage(UIImage(named: "stop"), for: .normal)
        rouletteImage.layer.speed = 2.0
        animation.toValue = .pi / 2.0
        animation.duration = 0.1
        animation.repeatCount = MAXFLOAT
        animation.isCumulative = true
        rouletteImage.layer.add(animation, forKey: "ImageViewRotation")
        buttonStartFlg = false
    } else {
        startButton.setImage(UIImage(named: "start"), for: .normal)
        let pausedTime = rulletImage.layer.convertTime(CACurrentMediaTime(), from: nil)
        rouletteImage.layer.speed = 0.0
        rouletteImage.layer.timeOffset = pausedTime
        buttonStartFlg = true
    }
}