2

Я хочу реализовать функциональность жесты панорамы для изображения, это изображение является подвид прокрутки. проблема в том, что когда я пытаюсь прокрутить прокрутку, распознается жест панорамы изображения, а прокрутка не прокручивается. , пожалуйста, помогите мне с этим.pan gesture of UIImageView перемещает прокрутку

это код для инициализации сковороду в UIImageView:

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)]; 
      [panRecognizer setMinimumNumberOfTouches:1]; 
      [panRecognizer setMaximumNumberOfTouches:1]; 
      [panRecognizer setDelegate:self]; 
      [[[scrollView subviews] objectAtIndex:i] addGestureRecognizer:panRecognizer]; 

ImageView имеет набор пользователей на "YES"

и действие ибо она

-(void)move:(UIPanGestureRecognizer *)sender 
{ 
    [[[[[sender view] superview] superview] superview] bringSubviewToFront:sender.view]; 


    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) { 

     if ([[[sender view] superview] superview] == itemView) // adds the imageview in the item scroll 
     { 
      int tag = [[sender view] tag]/100; 
      UIScrollView *tempScroll = (UIScrollView *)[itemView viewWithTag:-tag]; 
      CGRect frame = CGRectFromString([itemFrameDict objectForKey:[NSString stringWithFormat:@"%i",[[sender view] tag]]]); 

      CGAffineTransform transform = temp.transform; 
      UIImageView *tempImageView = [[UIImageView alloc] initWithImage: [(UIImageView *) [sender view] image]]; 
      tempImageView.tag = [[sender view] tag]; 
      //NSLog(@"[sender view] superview] : %@", [[sender view] superview]); 
      tempImageView.frame = frame; 
      [tempImageView setTransform:transform]; 
      [tempImageView setFrame:frame]; 
      [tempImageView setUserInteractionEnabled:YES]; 
      [tempScroll addSubview:tempImageView]; 

      UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)]; 
      [panRecognizer setMinimumNumberOfTouches:1]; 
      [panRecognizer setMaximumNumberOfTouches:1]; 
      [panRecognizer setDelegate:self]; 
      [tempImageView addGestureRecognizer:panRecognizer]; 

      UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; 
      [singleTapGestureRecognizer setNumberOfTapsRequired:1]; 
      [tempImageView addGestureRecognizer:singleTapGestureRecognizer]; 
     } 
    } 

    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateChanged) 
    { 
     CGPoint translatedPoint = [sender locationInView:[[sender view] superview]] ; 
     newTranslatedPoint = [[[sender view] superview] convertPoint:translatedPoint toView:self.view]; 

     if ([sender view].frame.size.width == 35 && [sender view].frame.size.height == 35) 
      [[sender view] sizeToFit]; 

     [sender view].center = CGPointMake(newTranslatedPoint.x, newTranslatedPoint.y); //startFrame; 

     [self.view addSubview:[sender view]]; 
    } 

    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) 
    { 
     CGPoint newPoint = [[[sender view] superview] convertPoint:newTranslatedPoint toView:itemView]; 
     if (newPoint.y < 0)// || !viewUp) 
     { 
      //NSLog(@" baseView"); 
      [baseView addSubview:[sender view]]; 

      UITapGestureRecognizer *doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)]; 
      [doubleTapGestureRecognizer setNumberOfTapsRequired:2]; 
      [[sender view] addGestureRecognizer:doubleTapGestureRecognizer]; 

      UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)]; 
      [pinchRecognizer setDelegate:self]; 
      [[sender view] addGestureRecognizer:pinchRecognizer]; 

      UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)]; 
      [rotationRecognizer setDelegate:self]; 
      [[sender view] addGestureRecognizer:rotationRecognizer]; 
     } 

     else if (newPoint.y > 0)// && viewUp) 
     { 
      //NSLog(@" itemView"); 
      int tag = [[sender view] tag]/100; 
      UIScrollView *tempScroll = (UIScrollView *)[itemView viewWithTag:-tag]; 
      CGRect frame = CGRectFromString([itemFrameDict objectForKey:[NSString stringWithFormat:@"%i",[[sender view] tag]]]); 

      CGAffineTransform transform = temp.transform; 
      [[sender view] setTransform:transform]; 
      [[sender view] setFrame:frame]; 
      [tempScroll addSubview:[sender view]]; 
     } 
    } 
} 
+0

Пожалуйста, покажите, что вы делали при реализации жесты панорамирования. – Zen

+0

Также при использовании IB по умолчанию «UIImageView» не является включенным пользователем. Для распознавателей жестов при просмотре изображений вы должны включить это. – Zen

+0

@zen я добавил код, который я использую – Khushboo

ответ

3

I Я не уверен, что понимаю, чего вы пытаетесь достичь именно с помощью UIPanGestureRecognizer на UIImageView, который уже находится в UIScrollView. Но из вашего описания, похоже, вы хотите, чтобы UIScrollView сделал это, и для UIPanGestureRecognizer, чтобы не блокировать это. Я считаю, что вам нужно реализовать этот метод делегата для вашего UIPanGestureRecognizer:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
    return YES; 
} 

Пожалуйста, прочтите UIGestureRecognizerDelegate Protocol reference в отношении к возможности одновременного распознавания жестов. Согласно документации:

Реализация по умолчанию возвращает NO NO без двух жестов может быть распознается одновременно.

/* EDIT */

От UIPanGestureRecognizer - Only vertical or horizontal: Реализовать только одно направление для UIPanGestureRecognizer. Это для вертикальной кастрюли:

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)panGestureRecognizer { 
    CGPoint translation = [panGestureRecognizer translationInView:someView]; 
    return fabs(translation.y) > fabs(translation.x); 
} 
+0

на самом деле я реализую функциональность перетаскивания здесь – Khushboo

+0

я уже реализовали эту - (BOOL) gestureRecognizer: (UIGestureRecognizer *) gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer { return YES; } – Khushboo

+0

@ Khushboo, так что вы пытаетесь переместить UIImageView в UIScrollView? Прокручивается ли UIScrollView только по вертикали/по горизонтали или по обеим? – DonnaLea

Смежные вопросы