2017-04-22 5 views
0

を使用した後、下のUIScrollViewのにオーバーレイのUIViewからタッチイベントUIScrollViewどちらもUIViewControllersビューのサブビューです。はフォワード私はiOS版/スウィフトの取り扱いタッチに関する質問があり、それらを

私がこれをやっている理由は、スクロールビューの可視コンテンツの変更によってオーバーレイビューが影響を受けない間に、スクロールビューが正常に動作するように(パン、ズーム)したいということです。さらに、オーバーレイビューはタッチイベントを処理して、下のスクロールビューでコンテンツのガイドラインを表示する必要があります。

私は(スクロールビューは/ズームをパンしない)オーバーレイビュー上のタッチイベント(touchesBegantouchesMovedtouchesEndedtouchesCancelled)は、スクロールビューに移行されていないことであり、今直面しています問題。

point(inside point: CGPoint, with event: UIEvent?) -> Boolをオーバーライドしてfalseを返すことで、次のビューにタッチイベントを転送するソリューションが見つかりました。しかし、オーバーレイビューのタッチイベントは呼び出されません。

どのようにこの動作を実装するアイデアはありますか?私はオーバーレイビューで次のレスポンダのすべてのタッチイベントを呼び出すことを試みましたが、これはどちらもうまくいきませんでした。

あなたの助けを借りてありがとうございます!

+0

Intstead UIScrollViewのサブクラスを作成し、そこにタッチを扱う – Darshana

+0

。 –

答えて

0

あなたの最善の策は、hitTestdocs)を調べることであろう - あなたは

0

以下のビューへのタッチダウンイベントを渡したいとき、私はあなたが右の上だったと思うことを決定、あなたのサブクラス内のロジック(オーバーレイ)を作成しますpoint(inside point: CGPoint, with event: UIEvent?) -> Boolでトラックします。

"オーバーレイ"ビューで、ポイントがサブビュー内にあるかどうかを確認します。その場合は、trueを返して、サブビューとの対話を許可します。そうでない場合は、falseを返して、「タッチを通過させる」ことにより、下にあるスクロールビューに戻ります。

class PassThruOverlayView: UIView { 

    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { 

     for v in subviews { 

      let ptInSub = v.convert(point, from: v.superview) 
      if v.bounds.contains(ptInSub) { 
       return true 
      } 

     } 

     return false 

    } 

} 

あなたは(ScrollViewの「重複ScrollViews」と「UIViewのオーバーレイの両方を示す)ここで働くの例を見ることができます:、scrollviewに概要を使用してのhttps://github.com/DonMag/ScrollViewPassThru

+0

あなたの答えをありがとう!問題は、オーバーレイビューとスクロールビューの両方でタッチイベントが必要なことです。 -/ –

+0

hmmm ...そうです、例えば、ボタンをオーバーレイビューで開き、そのトリガにアクション***を設定し、***に同じタップトリガを下にあるスクロールビューで実行しますか? – DonMag

+0

正確に!これは、スクロールビュー内に何らかの描画キャンバスがあり、オーバーレイビューで正確な描画のガイドラインを挿入したいということです。このようにしているのは、ガイドラインをスクロールビューの内容でズームしないようにするためです。 –

関連する問題