在transitionWithView动画被忽略之前对UIView的更改

时间:2011-09-25 18:44:39

标签: iphone objective-c xcode

我有一个包含两个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消失。

我该怎么办?谢谢。

1 个答案:

答案 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就可以了。