блок завершения анимации uiview никогда не вызывается, если вид исчезает - PullRequest
8 голосов
/ 30 января 2012

я заметил какое-то странное поведение.Когда я запускаю анимацию и изменяю представление (представление не отклоняется!), Обработчик завершения никогда не вызывается.

[UIView animateWithDuration:0.1f 
                          delay:0.0f 
                        options:UIViewAnimationCurveEaseOut 
                     animations:^(void){
                         [myView setHidden:YES];
                         myLabel.alpha = 0.0f;
                         someOtherView.frame = CGRectMake(130, bubbleBigRect.origin.y, 61, 65);
                         [button setHidden:YES];
                     } 
                     completion:^(BOOL finished){
                         NSLog(@"Complete %d",finished);
                         [imageVIew setImage:[UIImage imageNamed:@"myPng.png"]];                    
                     }];
}

Есть ли какое-либо решение для этого?

Ответы [ 4 ]

5 голосов
/ 23 января 2013

Не знаю, где это написать, но я получаю то же самое, что и у вас, но в моем случае иногда вызывался блок завершения. Это может быть то же самое.
Я обнаружил, что если в блоке анимации ничего не было анимированным, например, если вы установили alpha = 0 для uiview, для которого alpha уже равно 0, или вы установили смещение контента на UIScrollView с тем же смещением контента (как в моем случае) блок завершения не вызывается.

1 голос
/ 27 января 2014

Поместите это в свой блок анимации и поместите все, что вы хотите сделать по завершении, в метод YOUR_SELECTOR. Теперь вы можете делать с вашим взглядом все, что захотите, и у вас все еще есть способ выполнить что-то по завершении!

[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(YOUR_SELECTOR)];
0 голосов
/ 05 мая 2016

В моем случае для представления, которое я анимировал, был установлен фрейм (0, -568,320,568), и после анимации я забыл изменить фрейм в его требуемое положение, т. Е. (0,0,320,568), чтобы блок завершения не вызывался , Смена кадра анимированного представления сделала всю работу за меня. Так что я могу сказать, если, например, представлению нечего показывать (поскольку рамка не была установлена ​​в видимой области) Блок завершения может не вызываться.

0 голосов
/ 29 апреля 2012

Переместите ваш вызов на [myView setHidden:YES] из блока animations в блок completion. Я думаю, что это, вероятно, поможет. Вы все еще можете установить альфа-значение myView на 0 во время блока animation (если вы хотите, чтобы он исчезал), или перед всем вызовом на -[UIView animateWithDuration:delay:options:animations:completion:], если вы хотите, чтобы он исчез сразу.

...