我正在设置这样的图层以更改背景颜色:
CALayer *layer = [CALayer layer];
layer.frame = CGRectMake(0, self.view.bounds.size.height, self.view.bounds.size.width, self.view.bounds.size.height);
layer.backgroundColor = [UIColor yellowColor].CGColor;
[self.view.layer insertSublayer:layer atIndex:0];
[CATransaction begin];
CABasicAnimation *animation = [CABasicAnimation animation];
animation.keyPath = @"position.y";
animation.byValue = @(-self.view.bounds.size.height);
animation.duration = 0.4;
animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = NO;
self.animating=YES;
[CATransaction setCompletionBlock:^{
NSLog(@"finished");
self.view.backgroundColor=[UIColor yellowColor];
[layer removeFromSuperlayer];
self.animating=NO;
}];
[layer addAnimation:animation forKey:@"slide"];
[CATransaction commit];
当我完成后,我设置UIView的实际背景颜色,然后删除图层。我是否需要在完成块中调用类似[self.view.layer removeAllAnimations];
的内容来删除动画或者是否自动删除动画?只考虑内存管理。
答案 0 :(得分:4)
无需说
animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = NO;
...如果您从一开始就正确构建动画和图层。整个舞蹈都是基于对动画如何运作的旧观念。不幸的是,经常看到它漂浮在互联网上,但这是错误的,而且总是错误的。学会正确地做到这一点(通过在动画开始时将图层设置为最终属性值)会更好。
答案 1 :(得分:0)
在这种情况下,我认为你根本不需要删除它。
在完成处理程序中,您要从其超级图层中删除图层,并且您没有在其他任何位置保留图层。层次结构是唯一保留图层的层次结构,因此当您从层次结构中删除它时,图层将被释放。
添加到图层的任何动画也应该被取消分配。