Рисование линии в iPhone / iPad

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

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

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

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

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

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

с уважением,
Paul Peelen

2 ответов


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

там вы хватаете графический контекст:

CGContextRef context = UIGraphicsGetCurrentContext();

и вы используете это для выполнения основных графических вызовов, таких как:

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 для всех деталей.


вы можете перетащить прямую линию, когда пользователь перетащить его на основе начальной и конечной точки нарисовать линию с помощью 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];
}

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