UITableViewを回転して横スクロールする際のタッチのエラーと対策方法

UITableView は、縦スクロールのみを行うことが出来ますが、たまに、横スクロールを行いたいときもあります。その際、タッチの検出がおかしくなる場合があるので、その対策方法を説明します。

横スクロールの UITableView 開発版 TwitOverview
横スクロールの UITableView 開発版 TwitOverview


横スクロールをするためには、テーブルを回転する必要があります。
回転自体は以下の様に行えます。

CGRect originalFrame = tableRotateView.frame;
tableRotateView.transform = CGAffineTransformMakeRotation(M_PI *(-90) / 180.0f);
tableRotateView.frame = originalFrame;

ただし、これだと、タッチ検出の問題が発生します。タッチ範囲が tableRotateView.frame のエリアに限定されますが、実際は、回転しているので、テーブルの一部のタッチが検出出来なくなります。この場合、tableRotateView.frameは、tableRotateView.boundsと等しくならない事が原因のようです。

対処方法は、テーブルのsuperViewになるview、tableBgViewを作成し、そのビューを回転させて、tableRotateView.frame = tableBgView.bounds にします。

CGRect originalFrame = tableBgView.frame;
tableBgView.transform = CGAffineTransformMakeRotation(M_PI *(-90) / 180.0f);
tableBgView.frame = originalFrame;

こうしてあげると、tableRotateView.frameは、tableRotateView.boundsと等しくなるため、タッチのエリアも正しくなります。

いま、ツイッターのタイムラインを、一覧して概観出来るアプリを作っています。このアプリで、横スクロールテーブルビューを使っています。こんな感じです。

もし、テスト版を使ってみたい方がおられましたら、testFlightで開発版をお送りします。twitter – Tomohisa Takaoka (tomohisa) までご連絡ください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください