4

UIImageView があり、ユーザーが画像をタップしたかどうかを知りたい場合。touchesBegan では、次のことを行いますが、常に最初の条件で終了します。ウィンドウは縦向きモードで、画像は下部にあります。ウィンドウの右上をタップしても最初の状態に入ることができますが、これは非常に正しくないようです。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:touch.view];

if(CGRectContainsPoint(myimage.frame, location) == 0){
//always end up here
}
else
{ //user didn't tap inside image}

値は次のとおりです。

location: x=303,y=102
frame: origin=(x=210,y=394) size=(width=90, height=15)

助言がありますか?

4

2 に答える 2

19

まず、次のものに触れます。

UITouch *touch = [[event allTouches] anyObject];

次に、画像ビューに対する locationInView を確認します。

CGPoint location = [touch locationInView:self]; // or possibly myimage instead of self.

次に、CGRectContainsPoint はブール値を返すため、それを 0 と比較するのは非常に奇妙です。そのはず:

if ( CGRectContainsPoint( myimage.frame, location ) ) {
   // inside
} else {
   // outside
}

しかし、self が myimage でない場合は、myimage ビューがあなたの代わりに触れている可能性があります。あなたの質問からは、self がどのオブジェクトであるかが明確ではなく、問題の UIImageView のサブクラスではありません。

于 2009-06-11T06:41:16.257 に答える
4

あなたの論理は単に逆です。このCGRectContainsPoint()メソッドは bool を返します。つまり、「はい」の場合は true です。True は 0 ではありません。

于 2009-06-11T06:32:18.657 に答える