创建网格线并允许用户打开/关闭网格线视图

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"]];

【讨论】:

以上是关于创建网格线并允许用户打开/关闭网格线视图的主要内容,如果未能解决你的问题,请参考以下文章

C4D视图界面颜色变灰?请问如何恢复初始颜色

在 OSX 上创建连接到 Core Data 的类似 iTunes 的网格视图

VS2010 去除WPF设计视图中的网格线

单击按钮时剑道网格不会打开剑道窗口

单击特定网格视图单元格时淡出网格视图

如何在 iOS 上创建类似 Excel 的网格? [关闭]