在 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];
希望对您有所帮助!
我正在从事一种形式的设计项目。在此项目中,您 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];
希望对您有所帮助!