2011-03-16 6 views
9

ViewController 내에 일련의 이미지가 있습니다.iPhone에서 CoreMotion/DeviceMotion을 사용하여 이미지 플로팅 효과 시뮬레이션

내가 그들의 개별 레이어 변환하여 그들을 "부동"입니다 :이 레이어가 화면 위에 떠 만드는 효과 제공

img.layer.transform = CATransform3DMakeTranslation(0.0f, 0.0f, myZ); 

- 시뮬레이터를, 인 (눈에 보이는 효과가 없을 것 옳은).

내가 원하는 것은 왼쪽/오른쪽/앞으로/뒤로 장치를 움직이면 레이어가 떠있는 것처럼 미묘하게 보일 때 효과가 있습니다. 장치를 왼쪽으로 기울이면 전체보기가 오른쪽으로 향해야합니다. 이렇게하면 기기를 움직이면 모서리를 볼 수 있습니다. 즉, Z- 색인에 따라 다른 비율로 이동하기 때문에 이미지가 화면 위에 실제로 떠 다니는 느낌을줍니다.

필자는 이것을 데모하는 샘플 프로젝트가있는 테스트 프로젝트 (project file here)를 만들었습니다.

제 문제는 제가 수학자가 아니기 때문에 미묘한 부유 효과를 시뮬레이트하는 가장 좋은 방법으로 고심하고 있습니다. 지금, 그때 않습니다 DeviceMotion의 리스너,있어이 내가 원하는 것과 매우 가까운

self.view.layer.sublayerTransform = CATransform3DMakeRotation(20.0f * M_PI/180.0f, 2*motion.attitude.pitch, -2*motion.attitude.roll, 0); 

을하지만, 정확히 바로이 아니다.

이 효과는 다양한 응용 프로그램에서 사용될 수 있다고 생각합니다. 나는 이것을 친구에게로 확장하고 얼굴 탐지로 작업하고있다. (그래서 그것은 사람의 얼굴 움직임에 따라 부모보기를 움직일 것이다. 심지어 전화/장치를 완벽하게 유지하는 동안에도).

나는 사람들이 "OpenGL을 사용하는 것"이라고 대답 할 것이라고 생각합니다. 이 프로젝트에서 코드를 통합하는 방법을 보여주는 코드 조각을 게시하지 않는 한, 필요한 대답이 아닙니다. (해결할 새로운 문제를 찾고있는 게 아닙니다. :-)

전체 프로젝트는 현재 효과를보고 싶은 모든 사람들에게 (iphone floating views) 있습니다. (이것이 작동 중일 때 나는 후손을 위해 여기에 링크 된 전체 (작업중 인) 프로젝트를 남길 것이다.)

답변

5

나는 이것을 얻었다 고 생각한다! 이 옵션을 사용합니다 : 마법처럼

[appDelegate.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] 
                withHandler: 
    ^(CMDeviceMotion *motion, NSError *error) { 

     CATransform3D transform; 
     transform = CATransform3DMakeRotation(motion.attitude.pitch, 1, 0, 0); 
     transform = CATransform3DRotate(transform, motion.attitude.roll, 0, 1, 0); 

     self.view.layer.sublayerTransform = transform; 
    }]; 

작품을 나를 위해, 당신은 축 대칭하려면, 단지 그 1의 앞에 마이너스 기호를 추가합니다.

+0

당신은 놀라워요. 이것은 매력처럼 작동합니다. 그리고 여러분은 정확하게 맞습니다 ... 저는 각도에 대한 오프셋을 조정할 것입니다.하지만 이것은 제가 정확히하려는 효과를 나타냅니다. 방금 작업 데모 프로젝트도 업로드했습니다. 감사합니다. –