我有一个包含两个UIImageView的UIView(一个是卡通,另一个是它的特殊阴影)。 “self”是UIView的对象。
点按我想通过卷曲效果从其超级视图中删除UIView。这非常好。
但在它卷曲之前,我想删除我定制的阴影UIImageView,这样我的阴影就不会与卷曲效果阴影一起卷曲。在动画不起作用之前,从UIView右侧删除UIImageView。
我的代码:
[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 release],也没有做任何事情。
我尝试了很多东西并且谷歌搜索超过3个小时。例如,我试过
[self setNeedsDisplay];
或
animations:^ { [myShadow setImage:nil]; [self setHidden:YES];}
我玩过这个,但在动画播放之前没有让myShadow消失。
我该怎么办?谢谢。
答案 0 :(得分:2)
我会在删除阴影时尝试这个:
[ 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后添加它:
[ self displayIfNeeded ];
这不是[self setNeedsDisplay]。 setNeedsDisplay不会立即发生任何事情,而只是将视图标记为需要显示,这将在稍后发生。 displayIfNeeded将导致视图立即绘制。
可能只需将setNeedsDisplay更改为displayIfNeeded就可以了。