Swiftでアナログ時計

最初はどうやろうか検討も付かなかったアナログ時計。

Androidではアナログ時計を表示するクラスが用意されていたし、
Javascriptでは、既に先駆者のサンプルがありました。

Swiftは・・・?ありません。
かろうじてObjective-Cのサンプルが見つかりました。

以下の記事です。とても参考になりました。
http://an.hatenablog.jp/entry/2014/01/18/003205

そして、swiftで実装してみたのが以下。
Liplisの実際のコードとは違いますが、大方以下のような感じ。

キモは「setClock」メソッドの中身。
分を計算し、そこから画像を回転させる角度を計算します。
最終的には算出した角度で画像を回して終了です。
 

var imgClockBase: UIImageView!      //時計本体画像
var imgClockLongHand: UIImageView!  //時計長針
var imgClockShortHand: UIImageView! //時計短針

/*
    画面要素の初期化
*/
func initView()
{
    // UIImageViewを作成する.
    self.imgClockBase = UIImageView(frame: CGRectMake(0,0,32,32))
    self.imgClockLongHand = UIImageView(frame: CGRectMake(0,0,32,32))
    self.imgClockShortHand = UIImageView(frame: CGRectMake(0,0,32,32))
 
    // 画像をUIImageViewに設定する.
    self.imgClockBase.image = UIImage(named: "ClockBase.png")
    self.imgClockLongHand.image = UIImage(named: "ClockLongHand.png")
    self.imgClockShortHand.image = UIImage(named: "ClockShortHand.png")
 
 
    self.view.addSubview(self.imgClockBase)
    self.view.addSubview(self.imgClockLongHand)
    self.view.addSubview(self.imgClockShortHand)

    self.setClock()
}

/*
時計のセット
*/
func setClock()
{
    //現在日時取得
    let date : LiplisDate = LiplisDate()
 
    imgClockLongHand.image = UIImage(named: "ClockLongHand.png")
    imgClockShortHand.image = UIImage(named: "ClockShortHand.png")
 
    //現在分の計算
    let dblkeikaMin : Double = Double(60 * date.hour! + date.minute!)
    let dblMin : Double = Double(date.minute!)
 
    //角度の計算
    let argHour = CGFloat((2 * M_PI * dblkeikaMin) / (60 * 12))
    let argMin = CGFloat((2 * M_PI * dblMin)/60)
 
    //時計セット
    imgClockShortHand.transform = CGAffineTransformMakeRotation(argHour)
    imgClockLongHand.transform = CGAffineTransformMakeRotation(argMin)
 
}