我正在尝试使用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);
}];
答案 0 :(得分:1)
原因是你在关键帧动画的前两帧上用完了整个动画。这些是相对次和相对持续时间;它们必须都小于1!
所以,在第一个上你用掉动画的一半(.5
)。
在第二个上你开始动画的中途(.5
),然后你用完动画的其余部分(.75
大于.5
这就是你所有的&# 39;已经离开了。)
所以第三个永远不会发生。无论如何,它完全疯了:你不能 相对开始时间为1.75
,因为1
是动画的结尾。阅读文档:
此值必须在0到1的范围内,其中0表示整个动画的开头,1表示整个动画的结束。例如,对于持续时间为两秒的动画,指定开始时间为0.5会导致动画在整个动画开始后的一秒钟内开始执行。