スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
このエントリーをはてなブックマークに追加

[iOS]UITableView / UIScrollViewのタッチ座標とスクロール座標

関連:UIScrollView/UITableView/Cell/座標/タッチイベント

この調査のきっかけは、
UIScrollViewに縦に無数配置したボタンをスクロールしながらタッチしたときにUIPopoverView(以降ポップオーバー)が出るような仕組みを利用した際に起きた問題でした。

開発中の画像
[iOS]UIScrollViewを調べていたらいろいろできることが分かった(1)

ここで起きたのはこのポップオーバーのアローの方向の問題でした。
このポップオーバーは画面外へViewが出ようとするような出力になった場合、
画面外にはみ出た分だけポップオーバー内のView表示サイズを縮めてしまうことです。
しかもそのサイズをその後も確保してしまい、縮んだまま戻らないといった状態になります。

そこでタッチイベントから座標を取得しようという考えが発生しました。

調べたタッチイベントの参考URL:


[iPhoneメモ]
UIScrollViewでタッチイベントをとれ…

なかった人の記事。チャンと解決法書いてます。
2回イベント来てるという件の開放も書かれています↓
[iPhoneメモ]
UIScrollViewでピンチとタッチを同時実装



[Cocoaの日々]
[Mac] NSScrollView - スクロール時のイベントを受け取る


[Naosim Ron]
UIScrollViewでスクロールが終わったタイミングを取得する

スクロールの開始と終了のハンドリング。



で、ここまで調べてみてふと思ったことがありました。
タッチ時のイベントに(NSSet *)touchesがあるのですが、
この引数にはタッチイベントがタッチした箇所分入ってきます。

ここにタッチした座標も入ってるような気がして調べてたら、

[螺旋部屋]
iPhone マルチタッチについて

マルチタッチとイベント基本の4つを紹介している記事ですが、
ここの最初のソースでのタッチイベントのキャッチ部分に座標取得をしている部分がありました。

でもさらに気付きました。

UITableViewのCellってこの実装に似ているような・・・。

そこでCellの座標取得をしている記事を発見。
ただの座標ではなく、画面内での座標に変換するのがポイントです。
[叢雲の歌]
UITableViewCellの現在の位置を取りたい

(Cellの座標)-スクロールした分


という公式です
これを実際にやると

cell.frame.origin.x -= contentOffset.x;
cell.frame.origin.y -= offset.y;


といった式になります。
このoffsetがスクロールした位置を表すようです。
(たいていの記事にはスクロールの初期位置を設定するなどと書かれている場合が多いです)
このエントリーをはてなブックマークに追加

コメントの投稿

非公開コメント

Translation


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
プロフィール

チーズくん

Author:チーズくん
個人的メモをただ羅列しています。
twitter:@cheese1038

バロメーター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。