使用CAShapeLayer绘制网格

3

简单来说,我想在CALayerShape上绘制对角网格。我的代码绘制的不是直线,而是一些弯曲的怪异线条。这看起来非常有趣,但我希望它能够产生预期效果,但实际上并没有。

我的问题: 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

1个回答

4
你画的实际上是直线,看起来弯曲只是一种视觉错觉。你可以用纱线和一块硬纸板得到同样的效果。
你的代码做错了事情。
你需要在图纸上勾画出所需的对角线网格,找出你想要的对角线网格的端点,然后编写一个循环来给你这些端点。
如果你想在一个5x5的矩形中画出一条对角线网格,你应该像这样画线:
0,1 to 1,0
0,2 to 2,0
0,3 to 3,0
0,4 to 4,0

你的网格间距可能更接近于20或30个点而不是每个点,整个网格可能占据整个屏幕大小,但你已经理解了这个概念。

谢谢。我意识到我的代码不能呈现完美的网格,已经修复了它,但是我不知道这是一种视觉错觉! - Janusz Chudzynski
点击此链接查看如何使用网格纸创建这种幻觉:https://www.wikihow.com/Draw-a-Parabolic-Curve-(a-Curve-with-Straight-Lines) - Duncan C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接