在 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 中画线的主要内容,如果未能解决你的问题,请参考以下文章