Позиция указателя ios UIPanGestureRecognizer

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
[self addGestureRecognizer:panRecognizer];

- (void)pan:(UIPanGestureRecognizer *)gesture {
    NSLog(@"%f", [gesture translationInView:self].x);
}

Приведенный выше код регистрирует относительное положение моего текущего панорамирования, но как я могу получить абсолютное положение для представления, в котором я нахожусь?

Я просто хочу переместить UIImageView туда, где находится палец пользователя.


person Jacksonkr    schedule 12.03.2012    source источник
comment
Что вы подразумеваете под абсолютной позицией представления, в котором я нахожусь?   -  person sch    schedule 13.03.2012


Ответы (3)


translationInView дает вам перевод панорамы (насколько x изменился), а не положение панорамы в представлении (значение x). Если вам нужно положение кастрюли, вы должны использовать метод locationInView.

Вы можете найти координаты относительно вида следующим образом:

- (void)pan:(UIPanGestureRecognizer *)gesture {
    NSLog(@"%f", [gesture locationInView:self].x);
}

Или относительно супервизии:

- (void)pan:(UIPanGestureRecognizer *)gesture {
    NSLog(@"%f", [gesture locationInView:self.superview].x);
}

Или относительно окна:

- (void)pan:(UIPanGestureRecognizer *)gesture {
    NSLog(@"%f", [gesture locationInView:self.window].x);
}
person sch    schedule 12.03.2012
comment
Не лучше ли использовать свойство view UIGestureRecognizer вместо self? Это позволяет вам перемещать распознаватель жестов, не ломая вещи. Также для расположения окна достаточно передать nil. - person Rudolf Adamkovič; 28.03.2013

Свифт 5

Используйте метод .location(), который возвращает значение CGPoint. [документация]

Например, относительное расположение вашего жеста к self.view:

let relativeLocation = gesture.location(self.view)
print(relativeLocation.x)
print(relativeLocation.y)
person budiDino    schedule 20.01.2017
comment
Спасибо! Можете ли вы опубликовать правильный вызов для получения абсолютного/неотносительного местоположения в окне или представлении? Заранее спасибо! - person 01GOD; 20.03.2021

Я думаю, что простой способ чего-то подобного - получить x и y касания и отследить его, как только у него будет 2 точки (скажем, X: 230 Y: 122), вы установите прокрутку представления UIScroll на x и y .

Я точно не знаю, как я пришел к этому ответу... Если это бесполезно, не ставьте мне минус, я все еще нуб D:

person Allison    schedule 12.03.2012