0

实现这一目标的最佳方法是什么?假设我有一个方法(未定义),它允许在屏幕上绘制一条具有固定大小和颜色的线条。然后这条线需要接受旋转手势和平移手势才能在屏幕上移动。它不会调整大小,只需要旋转和平移。

解决这个问题的最佳方法是什么?行应该是父视图的子视图还是子层?ios中画线的方法是什么?如何处理屏幕上的多行?我只是希望有人带领我在 ios 图形丛林中走上正确的道路。

4

2 回答 2

2

首先,您需要考虑整个绘图的复杂程度。根据您的描述,听起来任务相对简单。如果是这样的话,那么 Core Graphics 将是正确的选择。如果绘图明显更复杂,您应该查看 OpenGL ES 和 GLKit,尽管使用 OGL 涉及更多工作

假设 Core Graphics,我将存储线的中心点、角度和长度,并使用手势识别器更改角度和大小,并使用基本触发计算要绘制的点。循环点以在视图-drawRect方法中绘制,并使用适当的 CG 函数绘制每个点 - 调用[view setNeedsDisplay][view setNeedsDisplayInRect:areaToRedraw]触发重绘。(第二种方法只重绘您指定的视图部分,可用于提高性能)。

Core Graphics 系列教程中的第一篇在这里.-“画线”部分将是最相关的。我没有做过这个(我使用了这本书的旧版),但我已经关注了这个网站上的很多其他人,发现他们很有帮助

作为旁注,如果屏幕上有多个线条,您可能需要一种方法来关注特定线条 - 一种简单的方法是找到最接近用户触摸点的线条中心点。

于 2013-02-15T16:55:20.477 回答
1

似乎您想要的绘制线条的最佳 API 是使用 Core Graphics。将此代码放在 UIView 的 drawRect 方法中:

/* Set the color that we want to use to draw the line */ 
[[UIColor redColor] set];
/* Get the current graphics context */ 
CGContextRef currentContext =UIGraphicsGetCurrentContext();
/* Set the width for the line */
CGContextSetLineWidth(currentContext,5.0f);
/* Start the line at this point */ 
CGContextMoveToPoint(currentContext,50.0f, 10.0f);
/* And end it at this point */ 
CGContextAddLineToPoint(currentContext,100.0f, 200.0f);
/* Use the context's current color to draw the line */
CGContextStrokePath(currentContext);

对于手势识别,使用UIGestureRecognizers。使用以下方法

- (IBAction)handleRotate:(UIRotationGestureRecognizer *)recognizer
- (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer
- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer
于 2013-02-15T16:47:52.157 回答