Хотя UIView не имеет встроенной поддержки для перемещения по перетаскиванию пользователя, его не должно быть так сложно реализовать. Это даже проще, когда вы имеете дело только с перетаскиванием вида, а не с другими действиями, такими как касание, двойное касание, мультитач и т. Д.
Первое, что нужно сделать, это создать собственное представление, скажем, DraggableView
, создав подкласс UIView. Затем переопределите метод touchesMoved:withEvent:
в UIView, и вы можете получить текущее местоположение перетаскивания и переместить DraggableView. Посмотрите на следующий пример.
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *aTouch = [touches anyObject];
CGPoint location = [aTouch locationInView:self.superview];
[UIView beginAnimations:@"Dragging A DraggableView" context:nil];
self.frame = CGRectMake(location.x, location.y,
self.frame.size.width, self.frame.size.height);
[UIView commitAnimations];
}
И потому что все подпредставления объекта DraggableView тоже будут перемещены. Поэтому поместите все свои изображения и тексты как подвид объекта DraggableView.
То, что я реализовал здесь, очень просто. Однако, если вам нужно более сложное поведение при перетаскивании (например, пользователю нужно нажать на представление в течение нескольких секунд, чтобы переместить представление), вам придется переопределить другие методы обработки событий (touchesBegan: withEvent: и touchsEnd: withEvent), а также.