在视图上实现清晰的缩放动画
Posted
技术标签:
【中文标题】在视图上实现清晰的缩放动画【英文标题】:Achieving crisp zoom animation on a view 【发布时间】:2012-12-07 02:43:07 【问题描述】:我想知道人们如何实现清晰的 UIView 的缩放动画。我注意到网络上的示例代码,
self.frame = CGRectMake(0.0f, 0.0f, 200.0f, 150.0f);
[UIView beginAnimations:@"Zoom" context:NULL];
[UIView setAnimationDuration:0.5];
self.frame = CGRectMake(0.0f, 0.0f, 1024.0f, 768.0f);
[UIView commitAnimations];
基本上只是改变框架。如果我在 100 x 100 的图像上执行此操作,则图像看起来不清晰。我想知道是否有办法通过缩放使 UIView 变得清晰。当我查看 cocos2d 过渡时,缩放的场景过渡似乎没有任何伪影。一切看起来都很清脆!我想知道这是否是因为 UIView 已经是那个大小,并且它们以较小的尺寸开始视图,所以当它放大到较大的尺寸时,它不会收到不需要的工件。或者,如果他们在 opengl 中做了一些事情,或者让它看起来很清晰。 (我不知道opengl,所以如果这个问题完全错误,我很抱歉!)谢谢。
【问题讨论】:
【参考方案1】:我认为您的代码看起来不错(不过,我认为现在推荐的动画方法是UIView animate...
)。我觉得可能有两个问题:
您的图像是 100 x 100 并且被放大到全屏。这永远不会看起来很好。 (如在this answer 中进一步讨论)。
不会保留您的比例(2x1.5 帧中的 1x1 图像)。
还值得考虑一下您绘制图像的初始尺寸。如果你有一个 1000x1000 的图像,将其绘制为 500x500,然后将其缩放 2 倍,看起来不如先将其绘制为 1000x1000,将其缩小到 500x500,然后再放大。虽然,UIImageView 属性UIViewContentModeRedraw
可能在这里有所帮助。
【讨论】:
【参考方案2】:你给了自己正确的答案:
我想知道这是否是因为 UIView 已经是那个大小,并且它们以较小的尺寸开始视图,所以当它放大到较大的尺寸时,它不会收到不需要的工件。
您无法缩放低分辨率图片,并期望它看起来很棒。有一些可能性,例如双三次插值,可以避免像素边界在缩放中被放大,但仍然不清晰。您无法在没有信息的地方创建信息。
【讨论】:
以上是关于在视图上实现清晰的缩放动画的主要内容,如果未能解决你的问题,请参考以下文章