UIView的animateWithDuration延迟不延迟动画

问题描述 投票:11回答:2

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

似乎延迟从未发生过。翻转完成后文本会立即更改,尽管我在完成块中使用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];
    }];
}
ios objective-c iphone block delay
2个回答
20
投票

delayanimateWithDuration:delay:options:animations:completion参数指定动画发生前的延迟。您正在动画块中设置文本,因此在延迟结束后,动画开始立即更改文本,因为该更改不可动画。要执行所需操作,请按如下所示更改完成块中的文本:

    [UIView animateWithDuration:0.5
                          delay:4.0
                        options: UIViewAnimationOptionTransitionCrossDissolve
                     animations:^{ // anything animatable }
                     completion:^(BOOL finished) {
                         currentShapeNameLabel.text =  @"New Text" ;}];

如果希望动画立即启动,可以消除延迟。如果您希望在动画完成后4秒发生文本更改,请使用dispatch_after()performSelector:withDelay:在完成块中添加该延迟。


7
投票

在我的情况下,问题是在代码的早期我调用UIViewsnapshotViewAfterScreenUpdatestrue。将其更改为false后,它工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.