我正在研究一种设计项目。在此项目中,您可以选择一个对象,并可以更改颜色或大小,或移动。
开始使用该应用的原型。
我将使用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
的原因)。
答案 0 :(得分:2)
您可以使用自定义视图,而不是将bezierPath添加为子图层。将bezier路径坐标和颜色传递给视图。在类级别保留bezier路径的实例,并使用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];
}
在控制器中,您可以初始化为,
CustomView *customView = [[CustomView alloc] initWithPath:yourBezierPath color:[UIColor redColor];
customView.frame = yourFrame;
[self.view addSubview:customView];
要改变颜色,
[customView setPathColor:[UIColor greenColor];
[customView setNeedsDisplay];
希望它有所帮助!