您好我正在使用CAShapeLayer
和CGPath
。我正在绘制拼图并添加到scrollview
。我按下重新加载按钮来检查性能。当我重新加载时,我将从scrollview
中删除所有以前的图层。过了一段时间它就崩溃了。
Zombie向我展示了删除图层的原因,这就是问题所在。代码中有什么问题吗? 这是:
NSArray* layerArray = [[self.scrollView.layer sublayers]copy];
for (int i = 0; i < layerArray.count; i++) {
A3JigsawView* aJigsawView = [layerArray objectAtIndex:i];
[aJigsawView removeFromSuperlayer];
}
self.scrollView.layer.sublayers = nil;
prevWidth = 0;
prevHeight = 0;
请帮助我。谢谢你。
答案 0 :(得分:5)
这是self.scrollView.layer.sublayers = nil
。不加选择地删除所有子图层会导致iOS 7中出现严重崩溃,这可能会在程序执行后发生。我使用rootLayer.sublayers = nil
和[rootLayer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]
对此进行了彻底的测试。必须有一个系统创建的层搞砸了。
您必须保留自己的图层数组并自行删除它们:
[myArrayOfLayersIAddedMyself makeObjectsPerformSelector:@selector(removeFromSuperlayer)];
答案 1 :(得分:0)
我们需要跟踪在相应视图上绘制的图层。 例如 : NSMutableArray * listOfCAShapeLayer;
UIBezierPath *pathToDraw = [UIBezierPath bezierPath];
[pathToDraw moveToPoint:startPoint];
[pathToDraw addLineToPoint:endPoint];
[pathToDraw stroke];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = [pathToDraw CGPath];
shapeLayer.strokeColor = [[UIColor blueColor] CGColor];
shapeLayer.lineWidth = 3.0;
shapeLayer.fillColor = [[UIColor clearColor] CGColor];
[self. listOfCAShapeLayer addObject:shapeLayer];
[self.imageView.layer addSublayer:shapeLayer];
现在我们将CAShapeLayer保存在数组中。 listOfCAShapeLayer 我们可以在需要擦除功能的地方检查条件 喜欢 : Bool bIsErase; if(bISErase == YES)然后执行以下命令:
[self. listOfCAShapeLayer enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
CAShapeLayer *sl = obj;
[sl removeFromSuperlayer];
}];
我希望现在能帮到你。