Не могу коснуться во время анимации (блочная анимация) - PullRequest
9 голосов
/ 14 октября 2011

У меня есть вид с UIButton, UITextField и UIImageView для фона.

in viewDidLoad Я пытаюсь анимировать UIImageView от альфа = 0 до альфа = 1, используя блок.это довольно просто, вот код:

[UIView animateWithDuration:1.5 animations:^(void){

    ((UIView*)[self.view viewWithTag:123]).alpha = 1;
}completion:^(BOOL finished){
}];

, который работает нормально.но в течение этих 1,5 секунд анимации мое касание в текущем виде кажется отключенным.я не могу нажать ни одну из кнопок или текстовых полей, пока анимация не закончится.

Заранее спасибо

Ответы [ 5 ]

29 голосов
/ 14 октября 2011

Вы должны использовать опцию UIViewAnimationOptionAllowUserInteraction , как в следующем примере:

[UIView animateWithDuration:1.0 
                      delay:0 
                    options:UIViewAnimationOptionAllowUserInteraction 
                 animations:^{ myView.alpha = 0.5; } 
                 completion:NULL];
2 голосов
/ 28 сентября 2016

UIView пользовательское взаимодействие в анимации с использованием .allowUserInteraction для Swift 3 +, iOS 10

Добавить к анимации вызов флага UIViewAnimationOptions .allowUserInteraction

UIView.animate(withDuration: 1.0, delay: 0.0, usingSpringWithDamping: 0.4, initialSpringVelocity: 0.0, options: [.curveEaseIn,.allowUserInteraction], animations: {

            //your animation block

            }, completion: { isAnimated in
            //after animation is done
    })
1 голос
/ 26 апреля 2013

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

//create button and view
UIButton *viewNotificationBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, ([UIScreen mainScreen].bounds.size.height -70), 320, 50)];
UIView *viewNotificationView = [[UIView alloc] initWithFrame:CGRectMake(0, ([UIScreen mainScreen].bounds.size.height), 320, 50)];

//add elements to screen
[self.view addSubview:viewNotificationView];
[self.view insertSubview:viewNotificationBtn aboveSubview:viewNotificationView];


[UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
    [viewNotificationView setFrame:CGRectMake(0, ([UIScreen mainScreen].bounds.size.height - 70), 320, 50)];
} completion:^(BOOL finished) {
    [UIView animateWithDuration:0.5 delay:10.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
        viewNotificationView.alpha = 0;
    } completion:^(BOOL finished) {
        [viewNotificationView removeFromSuperview];
        [viewNotificationBtn removeFromSuperview];
    }];
}];
0 голосов
/ 22 февраля 2012

В итоге я этого не делал.Вы не можете коснуться вида, который все еще оживляет.это мой вывод.Хотелось бы услышать хоть немного об этом.

0 голосов
/ 14 октября 2011

Используйте метод animateWithDuration:delay:options:animations:completion: и установите UIViewAnimationOptionAllowUserInteraction в качестве опции

...