Как я могу перетащить кнопку? - PullRequest
4 голосов
/ 17 апреля 2011

У меня есть кнопка UIB, которую я бы хотел, чтобы пользователь мог перетаскивать с помощью TouchDragInside.Как заставить кнопку двигаться, когда пользователь двигает пальцем?

Ответы [ 3 ]

13 голосов
/ 18 апреля 2011

Как заметил Джейми, вероятно, стоит использовать средство распознавания жестов панорамирования.Код будет выглядеть примерно так:

Контроллер вида кнопки может добавить распознаватель жестов к кнопке (возможно, в 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.Рамка вида может быть изменена, но компоненты рамки не могут быть изменены напрямую.

6 голосов
/ 18 апреля 2011

Возможно, вы не хотите использовать TouchDragInside.Это метод распознавания того, что кнопка или другой элемент управления был активирован определенным образом.Чтобы переместить кнопку, вы, вероятно, захотите использовать UIPanGestureRecognizer, а затем изменить положение кнопок в ее суперпредставлении, когда палец пользователя перемещается.

0 голосов
/ 18 апреля 2011

Вы должны реализовать эти четыре метода: touchesBegan: withEvent :, touchesMoved: withEvent :, touchesEnded: withEvent: и touchesCancelled: withEvent: в представлении, которое удерживает кнопку.Свойство, на которое вы ссылаетесь, не может быть напрямую использовано для перетаскивания любого вида

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...