UIViewAnimationOptionAllowUserInteraction не работает

Я пытаюсь обнаружить прикосновение, пока мой UIImageView анимируется. Обнаружение касания работает до начала анимации и после ее остановки, но не во время.

Я пытался добавить UIViewAnimationOptionAllowUserInteraction, но, похоже, это не дало никакого эффекта!

Может ли кто-нибудь указать мне в правильном направлении?

Код:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [touches anyObject];
    NSLog(@"tag=%@", [NSString stringWithFormat:@"%i", touch]);
    if ([touch view] == itemCoke)
    {
        NSLog(@"Coke Touched");
    }

}

- (IBAction)removeItemButton:(id)sender {
    NSLog(@"Pushed");


    [UIView animateWithDuration:5 
                          delay:0.0         
                        options:UIViewAnimationOptionAllowUserInteraction
                     animations:^
                             {
                                 itemCoke.transform = CGAffineTransformRotate(itemCoke.transform, (M_PI*-0.5));
                                 itemCoke.frame = CGRectMake(50, 50, 50, 50);
                             }
                     completion:^(BOOL finished){}];   
}

Спасибо за любой совет!


person Synchro    schedule 01.03.2012    source источник


Ответы (2)


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

person NJones    schedule 01.03.2012

это должно помочь

-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
if ([[self.layer presentationLayer] hitTest:point]) {
    return self;
}
return [super hitTest:point withEvent:event];}

напишите это в вашем uiview

person Taha Selim Bebek    schedule 19.09.2012
comment
Будь осторожен. Если пользователь коснется места, в котором происходит анимация представления, это вернет ложное срабатывание (поскольку, хотя проверка на попадание presentationLayer завершится неудачно, super будет использовать целевой кадр для целей проверки на попадание. - person Rob; 07.02.2021