UIView做手臂波

时间:2014-04-05 03:03:34

标签: ios objective-c object animation uiview

我正在尝试使用UIView动画制作手臂波效果(Hello!),但是当最后一个动画关闭时,它会快速回到开头。我希望波浪来回走动。

第一个关键帧:旋转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 个答案:

答案 0 :(得分:1)

原因是你在关键帧动画的前两帧上用完了整个动画。这些是相对次和相对持续时间;它们必须都小于1!

所以,在第一个上你用掉动画的一半(.5)。

在第二个上你开始动画的中途(.5),然后你用完动画的其余部分(.75大于.5这就是你所有的&# 39;已经离开了。)

所以第三个永远不会发生。无论如何,它完全疯了:你不能 相对开始时间为1.75,因为1是动画的结尾。阅读文档:

  

此值必须在0到1的范围内,其中0表示整个动画的开头,1表示整个动画的结束。例如,对于持续时间为两秒的动画,指定开始时间为0.5会导致动画在整个动画开始后的一秒钟内开始执行。