UIView的animateWithDuration延迟不延迟动画

时间:2011-11-23 16:18:11

标签: ios objective-c iphone block delay

我正在尝试在发生翻转动画的标签上执行动画,在完成后和延迟之后,标签的文本会发生变化。

似乎延迟从未发生过。尽管我在完成块中使用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];
    }];
}

3 个答案:

答案 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(), ^{
});