Kex*_*Ari 4 objective-c uiview cabasicanimation ios
我正在像这样设置图层动画以更改背景色:
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];
Run Code Online (Sandbox Code Playgroud)
完成后,我将设置UIView的实际背景色,然后删除该层。我是否需要[self.view.layer removeAllAnimations];在完成块中调用类似的内容来删除动画,还是自动删除动画?只考虑内存管理。
有没有必要说
animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = NO;
Run Code Online (Sandbox Code Playgroud)
...如果您从一开始就正确地构造了动画和图层。整个舞蹈基于对动画工作原理的古老误解。不幸的是,仍然经常看到它在Internet上浮动,但这是错误的,并且始终是错误的。最好学会正确执行此操作(通过在动画开始时将图层设置为其最终属性值)。
小智 0
我认为在这种情况下你根本不需要删除它。
在完成处理程序中,您将从其超级层中删除该层,并且在其他任何地方都没有保留该层。图层层次结构是唯一保留图层的东西,因此当您从层次结构中删除它时,图层将被释放。
添加到该层的任何动画也应该被释放。
| 归档时间: |
|
| 查看次数: |
2112 次 |
| 最近记录: |