ios - 调用 removeFromSuperlayer 时没有隐式动画

标签 ios core-animation

我想利用 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/

相关文章:

ios - 如何在 IOS 中应用部分淡入淡出?

ios - 在快速合成路径上支持多个 View

ios - 使用 Codable (Swift) 从 Json 文件中解析 UIColor

ios - 如何在 swift 中使用特定字段 dbAccess 更新特定记录

ios - NSString 根据数值拆分字符串

ios - 将 UILabel 位置更改为 CGPath 的 strokeEnd

ios - 在 IOS 中离线时保持登录销售团队

ios - 使用 NSSortDescriptor 排序

ios - 如何在进行中重新启动 CALayer 动画?

cocoa-touch - 为什么 animateWithDuration 动画和完成 block 之间的暂停?