2013-11-20 3 views
2

У меня есть UIImageView, который перемещается по экрану, и я добавил изображение UITapGestureRecognizer. Все работает отлично и денди, однако, когда изображение начинает слишком быстро перемещаться по экрану, становится все труднее выявлять и распознавать.UITapGestureRecognizer радиус отвода

Если вы посмотрите на это изображение, вы увидите зеленый квадрат вокруг 2 фигур палки.

http://i.stack.imgur.com/3x7rT.png

Скажем, к примеру, вы должны коснуться внутри зеленый квадрат для того, чтобы зарегистрироваться в качестве «крана». В настоящее время это похоже на верхнее изображение, но я хотел бы иметь дополнительное дополнение, например, в нижнем изображении. Итак, как я мог сделать область, где UITapGestureRecognizer больше?

+0

Смотрите http://stackoverflow.com/questions/15553810/how-to-enlarge-hit-area-of-uigesturerecognizer/15554009#15554009 – rmaddy

+0

Это казалось просто изменить размер моего изображения , Я хочу, чтобы фактический размер изображения был таким же, но имел больший радиус нажатия. – Xerif917

+1

Невозможно, чтобы этот код менял размер представления. Он изменяется только там, где он обнаруживает событие касания. – rmaddy

ответ

0

Вместо того, чтобы добавить распознаватель жестов к изображению, добавьте его в супервизор изображения. Перейдите по подзонам, чтобы найти представление, которое должно получить жест tap. Например:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIView *containerView = [self view]; 

    UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]; 
    [containerView addGestureRecognizer:tapRecognizer]; 
} 

- (void)tap:(UITapGestureRecognizer *)sender 
{ 
    UIView *containerView = [sender view]; 
    CGPoint location = [sender locationInView:containerView]; 

    for (UIView *subview in [[containerView subviews] reverseObjectEnumerator]) { 
     if (![subview isKindOfClass:[UIImageView class]]) { 
      continue; 
     } 
     if (CGRectContainsPoint([subview frame], location)) { 
      [self imageViewTapped:(UIImageView *)subview]; 
      return; 
     } 
    } 
} 

- (void)imageViewTapped:(UIImageView *)imageView 
{ 
    // do something when an image view is tapped 
} 
+0

Это не поможет, если вы также не расширяете отображаемую область кадра, возможно, используя 'CGRectInset (subview.frame, someNegativeFloat, someNegativeFloat)'. –

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