アナログ時計を描画してみた（swift）

#はじめに
objective-cでつくったはいいけど**使っていない**クラスをswiftに書き換えてgithubにあげてみたので、そのクラスについて紹介したいと思います。自分はまだ使う場面がない（今のところ思いつかない）ので、あわよくばだれかに使ってもらえたらいいなと思います。

2019/04/21 せっかくなんでswift5.0対応しました
2019/10/16 せっかくなんでSwiftPM対応しました

#GitHub
今回はこちらの２つのクラスについて紹介します。

* [AMClockView](https://github.com/adventam10/AMClockView)
* [AMNowClockView](https://github.com/adventam10/AMNowClockView)

#見た目
##AMClockView

![amclock.gif](https://qiita-image-store.s3.amazonaws.com/0/225999/fa935f67-2095-53dc-ecff-c224b499e6ed.gif)

##AMNowClockView

![amnowclock.gif](https://qiita-image-store.s3.amazonaws.com/0/225999/d3c5da42-9381-65d5-3be6-45c4d1da8690.gif)

#機能
##AMClockView
アナログ時計の針を動かして時間を設定するためのView

* 文字盤、枠線、時刻の文字、目盛り、長針、短針などの色の設定ができる
* 文字盤、長針、短針の画像の設定ができる

##AMNowClockView
現在時刻をアナログ時計で表示するためのView

* AMClockView同様、色や画像の設定ができる
* タイムゾーンの設定ができる（ver.2.1から）

#使い方
##AMClockView
1. xibにカスタムクラスを設定  
<img width="260" alt="amclock_customclass.png" src="https://qiita-image-store.s3.amazonaws.com/0/225999/b28f4488-8dd1-fcca-5402-0ae06280b19f.png">

2. 線の太さ、色や文字盤、針の画像などを設定  
<img width="259" alt="amclock_inspectable.png" src="https://qiita-image-store.s3.amazonaws.com/0/225999/b06b9c99-e4f2-d598-5def-393712805837.png">

3. 初期表示時刻を設定する  

	```swift
	@IBOutlet weak var clockView: AMClockView!
	clockView.selectedDate = Date()
	```
	nilもしくは未設定の場合は現在日時になります。
4. delegateを設定する
 
	```swift
	@IBOutlet weak var clockView: AMClockView!
	clockView.delegate = self
	```
	
	長針、短針を動かすたびに下記デリゲートで設定日時を取得する

	```swift
	func clockView(_ clockView:AMClockView, didChangeDate date:Date)
	```
	文字盤上の小さい円の内側のパンジェスチャで短針が動き、外側のジェスチャで長針が動きます。
	
設定の変更で下記のように様々な時計を表示できます。

<img width="373" alt="amclock.png" src="https://qiita-image-store.s3.amazonaws.com/0/225999/18b570f5-e348-1f0f-36eb-827a7ad37253.png">

##AMNowClockView
AMClockViewと設定方法はほぼ同じです。

違いは秒針の設定があるのとdelegateがないことくらいです。

#つくったきっかけ
##AMClockView
iOSで時間設定を行う場合はDatePickerを使うことになると思いますが、何か他に設定する方法ないかなと思いつくってみました。
##AMNowClockView
AMClockViewのついでにつくりました。

#使わなかった理由
##AMClockView
1. 使い方がわかりにくい  
文字盤上の小さい円の内側ジェスチャで短針を動かし、外側のジェスチャで長針を動かすようになっているが、初見のユーザにはまずわからない。つくるならAndroidの時計([Android TimePicker with Example](http://tutlane.com/tutorial/android/android-timepicker-with-examples))のようにすべきだったかもしれない。
2. 場所をとる  
パンジェスチャにより針を動かすため、快適に使おうと思うとある程度の大きさが必要になる。

##AMNowClockView
現在時刻はステータスバーに表示されているので、わざわざコイツを使って表示する必要がない。

#さいごに
以上の理由から今のところは使用していませんが、もしかしたら今後使う場面があるかもしれません（もしくは思いつくかもしれない）。現在時刻を表示したいときってどういうときだろう...

私はほぼObjective-Cしか使ったことがないペーペーのプログラマーなので記事内容やgithubのコードにおかしなところがあればご指摘いただければ幸いです。

#つくったのまとめ
* [アナログ時計を描画してみた（swift）](https://qiita.com/am10/items/0222e6966d58062d2eca)
* [スピードメーターをつくってみた（swift）](https://qiita.com/am10/items/0fe8cffac7dd7659eb2a)
* [めくるカレンダーをつくってみた(swift)](https://qiita.com/am10/items/2a929ca8196f33cb1d4a)
* [グラフを描画してみた(swift)](https://qiita.com/am10/items/aee964a8a7a9712d66f8#_reference-ca2e5485de5acf8eca97)
* [ちからわざで日本地図を描いてみた(swift)](https://qiita.com/am10/items/26de3242ee33b4bd4aae)
* [カラーピッカーをつくってみた(swift)](https://qiita.com/am10/items/82a4adb2267979841c9e)
* [面積比がそれっぽいベン図を描いてみた(swift)](https://qiita.com/am10/items/858041f70be4d8de5090)
* [UIViewを燃やしてみた（swift）](https://qiita.com/am10/items/f7b32ea5725feeb1469f)

##動作確認用にまとめたプロジェクト
* [Carthageで入れたやつ](https://github.com/adventam10/TestCarthage)
* [CocoaPodsで入れたやつ](https://github.com/adventam10/TestCocoaPods)
* [SwiftPMで入れたやつ](https://github.com/adventam10/TestSwiftPM)