Как использовать UIPanGestureRecognizer для перемещения 2 или более UIImageViews

Этот сайт был очень полезен, когда дело доходит до объяснения того, как использовать UIPanGestureRecognizer для перемещения UIImageView, но у меня есть программа, в которой мне нужно переместить (т.е. панорамировать) более одного UIImageView, и я не могу найти пример того, как это сделать.

Я понимаю, что UIPanGestureRecognizer назначен UIView, но вместо того, чтобы иметь возможность панорамировать любой UIImageView в UIView, я знаю только код для панорамирования только одного UIImageView с UIView, как показано в коде ниже.

Вот код, который я использовал.

- (void)viewDidLoad {
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[_canvas addGestureRecognizer:panRecognizer];

[super viewDidLoad]; }


-(void)move:(id)sender {
CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:_canvas];

if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
    _firstX = [photoImage center].x;
    _firstY = [photoImage center].y;
}

translatedPoint = CGPointMake(_firstX+translatedPoint.x, _firstY+translatedPoint.y);
[photoImage setCenter:translatedPoint]; }

Я могу панорамировать UIImageView с именем photoImage, но знаю, как будет выглядеть код для панорамирования более чем одного UIImageView.

Спасибо заранее за вашу помощь.


person gobsofrob    schedule 21.11.2011    source источник


Ответы (2)


Вы должны добавить распознаватель жестов ко всем своим изображениям вместо файла _canvas. А также установите для userInteractionEnabled значение YES для этих представлений.

[imageView setUserInteractionEnabled:YES];
[imageView addGestureRecognizer:panRecognizer];
person Hanon    schedule 21.11.2011
comment
Спасибо за вашу помощь @Yadyn. Вот модифицированный код, но панорамировать будет только UIImageView photoImage2. - (void)viewDidLoad { ... [photoImage setUserInteractionEnabled:YES]; [photoImage2 setUserInteractionEnabled:YES]; [фотоИзображение addGestureRecognizer:panRecognizer]; [photoImage2 addGestureRecognizer:panRecognizer]; ... } -(void)move:(id)sender { ... _firstX = [(UIPanGestureRecognizer*)sender locationInView:self.view].x; _firstY = [(UIPanGestureRecognizer*)sender locationInView:self.view].y; } ... [(UIPanGestureRecognizer*) представление отправителя].center = translationPoint; } - person gobsofrob; 23.11.2011
comment
UIPanGestureRecognizer *recognizer = (UIPanGestureRecognizer *)sender; UIView *selectedView = [вид распознавателя]; Точка CGPoint = [распознаватель translationInView:self.view]; if ([состояние распознавателя] == UIGestureRecognizerStateBegan) { firstX = selectedView.center.x; firstY = selectedView.center.y; } точка = CGPointMake(firstX+point.x, firstY+point.y); [выбранный вид setCenter: точка]; if ([состояние распознавателя] == UIGestureRecognizerStateEnded) { [selectedView setCenter:point]; } Я использую этот код, и он отлично работает независимо от того, сколько просмотров - person Hanon; 23.11.2011

Я только что написал приложение для кого-то, что делает именно это действие. По сути, все, что вам нужно сделать, это создать представление изображения и вставить его в NSArray как таковое:

NSArray *imageViews = @[imageView, imageView2];

Затем просто пройдитесь по каждому из них, используя цикл for.

for (int i = 0; i < imageViews.count; i++) {
     [imageViews[i] setUserInteractionEnabled:YES];
     [imageViews[i] addGestureRecognizer:panRecognizer];
}

Это все, что требуется, чтобы это действие сработало. Просто убедитесь, что приведенный выше код находится в вашем методе viewDidLoad, потому что именно там вы создаете свой panGesture.

Надеюсь это поможет!

person user2277872    schedule 19.06.2014