ios – 从TableViewCell中删除imageView子图层

ios – 从TableViewCell中删除imageView子图层,第1张

概述当我有一个图像时,我插入了CAGradientLayer的子图层, ...layer.name = @"Gradient";[cell.imageView.layer insertSublayer:layer atIndex:0]; 当ImageView没有图像时,我需要删除这个子图层. 我尝试了不同的方法但没有成功.我试过的最后一次是 for (CALayer *layer in cell. 当我有一个图像时,我插入了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)
解决方法 抛出异常是因为您在使用foreach循环枚举子层数组时更改子层数组的内容.这对于图层来说不是特别的,当您在枚举任何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"];
总结

以上是内存溢出为你收集整理的ios – 从TableViewCell中删除imageView子图层全部内容,希望文章能够帮你解决ios – 从TableViewCell中删除imageView子图层所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1103297.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存