2014-02-17 2 views
0

Я создал очень простое приложение, которое содержит перетаскиваемый UIImageView, но у меня возникла проблема с тем, что изображение можно перетаскивать, не касаясь его. Я уверен, что проблема с дырой от anyObject, но я понятия не имею, как ее заменить. Я пробовал self.view.image, но это не удалось. Итак, вот мой кодПеретащите изображение при касании самого объекта

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView:touch.view]; 
    lineView.center = location; 
} 

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self touchesBegan:touches withEvent:event]; 
} 

любые идеи?

+0

Чтобы сделать это проще, давайте предположим, что у вас всегда есть один '' UITouch * объект в 'touches' (несколько штрихов отключены по умолчанию для' UIView' в любом случае). Вы берете точку касания и перемещаете subview там, но вы не делаете никаких проверок, находится ли местоположение касания в кадре подсмотра. Если вы добавите такую ​​проверку, вы разрешите только «перетаскивать» подвью. –

ответ

1

Рассмотрите возможность использования распознавателя жесты. Добавьте его только в представление изображения (и включите взаимодействие пользователя с представлением). Теперь вы получите только обратные вызовы метода действий из жеста, когда на самом деле было затронуто представление, ваш код станет проще, и вы можете перемещать представление с этой позицией.

Также, в вашем текущем кодексе, это странно называть touchesBegan: от touchesMoved:. Если вы сохраните этот код (потому что вы не хотите использовать жест), вы должны реорганизовать код, который перемещает представление в другой метод, и оба метода touchesBegan: и touchesMoved: вызывают этот метод.

+0

Есть ли способ добавить программный знак распознавания жеста? – AFB

+1

Не к изображению, оно должно быть добавлено к изображению. 'addGestureRecognizer:' - это метод на 'UIView'. – Wain

0

Попробуйте следующее

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView:touch.view]; 
    if ([lineView pointInside:location withEvent:event]) 
     lineView.center = location; 
} 
Смежные вопросы