Метод делегата UIGestureRecognizer никогда не вызывается

Попытка сделать несколько перетаскиваемых изображений в подвиде прокрутки. Но ничего не происходит. У кого-нибудь есть идеи, почему точка останова в handlePan никогда не срабатывает? :'( Спасибо, если поможете!

-(void) viewWillAppear:(BOOL)animated
{
    twView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"twitter"]];
    [self.springView addSubview:twView];
    [twView setFrame:CGRectMake(100, 100, 60, 60)];

    fbView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"facebook"]];
    [self.springView addSubview:fbView];
    [fbView setFrame:CGRectMake(200, 200, 60, 60)];

    g1 = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    [twView addGestureRecognizer:g1];
    g1.delegate = self;

    g2 = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    [fbView addGestureRecognizer:g2];
    g2.delegate = self;

}

-(void)handlePan:(UIPanGestureRecognizer *)gesture
{
    ... do amazing things
}

person Sparklellama    schedule 20.02.2015    source источник
comment
Вам не нужно устанавливать для него делегата. Вы уже назначили селектор для цели.   -  person ugur    schedule 21.02.2015


Ответы (3)


Основываясь на том, что у вас есть здесь, это, вероятно, одна из двух вещей. Либо в вашем представлении изображения userInteractionEnabled не установлено значение "да", либо есть другое представление поверх ваших изображений, блокирующее жесты.

person InkGolem    schedule 20.02.2015
comment
Кажется, что UIImageView имеет userInteractionEnabled значение false по умолчанию при программном создании. Спасибо! - person Sparklellama; 21.02.2015

Встроенный распознаватель жестов панорамирования подкласса UIScrollView, вероятно, перехватывает жест.

Убедитесь, что ваш контроллер представления реализует протокол UIGestureRecognizerDelegate и реализует

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES; 
}
person Earl Grey    schedule 20.02.2015
comment
Этот ответ также полезен, кажется, у меня было более одной проблемы. К сожалению, пометка двух вещей как правильных, похоже, не работает (что неудивительно), поэтому голосование будет иметь 2 действия :( - person Sparklellama; 21.02.2015

Еще одна вещь, которая мне помогает, это набор распознавателей жестов.

UITapGestureRecognizer *loginTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(loginButtonAction)];
loginTap.delegate = self;
[self.loginButton setUserInteractionEnabled:YES];
[self.loginButton addGestureRecognizer:self.loginTap];

И после назначения делегата самому себе он получит вызов в методах делегата

person Mr.Fingers    schedule 11.11.2016