По сути, я просто хотел бы прикоснуться к изображению и заставить его перемещаться пальцем по экрану без использования Image.center = touchPosition. Я не хочу, чтобы центр привязался к моему пальцу. Я хочу переместить изображение из любой точки, к которой я прикасаюсь.

0
user2037857 25 Мар 2013 в 21:12
2
Итак, оставьте исходную точку свойства «центр» в качестве переменной и вычтите ее из своего нового местоположения.
 – 
Richard J. Ross III
25 Мар 2013 в 21:13
Не вариант, потому что объект движется по центру
 – 
user2037857
25 Мар 2013 в 21:16

1 ответ

Лучший ответ

Стандартный способ справиться с этим, на который @ richard-j-ross-iii намекал в комментарии, - это сохранить разницу между центром представления и позицией касания при начале перетаскивания, а затем сохранить эту разницу во время перетаскивания. В вашем методе touchesBegan:withEvent: сохраните смещение, например:

_dragOffsetFromCenter = CGSizeMake(touchLocationInImageView.x - centerOfImageView.x, touchLocationInImageView.y - centerOfImageView.y);

Тогда в touchesMoved:withEvent: вы можете сохранить то же смещение, например:

myImageView.center = CGPointMake(touchLocation.x - _dragOffsetFromCenter.x, touchLocation.y - _dragOffsetFromCenter.y);
2
Aaron Golden 25 Мар 2013 в 21:51
Как я могу рассчитать touchLocationInImageView?
 – 
user2037857
25 Мар 2013 в 21:44
Различные методы touches:* получают NSSet объектов UITouch, когда они вызываются UIKit. Сделайте одно из касаний в этом наборе (если вы не поддерживаете мультитач в этих представлениях, просто используйте [touches anyObject], чтобы получить одно касание), затем touchLocationInImageView = [theTouch locationInView:myImageView];
 – 
Aaron Golden
25 Мар 2013 в 21:55
Потому что, например, myImage (100,100) и при касании в левом верхнем углу (myImage) 20,20 тогда _dragOffsetFromCenter = width (-30) height (-30)
 – 
user2037857
25 Мар 2013 в 22:18
Это должно быть хорошо. В вашем примере предположим, что вы перетаскиваете один пиксель вправо до (21,20). Тогда центр просмотра нового изображения x будет 21 - (-30) = 51, что на один пиксель правее предыдущего центра. Вы ведь хотите именно такого результата?
 – 
Aaron Golden
25 Мар 2013 в 22:36
На самом деле [theTouch locationInView:myImageView] может не работать для вас, потому что изображение перемещается. Система координат меняется на протяжении всего перетаскивания. Лучше использовать согласованную систему координат на протяжении всего перетаскивания, (например) работая с позициями касания в супервизоре просмотра изображения.
 – 
Aaron Golden
25 Мар 2013 в 22:40