如何从一个循环制作一套圆形CAShapeLayer

时间:2016-07-27 04:32:51

标签: ios objective-c nsmutablearray cashapelayer cgpoint

for (NSValue * point in points){
    CGPoint p = point.CGPointValue;
    CAShapeLayer *point = [CAShapeLayer layer];
    [point setPath:[[UIBezierPath bezierPathWithOvalInRect:CGRectMake(p.x, p.y, 100, 100)] CGPath]];
    [point setStrokeColor:nil];
    [point setFillColor: [[UIColor blueColor] CGColor]];
    [point setZPosition:2];
    [self.layer addSublayer:point];
}

所以我有这个代码,这个点是一个NSMutableArray,它包含了CGPoints的NSValue,但是我总是遇到这个错误。

*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x7faf214a1a50> was mutated while being enumerated.'

我做错了什么?无论如何我可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

当您在两个不同的线程中处理可变数组同步时,会发生错误 这是一个同步问题 复制点数组可能会解决您的问题 只需修改您的代码如下:

for (NSValue * point in points.copy){
    CGPoint p = point.CGPointValue;
    CAShapeLayer *shapeLayer = [CAShapeLayer layer];
    [shapeLayer setPath:[[UIBezierPath bezierPathWithOvalInRect:CGRectMake(p.x, p.y, 100, 100)] CGPath]];
    [shapeLayer setStrokeColor:nil];
    [shapeLayer setFillColor: [[UIColor blueColor] CGColor]];
    [shapeLayer setZPosition:2];
    [self.layer addSublayer:shapeLayer];
}