2016-04-09 46 views
-1

我正在构建一个应用程序,我希望向用户展示平面图,这是互动的,这意味着他们可以点击每个区域放大这些图像并找到更精细的细节。iOS:Quartz2d绘制平面图

我收到了来自后端的JSON响应,其中包含楼层平面图,形状信息和点的元数据信息。我打算解析点并使用石英在视图上绘制形状(开始学习Quartz2d)。作为开始,我拍了一张简单的蓝色印花,看起来像下面的图像。 Plan Image

根据蓝图,中心位于(0,0),有4个点。

以下是我从后台获取蓝图的要点。

X:-1405.52, Y:686.18 
X:550.27, Y:683.97 
X:1392.26, Y:-776.79 
X:-1405.52, Y:-776.79 

我极力把这个

// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect { 
    // Drawing code 

      for (Shape *shape in shapes.shapesArray) { 
       CGContextRef context = UIGraphicsGetCurrentContext(); 
       CGContextSetLineWidth(context, 2.0); 
       CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor); 
       BOOL isFirstPoint = YES; 
       for (Points *point in shape.arrayOfPoints) { 
        NSLog(@"X:%f, Y:%f",point.x,point.y); 
        if (isFirstPoint) { 
         CGContextMoveToPoint(context, point.x, point.y); 
         //[bpath moveToPoint:CGPointMake(point.x,point.y)]; 
         isFirstPoint = NO; 
         continue; 
        } 
        CGContextAddLineToPoint(context, point.x, point.x); 

       } 
       CGContextStrokePath(context); 
      } 

} 

但我得到下面的图片作为结果看起来并不是正确的 Rendered Image

问题:

  1. 我是我吗ñ实现这一目标的正确方向?

  2. 如何在-ve方向画点?

  3. 按照坐标,绘制将是非常巨大的,我想先画,然后缩小以适合屏幕,以便用户以后可以放大/平移等

更新:

我已经实现了一些使用翻译和缩放的基本功能。现在的问题是我如何适应所绘制的内容,到视图边界。由于我的坐标非常大,所以它会超出范围,我希望它适合。

请在下面找到我所拥有的测试代码。 任何想法如何适应它?

DrawshapefromJSONPoints

回答

0

我已找到问题的解决方案。现在我可以从一组点中绘制形状,并将它们放到屏幕上,并使它们变焦而不会损失质量。请在下面找到该项目的链接。这可以调整,以支持颜色,不同的形状,我目前只处理多边形。

DrawShapeFromJSON

1

几个意见:

没有什么使用quartz这一点,但使用OpenGL因为你提的要求,你可能会发现它更灵活的命中测试区域和缩放模型实时。

由于您使用CGContextMoveToPoint绘制了路径,因此您的代码假定已订购点列表。如果这是由数据合同保证的话,那么很好;但是,如果您在JSON中返回了多个封闭路径,则需要编写更智能的渲染器。

问题2 & 3可以用在计算机图形的引物(具体模型视图矩阵变换)覆盖。如果您的世界坐标以(0,0,0)为中心,则可以通过对每个顶点应用标量来缩放顶点。当您不使用quartz-2d坐标系时,负轴上的绘制点会更有意义(0,0)-(w, h)

+0

感谢您的信息。我不是OpenGL的专家,这就是我计划使用Quartz的原因。我的另一种方法是为每个形状创建多个uiview,这样我就可以拥有手势识别器,我正在重写代码。但是,再一个问题就是我给出了坐标,如果你检查截图,绘制的线条是不正确的。我在一些书中读到了 - 正确的坐标。 – anoop4real

+0

我已经完成了翻译要点,我已经更新了我的答案......你可以看看它吗? – anoop4real