首页 » iOS编程(第4版) » iOS编程(第4版)全文在线阅读

《iOS编程(第4版)》27.2 关键帧动画

关灯直达底部

之前添加的动画都属于基础动画,只能将UIView的某个属性从一个值变化到另一个值。如果需要在多个值之间进行变化,就需要使用关键帧动画(keyframe animation)。关键帧动画可以包含任意一个关键帧(见图27-3),读者可将关键帧动画看成是若干个连续执行的基础动画。

图27-3 关键帧动画

关键帧动画的使用方法与基础动画类似,对应的UIView类方法是animateKeyframesWithDuration:delay:options:animations:completion:。同时,在animations:的Block对象中,还需要通过addKeyframeWithRelativeStartTime: relativeDuration:animations:方法依次添加每一个关键帧。

在BNRHypnosisViewController.m中修改drawHypnoticMessage:方法,将UILabel对象首先移动到屏幕中央,然后移动到一个随机位置。

[UIView animateWithDuration:0.5

delay:0.0

options:UIViewAnimationOptionCurveEaseIn

animations:^{

messageLabel.alpha = 1.0;

}

completion:NULL];

[UIView animateKeyframesWithDuration:1.0 delay:0.0 options:0 animations:^{

[UIView addKeyframeWithRelativeStartTime:0

relativeDuration:0.8 animations:^{

messageLabel.center = self.view.center;

}];

[UIView addKeyframeWithRelativeStartTime:0.8 relativeDuration:0.2

animations:^{

int x = arc4random() % width;

int y = arc4random() % height;

messageLabel.center = CGPointMake(x, y);

}];

} completion:NULL];

UIInterpolatingMotionEffect *motionEffect =

[[UIInterpolatingMotionEffect alloc] initWithKeyPath:@“center.x”

type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];

animateKeyframesWithDuration:delay:options:animations:completion:中参数的使用方法与基础动画大致相同,只是基础动画的options:是UIView- AnimationOptions类型,而关键帧动画的options:是UIViewKeyframeAnimationOptions类型。另外,关键帧动画中的持续时间(duration)是整个动画的持续时间,也就是所有关键帧持续时间的总和。

addKeyframeWithRelativeStartTime:relativeDuration:animations:中的第一个参数是相对起始时间(relative start time),表示该关键帧开始执行的时刻在整个动画持续时间中的百分比,取值范围是0到1。第二个参数是相对持续时间(relative duration),表示该关键帧占整个动画持续时间的百分比,取值范围也是0到1。在本例中,第一个关键帧从0%开始(相对起始时间是0.0),持续时间是整个动画持续时间的80%(相对持续时间是0.8);第二个关键帧从80%开始(相对起始时间是0.8),持续时间是整个动画持续时间的20%(相对持续时间是0.2)。

构建并运行应用。输入一些文字后点击Done,UILabel对象首先会移动到屏幕中央,然后会随机移动到另一个位置并停止。