我试图在翻转动画发生的标签上执行动画,在完成后和延迟之后,标签的文本会发生变化。
似乎延迟从未发生过。翻转完成后文本会立即更改,尽管我在完成块中使用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];
}];
}
delay
的animateWithDuration: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:
在完成块中添加该延迟。
在我的情况下,问题是在代码的早期我调用UIView
的snapshotViewAfterScreenUpdates
值true
。将其更改为false
后,它工作正常。