2017-02-10 23 views
0

Я работаю над видом приложения для сидения. Если приложение позволяет администратору размещать сидячие места, щелкнув и переместив каждое сиденье, а затем сохраните сидение с размерами рамы каждого сиденья. Я попытался загрузить 5 UIImageView на пользовательском представлении и переместить изображение, но только одно изображение просматривается. Остальная часть изображений не перемещается. Не могли бы вы помочь мне в этом?Как легко перемещать массив UIImageViews?

- (void) addSeatsToTheView { 

    for (int i=0; i<5; i++) { 

     self.hotelImage = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 50, 50)]; 
     self.hotelImage.image = [UIImage imageNamed:@"DiningIcon"]; 
     self.hotelImage.userInteractionEnabled = YES; 
     [self.hotelImage setUserInteractionEnabled:YES]; 
     self.hotelImage.tag = i; 
     [self.hotelView addSubview:self.hotelImage]; 
    } 
} 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    if (touch.view == self.hotelImage) { 
     CGPoint location = [touch locationInView:self.hotelView]; 
     NSLog(@"Begen Touch Location: %@", NSStringFromCGPoint(location)); 
     self.hotelImage.frame=CGRectMake(location.x, location.y, 50, 50); 
    } 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    if (touch.view == self.hotelImage) { 
     CGPoint location = [touch locationInView:self.hotelView]; 
     NSLog(@"Begen Touch Location: %@", NSStringFromCGPoint(location)); 
     self.hotelImage.frame=CGRectMake(location.x, location.y, 50, 50); 
    } 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    if (touch.view == self.hotelImage) { 
     CGPoint location = [touch locationInView:self.hotelView]; 
     NSLog(@"Begen Touch Location: %@", NSStringFromCGPoint(location)); 
     self.hotelImage.frame=CGRectMake(location.x, location.y, 50, 50); 
    } 
} 

Как только администратор разместил кресла, мы должны сохранить все видимые каркасы uiimageview. Благодарю.

Отредактировано:

Я попытался с помощью UIPanGestureRecognizer, но только один ImageView получение переехал. Не знаете, где я ошибаюсь? Не могли бы вы мне помочь? Благодарю.

- (void) addSeatsToTheView { 

    for (int i=0; i<5; i++) { 

     self.hotelImage = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 50, 50)]; 
     self.hotelImage.image = [UIImage imageNamed:@"DiningIcon"]; 
     self.hotelImage.userInteractionEnabled = YES; 
     [self.hotelImage setUserInteractionEnabled:YES]; 
     self.hotelImage.tag = i; 
     UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(gestureRecognizerMethod:)]; 
     [self.hotelImage addGestureRecognizer:panGestureRecognizer]; 
     [self.hotelView addSubview:self.hotelImage]; 
    } 
} 

- (void)gestureRecognizerMethod:(UIPanGestureRecognizer *)recogniser 
{ 
    if (recogniser.state == UIGestureRecognizerStateBegan || recogniser.state == UIGestureRecognizerStateChanged) 
    { 
     CGPoint touchLocation = [recogniser locationInView:self.hotelView]; 
     self.hotelImage.frame = CGRectMake(touchLocation.x, touchLocation.y, 50, 50); 
    } 
} 

ответ

3

Не использовать touches методы для этого; вы сойдете с ума. Сделайте каждый просмотр изображения интерактивным и дайте ему UIPanGestureRecognizer. Существует стандартный код для обработчика действия распознавателя жестов, который следует за пальцем, т. Е. Делает просмотр перетаскиваемым.

Как только вы это сделали, все проистекает из вашего неправильного использования self.hotelImage. Избавиться от этого полностью. В вашем цикле for просто используйте локальную переменную UIImageView* hotelImage = .... В методе распознавания жестов используйте [recogniser view], чтобы обратиться к изображению, на которое этот жест распознавателя прилагается. После этого все само собой разумеется!

+0

Hi Matt. Спасибо за ваш ответ. Я также попробовал UIPanGestureRecognizer. Я редактировал свой вопрос. Все еще только одно изображение просматривается. Вы можете мне помочь? Благодарю. –

+0

Конечно, я вижу проблему с вашим новым кодом. Подождите секунду, я добавлю к своему ответу. – matt

+0

Спасибо, Мэтт. У меня проблема, и теперь она работает. Благодарю. –