在 iPhone / iPad 中画线

Posted

技术标签:

【中文标题】在 iPhone / iPad 中画线【英文标题】:Drawing a line in iPhone / iPad 【发布时间】:2011-01-24 14:45:26 【问题描述】:

当用户可以画线时,我想开发一个应用程序......但我不想画直线,而是想在用户画线时显示线。当用户从 A 点到 B 点时,我想拉直这条线(如果用户想要的话)。

为了能够做到这一点,我想将视图更改为从 0,0(左上角)开始到 320,480(对于 iPhone)和 768,1024(对于 iPad)(右下角)结束的网格。

对于这个问题,我的 A 点位于 10,10,B 点位于 100,100。

我的问题: - 如何创建此网格? - 如何创建这些点? - 如何在不拉直的情况下绘制这条线? - 如何画直线?

我的问题是我熟悉创建“普通”用户界面应用程序。我不熟悉 Open-GL 等。

我希望有人可以帮助我。

最好的问候, 保罗·皮伦

【问题讨论】:

我建议将您的“拉直”问题分解为一个单独的问题。 好吧,你的意思是我从直线作为第一步开始,然后在第二步继续非直线? 您已将其标记为opengl-es--您是使用它进行绘图,还是使用“原生”绘图系统 Quartz? 我的错。打算写opengl。我认为这是我需要使用的。 【参考方案1】:

您将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 编程指南了解所有详细信息。

【讨论】:

我开始做同样的事情,任何示例或教程......无法弄清楚如何使用此代码。任何帮助表示感谢【参考方案2】:

当用户根据起点和终点拖动直线时,您可以拖动直线,使用 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];

希望这将有助于实现您的目标。

【讨论】:

以上是关于在 iPhone / iPad 中画线的主要内容,如果未能解决你的问题,请参考以下文章

如何在OpenGL中画线?

在 Phaser 3 中画线

在UIView中画线

使用 itextsharp 在 pdf 文件中画线的问题

在 MFC VS2010 和 VC++6.0 中画线没有得到相同的结果

Unity3D-UGUI应用篇Image实现画线画三角形画正方形画圆