2011-03-20 7 views
7

私はあなたの場所のページにいるときGowalla iPhoneアプリのような効果を再現する私のUIViewControllerのUIScrollViewのontopを持っています。私のスクロールビューの下では、スクロールビューのフレームがそれをカバーしていても(ボタンの上にある、スクロールビューの透明な場所であっても)、そのアクションを実行できるようにするボタンがあります。どうすればこのようなことができますか?出来ますか? (それは、Gowalla [なんとか]それをしなければならなかった)タッチを検出するためにUIScrollViewの下でUIViewを取得する方法?

答えて

0

私はこの "Gowalla"アプリが何をするか分からない。うまくいけば、「スクロールビューの背後にあるボタン、「スクロールビュー」をタッチすることができるボタンの正確な説明です。

スクロールビューの背後にあるボタンのサイズを、スクロールビューのcontentSize領域全体に塗りつぶすようにサイズ設定することができます。最も簡単な解決策は、スクロールビュー(他のすべてのビュー)それだけでやってください。

それ以外の場合は、上記のようにスクロールビューに配置する透明な背景のカスタムビューを作成することをお勧めします。簡単な解決策は、カスタムビュー(おそらくUIControl)をボタンに触れるだけで行えるようにすることです。何らかの理由でそれが不可能な場合は、カスタムビューのhitTest:withEvent:をオーバーライドして基になるボタンを返すことをお勧めします。私はhitTest:withEvent:をスクロール・ビュー自体に上書きすることに注意しています。スクロール・ビュー自体がスクロールを妨げる可能性があります。

0

スクロールビューの上部にボタンを追加してみてください。唯一の問題は、ボタンを押すとscrollViewとやりとりできなくなりますが、それでも表示されることです。

2

私の場合、次のメソッドをオーバーライドすることで、タッチイベントを別のビューに転送します。

  • - touchesBegan:withEvent:
  • - touchesMoved:withEvent:
  • - touchesEnded:withEvent:
  • - touchesCancelled:withEvent:

のようにこの方法では、

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    // pass touch event by default implement. 
    [super touchesBegan:touches withEvent:event]; 

    // redirect the touch events. 
    [anotherView touchesBegain:touches withEvent:event];  
} 

hitTest:withEvent:は、ビュー階層ツリー上のどのビューすべき応答タッチイベントを決定するために使用されます。ビューがタッチイベントに反応しないようにするには、hitTestでnilを返します。結果として、上記のタッチイベントメソッドは呼び出されません。

+0

これは良い答えです。それは有り難いです。 –

関連する問題