アナログ時計が毎秒ごとに更新されない
アナログ時計を作ろうとしています。長針短針秒針を生成し現在時刻を元にその角度を調整するところまではできたのですが、毎秒ごとに更新されず止まったままの時計になってしまっています。どうしたら本来の時計らしく毎秒毎秒秒針が動いて正確な時間を知らせてくれるようになるでしょうか。
以下親クラスのコードです。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
以下サブクラスのコードです。
import UIKit
class Line: UIView {
var sHand = UIBezierPath()
var mHand = UIBezierPath()
var hHand = UIBezierPath()
func setTheClock()
{
let cal = Calendar(identifier: .gregorian)
let now = Date()
let ss = Double(cal.component(.second, from: now))
let mm = Double(cal.component(.minute, from: now))
let hh = (Double(cal.component(.hour, from: now)) + mm/60).truncatingRemainder(dividingBy: 12)
let sRad = .pi*ss/30
let mRad = .pi*mm/30
let hRad = .pi*hh/6
sHand.move(to: CGPoint(x: 100, y: 100))
sHand.addLine(to: CGPoint(x: 100 + 100*sin(sRad), y: 100 - 100*cos(sRad)))
UIColor.yellow.setStroke()
sHand.lineWidth = 0.5
sHand.stroke()
mHand.move(to: CGPoint(x: 100, y: 100))
mHand.addLine(to: CGPoint(x: 100 + 80*sin(mRad), y: 100 - 80*cos(mRad)))
UIColor.blue.setStroke()
mHand.lineWidth = 1
mHand.stroke()
hHand.move(to: CGPoint(x: 100, y: 100))
hHand.addLine(to: CGPoint(x: 100 + 60*sin(hRad), y: 100 - 60*cos(hRad)))
UIColor.red.setStroke()
hHand.lineWidth = 2
hHand.stroke()
}
override func draw(_ rect: CGRect)
{
setTheClock()
_ = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(setTheClock), userInfo: nil, repeats: true)
}
}