2016-11-15 3 views
0

Мне нужно нарисовать разделительную линию с некоторыми точками на ней. Я решил, что сделаю это, используя метод draw, в отличие от изображений изображений разделителя. Я сделаю это для производительности и настраиваемости, поскольку разделитель иногда меняется.Нарисуйте UIView или GLKView?

Теперь я просмотрел метод draw() на UIView, и я заметил, что Apple предлагает использовать GLKView при рисовании с использованием OpenGL.

Для простого разделителя, не слишком ли сложно вызвать OpenGL? Или накладные расходы OpenGL незначительны? Когда я захочу использовать собственный UIKit draw()?

FYI Я не знаю ни одного метода, но хочу изучить оба метода, поэтому не отвечайте «что вы знаете лучше всего». Я просто спрашиваю о производительности.

+0

Что вы хотите сделать? – User511

+0

Вы собираетесь использовать его для обычного приложения iOS или для iOS-игры? – KrishnaCA

+0

@ KrishnaChaitanyaAmjuri приложение iOS, а не игра. – vrwim

ответ

1

OpenGL использует GPU вместо CPU для вычисления. Если вы делаете что-то вроде игрового приложения, вы можете подумать об использовании OpenGL. Я считаю, что вы хотите нарисовать линию в приложении iOS. Для этого вы можете использовать метод drawRect в UIView или создать 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, а затем добавьте UIBezierPath для circle.

+0

Вы предлагаете использовать метод draw в UIView, а не GLKView для простой строки? – vrwim

+1

GLKView использует openGL. Открытая графическая библиотека (OpenGL) используется для визуализации 2D и 3D-данных. Это многоцелевая графическая библиотека открытого стандарта, которая поддерживает приложения для создания 2D и 3D цифрового контента, механического и архитектурного проектирования, виртуального прототипирования, моделирования полета, видеоигр и т. Д. Если вы собираетесь создать простое приложение, и для простой строки в этом, я не вижу необходимости в использовании GPU. Если это игра, то это разные – KrishnaCA

+0

Как бы я нарисовал круг на этой линии? – vrwim

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]; 
+0

Он работает на вас? – User511