2009-02-05 8 views
16

나는 간단한 코드 (의사 코드) 같은 간다, 그래서 그 중심을 일부 UIView을 회전하기 위해 노력하고있어 회전 M_PI/2라고 말하면 멋지게 회전합니다. 2 * M_PI로 설정하면 "아무것도하지 않습니다." 나는 행렬이 아무 것도하지 않는 무언가로 해석한다는 것을 이해할 수있다. (360은 360도 회전한다는 의미이다), 아직 5 번 회전시키고 싶다. 묘사하는 데 그리 좋지는 않습니다, 누군가 이해할 수 있기를 바랍니다). 그래서 180도 (M_PI)로 설정 각도를 추가하고 중첩 된 animatationBlock을 추가했습니다. 하지만 같은 속성 (someview.transition)을 다시 설정하고 있기 때문에 다시 무시해 둡니다.) 각도 M_PI로 애니메이션의 반복 횟수를 2로 설정하려고 시도했지만 간단히 180도 회전하여 곧은 위치로 돌아가고 다시 회전을 시작하는 것처럼 보입니다.는 그 중심 주위에 UIView하지만, 여러 번

그래서 약간의 아이디어가 있지만 도움을 주시면 감사하겠습니다. --t

+0

당신은 또한 여기에서 시작할 수 있습니다 https://github.com/jonasschnelli/UIView-i7Rotate360 매우 쉽게 구현하고 변화 할 수 있습니다. –

+0

가능한 [UIView 무한 360도 회전 애니메이션?] (http://stackoverflow.com/questions/9844925/uiview-infinite-360-degree-rotation-animation) –

답변

36

UIView의 레이어 속성에 다음 애니메이션을 사용할 수 있습니다. 나는 그것을 시험했다. 연속 회전 효과를 얻기

UIView *viewToSpin = ...;  
CABasicAnimation* spinAnimation = [CABasicAnimation 
            animationWithKeyPath:@"transform.rotation"]; 
spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI]; 
[viewToSpin.layer addAnimation:spinAnimation forKey:@"spinAnimation"]; 
+0

이 애니메이션을 어떻게 느리게 할 수 있습니까? – mahboudz

+0

애니메이션 타이밍 고려 사항에 대해서는 CABasicAnimation이 구현하는 CAMediaTiming Protocol에 대한 참조 자료를 참조하십시오. 특히 'duration'속성을 설정하려고합니다. 위의 코드는 기본 지속 시간 인 0.25 초를 사용합니다. –

1

조금 까다 롭습니다,하지만 난 그것을 here을 할 수있는 방법을 설명합니다. 예, Core Animation은 단위 원 내에서 가장 가까운 종료 위치로 변환을 최적화하는 것으로 보입니다. 제가 설명하는 방법은 한 회전에서 다음 회전으로의 핸드 오프에 약간의 말더듬이가 있음에도 불구하고 완전한 반전을 만들기 위해 몇 개의 반 회전 애니메이션을 함께 묶는 방법을 설명합니다.

아마도 이러한 반 회전 값으로 생성 된 CAKeyframeAnimation이 올바른 방법 일 것입니다. 그런 다음 가속 및 감속을 제어 할 수도 있습니다.

6

Brad Larson이 설명한대로 CAKeyframeAnimation을 사용하면됩니다. 예를 들어,

CAKeyframeAnimation *rotationAnimation; 
rotationAnimation = 
    [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"]; 

rotationAnimation.values = [NSArray arrayWithObjects: 
          [NSNumber numberWithFloat:0.0 * M_PI], 
          [NSNumber numberWithFloat:0.75 * M_PI], 
          [NSNumber numberWithFloat:1.5 * M_PI], 
          [NSNumber numberWithFloat:2.0 * M_PI], nil]; 
rotationAnimation.calculationMode = kCAAnimationPaced; 
rotationAnimation.removedOnCompletion = NO; 
rotationAnimation.fillMode = kCAFillModeForwards; 
rotationAnimation.timingFunction = 
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
rotationAnimation.duration = 10.0; 

CALayer *layer = [viewToSpin layer]; 
[layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; 

당신은 rotationAnimation.timingFunction 속성과 속성 rotationAnimation.duration 총 애니메이션 길이, 및 (단계 사이의 계산) 가속 및 감속을 제어 할 수있다.

1
CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
animation.fromValue = [NSNumber numberWithFloat:0.0f]; 
animation.toValue = [NSNumber numberWithFloat: 2*M_PI]; 
animation.duration = 8.0f; 
animation.repeatCount = INFINITY; 
[self.myView.layer addAnimation:animation forKey:@"SpinAnimation"];