使用 CAShapeLayer 绘制网格

Jan*_*ski 3 core-animation core-graphics ios

长话短说,我想在 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)


    }
Run Code Online (Sandbox Code Playgroud)

扭曲的网格

Dun*_*n C 5

你画的实际上是直线。它看起来弯曲的事实是一种视错觉。你可以用纱线和一块纸板得到同样的效果。

你的代码做了错误的事情。

你需要用方格纸绘制出你想要的对角网格,找出对角网格的端点,然后想出一个循环来给你这些端点。

如果你想在 5x5 矩形中绘制对角网格,你可以像这样画线:

0,1 to 1,0
0,2 to 2,0
0,3 to 3,0
0,4 to 4,0
Run Code Online (Sandbox Code Playgroud)

您的网格间距可能比每个点更像 20 或 30 点,并且您的整个网格可能是屏幕的完整尺寸,但您明白了。