0

任务是,在运行时在我在 Scrollview 中使用的自定义地图上绘制路径,然后每当位置坐标(纬度、经度)更新时,我必须在运行时绘制路径。我在这里试图解决的问题是我创建了一个“图形”类,它是 UIView 的子类,我在“drawrect:”方法中对绘图进行了编码。因此,当我将图形添加为图像上滚动视图的子视图时,线条会绘制,但我需要继续绘制线条,就好像它是路径一样。我需要在运行时画线,需要不断更新'CGContextStrokeLineSegments'方法的点(x,y)。编码:

视图控制器:

- (void)loadView {
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
CGRect fullScreenRect=[[UIScreen mainScreen] applicationFrame];
scrollView=[[UIScrollView alloc] initWithFrame:fullScreenRect];
graph = [[graphics alloc] initWithFrame:fullScreenRect];
scrollView.contentSize=CGSizeMake(320,480);

UIImageView *tempImageView2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"fortuneCenter.png"]];

self.view=scrollView;
[scrollView addSubview:tempImageView2];
scrollView.userInteractionEnabled = YES;
scrollView.bounces = NO;
[scrollView addSubview:graph];
}

图形.m:

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
    // Initialization code
    self.backgroundColor = [UIColor clearColor];
}
return self;
}

- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGPoint point [2] = { CGPointMake(160, 100), CGPointMake(160,300)};
CGContextSetRGBStrokeColor(context, 255, 0, 255, 1);
CGContextStrokeLineSegments(context, point, 2);
}

那么我如何在运行时绘制线条。我现在只是在模拟,所以我没有使用实时数据(坐标)。只想使用虚拟数据(x,y 的坐标)进行模拟。假设有一个按钮,每当我按下它时,它都会更新坐标以便路径扩展。

4

3 回答 3

1

最简单的方法是将表示点的实例变量添加到UIView子类。然后,每次路径更改时,适当地更新 ivar 并在自定义(甚至在其超级视图)上调用-setNeedsDisplay或。然后运行时将重绘新路径。setNeedsDisplayInRectUIView

于 2012-04-06T13:41:27.673 回答
1

从外观上看,您只需要CGPoint point[]动态调整大小即可。

您可以使用malloc、 astd::vector或什NSMutableData至存储您添加的点。然后你将该数组传递给CGContextStrokeLineSegments.

如果您只需要 2 点,请移至CGPoint point[2]ivar,以便您可以存储位置,然后(如 Rich 所述)在更改这些值(或数组)时适当地使 rects 无效。

于 2012-04-06T15:25:39.983 回答
0

这个主题时不时出现,所以我创建了一篇较长的博客文章,介绍与一种潜在解决方案有关的一般概念,创建和使用您自己的图形上下文,这里: http: //www.musingpaw.com/2012/04/绘图在 ios-apps.html

于 2012-04-14T21:22:23.490 回答