UIScrollViewで表示を任意の座標に吸着させる方法

今回はUIScrollViewで表示を任意の座標に吸着させる方法を記していきます。

「あれ、"UIScrollView.pagingEnabled = YES"とすればよくない?」と思うかもしれませんが、

それだとスクロール全体を一気にスクロールしたいということができないため、

今回目標とするスクロールの挙動としては、

「全体を軽快にスクロールできつつ、スクロールの動きが停止したときに任意の座標に吸着させる」

というものだ。

 

とはいえやるべきことは簡単で、「スクロールの動きが停止したときに」と上で書いたとおり、

 

UIScrollViewのデリゲートメソッドである、

 

//スクロールの減速がなくなったとき

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

    [selfadjustScrollViewOffset];

}

 

//ドラッグが完了したとき

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {   

    if(decelerate)

        return;

 

    [selfadjustScrollViewOffset];

}

 

の2つに、スクロールの位置を調整する処理("UIScrollView.setContentOffset:XGPoint animated:YES")を入れればOK。

 

ドラッグ処理のほうに、

 

    if(decelerate)

        return;

 

が入っているのは、ドラッグが完了したときに減速があれば無視するというもの。つまりこの減速がなくなったときに、位置調整はするのでここでは無視するということだ。

この処理を入れ忘れると、カクカクとしたおかしな動きになるので注意が必要ですw