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;

}

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

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

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


person Mahir    schedule 15.11.2011    source источник
comment
Является ли self.thumb прямым подпредставлением self?   -  person Jonathan Grynspan    schedule 24.11.2011


Ответы (2)


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

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

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

CGPoint touchPoint = [touch locationInView:[self.thumb superview]];
person morningstar    schedule 15.11.2011
comment
но в данном случае self — это UIView. (self.view не компилируется). - person Mahir; 15.11.2011
comment
и представление изображения уже было подвидом UIView, поэтому [self.thumb superview] тоже ничего не делал... - person Mahir; 15.11.2011

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

UITouch *touch = [[[event allTouches] allObjects] objectAtIndex:0];
person user1020929    schedule 23.11.2011
comment
На самом деле я понял проблему: для userInteractionEnabled было установлено значение YES, что не позволяло событию касания достигать представления. Извините, я хотел удалить этот пост, но я, должно быть, проглядел его. - person Mahir; 25.11.2011
comment
@Mahir Для какого объекта вы установили userInteractionEnabled на NO? - person Jeeter; 27.12.2013
comment
@ Махир извините, я имел в виду YES :) - person Jeeter; 27.12.2013