2016-01-14 29 views
0

我很困惑,为什么这不起作用。我将这三个事件一个接一个地发生。第一个放大和图像出,第二个在背景中淡出,第三个动画显示第一个图像。但它实际上是相反的发生?我做了些傻事吗?UIView animateKeyFramesWithDuration不在正确的时间开始

[UIView animateKeyframesWithDuration:2.0 delay:0.0 options:UIViewKeyframeAnimationOptionBeginFromCurrentState animations:^{ 
     [UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.25 animations:^{ 
      [v setFrame:CGRectMake(self.view.center.x - 125, self.view.center.y - 125, 250, 250)]; 
     }]; 
     [UIView addKeyframeWithRelativeStartTime:0.50 relativeDuration:0.75 animations:^{ 
      [UIView transitionWithView:self.fullView 
           duration:0 
           options:UIViewAnimationOptionTransitionCrossDissolve 
          animations:NULL 
          completion:NULL]; 

      [self.fullView setHidden:NO]; 
     }]; 
     [UIView addKeyframeWithRelativeStartTime:1.50 relativeDuration:0.5 animations:^{ 
      v.animationImages = [self.imageDict objectForKey:id]; 
      v.animationRepeatCount = 1; 
      [v startAnimating]; 
     }]; 
    } 
    completion:nil]; 

EDIT // 除了错字(1.50 addKeyFrameWithRelativeStartTime),第三块中不工作,因为该方法UIImageView startAnimating需要放置在完成块。

回答

2

您的代码看起来可疑。您添加的最后一个关键帧动画的相对开始时间为1.5。这是做什么的?它应该是0至1

从苹果文档,

frameStartTime

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

frameDuration

的时间在其上以动画的 指定值的长度。该值必须在0到1的范围内,并且指示相对于整个动画长度的时间量为 。如果 指定的值为0,则在动画块 中设置的任何属性将在指定的开始时间立即更新。如果您指定一个非零值,则该属性将在该时间段内生成动画。对于 示例,对于持续时间为2秒的动画,指定 持续时间为0.5将导致动画持续时间为1秒。

我很确定,将值固定在范围内会做一些很好的改变。但是,我不确定它是否解决了您的问题,因为我不了解您的动画代码。

+0

糟糕的1.5是一个错字 - 我现在已经把它改为0.5。来自文档的片段非常有用 - 我现在就玩这个游戏。 –