创建网格线并允许用户打开/关闭网格线视图
Posted
技术标签:
【中文标题】创建网格线并允许用户打开/关闭网格线视图【英文标题】:Create grid lines and allow user to on/off grid line view 【发布时间】:2011-09-05 06:47:39 【问题描述】:我想在我的应用程序中创建一个网格线方法并允许用户打开/关闭网格视图。它不需要任何类型的触摸检测或与之相关的逻辑。只是网格线供用户查看和打开/关闭它们。显而易见的解决方案是将网格图像添加到我的视图中,并在需要时使用 imageview 显示它。但这是我不能接受的选择。我必须以编程方式进行。谢谢你的时间。我计划实施的image。有任何想法吗 ?核心图形还是许多 uiview?
【问题讨论】:
【参考方案1】:我已将它用于 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
【讨论】:
【参考方案2】:子类化 UIView 并在其中创建单独的 2 个循环。一种用于垂直线,一种用于水平线。 在垂直线循环中,创建 UIView 的 1px 宽和 768px 高。在水平视图中,将它们创建为 1 像素高和 1024 像素宽。
要隐藏和显示它,只需将子类视图的 hidden 属性切换为 YES 或 NO。
您也可以不使用子类化,只需使用标准 UIView。
【讨论】:
感谢您的回复。是的,这似乎是一个简单的方法。看看更新。为此,我必须创建至少 40 个具有不同边框宽度的 uiviews 并实现逻辑来定位它们? 对于虚线我可能会使用图像,但是是的,这似乎是你必须做的。由于这些都是非常简单的 UIView,因此您应该对这个解决方案没有任何问题。 好的,但问题是我不能使用图像。我需要一个替代解决方案。 那么我想你必须深入研究 Core Graphics。不幸的是,我自己对此并不熟悉。 是的,如果我为此在核心图形中得到一些东西,我会遵循它,否则会按照你的建议做。谢谢。【参考方案3】:最终使用了这个:
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"sample.png"]];
【讨论】:
以上是关于创建网格线并允许用户打开/关闭网格线视图的主要内容,如果未能解决你的问题,请参考以下文章