核心图形,如何在运行时绘制线条?

时间:2012-04-06 12:29:13

标签: iphone ios ios4 xcode4.2

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

的ViewController:

- (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];
}

Graphics.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的坐标)进行模拟。让我们说有一个按钮,每按一次它就会更新坐标,以便路径延伸。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

你只需要从它的外观中动态调整CGPoint point[]

您可以使用mallocstd::vector甚至NSMutableData来存储您添加的积分。然后将该数组传递给CGContextStrokeLineSegments

如果您需要2点,请将CGPoint point[2]移动到ivar,这样您就可以存储位置,然后(如Rich所说)在这些值(或数组)发生变化时适当地使rects无效。

答案 2 :(得分:0)

这个主题时不时出现,所以我创建了一篇关于一个潜在解决方案所涉及的一般概念的博客文章,创建和使用自己的图形上下文,在这里:http://www.musingpaw.com/2012/04/drawing-in-ios-apps.html