Захват динамического нажатия кнопки IOS - PullRequest
1 голос
/ 10 февраля 2012

У меня есть кнопка, созданная программно в UIImageView. Это представление также было создано программно. При нажатии на изображение в этом представлении создается кнопка, и теперь я хочу сделать снимок, когда нажата эта кнопка, но я не могу вот мой соответствующий код:

- (void)imageTapped:(UIGestureRecognizer *)sender{ 
    MyImageView *myView = (MyImageView *)sender.view;
    NSLog(@"Image tapped is => %@", myView.currentImageName); 

    //add button to view
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button addTarget:self 
               action:@selector(pressedPlay:)
     forControlEvents:UIControlEventTouchDown];

    //button image
    UIImage *backgroundImage = [UIImage imageNamed:[NSString stringWithFormat:@"playbutton.png"]];

    button.frame = CGRectMake(85.0, 175.0, backgroundImage.size.width, backgroundImage.size.height);

    myView.userInteractionEnabled = YES;
    button.userInteractionEnabled = YES;

    [button setImage:backgroundImage forState:(UIControlStateNormal)];
    [myView addSubview:button];
}

Теперь этот код должен обрабатывать сигнал, но по какой-то причине это не так:

- (void)pressedPlay:(UIGestureRecognizer *)sender{ 
    //MyImageView *senderView = (MyImageView *) sender.view;
    NSLog(@"%@", @"I Presed button");    
}

Любая причина, почему это не работает?

Ответы [ 4 ]

1 голос
/ 10 февраля 2012

Ваш код предполагает, что вы используете UIGestureRecognizer (скорее всего, UITapGestureRecognizer) для обнаружения первоначального нажатия.Проблема в том, что UIGestureRecognizer является жадным и мешает UIButton получать прикосновение.

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

UIGestureRecognizer имеет свойство

@property(nonatomic, getter=isEnabled) BOOL enabled

, или вы можете выбрать реализацию UIGestureRecognizerDelegate и предоставить реализацию

gestureRecognizer:shouldReceiveTouch:

очень простая попытка может выглядеть так:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
{
    return ![touch.view isKindOfClass:[UIButton class]];
}

и не забудьте установить делегата на распознаватель жестов

myGesture.delegate = self;
0 голосов
/ 10 февраля 2012

[кнопка setExclusiveTouch: YES];

0 голосов
/ 10 февраля 2012

Кадр Button, вероятно, устанавливает кнопку за пределами UIImageView, кадры всегда относительно координаты суперпредставлений, в данном случае UIImageView.

0 голосов
/ 10 февраля 2012

установить рамку кнопки из:

button.frame = CGRectMake(85.0, 175.0, backgroundImage.size.width, backgroundImage.size.height);

до:

button.frame = CGRectMake(0,0, backgroundImage.size.width, backgroundImage.size.height);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...