【问题标题】:Remove imageView sublayer from TableViewCell从 TableViewCell 中删除 imageView 子层
【发布时间】:2012-02-28 01:00:17
【问题描述】:

当我有一张图片时,我使用 CAGradientLayer 插入子图层,

...
layer.name = @"Gradient";
[cell.imageView.layer insertSublayer:layer atIndex:0];

当 ImageView 没有图像时,我需要删除这个子层。 我尝试了不同的方法,但没有成功。我最后一次尝试的是

for (CALayer *layer in cell.imageView.layer.sublayers) {
    if ([layer.name isEqualToString:@"Gradient"]) {
        [layer removeFromSuperlayer];
    }

}

但它给了我一个错误:

CoreData: error: Serious application error.  An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:.  *** Collection <CALayerArray: 0xc1502e0> was mutated while being enumerated. with userInfo (null)

【问题讨论】:

    标签: ios core-data ios5 calayer


    【解决方案1】:

    抛出异常是因为您在使用 foreach 循环枚举它时更改了 sublayers 数组的内容。这对层来说并不是什么特别的事情,当您在枚举任何 NSMutableArray 时添加/删除对象时会引发类似的异常。

    你有多种选择来解决这个问题

    解决方案 1: 修改数组后立即停止枚举。

    for (CALayer *layer in cell.imageView.layer.sublayers) {
        if ([layer.name isEqualToString:@"Gradient"]) {
            [layer removeFromSuperlayer];
            break;
        }
    }
    

    解决方案2:不要枚举真正的数组,而是使用它的副本。

    NSArray* sublayers = [NSArray arrayWithArray:cell.imageView.layer.sublayers];
    for (CALayer *layer in sublayers) {
        if ([layer.name isEqualToString:@"Gradient"]) {
            [layer removeFromSuperlayer];
        }
    }
    

    解决方案3:使用键值编码来保持对渐变层的引用。

    插入后设置:

    [cell.imageView.layer insertSublayer:layer atIndex:0];
    [cell.imageView.layer setValue:layer forKey:@"GradientLayer"];
    

    检索并删除它

    CALayer* layer = [cell.imageView.layer valueForKey:@"GradientLayer"];
    [layer removeFromSuperlayer];
    [cell.imageView.layer setValue:nil forKey:@"GradientLayer"];
    

    【讨论】:

    • 谢谢你们 :) 我先尝试了 No.3,它对我没有用,但 No.2 就像一个魅力。
    • 解决方案 2 是最好的。工作就像一个魅力:) 非常感谢
    • Solution-2 非常棒并且完美运行。非常感谢,它节省了我一整天的时间。
    猜你喜欢
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 2016-08-29
    相关资源
    最近更新 更多