我正在尝试在CALayer上创建一个效果,这样当用户触摸并保持在给定点上时,整个图层会以这样一种方式变形,即它会创建该点被“向下”推送的错觉(视图是2D)。数学对我来说似乎相对简单:CALayer上的每个点都会经历一个向压力点的平移,与点的距离相反(在这个阶段我忽略了框架对这个变形的影响)。想象一下在2D平面上显示广义相对论的经典模型,其质量导致平面变形为第三空间维度,仅从平面上方观察。
此时我已经确定我不能通过仿射变换来做到这一点,因为原始图层中的平行线在变换后的线中将不再如此。
假设这是正确的,有没有办法做到这一点? CATransform3D也无法做到这一点,因为简单地改变3D空间内的视角似乎也无法实现这种效果。
我对转换矩阵很陌生,所以我可能会遗漏一些基本的东西。或者这可能只是你可以使用Core Animation或Core Graphics中的内置选项(也许它需要OpenGL?)。
答案 0 :(得分:2)
你是正确的,仿射变换不会在这里做你想做的事。 OpenGL可以工作,但是你可以使用更简单的东西 - SpriteKit提供了一个SKEffectNode类,它允许你使用Core Image filter渲染它的子代(它应该包含你想要扭曲的图像)。 iOS上可用的过滤器集因版本而异,并且与OS X上可用的过滤器集不完全重叠,但CIPinchDistortion看起来可能会执行您所追求的过滤。