【问题标题】:Apply barrel distortion to UIView对 UIView 应用桶形失真
【发布时间】:2009-11-03 10:38:26
【问题描述】:
我有一个 UIScrollview,它填充了一个横向屏幕,其中包含一棵 UIView 的小树,我可以在其中水平滚动。我想对滚动视图应用桶形失真,以便当子视图从外部移动到滚动视图的中心时,它们会改变形状。
应用这样的扭曲有什么好处?
有没有办法为滚动视图覆盖 drawRect,在位图上绘制,扭曲它,然后将其绘制到 ScrollView 的上下文中?还是有内置的 API 来处理这种失真?
(来源:arielnet.com)
【问题讨论】:
标签:
iphone
uiview
uiscrollview
distortion
【解决方案1】:
您可以通过正确转换每个 UIView 的图层来接近此效果。使用 CATransform3D,您可以在 3-D 以及apply a perspective effect 中旋转和平移每个图层。对于您的情况,您可以翻译每个 UIView 层,使它们像一个旋转木马,中间视图向前并直接在屏幕上,而侧面层从屏幕稍微倾斜和凹陷。这不会导致图层本身的曲率(它们仍将绘制为矩形),但如果您在主视图的图层上应用变换以创建透视效果,您应该能够非常接近。
对于这种层的 3-D 定位示例,我推荐 this example,其中一个完整的 3-D 迷宫是由 CALayers 构建的。
就滚动视图而言,您可能必须为此进行自定义触摸处理。您可能可以通过重新设置 UIScrollViewDelegate 方法(如 scrollViewDidScroll:)来解决问题,但我自己没有尝试过。