我需要绘制一个带有一些点的分隔线。我已决定使用draw方法执行此操作,而不是包含分隔符的图像。我会为了性能和可定制性而这样做,因为分隔符有时会发生变化。
现在我已经查看draw()
上的UIView
方法了,我注意到Apple建议在使用OpenGL绘图时使用GLKView
。
对于一个简单的分隔符,打电话给OpenGL是不是很麻烦?或者OpenGL开销可以忽略不计?我什么时候想要使用原生的UIKit draw()
呢?
仅供参考我不知道任何一种方法,但想要学习这两种方法,所以不要回复你最了解的方法"。我只想询问表现。
答案 0 :(得分:1)
OpenGL使用GPU代替CPU进行计算。如果您正在制作类似游戏应用程序的东西,那么您可以考虑使用OpenGL。我相信你想在iOS应用程序中画一条线。为此,您可以在UIView中使用drawRect
方法或创建shapeLayer
并将其添加为子图层。
以下示例将向您展示:
CAShapeLayer *simpleLine = [CAShapeLayer layer];
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(0, 80)];
[path addLineToPoint:CGPointMake(300, 80)];
simpleLine.lineWidth = 1.0;
simpleLine.path = path.CGPath;
simpleLine.strokeColor = [[UIColor blackColor] CGColor];
[[self.view layer] addSublayer:simpleLine];
对于使用drawRect
,您应该在Custom UIView中执行此操作,而不是使用上述方法。
- (void)drawRect:(CGRect)rect {
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(0, 80)];
[path addLineToPoint:CGPointMake(300, 80)];
path.lineWidth = 1.0;
[[UIColor blueColor] setStroke];
[path stroke];
}
如果您的分隔符参数发生更改,并且您正在制作应用,则最好使用drawRect
方法。您可以使用[CustomUIView setNeedsDisplay:YES]
修改强>
你所要求的是圈内线。您可以先为UIBezierPath
绘制line
,然后再为UIBezierPath
添加circle
。
答案 1 :(得分:0)
正常线
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(10.0, 10.0)];
[path addLineToPoint:CGPointMake(100.0, 100.0)];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = [path CGPath];
shapeLayer.strokeColor = [[UIColor redColor] CGColor];
shapeLayer.lineWidth = 3.0;
shapeLayer.fillColor = [[UIColor clearColor] CGColor];
[self.view.layer addSublayer:shapeLayer];
虚线
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(10.0, 10.0)];
[path addLineToPoint:CGPointMake(100.0, 100.0)];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = [path CGPath];
shapeLayer.strokeColor = [[UIColor redColor] CGColor];
shapeLayer.lineWidth = 3.0;
shapeLayer.fillColor = [[UIColor clearColor] CGColor];
shapeLayer.lineDashPattern = @[@4, @2];
[self.view.layer addSublayer:shapeLayer];