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)
接受答案的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)