在UIView中绘制UIBezierPaths而不进行子类化?

n00*_*ant 7 objective-c uikit uiview ios uibezierpath

我是使用UIBezierPaths绘制形状的新手.到目前为止我发现的所有示例都涉及首先对视图进行子类化,然后重写drawRect:方法并在其中进行绘制,但是我无法找到任何绝对确定的说明这是否是绘制UIBezierPaths的唯一方法在UIView中,或者如果这只是最实用的方式.

有没有其他方法(除了调配)在UIView中绘制UIBezierPath而不进行子类化?

rde*_*mar 15

在不使用drawRect的情况下绘制贝塞尔路径的另一种方法是使用CAShapeLayers.将形状图层的path属性设置为从bezier路径创建的CGPath.将形状图层添加为视图图层的子图层.

    UIBezierPath *shape = [UIBezierPath bezierPathWithOvalInRect:self.view.bounds];
    CAShapeLayer *shapeLayer = [CAShapeLayer layer];
    shapeLayer.path = shape.CGPath;
    shapeLayer.fillColor = [UIColor colorWithRed:.5 green:1 blue:.5 alpha:1].CGColor;
    shapeLayer.strokeColor = [UIColor blackColor].CGColor;
    shapeLayer.lineWidth = 2;

    [self.view.layer addSublayer:shapeLayer];
Run Code Online (Sandbox Code Playgroud)


Chr*_*s C 6

接受答案的Swift版本:

    let shape = UIBezierPath(ovalInRect: view.bounds)
    let shapeLayer = CAShapeLayer()
    shapeLayer.path = shape.CGPath
    shapeLayer.fillColor = UIColor(red: 0.5, green: 1, blue: 0.5, alpha: 1).CGColor
    shapeLayer.strokeColor = UIColor.blackColor().CGColor
    shapeLayer.lineWidth = 2.0
    view.layer.addSublayer(shapeLayer)
Run Code Online (Sandbox Code Playgroud)