上周把项目的折线图给做了下,今天想着把它完善完善,自己设置了不同的数据源来测试,哈哈,还真遇到问题了, 就是给图表设置折点数为0时,视图显示的还是原来的,由于数据为空,应该将其设置为空,所以想着怎么把ScrollView中的子视图情况。由于标题和折点值是用Label,可以删除View。但画的线和点是通过贝塞尔曲线添加到图层上了,还要把子视图的layer删掉。可是问题来了, 先上删除代码:
int count = [self.layer.sublayers count];
for (int i = 0; i<count; i++) {
[self.layer.sublayers[i] removeFromSuperlayer];
}
但结果并不理想:
当多次点击日按钮时,会慢慢的删除,感觉蛮怪的,觉得可苦逼了。后来问了下oliver,大神就是大神,一会就搞出原因了。原来每次删除一个父视图之后就会时父视图的子图层个数-1,而如果每次都是用i索引删除就会遗漏一些子图层,修改之后就完美了。
int count = [self.layer.sublayers count];
for (int i = 0; i<count; i++) {
[self.layer.sublayers[0] removeFromSuperlayer];
}
还有就是之前博客也提到过的for in 和for(int i=0;......)的区别。http://www.cnblogs.com/5ishare/p/4372398.html
我用下面的代码遍历时也是提示错误:was mutated while being enumerated 遍历的时候不能删除
for (CALayer *layer in self.layer.sublayers) {
[layer removeFromSuperlayer];
}
正确的代码更新在折线图那篇博客中了