在视图上实现清晰的缩放动画

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 已经是那个大小,并且它们以较小的尺寸开始视图,所以当它放大到较大的尺寸时,它不会收到不需要的工件。

您无法缩放低分辨率图片,并期望它看起来很棒。有一些可能性,例如双三次插值,可以避免像素边界在缩放中被放大,但仍然不清晰。您无法在没有信息的地方创建信息。

【讨论】:

以上是关于在视图上实现清晰的缩放动画的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第四百七十六回:缩放类视图动画)

自定义捏缩放视图

如何在半视图上实现滑动手势和在另一半视图上实现平移手势?

缩放地图视图时动画AnnotationView消失?

iOS 在主视图上实现覆盖侧边栏视图

Android 同时为所有列表视图项设置动画