我有一个UIScrollview填充一个横向屏幕,其中包含一个小的UIViews树,它可以在其中水平滚动。我想对滚动视图应用桶形失真,以便当子视图从滚动视图的外部移动到中心时,它们会改变形状。
应用这样的扭曲有什么好处?
有没有办法覆盖滚动视图的drawRect,绘制到位图,扭曲它,然后将其绘制到ScrollView的上下文中?或者是否内置了API来实现这种失真?
barrel distortion http://www.arielnet.com/Main/images/fig1f.gif
答案 0 :(得分:1)
您可以通过正确转换每个UIViews的图层来接近此效果。使用CATransform3D,您可以旋转和翻译3-D中的每个图层以及apply a perspective effect。对于您的情况,您可以翻译每个UIView图层,使它们像一个旋转木马,中间视图向前和直接到屏幕,侧面图层倾斜并略微偏离屏幕。这不会导致图层本身的曲率(它们仍将被绘制为矩形),但如果您在主视图的图层上应用变换以创建透视效果,则应该能够非常接近。
对于这种三维层定位的例子,我推荐this example,其中一个完整的三维迷宫是由CALayers构建的。
就滚动视图而言,您可能必须为此进行自定义触摸处理。您可以通过重新发送到UIScrollViewDelegate方法(如scrollViewDidScroll:)来解决这个问题,但我自己没有尝试过。