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

时间:2011-09-05 06:47:39

标签: ios ipad uiview grid

我想在我的应用中创建网格线方法,并允许用户打开/关闭网格视图。它不需要任何类型的触摸检测或与之相关的逻辑。只是网格线,供用户查看和打开/关闭它们。对此的明显解决方案是在我的视图中添加网格图像,并在需要时使用imageview显示它。但这是一个我不能采取的选择。我必须以编程方式执行此操作。谢谢你的时间。我正计划实施的image。有任何想法吗 ?核心图形或许多uiviews?

3 个答案:

答案 0 :(得分:1)

对UIView进行子类化并在其中创建单独的2个循环。一个用于垂直线,一个用于水平线。 在垂直线循环中,创建UIView的1px宽和768px高。在水平方向上,创建1px高和1024px宽。

要隐藏和显示它,只需将子视图的隐藏属性切换为YES或NO。

您也可以不使用子类,只需使用标准的UIView。

答案 1 :(得分:1)

结束使用:

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

答案 2 :(得分: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