CGRectContainsPoint() не возвращает TRUE, даже если прямоугольник содержит точку?

У меня есть UIView с UIImageView внутри него. Когда кто-то пытается перетащить изображение, оно должно следовать за пальцем человека. Ниже приведен код из класса UIView.

- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {

CGPoint touchPoint = [touch locationInView:self];


    if ( CGRectContainsPoint(self.thumb.frame, touchPoint))

        self.thumb.center = CGPointMake(touchPoint.x, self.thumb.center.y);

return YES;

}

Когда я начинаю отслеживать, помещая палец в imageView и пытаясь переместить его, ничего не происходит. Из NSLogging я понял, что выражение if никогда не выполнялось.

Тем не менее, когда я начинаю отслеживать за пределами imageView и перетаскиваю палец в imageView, представление изображения будет следовать за моим пальцем.

Почему CGRectContainsPoint() не работает, когда мой палец запускается при просмотре изображения?

2 ответа

Решение
CGPoint touchPoint = [touch locationInView:self.view];

self это не представление (обычно), это контроллер представления.

Обратите внимание, что также предполагается, что self.view является суперпредставлением self.thumb. Если нет, то в целом вы можете использовать:

CGPoint touchPoint = [touch locationInView:[self.thumb superview]];

Как определяется прикосновение? Я использовал следующее (в рамках стандартного touchesBegan или touchesMoved), хотя self является ViewController.

UITouch *touch = [[[event allTouches] allObjects] objectAtIndex:0];
Другие вопросы по тегам