2014-06-14 38 views
1

我正試圖在CALayer上創建一個效果,這樣當用戶觸摸並保持給定點時,整個圖層變形的方式會造成該點被推下的錯覺「(視圖是2D)。數學對我而言似乎相對簡單:CALayer上的每個點都將經歷一個朝向壓力點的平移,與其距離點的距離相反(在此階段,我忽略了框架對這種變形的影響)。想想在2D平面上顯示廣義相對論的經典模型,其質量導致平面變形爲第三個空間維度,只能從平面上方觀察。CALayer壓力變形效果

在這一點上,我已經確定,我不能用仿射變換來做到這一點,因爲原始圖層中的平行線將不再是經過變換的線。

假設這是正確的,有沒有辦法做到這一點?這並不意味着CATransform3D可以做到這一點,因爲簡單地改變3D空間內的視角似乎也不能實現這種效果。

我對轉換矩陣相當陌生,所以我可能會缺少一些基本的東西。或者這可能超出了你可以用核心動畫或核心圖形中的內置選項做的事情(也許它需要OpenGL?)。

+0

可能的幫助:http://ciechanowski.me/blog/2014/05/14/mesh-transforms/ – jrturton

+0

不幸的是,網格轉換不是公共API,所以使用它們會讓你的應用程序從App Store中被拒絕。 –

回答

2

你是對的,仿射變換不會做你想在這裏。 OpenGL可以工作,但你可能會更簡單一些,SpriteKit提供了一個SKEffectNode類,它可以讓你使用Core Image filter渲染它的子元素(它應該包含你想要扭曲的圖像)。 iOS上提供的一組過濾器因版本而異,並且與OS X上的一組過濾器並不完全重疊,但CIPinchDistortion看起來像它可能會做你正在做的事情。

+0

我沒有意識到Sprite Kit,實際上整個框架似乎對於這個項目來說是完美的(解決了上述問題,並且讓我可以輕鬆地完成我正在考慮的其他事情)。 但是我使用的是2008年的舊版Macbook ......所以沒有XCode 5,因此無法訪問iOS 7+框架。現在我必須把它放在架子上。 – vaticRite