2011-09-05 67 views
2

我想在我的應用中創建網格線方法並允許用戶打開/關閉網格視圖。它不需要進行任何類型的觸摸檢測或與之相關的邏輯。只需網格線讓用戶看到並打開/關閉它們。這個明顯的解決方案是將網格圖像添加到我的視圖中,並在需要時使用imageview顯示它。但這是我不能採取的一種選擇。我必須通過編程來完成。謝謝你的時間。我計劃實施的image。有任何想法嗎 ?核心圖形還是許多uiviews?創建網格線並允許用戶打開/關閉網格線視圖

回答

1

結束了使用此:

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"sample.png"]]; 
1

子類UIView並在那裏創建單獨的2個循環。一個用於垂直線,另一個用於水平線。 在垂直線循環中,創建UIView的1px寬和768px高。在水平方向上,創建1px高,1024px寬。

要隱藏和顯示它,只需將subclassed視圖的隱藏屬性切換爲YES或NO。

你可能沒有子類化,也可以使用標準的UIView。

+0

感謝您的回覆。是的,這似乎是一個簡單的方法。看看更新。爲此,我將不得不創建至少40個不同邊界寬度的用戶界面,並實施邏輯來定位它們? – Viraj

+0

對於虛線我可能會使用一個圖像,但是,似乎這就是你必須要做的。由於這些都是非常簡單的UIView的,你不應該對這個解決方案有任何問題。 – margusholland

+0

好的,但問題是我不能使用圖像。我將需要一個備用解決方案。 – Viraj

0

我已經Swift3

class GridView: UIView { 

    var numberOfColumns: Int = 2 
    var numberOfRows: Int = 2 
    var lineWidth: CGFloat = 1.0 
    var lineColor: UIColor = UIColor.white 

    override func draw(_ rect: CGRect) { 
     if let context = UIGraphicsGetCurrentContext() { 

      context.setLineWidth(lineWidth) 
      context.setStrokeColor(UIColor.white.cgColor) 

      let columnWidth = Int(rect.width)/(numberOfColumns + 1) 
      for i in 1...numberOfColumns { 
       var startPoint = CGPoint.zero 
       var endPoint = CGPoint.zero 
       startPoint.x = CGFloat(columnWidth * i) 
       startPoint.y = 0.0 
       endPoint.x = startPoint.x 
       endPoint.y = frame.size.height 
       context.move(to: CGPoint(x: startPoint.x, y: startPoint.y)) 
       context.addLine(to: CGPoint(x: endPoint.x, y: endPoint.y)) 
       context.strokePath() 
      } 

      let rowHeight = Int(rect.height)/(numberOfRows + 1) 
      for j in 1...numberOfRows { 
       var startPoint = CGPoint.zero 
       var endPoint = CGPoint.zero 
       startPoint.x = 0.0 
       startPoint.y = CGFloat(rowHeight * j) 
       endPoint.x = frame.size.width 
       endPoint.y = startPoint.y 
       context.move(to: CGPoint(x: startPoint.x, y: startPoint.y)) 
       context.addLine(to: CGPoint(x: endPoint.x, y: endPoint.y)) 
       context.strokePath() 
      } 
     } 
    } 
} 

用它進行並設置其背景色爲clear

該代碼也存在here