【发布时间】:2009-09-22 21:16:03
【问题描述】:
有一个问题。我有一个子类 UIView 作为我滚动地面的背景。代码运行得非常好,根据 Instrumentation,我没有泄漏,我创建的仍然存在的对象分配也没有增长。
我发现在我的应用程序中的其他地方,将动画添加到我的子类 UIView 拥有的 UIImageView 似乎会增加我的保留计数并在我完成后删除所有动画将其放回原处。
我的问题是,当您将动画添加到带有键的图层时,我假设如果在后备字典中的该条目位置已经有一个使用过的动画,它会被释放并进入自动释放池?
例如:
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
NSString *keyValue = [theAnimation valueForKey:@"name"];
if ( [keyValue isEqual:@"step1"] && flag ) {
groundImageView2.layer.position = endPos;
CABasicAnimation *position = [CABasicAnimation animationWithKeyPath:@"position"];
position.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
position.toValue = [NSValue valueWithCGPoint:midEndPos];
position.duration = (kGroundSpeed/3.8);
position.fillMode = kCAFillModeForwards;
[position setDelegate:self];
[position setRemovedOnCompletion:NO];
[position setValue:@"step2-1" forKey:@"name"];
[groundImageView2.layer addAnimation:position forKey:@"positionAnimation"];
groundImageView1.layer.position = startPos;
position = [CABasicAnimation animationWithKeyPath:@"position"];
position.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
position.toValue = [NSValue valueWithCGPoint:midStartPos];
position.duration = (kGroundSpeed/3.8);
position.fillMode = kCAFillModeForwards;
[position setDelegate:self];
[position setRemovedOnCompletion:NO];
[position setValue:@"step2-2" forKey:@"name"];
[groundImageView1.layer addAnimation:position forKey:@"positionAnimation"];
}
else if ( [keyValue isEqual:@"step2-2"] && flag ) {
groundImageView1.layer.position = midStartPos;
CABasicAnimation *position = [CABasicAnimation animationWithKeyPath:@"position"];
position.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
position.toValue = [NSValue valueWithCGPoint:endPos];
position.duration = 12;
position.fillMode = kCAFillModeForwards;
[position setDelegate:self];
[position setRemovedOnCompletion:NO];
[position setValue:@"step1" forKey:@"name"];
[groundImageView1.layer addAnimation:position forKey:@"positionAnimation"];
}
}
这无限地链接动画,正如我所说的那样,它正在运行创建的和活动的对象分配不会改变。我假设每次添加动画时都会释放存在于该关键位置的动画。
只是想知道我是对的。另外,我对 Core Animation 比较陌生。我试图重新使用动画,但有点不耐烦。是否可以重复使用动画?
谢谢! 布莱恩
【问题讨论】:
标签: iphone memory-management animation