Перемещение UIButton с помощью касания

#ios #events #uiview #uibutton #touch

#iOS #Мероприятия #uiview #uibutton #коснитесь

Вопрос:

Я использую :

 [button addTarget:self action:@selector(moved:) forControlEvents:UIControlEventTouchDragInside];
 

Перемещение кода функции:

 - (IBAction)moved:(id)sender {
UIButton *t = sender;

UITouch *touch = [touch self];

CGPoint touchPoint = [touch locationInView: self];

t.center = touchPoint;
}
 

Итак, когда я начинаю перетаскивать кнопку, она внезапно появляется в левом верхнем углу (Coord: 0; 0). Я думал, что это проблема, потому CGPoint touchPoint = [touch locationInView: self]; что работает неправильно.
У меня есть 3 класса: ViewController, который реализует:

 view = [[MainView alloc] initWithFrame:[self.view frame] ];
[self.view addSubview:view];
 

где view — это объект класса mainview (подкласс uiview). В mainview я создаю объект класса Button (подкласс uiview):

 [self addSubview:but];
 

Затем в кнопке класса я создаю UIButton, связывающийся с событием UIControlEventTouchDragInside (см. Начало поста).

Итак, как я должен исправить свой код, чтобы кнопка правильно перемещалась в точку касания???

PS Извините за мой ужасный английский =)

Ответ №1:

Если вы действительно хотите придерживаться UIControlEventTouchDragInside, тогда используйте фрагмент ниже. Лично я бы вместо этого использовал UIPanGestureRecognizer.

 - (IBAction)moved:(UIButton *)sender {
    UITouch *touch = [touch self];
    CGPoint touchPoint = [touch locationInView: sender.superview];
    sender.center = touchPoint;
}
 

Комментарии:

1. Бартош Цехановский — спасибо за хорошую идею! Но это похоже на ту же проблему; например, моя точка касания (x; y), но она распознается как (x-100; y-100)!?? В моих предыдущих проектах все было хорошо, но теперь я понятия не имею, что произошло.

2. Тогда я бы сразу перешел к UIPanGestureRecognizer 🙂