Как да използвате 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. Ето модифицирания код, но само photoImage2 UIImageView ще се панорамира. - (void)viewDidLoad { ... [photoImage setUserInteractionEnabled:YES]; [photoImage2 setUserInteractionEnabled:YES]; [photoImage 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 = translatedPoint; } - person gobsofrob; 23.11.2011
comment
UIPanGestureRecognizer *разпознавател = (UIPanGestureRecognizer *)изпращач; UIView *selectedView = [изглед на разпознавателя]; CGPoint point = [разпознавател translationInView:self.view]; if ([състояние на разпознавателя] == UIGestureRecognizerStateBegan) { firstX = selectedView.center.x; firstY = selectedView.center.y; } точка = CGPointMake(firstX+point.x, firstY+point.y); [selectedView setCenter:point]; 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