iOS绘图-线条旋转锯齿问题

最近在使用我的绘图控件YRBordView时,发现做旋转和抖动动画时有明显的锯齿出现,经过查资料,解决方案如下:


绘制时不要紧靠控件边缘,距离各边只要留出1像素(1px)即可解决。


找到方案后,顺便也把我的控件再次升级,支持通过设置contentEdgeInsets来调整绘制线条的边距。

有兴趣的可以看看我的加边线控件:YRBordView

发布了50 篇原创文章 · 获赞 27 · 访问量 23万+
展开阅读全文

iOS CAShapeLayer和UIBezierPath无限绘制图线如何不卡

12-22

现在公司有一个要求:连接蓝牙BLE4.0之后,获取传递过来的数据,然后以点的形式连接成线。 我采用的是CAShapeLayer和UIBezierPath绘制曲线,当一开始点比较少的时候,可以非常流畅的把线画出来 但是当点的数目达到3000左右,就会开始卡顿。 因为我们的数据是每秒25个数据,在scrollView上显示的时候回非常卡顿,请问有什么好办法来解决这个问题呢???? 以下是绘制的代码: UIBezierPath *path = [[UIBezierPath alloc] init]; path.usesEvenOddFillRule = YES; NSString * tt=nil; float height=self.topScrollView.frame.size.height; if (objc.BLE_View.minusRangeValue==0) { tt=[NSString stringWithFormat:@"{%.2f,%.2f}",timer_number*1.2,objc.BLE_View.positive_k*height*(1-[string floatValue]/[objc.BLE_View.positiveRangeValue floatValue])]; } else { if (isPositive) { tt=[NSString stringWithFormat:@"{%.2f,%.2f}",timer_number*1.2,objc.BLE_View.positive_k*height*(1-[string floatValue]/[objc.BLE_View.positiveRangeValue floatValue])]; } else { tt=[NSString stringWithFormat:@"{%.2f,%.2f}",timer_number*1.2,objc.BLE_View.minus_k*height*(1+[string floatValue]/[objc.BLE_View.minusRangeValue floatValue])]; } } if (!pointLast.x) { pointLast=CGPointFromString(tt); [path moveToPoint:pointLast]; [path addLineToPoint:pointLast]; } else { [path moveToPoint:pointLast]; [path addLineToPoint:pointLast]; [path addLineToPoint:CGPointFromString(tt)]; } //create shape layer CAShapeLayer *shapeLayer = [CAShapeLayer layer]; shapeLayer.drawsAsynchronously=YES; shapeLayer.strokeColor = [UIColor greenColor].CGColor; shapeLayer.fillColor = [UIColor whiteColor].CGColor; shapeLayer.lineWidth = 3; shapeLayer.lineJoin = kCALineJoinRound;//终点处理 shapeLayer.lineCap = kCALineCapRound;//线条拐角 shapeLayer.path = path.CGPath; //add it to our view [shapeLayerArr addObject:shapeLayer]; dispatch_sync(dispatch_get_main_queue(), ^{ [_topScrollView.layer addSublayer:shapeLayer]; // 设置layer的animation _topScrollView.layer.shouldRasterize = YES; NSLog(@"------》%f,-------》%f",pointLast.x-10,pointLast.y-10); [_topScrollView setNeedsDisplayInRect:CGRectMake(pointLast.x-10, pointLast.y-10, 40, 40)]; [_topScrollView.layer setNeedsDisplayInRect:CGRectMake(pointLast.x-10, pointLast.y-10, 40, 40)]; if (pointLast.x>_topScrollView.contentSize.width) { _topScrollView.contentSize=CGSizeMake(_topScrollView.contentSize.width+_topScrollView.frame.size.width, 0); _topScrollView.contentOffset=CGPointMake(pointLast.x, 0); } pointLast=CGPointFromString(tt); }); 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览