UIView的animateWithDuration延迟不延迟动画

Ase*_* H. 11 iphone block objective-c delay ios

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

似乎延迟从未发生过.翻转完成后文本会立即更改,尽管我在完成块中使用 UIView animateWithDuration:0.5 延迟:4.0.如果相反,我performSelectorcompletion 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];
    }];
}
Run Code Online (Sandbox Code Playgroud)

XJo*_*nes 20

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

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

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


Nik*_*iev 7

就我而言,这个问题是在前面我打电话的代码UIViewsnapshotViewAfterScreenUpdates一个值true.改变它后false它工作正常.

  • 我遇到了同样的问题,您节省了调试时间,所以谢谢:)。就我而言,我无法将此值设置为false,因此我仅使用dispatch_after来执行此特定动画,并且效果很好。 (2认同)