0

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

现在我研究了draw()方法UIView,我注意到苹果建议GLKView在使用 OpenGL 绘图时使用。

对于一个简单的分隔符,调用OpenGL会不会太麻烦?还是 OpenGL 开销可以忽略不计?那我什么时候想使用原生 UIKitdraw()呢?

仅供参考,我不知道任何一种方法,但想学习两种方法,所以不要回答“你最了解的”。我只是问性能。

4

2 回答 2

1

OpenGL 使用 GPU 而不是 CPU 进行计算。如果您正在制作类似游戏应用程序的东西,那么您可以考虑使用 OpenGL。我相信您想在 iOS 应用程序中画一条线。为此,您可以使用drawRectUIView 中的方法或创建一个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,您应该在自定义 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添加UIBezierPathcircle

于 2016-11-15T11:05:36.757 回答
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];
于 2016-11-15T11:21:55.903 回答