这是我的密码:
- (void)animateImages
{
self.emoImageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 160, 50, 50)];
self.emoImageView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:emoImageView];
NSArray *values = [NSArray arrayWithObjects:
(id)[UIImage imageNamed:@"smiley64_1_1.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_2.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_3.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_4.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_5.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_6.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_7.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_8.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_9.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_10.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_11.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_12.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_13.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_14.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_15.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_16.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_17.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_18.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_19.png"].CGImage,
(id)[UIImage imageNamed:@"smiley64_1_20.png"].CGImage, nil];
NSMutableArray *keyTimes = [NSMutableArray arrayWithObjects:
[NSNumber numberWithFloat:0.00f],
[NSNumber numberWithFloat:0.04f],
[NSNumber numberWithFloat:0.08f],
[NSNumber numberWithFloat:0.12f],
[NSNumber numberWithFloat:0.16f],
[NSNumber numberWithFloat:0.20f],
[NSNumber numberWithFloat:0.24f],
[NSNumber numberWithFloat:0.28f],
[NSNumber numberWithFloat:0.32f],
[NSNumber numberWithFloat:0.36f],
[NSNumber numberWithFloat:0.40f],
[NSNumber numberWithFloat:0.44f],
[NSNumber numberWithFloat:0.48f],
[NSNumber numberWithFloat:0.52f],
[NSNumber numberWithFloat:0.56f],
[NSNumber numberWithFloat:0.60f],
[NSNumber numberWithFloat:0.64f],
[NSNumber numberWithFloat:0.68f],
[NSNumber numberWithFloat:0.72f],
[NSNumber numberWithFloat:0.76f], nil];
CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];
[anim setKeyTimes:keyTimes];
[anim setValues:values];
[anim setKeyPath:@"contents"];
//[anim setCalculationMode:@"discrete"];
[anim setRepeatCount: 90000];
[self.emoImageView.layer addAnimation:anim forKey:nil];
}动画将发生在一个固定的UIImageView。帧间的时间间隔为0.04。如果我运行这个,动画播放速度很快。但是,如果我设置的持续时间像这样的[anim setDuration:0.76];,它发挥完美。我在这里做错了什么?
发布于 2015-03-17 22:36:20
我已经在回答你关于同一主题的另一个问题时解释了这一点。
关键时刻中的时间是动画的总间隔的一部分,而不是秒的部分。
在您发布的代码中,您根本没有指定任何持续时间。动画的默认持续时间必须是短的,比如.2秒,所以当您不提供持续时间时,就会得到非常短的持续时间。如果指定的持续时间较长,则运行速度较慢。
假设默认持续时间是.2秒。您的keyTimes值因.04而异,.2 * .04 = .008秒,即千分之一秒。如果我是对的,并且动画的默认持续时间是.2秒,那么您将给每个帧.008秒。任何短于.01666秒/帧(1/60秒)的内容都是没有意义的,因为动画必须跳过帧。
事实上,由于文档没有指定默认的持续时间,所以当您不指定持续时间时,结果可能是未定义的。
https://stackoverflow.com/questions/29110753
复制相似问题