在UIView或GLKView上绘图?

时间:2016-11-15 10:47:12

标签: ios uiview opengl-es glkview

我需要绘制一个带有一些点的分隔线。我已决定使用draw方法执行此操作,而不是包含分隔符的图像。我会为了性能和可定制性而这样做,因为分隔符有时会发生变化。

现在我已经查看draw()上的UIView方法了,我注意到Apple建议在使用OpenGL绘图时使用GLKView

对于一个简单的分隔符,打电话给OpenGL是不是很麻烦?或者OpenGL开销可以忽略不计?我什么时候想要使用原生的UIKit draw()呢?

仅供参考我不知道任何一种方法,但想要学习这两种方法,所以不要回复你最了解的方法"。我只想询问表现。

2 个答案:

答案 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];