時計の針を回転させて今何時か知る 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))
}
}
}