在Swift

时间:2015-12-03 06:14:34

标签: swift swift2 uibezierpath swift2.1

我正在研究一种设计项目。在此项目中,您可以选择一个对象,并可以更改颜色或大小,或移动。

开始使用该应用的原型。

我将使用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的原因)。

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

1 个答案:

答案 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];

希望它有所帮助!