我正在尝试在发生翻转动画的标签上执行动画,在完成后和延迟之后,标签的文本会发生变化。
似乎延迟从未发生过。尽管我在完成块中使用UIView animateWithDuration:0.5
延迟:4.0 ,但翻转完成后文本会立即更改。如果相反,我在performSelector
(注释语句)中执行带有延迟的completion block
,它按预期工作。知道延迟值被忽略的原因吗?
- (void) flipShapeWithText:(NSString *)text {
[UIView transitionWithView:someLabel duration:0.15 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
someLabel.text = text;
}completion:^ (BOOL finished){
// [self performSelector:@selector(updateLabelText:) withObject: @"New Text" afterDelay:4.0];
[UIView animateWithDuration:0.5
delay:4.0
options: UIViewAnimationOptionTransitionCrossDissolve
animations:^{
currentShapeNameLabel.text = @"New Text" ;}
completion:nil];
}];
}
答案 0 :(得分:20)
delay
的{{1}}参数指定动画发生前的延迟。您正在动画块中设置文本,因此在延迟结束后,动画开始立即更改文本,因为该更改不可动画。要执行所需操作,请按如下所示更改完成块中的文本:
animateWithDuration:delay:options:animations:completion
如果您想立即启动动画,可以消除延迟。如果您希望在动画完成后4秒发生文本更改,请使用 [UIView animateWithDuration:0.5
delay:4.0
options: UIViewAnimationOptionTransitionCrossDissolve
animations:^{ // anything animatable }
completion:^(BOOL finished) {
currentShapeNameLabel.text = @"New Text" ;}];
或dispatch_after()
在完成块中添加该延迟。
答案 1 :(得分:7)
在我的情况下,问题在于我在代码的前面调用UIView
snapshotViewAfterScreenUpdates
,其值为true
。将其更改为false
后,工作正常。
答案 2 :(得分:0)
尝试在
中嵌套dispatch_async(dispatch_get_main_queue(), ^{
});