Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从超级层删除会在一段时间后使应用程序崩溃_Ios_Objective C_Core Animation_Calayer - Fatal编程技术网

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

Ios 从超级层删除会在一段时间后使应用程序崩溃,ios,objective-c,core-animation,calayer,Ios,Objective C,Core Animation,Calayer,您好,我正在使用CAShapeLayer和CGPath。我正在绘制拼图并添加到滚动视图中。我按下了重新加载按钮以检查性能。重新加载时,我将从scrollview中删除所有以前的层。过了一段时间,它就崩溃了 僵尸告诉我移除图层的原因,这就是问题所在。代码中有什么错误吗? 这是: NSArray* layerArray = [[self.scrollView.layer sublayers]copy]; for (int i = 0; i < layerArray.count; i+

您好,我正在使用
CAShapeLayer
CGPath
。我正在绘制拼图并添加到
滚动视图中
。我按下了重新加载按钮以检查性能。重新加载时,我将从
scrollview
中删除所有以前的层。过了一段时间,它就崩溃了

僵尸告诉我移除图层的原因,这就是问题所在。代码中有什么错误吗? 这是:

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;
NSArray*layerArray=[[self.scrollView.layer sublayers]复制];
对于(int i=0;i

请帮帮我。谢谢。

这是self.scrollView.layer.sublayers=nil
。不分青红皂白地删除所有子层会导致iOS 7中的严重崩溃,这可能会在程序执行的更晚时间发生。我已经使用
rootLayer.sublayers=nil
[rootLayer.sublayers-makeObjectsPerformSelector:@selector(removeFromSuperlayer)]
对其进行了彻底测试。一定有一个系统创建的层被搞砸了

您必须保留自己的图层阵列,并自己删除它们:

[myArrayOfLayersIAddedMyself makeObjectsPerformSelector:@selector(removeFromSuperlayer)];

它是self.scrollView.layer.sublayers=nil。不分青红皂白地删除所有子层会导致iOS 7中的严重崩溃,这可能会在程序执行的更晚时间发生。我已经使用
rootLayer.sublayers=nil
[rootLayer.sublayers-makeObjectsPerformSelector:@selector(removeFromSuperlayer)]
对其进行了彻底测试。一定有一个系统创建的层被搞砸了

您必须保留自己的图层阵列,并自己删除它们:

[myArrayOfLayersIAddedMyself makeObjectsPerformSelector:@selector(removeFromSuperlayer)];

我们需要跟踪在各自视图上绘制的图层。 例如: NSMutableArray*CashapeLayer列表

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保存在数组self中。卡沙佩尔酒店 我们可以在任何需要擦除功能的地方检查条件 比如: 布尔-比瑟拉斯; 如果(bISErase==YES),则执行以下操作:

[self. listOfCAShapeLayer enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){

CAShapeLayer *sl = obj;
[sl removeFromSuperlayer];
}])


我希望这对您现在有所帮助。

我们需要跟踪在各自视图上绘制的图层。 例如: NSMutableArray*CashapeLayer列表

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保存在数组self中。卡沙佩尔酒店 我们可以在任何需要擦除功能的地方检查条件 比如: 布尔-比瑟拉斯; 如果(bISErase==YES),则执行以下操作:

[self. listOfCAShapeLayer enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){

CAShapeLayer *sl = obj;
[sl removeFromSuperlayer];
}])


我希望这对您现在有所帮助。

当应用程序崩溃时,您能附上堆栈日志吗?它没有显示任何内容…好的,除了。。。因此,我会检查主线程中是否完成了所有操作,也许您可以尝试在重新加载之前在主队列中分派此代码,您可能希望释放子层的副本:
layerArray=nil假设在代码显示后立即再次添加层。不知道这样是否行,因为LayerRay会在你的方法退出后被释放-假设你使用的是ARC。你能在应用程序崩溃时附加堆栈日志吗?它没有显示任何东西…好的,除了。。。因此,我会检查主线程中是否完成了所有操作,也许您可以尝试在重新加载之前在主队列中分派此代码,您可能希望释放子层的副本:
layerArray=nil假设在代码显示后立即再次添加层。不知道这样做是否可行,因为在方法退出后,LayerRay将被释放——假设您使用的是ARC。