转换以创建在Apple的相机应用程序中看到的桶效应

时间:2014-09-22 11:44:55

标签: ios objective-c

我正在尝试重新创建可在下面的相机模式选择器上看到的桶效果:

iOS7 Camera app http://www.androidnova.org/wp-content/uploads/2013/06/ios7_camera-100041271-medium.jpg

我是否必须使用OpenGL才能达到此效果?什么是最好的方法?

我在GitHub上发现了一个很棒的库,可用于实现这种效果(https://github.com/Ciechan/BCMeshTransformView),但遗憾的是它不支持动画,因此无法使用。

1 个答案:

答案 0 :(得分:2)

我打赌Apple使用了CGMeshTransform。它就像BCMeshTransform一样,除了它是一个私有API并与Core Graphics完全集成。 BCMeshTransformView诞生于开发人员发现这一点。

我看到的唯一简单选择是:

使用CALayer.transform,它是一个CATransform3D。您可以通过调整每个项目在桶上的z位置和y旋转来使用它来模拟所需的桶效果。还要向滚轮添加半透明暗渐变(CAGradientLayer),以模拟选择对边缘变暗的效果。这样做很简单,但看起来不像实际的3D桶一样平滑逼真。也许它看起来很好,可以创造一个令人信服的错觉? (要启用3D变换,您需要使用view.layer.transform.m34 = 1 / 500.f或类似的方式启用深度)

http://www.thinkandbuild.it/introduction-to-3d-drawing-in-core-animation-part-1/

最难的选择是使用自定义OpenGL视图,该视图使桶形状并将其内容作为纹理应用于其上。我希望你遇到创建BCMeshTransformView背后的大部分复杂问题,并且像BCMeshTransformView一样难以支持动画。

您仍然可以使用BCMeshTransformView。 BCMeshTransformView处理内容动画(例如颜色更改)的速度很慢,但处理几何体更改的速度非常快。因此,只要您根据网格几何变化(而不是使用滚动视图或调整子视图位置等内容更改)来定义桶效果,就可以使用它来执行桶效应。你需要做手势处理+自己滚动而不是使用UIScrollView,这对于做对是很棘手和乏味。

考虑到选项,我想通过使用3D变换来捏造它,然后只有在我无法使用3D变换创建令人信服的错觉时才转移到其他选项。