在 Swift 中更改 UIBezierPath 的颜色

Change color of UIBezierPath in Swift

我正在从事一种形式的设计项目。在此项目中,您 select 一个对象并且可以更改颜色或大小,或移动。

开始制作应用程序原型。

我将使用UIBezierPath绘制形状的方式,并将使用CAShapeLayer添加到UIView的子层。

此代码绘制一个形状,例如:

let insetRect = CGRect(x: 20, y: 20, width: 100, height: 100)
let path = UIBezierPath(roundedRect: insetRect, cornerRadius: 30)
UIColor.redColor().setFill()
path.fill()

path.lineWidth = 100
UIColor.blackColor().setStroke()
path.stroke()

let shapeLayer = CAShapeLayer()
shapeLayer.path = path.CGPath
shapeLayer.lineWidth = 1.0

self.view.layer.addSublayer(shapeLayer)

当应用程序启动时,形状创建没有问题。

我希望我可以点击屏幕并自动改变形状的颜色(随机)

另一个问题:形状是随机的,长方形,椭圆,圆角正方形。并且由于这些表格,我无法直接在 View 上创建(使用 UIBezierPath 的原因)。

有人能帮帮我吗?我试图解决这个问题几个小时,但到目前为止,一无所获。

您可以使用自定义视图,而不是将 bezierPath 添加为子层。将贝塞尔路径坐标和颜色传递给视图。将贝塞尔路径的实例保持在 class 级别并在 DrawRect: 方法中绘制。

当用户触摸控制器中的视图时,传递自定义视图消息以更改颜色并重绘。

您可以使用以下方法简单地更改贝塞尔曲线路径颜色:

yourColor.setStroke();

您可以强制您的视图使用更改后的颜色重绘贝塞尔曲线:

customView.setNeedsDisplay();

编辑

CustomView.m

-(id) initWithPath:(UIBezierPath *) path color:(UIColor *) color
{
    if(self = [super init])
    {
        bezierPath = path;
        pathColor = color;
    }
    return self;
}

- (void)drawRect:(CGRect)rect
{
    [bezierPath stroke];
}

在controller中,可以初始化为,

CustomView *customView = [[CustomView alloc] initWithPath:yourBezierPath color:[UIColor redColor];
customView.frame = yourFrame;
[self.view addSubview:customView];

要改变颜色,

[customView setPathColor:[UIColor greenColor];
[customView setNeedsDisplay];

希望对您有所帮助!