2016-04-09 50 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