Сравнение местоположения UITouch с прямоугольником UIImageView - PullRequest
6 голосов
/ 08 февраля 2010

У меня есть следующий код, чтобы определить, находится ли касание в представлении изображения в моей ячейке таблицы. Тем не менее, это не работает. Я сравнил два с CGRectContainsPoint, однако, это не работает. Вот код:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event    
{
     // Declare the touch and get it's location

     UITouch *touch = [touches anyObject];

     CGPoint touchLocation = [touch locationInView:self];

     if (CGRectContainsPoint(myImageView.frame, touchLocation))
     {
        NSLog(@"Tapped image view");
     }    
}

Спасибо за помощь!

Ответы [ 4 ]

26 голосов
/ 08 февраля 2010

Однако, это не работает.

Пожалуйста, будьте более конкретны.

 UITouch *touch = [touches anyObject];

Почему бы не изучить каждое касание, а не просто случайный * выбор из них?

* В документации для anyObject сказано, что вам не гарантированно, какой из них он вам даст. Вы даже не гарантированы, что это будет случайным; это может быть один и тот же объект каждый раз. Закон Мерфи гласит, что, будь то случайный или нет, он будет неправильным.

 CGPoint touchLocation = [touch locationInView:self];
 if (CGRectContainsPoint(myImageView.frame, touchLocation))

Ваш frame находится в системе координат вашего супервизора; [touch locationInView:self] возвращает точку касания в вашей системе координат. Вы хотите провести тестирование в пределах bounds, который находится в вашей системе координат. Документация объясняет разницу.

1 голос
/ 29 октября 2011
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:self];
if ([touch view]==view) {
view.center=location;
}

записать его в событие касания. спасибо

1 голос
/ 20 февраля 2010

Проблема в том, что вам нужно вызвать [touch locationInView: myImageView], чтобы получить точку в системе координат представлений изображений. Затем проверьте, находится ли он в кадре.

0 голосов
/ 14 сентября 2010

Помните, что когда вы запрашиваете касание для locationInView:, вы получаете точку относительно кадра этого вида. Итак, предполагая, что фрагмент кода, который вы дали, содержится в подклассе UIViewController, вы должны запрашивать

CGPoint touchLocation = [touch locationInView:self.view];

Что даст вам точку зрения относительно вашего взгляда. Причина, по которой вы хотите указать точку относительно вашего текущего вида, состоит в том, что рамка вашего изображения также связана с родительским видом - то же самое представление. Так что теперь это должно работать.

 if (CGRectContainsPoint(myImageView.frame, touchLocation)) {
    NSLog(@"Tapped image view");
 }
...