UIRefreshControlの代わりになるSwfitRefresherを作った!

January 01, 2016

SwiftRefresherというライブラリを作りました! UIRefreshControlのように引っ張って更新ができるライブラリです。このライブラリは一つの大きな問題を解決し、一つのデベロッパーの自由を拡張する特徴を備えています!

Refresher

問題の解決: UIViewControllerの中のUITableViewにおいても綺麗に動く

UIRefreshControlはUITableViewControllerで使うと、意図した通り綺麗に動きます。しかし、UITableViewControllerをそのまま使うことは少なく、実際は、UIViewControllerの上にUITableViewを置いて使うことになります。UIRefreshControlはUITableViewControllerで使うことが想定されており、UITableView上で使うことはできるけれども、たくさん引っ張らないとRefreshのイベントが発動しなかったり回転しないActivityIndicatorが最初から見えてしまっていたり、不自然な挙動になります。

SwiftRefresherはこの問題を解決します。UITableView上に単独でおいても意図したように綺麗に動きます。指定した高さ(デフォルトでは44px)を超えた時に指を離すとRefreshのイベントが走ります。

自由の拡張: Refresherのビュー単位でのカスタマイズができる

SwiftRefresherでは、Refresherのビュー単位でのカスタマイズが出来ます。SwfitRefresherEventReceivableプロトコルに準拠したUIViewのサブクラスをRefresherに渡すことで、プル状態、ローディング状態などに応じて見た目をカスタマイズできます。SwfitRefresherEventReceivableに準拠するとdidReceiveEventのメソッドを書く必要があります。これはRefresherのデリゲートになっています。下記のコード例はライブラリのデフォルトで使っているビューでの実装です。

public func didReceiveEvent(event: SwiftRefresherEvent) { switch event { case .Pull: pullingImageView.hidden = false case .StartRefreshing: pullingImageView.hidden = true activityIndicatorView.startAnimating() case .EndRefreshing: activityIndicatorView.stopAnimating() case .RecoveredToInitialState: break } }

このようにイベントに応じて自身のビューの見た目を変えることにより自由にRefresherの見た目をカスタマイズすることができます。

SwiftRefresher0.9.0

SwiftRefresherは現在0.9.0です。まだ出来たばかりですが、Refresherの問題点を解消し、さらに自由な拡張ができるようになっています。是非、使ってみてください。


Profile picture

Written by morizotter who lives and works in Tokyo building useful things. You should follow them on Twitter