我想利用CALayer提供的隐式动画,但我似乎无法让它工作。在我的视图控制器中,我声明了一个实例变量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启用隐式动画?
答案 0 :(得分:1)
首先,testLayer已在-viewDidLoad中发布。当您在-touchesBegan中再次访问它时,它无效。它引用的那个层仍然存在,但它只被子层数组保留。您可以更改代码以创建自动释放的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之前需要自己保留它。