2009-07-27 2 views
5

Я пытаюсь перетащить UIImageView вокруг экрана iphone в своем приложении.iPhone SDK: проблема перетаскивания UIImageView

В настоящее время функция перетаскивания, которую я настроил, хороша, и перетаскивание изображения перемещает его по экрану, проблема в том, что вам не нужно перетаскивать изображение, чтобы переместить его, вы также можете перетащить в любом месте экран, и он будет перемещать изображение. Я новичок в этой платформе, поэтому я не могу думать о том, что делать, чтобы решить эту проблему. Мой текущий код, чтобы перетащить изображение является:

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { 
    CGPoint pt = [[touches anyObject] locationInView:pig]; 
    startLocation = pt; 


} 
- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event { 
    CGPoint pt = [[touches anyObject] locationInView:pig]; 
    CGRect frame = [pig frame]; 
    frame.origin.x += pt.x - startLocation.x; 
    frame.origin.y += pt.y - startLocation.y; 
    [pig setFrame: frame]; 
} 

Любая помощь приветствуется. Кстати, свинья - UIImageView. Также я заметил, что если я установил взаимодействие пользователя «свиньи» с изображением, чтобы включить изображение, оно больше не перетаскивается, но когда оно не установлено, оно включено.

ответ

0

Вы можете попробовать подкласс UIImageView и реализовать на нем touchesBegan: и touchesMoved:. Затем в InterfaceBuilder выберите свой подкласс для UIImageView.

alt text http://img.skitch.com/20090728-xetretcfubtcj7ujh1yc8165wj.jpg

Ах да, теперь вам нужно будет установить взаимодействие с пользователем снова ...

+0

Большое спасибо, что сделал трюк отлично! – Sam

+0

self.userInteractionEnabled = YES; ... Это всегда одно и то же, и это всегда то, что я делаю неправильно! Thanx epatel, great :-) –

0

Вам необходимо заключить его в начать/совершить анимации последовательности, по крайней мере в вашем потоке таймера:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.02] /* 0.02 seconds suration*/ 

/* move pig coordinates here */ 

[UIView commitAnimations]; 

Сохранить новое движение в touchesMoved, а затем обработать их в потоке таймера.

0

Вы можете использовать категорию UIView, чтобы сделать его перетаскивать и определить перетаскиваемую площадь: https://github.com/rtoshiro/TXDragAndDrop

+0

Обратите внимание, что [ссылки только ответы] (http://meta.stackoverflow.com/tags/link-only-answers/info) обескуражены, SO ответы должны быть конечной точкой искать решение (по сравнению с другой остановкой ссылок, которые со временем устаревают). Пожалуйста, подумайте о добавлении отдельного резюме здесь, сохранив ссылку как ссылку – kleopatra