在一个动画中,我在view中添加了很多sublayers,其中包括:

[self.view.layer addSublayer:layer1];
[self.view.layer addSublayer:layer2];

....

我想用一个动作移除所有子层.

rootLayer.sublayers = nil;

但它不起作用...

你能帮我吗?

推荐答案

CALayer对象的sublayers属性返回数组的副本.将其设置为no nil对子层没有任何影响.不过,这样做可以:

for (CALayer *layer in self.view.layer.sublayers) {
    [layer removeFromSuperlayer];
}

或者,用Swift

self.view.layer.sublayers?.forEach { $0.removeFromSuperlayer() }

Objective-c相关问答推荐

uipageviewcontroller 类在设置多个视图控制器时崩溃

dispatch_get_global_queue 和 dispatch_queue_create 有什么区别?

如何处理 Xcode 警告没有以前的函数原型......?

测试应用程序是否确实从 UILocalNotification 变为活动状态

如何连续关闭 2 个模态视图控制器?

从 Unix 时间戳创建 NSDate

如何在 iOS SDK 中使用语音识别?

未找到 RKObjectMapping.h

发出许多网络请求的 iOS 应用程序的最佳架构?

如何将 NSNumber 转换和比较为 BOOL?

iPhone:在 UITextField 上禁用 Auto-Cap/autocorrect 问题

代码问题:格式字符串不是字符串文字

#ifdef DEBUG 与 #if DEBUG

在 UICollectionView 上重置滚动

如何减小使用 UIImagePickerController 创建的视频的文件大小?

如何修复UIPopoverController 已弃用警告?

导航返回时重新加载 UITableView?

为什么使用弱指针进行委托?

如何让 UITextView 检测网站、邮件和电话号码的链接

如何在 Objective-C 中创建可变参数方法