2010-02-02 4 views
0

가 나는 레이어를 회전시키기위한 CAKeyFrameAnimation을하려고 : 왜 내 애니메이션 값이 무시됩니까?

CALayer* theLayer = myView.layer; 
    CAKeyframeAnimation* animation; 
    animation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"]; 

    animation.duration = 1.0; 
    animation.cumulative = NO; 
    animation.repeatCount = 1; 
    animation.removedOnCompletion = NO; 
    animation.fillMode = kCAFillModeForwards; 

    animation.values = [NSArray arrayWithObjects: 
         [NSNumber numberWithFloat:0.0 * M_PI], 
         [NSNumber numberWithFloat:0.5 * M_PI], 
         [NSNumber numberWithFloat:0.3 * M_PI], // animation stops here... 
         [NSNumber numberWithFloat:0.8 * M_PI], // ignored! 
         [NSNumber numberWithFloat:0.7 * M_PI], nil]; // ignored! 

    animation.keyTimes = [NSArray arrayWithObjects: 
          [NSNumber numberWithFloat:0.0], 
          [NSNumber numberWithFloat:0.2], 
          [NSNumber numberWithFloat:2.0], // ignored! 
          [NSNumber numberWithFloat:1.5], // ignored! 
          [NSNumber numberWithFloat:2], nil]; // ignored! 

    animation.timingFunctions = [NSArray arrayWithObjects: 
           [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 
           [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 
           [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 
           [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 
           [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], nil]; 

    [theLayer addAnimation:animation forKey:@"transform.rotation.z"]; 

당신이 코멘트에서 볼 수있는 것처럼

이 애니메이션은 키 프레임이 전부는 아니지만 그들 중 실행됩니다. 어떤 종류의 값을 입력했는지에 상관없이 애니메이션은 두 가지 이상의 주요 프레임을 실행하지 않습니다.

거기에 무슨 문제가있을 수 있습니까?

답변

4

animation.duration을 1로 설정하고 keyTimes를 0, 0.2 및 2로 설정하면 애니메이션이 3 번째 값에 도달하기 전에 중단된다는 의미 일 수 있습니다.

+0

실제로 가능! 그것은 "버그"였습니다. 감사 – openfrog

1

keyTimes 배열에는 0.0에서 1.0까지 증가하는 값만 포함해야합니다. 애니메이션을 통한 진행률의 백분율로 초 단위의 원시 숫자가 아닙니다. 따라서 keyTime 0.5와 일치하는 키 프레임은 애니메이션의 1/2 초가 아니라 애니메이션의 중간에서 발생합니다 (단, 1 초 애니메이션이없는 경우 제외).