たまには iOS のプログラムの話などを
iOS6 から標準搭載された「引っ張って更新」の実装についてです。
あの Passbook とかで使ってるやつですね。
これ UIRefreshControl ってやつで、実装自体は至極簡単にできます。
がしかしです、これ UIWebView で使おうとするとちょっと填まります。たぶん UIScrollView で使っても同じく填まると思います。
まぁ、UIWebView で UIRefreshControl を使うこと自体もググれば簡単に見つかるのですが、填まり所は UIWebView でピンチ操作して横にもスクロールするようになった場合です。
もともとこれの実装が UITabelView とかを前提にしているのか、横に(右に)スクロースした状態で「引っ張って更新」すると見事に UIRefreshControl がセンターからズレてしまいます。
それで、UIScrollViewの横スクロール量で補正して UIRefreshControl をずらしてやれば良いところまではなんとなく分かったのですが、これが全然移動してくれねぇ…
てーことで、あえなく挫折です。
_| ̄|○
で、このままアプリへの実装をあきらめるのもなんなので ODRefreshControl を改造することにしました。
これも同じように「引っ張って更新」をしてくれるオープンソースのコードなのですが、まぁこちらもそのままだと見事にズレます(笑)
修正箇所は4カ所
observeValueForKeyPath メソッドに「_activity.center = …」ってのがあるのですが、これはクルクル回るコントロールを表示する位置です。
これれのX座標に横スクロールのオフセット値
[self.scrollView contentOffset].x を加算してやります。
あと、同じメソッド内に「CGPoint bottomOrigin = …」ってのがあるのですが、これ以降に3カ所ほど「self.bounds.size.width / 2」ってのがあるので、これにも同じオフセット値を加算してやります。
こちらはビヨーンと伸びるやつの表示位置ですね。
一応これで解決です。(たぶん)
UIRefreshControl での解決方法分かる人いましたら教えて下さい。
ODRefreshControl は、iOS5 でも使えるので、現時点ではこっちの方がメリットある気はしますけどね。
Comments