Рисование линии в iPhone / iPad - PullRequest
8 голосов
/ 24 января 2011

Я хотел бы разработать приложение, когда пользователь может рисовать линии ... но я не хочу рисовать прямые линии, но хочу показать линию так, как ее рисуют пользователи.Когда пользователь попадает из точки A в BI, он хочет выпрямить линию (если пользователи этого хотят).

Чтобы сделать это, я хочу изменить свое представление в сетке, начинающейся с 0,0 (вверху слева) и заканчивая на 320 480 (для iPhone) и 768 102 (для iPad) (внизу справа).

Для этого вопроса у меня есть точка A на 10,10 и точка B на 100 100.

Мой вопрос:- Как мне создать эту сетку?- Как мне создать эти очки?- Как мне нарисовать эту линию, не выпрямляя ее?- Как мне нарисовать прямую линию?

Моя проблема в том, что я знаком с созданием "обычных" приложений пользовательского интерфейса.Я не знаком с Open-GL и т. Д.

Я надеюсь, что кто-то может мне помочь с этим.

С уважением,Пол Пилен

Ответы [ 2 ]

17 голосов
/ 24 января 2011

Вы создаете подкласс для своего UIView и переопределяете метод - (void)drawRect:(CGRect)rect.

Там вы получаете графический контекст:

CGContextRef context = UIGraphicsGetCurrentContext();

И вы используете его для выполнения вызовов Core Graphics,как:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextBeginPath (context);
for (k = 0; k < count; k += 2) {
    CGContextMoveToPoint(context, s[k].x, s[k].y);
    CGContextAddLineToPoint(context, s[k+1].x, s[k+1].y);
}
CGContextStrokePath(context);

Посмотрите руководство по программированию Quartz 2D для всех деталей.

0 голосов
/ 21 мая 2017

Вы можете перетаскивать прямую линию, когда пользователь перетаскивает ее, основываясь на начальной и конечной точке, рисуя линию, используя UIBezierPath и CAShapeLayer:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event allTouches] anyObject];
    startingPoint = [touch locationInView:baseHolderView];

}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    endingPoint = [touch locationInView:baseHolderView];
    [self makeLineLayer:baseHolderView.layer lineFromPointA:startingPoint toPointB:endingPoint];
}

-(void)makeLineLayer:(CALayer *)layer lineFromPointA:(CGPoint)pointA toPointB:(CGPoint)pointB
{
    CAShapeLayer *line = [CAShapeLayer layer];
    UIBezierPath *linePath=[UIBezierPath bezierPath];
    [linePath moveToPoint: pointA];
    [linePath addLineToPoint:pointB];
    line.path=linePath.CGPath;
    line.fillColor = nil;
    line.opacity = 2.0;
    line.strokeColor = [UIColor blackColor].CGColor;
    [layer addSublayer:line];
}

Надеюсь, это поможет достичь вашей цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...