2014-04-05 4 views
0

UIView 애니메이션으로 팔 웨이브 효과 (안녕하세요!)를 만들려고합니다. 그러나 마지막 웨이브가 꺼지면 다시 시작 부분으로 스냅됩니다. 나는 파도가 앞뒤로 가고 싶다.팔 웨이브를 만드는 UIView

첫 번째 키 프레임 : 회전 30˚ 두 번째 키 프레임 : 회전 -30˚ 세 번째 키 프레임 :해야 회전 0˚

arm.layer.anchorPoint = CGPointMake(1.0, 1.0); 
    float x = arm.frame.origin.x + arm.frame.size.width; 
    float y = arm.frame.origin.y + arm.frame.size.height; 
    arm.layer.frame = CGRectMake(x, y, arm.frame.size.width, arm.frame.size.height); 
    [self.scrollView arm]; 


    float degrees = 30.0; 
    float radians = (degrees/90.0)*M_PI; 
    [UIView animateKeyframesWithDuration:4.0f delay:0.0 options:UIViewKeyframeAnimationOptionRepeat 
    animations:^{    
     [UIView addKeyframeWithRelativeStartTime:0 relativeDuration:.5 animations:^{ 
      arm.transform = CGAffineTransformMakeRotation(radians); 
     }]; 
     [UIView addKeyframeWithRelativeStartTime:.5 relativeDuration:.75 animations:^{ 
      arm.transform = CGAffineTransformMakeRotation(-radians); 
     }]; 
     [UIView addKeyframeWithRelativeStartTime:1.25 relativeDuration:.5 animations:^{ 
      arm.transform = CGAffineTransformMakeRotation(0); 
     }]; 

답변

1

이유는 당신의 처음 두 프레임에 전체 애니메이션을 사용한다는 것입니다 키 프레임 애니메이션. 이들은 번이고 상대 시간입니다. 그들은 모두 1 미만이어야합니다!

그래서 처음에는 애니메이션 절반 (.5)을 사용합니다. 당신은 애니메이션 (.5)를 통해 중간 시작하고 다음 애니메이션의 전체 나머지를 사용하는 두 번째에

은 ( .75는 왼쪽있어 모든되는보다 큰 .5입니다).

그래서 세 번째는 발생하지 않습니다. 그리고 어떤 경우 든 완전히 너트입니다. 은 이 애니메이션의 끝이므로의 상대 시작 시간은 1.75이 될 수 없습니다. 문서 읽기 :

이 값은 0에서 1 사이의 범위 여야하며 여기서 0은 전체 애니메이션의 시작을 나타내고 1은 전체 애니메이션의 끝을 나타냅니다. 예를 들어, 애니메이션의 길이가 2 초인 경우 시작 시간을 0.5로 지정하면 전체 애니메이션이 시작된 후 1 초 후에 애니메이션이 실행됩니다.

관련 문제