2014-06-14 3 views
1

사용자가 특정 점을 터치하고 고정 할 때 전체 점이 변형되어 그 점이 아래로 밀렸다는 환상을 만들 수있는 효과를 생성하려고합니다. "(보기는 2D 임). 수학은 상대적으로 단순 해 보입니다. CALayer의 각 점은 압력 점을 향해 포인트를 반대로 이동합니다 (이 단계에서 프레임이이 변형에 미치는 영향은 무시됩니다). 평면을 위에서 볼 때만 제 3 공간 차원으로 변형시키는 질량을 지닌 2D 평면에서 일반 상대성 이론을 나타내는 고전 모델을 생각해보십시오.CALayer 압력 변형 효과

이 시점에서 나는 원래 레이어의 평행선이 변환 된 것에서 더 이상 존재하지 않으므로 affine 변환으로이 작업을 수행 할 수 없다고 결정했습니다.

그것이 맞다고 가정하면이 방법이 있습니까? CATransform3D가 3D 공간에서 원근감을 변경하는 것만으로도이 효과를 얻을 수있는 것처럼 보이지 않으므로 CATransform3D도이 작업을 수행 할 수 있습니다.

나는 변형 행렬에 새로운 것이므로 기본 무언가를 놓칠 수 있습니다. 또는 Core Animation 또는 Core Graphics의 기본 제공 옵션으로 할 수있는 것 이상일 수 있습니다 (아마도 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

스프라이트 키트에 대해 잘 알지 못했지만 사실 전체 프레임 워크가이 프로젝트에 완벽 할 것입니다 (위의 문제를 해결하고 내가 통합에 대해 생각한 다른 것들을 쉽게 수행 할 수있게 해줍니다). 그러나 저는 2008 년 Macbook을 사용하고 있습니다 ... XCode 5가 없으므로 iOS 7+ 프레임 워크에 액세스 할 수 없습니다. 나는 이것을 지금 선반에 써야 할 것입니다. – vaticRite