#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 🙂