UIScrollViewDelegateの用途
そもそもUIScrollViewDelegateは何のために使われるのでしょうか?よくUITableViewControllerを利用しているアプリでNavigationBarやToolBarがスクロールに応じて表示/非表示されるものがありますが、そのようにスクロールのイベントに応じて何かしらのアクションを実行したい場合に利用出来ます。
UIScrollViewDelegateプロトコル
UIScrollViewDelegateには大きく- スクロール、ドラッグ関連のメソッド
- ズーム管理に関するメソッド
メソッド名 | 通知タイミング |
---|---|
- (void)scrollViewDidScroll:(UIScrollView *)scrollView | スクロールが発生すると呼び出される。スクロール中は常に呼び出されます。 |
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView | ステータスバーをタップしてViewの先頭にスクロールが発生する前に呼び出される ※本メソッドには戻り値がありYESを返却するとスクロールが発生して、もしNOを返却した場合はスクロールが発生しません。 |
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView | ステータスバーをタップして先頭にスクロールが完了した後に呼び出される。 |
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView | ドラッグしてスクロールが発生する直前に呼び出される。 |
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate | ドラッグ完了後に呼び出される。慣性スクロールしていてもドラッグを止めた時点で呼び出されます。 |
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView | スクロールが発生して、慣性スクロールの減速が始まる直前に呼び出される。ほぼドラッグ完了後の通知と同じタイミングで通知されます。(こちらの通知が若干遅い) |
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView | 慣性スクロールの減速が止まった時。つまりスクロールが停止した時に呼び出されます。 |
UIScrollViewDelegateの設定
TableViewの場合はUITableViewDelegateがUIScrollViewDelegateを採用しているので、UITableVIewDelegateを設定することで同時にUIScrollviewDelegateを設定することになります。以下UITableViewControllerの実装クラスでdelegateを設定する場合の例です。UITableViewのdelegateに設定します。
//scrollview delegate self.tableView.delegate = (id)delegate;コードの詳細は以下のサンプルアプリのソースコードをGitHubにあげているので、そちらを参照して下さい。
UIScrollViewDelegateの通知タイミングを知らせるサンプル・アプリケーション
UIScrollViewDelegateを採用して通知タイミングを知らせるサンプルアプリを作りました。各メソッドが呼び出されると呼び出されたタイミングでインジケータが光るようなアプリです。 微妙な通知タイミングがこのアプリで分かると思います。(スクリーンショットじゃ分からないと思いますので、ダウンロードしてお試し下さい)
以下スクリーンショット。
以下にソースコードを公開しているので、コード等参考にして下さい。
UIScrollViewDelegateIndicator on GitHub.
0 件のコメント :
コメントを投稿