2014-06-21 2 views
0

보기에 추가 할 애니메이션이 있습니다. 애니메이션에서 접히는 것처럼 세포가 무너집니다. 뷰를 두 개의 분리 된 레이어로 분리하고 각 레이어에 회전을 적용합니다. 이것은 효과가 있지만, 효과는 내가 원하는 것보다 더 미묘합니다. 애니메이션 도중에 연장되는 중심선 (각 레이어의 위쪽 가장자리와 아래쪽 가장자리) 사이의 간격을 늘리는 방법을 찾고 있습니다. 기본적으로 반쪽은 뒤쪽으로 접히는 것처럼 보이기에 충분히 키가 크지 않습니다.CATransform3DPerspective에 대한 과장된 시각

- (CABasicAnimation *)foldLayerToValue:(CGFloat)toValue expanding:(BOOL)expanding 
{ 
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"]; 
    CATransform3D rotate = CATransform3DIdentity; 
    rotate.m34 = 1.0/-2000.f; 

    rotate = CATransform3DRotate(rotateAndScale, [self radiansFromDegrees:toValue], 1.f, 0.f, 0.f); 

    animation.toValue = [NSValue valueWithCATransform3D:rotateAndScale]; 

    return animation; 
} 

:

여기 enter image description here

가 회전을 처리하는 코드입니다 : 여기 선이 애니메이션 동안 하락 싶은 곳 나는 현재, 주황색 선은 약이 중간 애니메이션이 무엇 이것은 CATransaction에 추가되어 애니메이션 도중 하단 부분을 정확한 양만큼 아래로 이동시킵니다. 애니메이션에 스케일 팩터를 추가하려고 시도했지만 전체 레이어에 영향을 미치고 위쪽 가장자리와 아래쪽 가장자리를 모두 조절합니다. 나는 회전 할 때 레이어의 높이를 높이려고 시도했지만 불편한 결과도 가져왔다.

아이디어가 있으십니까? 모퉁이별로 수동으로 위치를 설정할 수있는 방법이 있습니까?

문제의 일부는 내 앵커 포인트가 중심선에 있다고 생각합니다. 회전하는 동안 위쪽 및 아래쪽 가장자리가 중심선보다 멀리 떨어져 POV에 가까워지고 있습니다. 모서리가 화면에서 약간 벗어나있어 효과를 볼 수있는 양을 제한한다는 것을 알 수 있습니다. 이전에 레이어의 상단과 하단에 앵커 포인트가있는 버전이 있었지만 애니메이션이 생성되면서 두 레이어를 "만지기"상태로 유지할 수 없었습니다. 애니메이션 중에 Z 좌표에 번역을 추가하려고 시도했지만 아무 것도 영향을 미치지 않는 것처럼 보였습니다.

+1

'm34' 값을 수정 해 보셨습니까? 적용되는 원근감의 양을 결정합니다. – guardabrazo

답변

3

사용하는 값 ​​(-1.0/2000.0)은 카메라/눈에서 멀리 떨어져있는 물체에 해당하며 대개 낮은 원근감을가집니다. 더 원근감이있는 무언가를 원한다면 카메라로의 더 작은 거리에 해당하는 것으로 바꿔야합니다. 일반적으로 약 500-800의 범위는 "정상적인"거리이므로 200-400 범위의 무언가를 찾고있을 것입니다.

즉, .m34 값을 -1.0/200.0으로 변경하면 더 많은 원근감이 생깁니다.

+0

감사합니다. m34 값이 뷰에 어떤 영향을 미치는지 이해하지 못했습니다. 이것은 그것을 지 웁니다. – skladek