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];