我怎样才能让UIView行为像CaLayer一样?

时间:2018-01-08 04:33:14

标签: objective-c uiview calayer uibezierpath

我有一条bezier路径,我将其转换为CALayer,然后添加到视图中。

我希望UIView的高度和宽度完全是CALayer形状。

myHTML = @"<html><body><svg height= \"400\" width= \"400\"><g><path d=\"M 20 20  C 30 30 40 40 50 50 M 50 50 C 60 70 80 70 60 50 \"  transform=\"translate(-20, -20)\" stroke = \"#000000\" fill=\"none\" stroke-width=\"5px\"></path></g></svg></body></html>";

    NSArray *test = [SVGBezierPath pathsFromSVGString:myHTML];
    for(SVGBezierPath *path in test) {
        // Create a layer for each path
        CAShapeLayer *layer = [CAShapeLayer layer];
        layer.path = path.CGPath;
        UIView *vw = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
        // Set its display properties
        layer.lineWidth   = 4;
        layer.strokeColor = [[UIColor blackColor] CGColor];
        layer.fillColor   = [[UIColor clearColor] CGColor];
        vw.center = self.view.center;
        [vw setBackgroundColor:[UIColor grayColor]];
        // Add it to the layer hierarchy
        [vw.layer addSublayer:layer];

        [self.view addSubview:vw];
    }

当我尝试这个代码时,我得到了这个 enter image description here

我尝试过查看图层的宽度和高度

vw = [[UIView alloc]initWithFrame:CGRectMake(vw.bounds.origin.x, vw.bounds.origin.y, layer.bounds.size.height, layer.bounds.size.width)];

然后视图消失,只有图层可见。

我希望得到类似下面图片的内容,我有调整大小视图和事物的代码,但需要让视图的边界正好是视图的最大高度和最大宽度,如下所示。

enter image description here

1 个答案:

答案 0 :(得分:0)

尝试将视图框设置为路径边界框。假设SVGBezierPath是UIBezierPath的子类。

context