時計の針を回転させて今何時か知る Swift

環境

  • Swift
  • Swift3.0
  • Xcode
  • Xcode8
  • UIKit
  • iOS ios10

説明

時計の針に見立てたUIViewをドラッグで回転させ0時〜11時までの時間を算出するアプリです。

実装

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var whattimenow: UILabel!


    var myView: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
        myView = UIView(frame: CGRect(x: 0, y: 0, width: 20, height: 100))
        myView.center = self.view.center
        myView.backgroundColor = UIColor.red;
        self.view.addSubview(myView)

        myView.layer.anchorPoint = CGPoint(x: 0.5, y: 1.0)

        let box = UIView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
        box.backgroundColor = UIColor.blue
        myView.addSubview(box)
    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent!) {

        let touch = touches.first!
        if touch.view === myView.subviews[0] {
            let position = touch.location(in: self.view)
            let inC = CGPoint(x:view.frame.size.width / 2, y:view.frame.size.height / 2)
            var angle = atan2f(Float(position.y - inC.y), Float(position.x - inC.x)) + Float(Double.pi / 2)



            if(angle < 0){

            angle = angle + Float(2 * Double.pi)

            }else if(angle >= Float(2 * Double.pi) ){

            angle = angle - Float(2 * Double.pi)

            }

            let HOUR_RADIUS = (Double.pi / 6)
            let h = (angle / Float(HOUR_RADIUS) ).truncatingRemainder(dividingBy: Float(12))

            print(h)
            whattimenow.text = String(h)
            myView.transform = CGAffineTransform(rotationAngle: CGFloat(angle))
        }
    }
}

実行

on.gif

参考

GitHub

藤沢瞭介(Ryosuke Hujisawa)
  • りょすけと申します。18歳からプログラミングをはじめ、今はフロントエンドでReactを書いたり、AIの勉強を頑張っています。off.tokyoでは、ハイテクやガジェット、それからプログラミングに関する情報まで、エンジニアに役立つ情報を日々発信しています!

ホーム