2012-01-30 43 views
3

私は、UIScrollViewを含むUIViewを持っています。 このUIViewはいくつかのタッチイベントに応答するはずですが、それに含まれるscrollViewが原因で応答していません。UIScrollViewのタッチイベントを親ビューから停止する方法はありますか?

このscrollViewのcontentViewは、OuterView内のMoviePlayerに設定されています。 MoviePlayerがある領域をクリックするたびに、OuterViewのタッチイベントが応答しません。

ムービープレーヤーのuserInteractionNOに設定したこともあります。

しかし、今はscrollViewが干渉しているようです。

私はこの記事をSOそのものに言及しました。

How can a superview interecept a touch sequence before any of its subviews?

しかし、そこに解決策は、scrollView ためuserInteractionEnabledNOに設定するために私に尋ねしかし、私はそうするならば、私のピンチズームのいずれかの場所を取りません!

どうすればよいですか?

答えて

0

UIScrollViewは、スクロールビューをスクロールするためにユーザーが指を移動したかどうかを判断する必要があるため、すべてのタッチイベントをインターセプトします。あなたはUIViewのサブクラス化をしたい場合があり 、その後、

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)evt; 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)evt; 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)evt; 

方法では、あなたのUIScrollViewInstanceを楽しみ、その後、neccessaryタッチのためにすべてのこれらのメソッドを確認してください。たとえば:

#import <Foundation/Foundation.h> 
#import <UIKit/UIKit.h> 

@interface MyView: UIView { 
    UIScrollView *scrollView; 
} 

@end 

@implementation MyView 

/* don't forget to alloc init your ScrollView init -init 
    and release it in -dealloc! Then add it as a subview of self. */ 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)evt 
{ 
    /* check for a gesture */ 
    [scrollView touchesBegan:touches withEvent:evt]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)evt; 
{ 
    /* check for a gesture */ 
    [scrollView touchesMoved:touches withEvent:evt]; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)evt; 
{ 
    /* check for a gesture */ 
    [scrollView touchesEnded:touches withEvent:evt]; 
} 

@end 
+0

私は間違いなく、このソリューションをチェックするだろうが、その間、私はScrollViewをサブクラス化しようとするとhitTestをオーバーライドしてtapCountのためにチェックしていました。 の場合は1、それ以外の場合はsuperviewを返します。 しかし、tapCountがゼロになるのはなぜですか? –

関連する問題