Точка не в Rect, но CGRectContainsPoint говорит да - PullRequest
4 голосов
/ 11 июня 2009

Если у меня есть UIImageView и я хочу знать, коснулся ли пользователь изображения. В штрихах Began я делаю следующее, но всегда заканчиваю первым условным условием. Окно находится в портретном режиме, а изображение внизу. Я могу нажать в правом верхнем углу окна и перейти к первому условию, которое кажется очень неправильным.

- (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)

Есть предложения?

Ответы [ 2 ]

19 голосов
/ 11 июня 2009

Сначала вы получаете прикосновение:

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.

4 голосов
/ 11 июня 2009

Ваша логика просто перевернута. Метод <a href="http://developer.apple.com/documentation/graphicsimaging/reference/CGGeometry/Reference/reference.html#//apple_ref/c/func/CGRectContainsPoint" rel="nofollow noreferrer">CGRectContainsPoint()</a> возвращает bool, т. Е. True для "yes". Истина не равна 0.

...