2014-01-30

UIWebViewのスクロール減速率の初期値がUIScrollViewDecelerationRateNormalでは無いのは何故か

iOSのUIWebViewのスクロールの減速率について。人に説明していると何故かややこしい話になってしまうのは初期値がノーマルじゃないせいな気がした。

UIWebViewの慣性スクロールの減速率を決める _webview.scrollView.decelerationRateの値だが、初期値は UIScrollViewDecelerationRateFast (以降RateFastと表記)になっている。これはUITableView等が 
UIScrollViewDecelerationRateNormal (以降RateNormalと表記)となっているのと違って、より早く減速するためスクロールして指を離した後に進む距離が短かい。変更するには
_webview.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;
とすれば良いが、これはWebViewの内容によって使い分けるのが良いだろう。一覧リストの様に、目的の物が見つかるまでスクロールし続ける画面であれば、よりスムーズにスクロールできる RateNormal 。記事を読ませるような画面であれば、1画面分づつスクロールできれば良いので RateFast といった具合に。

decelerationRateの型はCGFloatなので任意の実数をセットできそうだが、0.1等をセットしても無視されてしまう。ドキュメントにある様に UIScrollViewDecelerationRateNormal と UIScrollViewDecelerationRateFast しか効果が無い。

ちなみにfacebookアプリで外部リンクを踏んだ時のUIWebViewは RateNormal で、SmartNewsだと RateFast になってる模様。どちらも違和感を感じないので、Webの記事を読む時はどちらでも気にならないのかも。

タイトルの問いに対する答えは、AppleはUIWebViewに表示するコンテンツはWebの記事が多いだろうという仮説でもって、記事が読みやすいようにスクロールがすぐに止まるようにしたのでは無いかと。

このエントリーをはてなブックマークに追加