2012-02-28 10 views
1

UIViewに問い合わせて、現在タッチされているかどうかを判断する方法はありますか?私が尋ねる理由は、ユーザーの指の下にUIViewを保持するために、「touchedBegan」、「touchesEnded」、および「touchesMoved」を使用しているためです。しかし、ユーザが指を本当に速く動かし、ウィンドウを「エスケープ」することを管理している場合、そのウィンドウを削除したい。
タイマーを使って各ビューを定期的にテストして、現在タッチされているかどうかを判断できると思っていました。もしそうでなければ、私はそれを削除します。 "IsTouchedProperty"は完璧です。 考えていますか?UIViewが現在タッチされているかどうかを確認するには?

答えて

1

私は同様の問題があり、trackingプロパティを使用して解決しました。ドキュメントから:

受信者が現在、イベントに関連して接触を追跡しているかどうかを示すブール値。 (読み取り専用)

これはUIControlのメソッドですが、作成しようとしていませんか?

hitTestも表示できます。 Check the apple docs

+2

正確には正しくないことにご注意ください。 isTouchInsideとisTrackingはUIViewの一部ではありません。彼らはUIControlから来た – ChickensDontClap

+0

あなたはまったく正しいです。私は自分の答えを更新しました。 – Tom

+0

isTrackingもUIScrollViewの一部です – phatmann

1

UIViewはUIControlを継承しないので、UIViewをサブクラス化し、touchイベントを使用して独自のisTouchingプロパティをロールバックする必要があります。次のようなものがあります。

// MyView.h 
@interface MyView : UIView 
@property (nonatomic, assign) BOOL isTouching; 
@end 


// MyView.m 
... 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 
    self.isTouching = YES; 
} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesCancelled:touches withEvent:event]; 
    self.isTouching = NO; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesEnded:touches withEvent:event]; 
    self.isTouching = NO; 
} 
関連する問題