LiplisDevDiary/2015-05-12
Last-modified:
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) }