2015-07-21 86 views
2

長故事簡介我想在CALayerShape上繪製對角網格。我的代碼而不是直線產生某種彎曲的瘋狂。它看起來非常有趣,我希望它會是想要的效果,但不,它不是。使用CAShapeLayer繪圖網格

我的問題: 1.如何使用CAShapeLayer繪製直線? 2.我在模擬器中發現了一些影響像素重心的黑洞嗎?

func drawPath(_view:UIView, phase:CGFloat, segment:CGFloat){ 
     // we need two runs 
     var height = CGRectGetHeight(view.frame) 
     let width = CGRectGetWidth(view.frame) 

     let segment:CGFloat = 40 
     var currentX:CGFloat = segment 
     var cgpath = CGPathCreateMutable() 

     for var y = height; y > 0 ; y = y - segment { 


      CGPathMoveToPoint(cgpath, nil, 0, y) 
      CGPathAddLineToPoint(cgpath, nil, currentX, 0) 
      CGPathCloseSubpath(cgpath) 

      currentX += segment 
     } 

     var layer = CAShapeLayer() 
     layer.path = cgpath 
     layer.strokeColor = UIColor.redColor().CGColor 
     layer.lineWidth = 1 
     layer.fillColor = UIColor.blackColor().CGColor 

     view.layer.addSublayer(layer) 


    } 

distorted grid

回答

3

你畫什麼是真正的直線。它看起來彎曲的事實是一種錯覺。你可以用紗線和一塊紙板獲得同樣的效果。

您的代碼做錯了事。

您需要使用方格紙繪製出想要的對角線網格,找出對角線網格的端點,然後提出一個循環,爲您提供這些端點。

如果你想在5x5的矩形畫出對角線網格你會畫線,像這樣:

0,1 to 1,0 
0,2 to 2,0 
0,3 to 3,0 
0,4 to 4,0 

你的發車間隔大概更像每20個或30點,你的整個電網可能是屏幕的全尺寸,但你明白了。

+0

謝謝。我意識到我的代碼並沒有渲染完美的網格,並且修復了它,但卻不知道這是光學錯覺! –