一段时间后从超级层删除应用程序崩溃

时间:2013-07-26 12:17:10

标签: ios objective-c core-animation calayer

您好我正在使用CAShapeLayerCGPath。我正在绘制拼图并添加到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;

请帮助我。谢谢你。

2 个答案:

答案 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];

}];

我希望现在能帮到你。