UIView设置动画时光栅化子视图



我正在为一个UIView设置动画,该UIView包含一个用CGPath元素绘制的图形

myView.frame=CGRectMake(0,0,1024,768);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1];
myView.frame=CGRectMake(0,0,0,768);
[UIView commitAnimations];

这在我第一次运行此代码块时运行得很好,但当我稍后使用setNeedsDisplay时,我无法强制更新myView。当我执行代码时,动画会按预期发生,但它总是显示我发送的第一个图形。在更新之前,我已经确认向视图发送了正确的信息。当我对此进行故障排除时,我将myView的目标宽度设置为80。这会导致一切正常工作,除了我的CGPath绘图似乎是光栅化的(有些图的视图变得模糊,有些图看起来有点像素化)。当宽度设置为0时,不会发生光栅化。这让我想到了3个问题:

1) 如果视图的宽度为零,我是否无法强制重新绘制它(当视图的宽度是0时,它会"消失"吗)?

2) 如何在不光栅化内容的情况下设置此视图的动画?只有当我更改视图的尺寸,而不是位置或不透明度时,才会出现这种情况。

3) 当我设置动画到零宽度时,为什么内容不光栅化?

由于零宽度视图没有区域,因此它不想绘制自己也就不足为奇了。

更改视图的大小时,视图将使用其contentMode属性来决定如何重新绘制其内容。contentMode的默认值是UIViewContentModeScaleToFit,这意味着它只是缩放以前的内容以适应新的大小。尝试将视图的contentMode属性设置为UIViewContentModeRedraw。此消息告诉它在调整大小时向自己发送setNeedsDisplay

最新更新