• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:一つの画面でスクロールとフリックをする方法について)

一つの画面でスクロールとフリックをする方法について

このQ&Aのポイント
  • 画像を左右にスクロールさせ、上下にフリックすると他の画像が表示され、拡大縮小もできるコードを書いていますが、スクロールとフリックのメソッドがうまく呼び出せません。
  • scrollView.canCancelContentTouchesとscrollView.delaysContentTouchesを使用しても解決できませんでした。
  • 誰かが解決策をご存知でしたら、教えていただけませんか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ちょっと説明がよくわからないんですが、 > VCのほうに書いているスクロールのメソッドがフリックのメソッドを > 邪魔してうまくフリックのtouchメソッドを呼んでくれません。 > スクロールメソッドを消すと、フリックが使えますが、そうでないときは、 > スクロールと拡大縮小だけができます。 とのことですが、提示されたソースコードの中には「スクロールのメソッド」 らしきものが見当たりません。このソースはスクロールメソッドを消して フリックだけが動作する状態のソースを示しているのでしょうか? しかし、このソースとほぼ同じものを私の方で試してみたところ、 フリックは動作せず、スクロールと拡大縮小だけが動作しました。 自分でスクロールメソッドを書かなくても、もともとのUIScrollViewの 機能だけでスクロール操作はできるはずです。 もし、このソースの動作の説明が「UIScrollViewのスクロール処理が 邪魔して、VCのほうに書いてあるフリックのtouchメソッドをうまく 呼んでくれません。」ということなら、話はわかります。 このソースのView構造は、ViewControllerのviewの上にscrollViewが 乗っかり、その上にPageViewが乗っかる構造になっています。 この時、タッチを処理するのは、一番上に乗っかっているPageViewです。 この場合PageViewがタッチイベントを拾い、拡大縮小やスクロールを 処理しますので、一番下にいるViewControllerにまでタッチイベントは 来ません。 とりあえずViewControllerでフリック処理をするのではなく、 PageViewにtouchesBegan/touchesEndedメソッドを書いて PageViewでフリック処理をすれば、フリックとスクロールの 両方が動作するはずです。 (私が試したソースでは動作しました。) しかし、PageView内の画像が上下スクロール可能な状態に拡大されて いる時は、タッチイベントはスクロール処理に使われ、touchesBegan は呼ばれないようです。もしこのような状態でもゆっくり動かしたら スクロールで、素早く動かしたら独自のフリック処理になるように したいのであれば、touchesBegan/touchesEndedではなく scrollViewWillEndDragging等をdelegateで拾って処理した方が よいかもしれません。 このあたりはやってみないとわからないことが多いので、 メソッド呼び出し状況のログをとって、自分で動きを確かめながら いろいろ試してみることをお勧めします。

niconico7chan
質問者

お礼

いつもありがとうございます。 教えて頂いたPageViewのほうにtouchメソッドを書く方法でうまくフリック操作もいくようになりました。 時間がかかりすぎててお礼の連絡が遅くなりまして申し訳ありません。