iOS перетаскивание UIImageView - PullRequest
5 голосов
/ 28 июня 2011

Хорошо, так что я всегда задавался вопросом, как мне на самом деле взять представление изображения и перетащить его. Я планировал, когда я перетаскиваю представление изображения, и когда пользователь помещает его в правильное местоположение, оно блокируется там. Я действительно понятия не имею, как это сделать, и это беспокоило меня некоторое время.

Большое спасибо заранее!

Ответы [ 3 ]

7 голосов
/ 23 мая 2013

Или вы можете использовать UIPanGestureRecognizer, если вы не хотите создавать подкласс вида и обрабатывать его прикосновением.

Создать распознаватель панорамирования в любом классе (например, контроллер представления) и добавить его в свой вид:

UIPanGestureRecognizer * panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self
                                                                                 action:@selector(handlePanGesture:)];
[myDraggedView addGestureRecognizer:panRecognizer];

А потом просто:

- (void)handlePanGesture:(UIPanGestureRecognizer *)gestureRecognizer
{
    CGRect frame = myDraggedView.frame;
    frame.origin = [gestureRecognizer locationInView:myDraggedView.superview];
    myDraggedView.frame = frame;
}

Если вам нравится Интерфейсный конструктор так же, как и мне, вы можете просто перетащить средство распознавания жестов панорамирования на изображение, изатем подключите распознаватель к handlePanGesture:, который должен быть объявлен как IBAction вместо void.

3 голосов
/ 28 июня 2011

Если вы один для чтения, посмотрите UIResponder Ссылка на класс и, в частности, touchesBegan и touchesMoved.

0 голосов
/ 06 июля 2017

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

class DraggableImageView: UIImageView {
      var beganPoint: CGPoint? = nil
      var originCenter: CGPoint? = nil
      override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
           if let position = touches.first?.location(in: superview){
                beganPoint = position
                originCenter = center
           }
      }
      override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
      }
      override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
           if let position = touches.first?.location(in: superview){
                let newPosition = CGPoint(x: position.x - (beganPoint?.x)!, y: position.y - (beganPoint?.y)!)
                center = CGPoint(x: (originCenter?.x)! + newPosition.x, y: (originCenter?.y)! + newPosition.y)
           }
      }
}

Просто используйте этот пользовательский класс с вашим UIImageView

...