关于iPhone:忽略transitionWithView动画之前对UIView所做的更改

Changes to UIView before transitionWithView animation are ignored

我有一个包含两个UIImageView的UIView(一个是卡通,另一个是它的特殊阴影)。 " self "是UIView对象。

在水龙头上,我想通过卷曲效果从其超级视图中删除UIView。效果很好。

但是在卷曲之前,我想删除自定义的阴影UIImageView,以使我的阴影不会与卷曲效果阴影一起卷曲。在动画之前,无法从UIView中删除UIImageView。

我的代码:

1
2
3
4
5
6
[myShadow setImage:nil];

[UIView transitionWithView:self duration:1.0
 options:UIViewAnimationOptionTransitionCurlUp
 animations:^ { [self setHidden:YES];}
 completion:nil];

这不会删除myShadow。当我注释掉transitionWithView myShadow时,就很好了,但是-当然-之后没有动画。

使用setImage:nil之后的动画不会显示任何效果。我还尝试了[myShadow removeFromSuperview]和[myShadow版本],也什么也没做。

我尝试了很多事情,并进行了3个多小时的谷歌搜索。例如我试过

1
[self setNeedsDisplay];

1
 animations:^ { [myShadow setImage:nil]; [self setHidden:YES];}

我玩过这个游戏,但没有让myShadow在动画之前消失。

我该怎么办?谢谢。


移除阴影时,我会尝试以下操作:

1
2
3
4
5
6
7
8
9
10
11
[ CATransaction begin ];
[ CATransaction setValue: [ NSNumber numberWithBool: YES ]
        forKey: kCATransactionDisableActions ];
[ myShadow setImage: nil ];
[ CATransaction commit ];

[ UIView transitionWithView: self
        duration: 1.0
        options: UIViewAnimationOptionTransitionCurlUp
        animations: ^ { [ self setHidden: YES ]; }
        completion: nil ];

这应该避免在过渡发生时阴影动画消失的任何问题。如果那仍然不起作用,那么您可以在将阴影图像设置为nil后尝试添加它:

1
[ self displayIfNeeded ];

这代替了[self setNeedsDisplay]。 setNeedsDisplay不会立即导致任何事情发生,而只是将视图标记为需要显示,这将在以后发生。 displayIfNeeded将导致视图立即绘制。

可能只需将setNeedsDisplay更改为displayIfNeeded即可。