Как заметил Джейми, вероятно, стоит использовать средство распознавания жестов панорамирования.Код будет выглядеть примерно так:
Контроллер вида кнопки может добавить распознаватель жестов к кнопке (возможно, в viewDidLoad
) следующим образом:
UIPanGestureRecognizer *pangr = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
[myButton addGestureRecognizer:pangr];
[pangr release];
И представлениеКонтроллер будет иметь следующий целевой метод для обработки жеста:
- (void)pan:(UIPanGestureRecognizer *)recognizer
{
if (recognizer.state == UIGestureRecognizerStateChanged ||
recognizer.state == UIGestureRecognizerStateEnded) {
UIView *draggedButton = recognizer.view;
CGPoint translation = [recognizer translationInView:self.view];
CGRect newButtonFrame = draggedButton.frame;
newButtonFrame.origin.x += translation.x;
newButtonFrame.origin.y += translation.y;
draggedButton.frame = newButtonFrame;
[recognizer setTranslation:CGPointZero inView:self.view];
}
}
ИСПРАВЛЕНО в соответствии с комментарием Рохана-Пателя.
В ранее опубликованном коде координаты x и y начала координат кнопки были установлены напрямую.Это было неверно как: draggedButton.frame.origin.x += translation.x
.Рамка вида может быть изменена, но компоненты рамки не могут быть изменены напрямую.