我想利用 CALayer 提供的隐式动画,但我似乎无法让它工作。在我的 View Controller 中,我声明了一个实例变量 CALayer *testLayer。我用这段代码实例化了 testLayer。
- (void)viewDidLoad {
testLayer = [[CALayer alloc] init];
testLayer.bounds = CGRectMake(0, 0, 100, 100);
testLayer.position = CGPointMake(400, 400);
[testLayer setBackgroundColor:[UIColor redColor].CGColor];
testLayer.delegate = self;
[self.view.layer addSublayer:testLayer];
[testLayer release];
}
然后在 touchesBegan 中,我从它的超层中删除该层。
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[testLayer removeFromSuperlayer];
}
图层瞬间消失,没有任何动画。如何为此 CALayer 启用隐式动画?
最佳答案
首先,testLayer 已在-viewDidLoad 中发布。当您在 -touchesBegan 中再次访问它时,它无效。它引用的图层仍然存在,但它仅由 sublayers 数组保留。您可以更改代码以创建一个自动释放的 CALayer,如下所示:
- (void)viewDidLoad {
testLayer = [CALayer layer];
testLayer.bounds = CGRectMake(0, 0, 100, 100);
testLayer.position = CGPointMake(400, 400);
[testLayer setBackgroundColor:[UIColor redColor].CGColor];
testLayer.delegate = self;
[self.view.layer addSublayer:testLayer];
}
现在它实际上将从 -touchesBegan 中的图层层次结构中删除。请记住,它也将在 -touchesBegan 中发布,因为不再有任何内容引用它。在调用 -removeFromSuperlayer 之前,您必须重新初始化它或者您需要自己保留它。
关于ios - 调用 removeFromSuperlayer 时没有隐式动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5608083/