简体   繁体   English

如何在ios中进行自定义绘图?

[英]How to make custom drawing in ios?

I want to make custom drawing so that i could convert it to image. 我想进行自定义绘图,以便可以将其转换为图像。

在此处输入图片说明

i have heard of UIBezierPath but donot know much about it, my purpose is to change color of it on basis of user's selection of color. 我听说过UIBezierPath,但对此了解不多,我的目的是根据用户选择的颜色来更改其颜色。

Create a CGGraphcisContext and get an image like this: 创建一个CGGraphcisContext并获得如下图像:

UIGraphicsBeginImageContextWithOptions(bounds.size, NO , [[UIScreen mainScreen] scale]);

// set the fill color (UIColor *)
[userSelectedColor setFill];

//create your path
UIBezierPath *path = ...

//fill the path with your color
[path fill]; 

UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

You might have to combine multiple paths to get your desired shape. 您可能必须组合多个路径才能获得所需的形状。 First create the 'drop' with bezier paths. 首先使用贝塞尔曲线路径创建“放置”。 The path might look something like this: 路径可能看起来像这样:

//Create the top half of the circle
UIBezierPath *drop = [UIBezierPath bezierPathWithArcCenter:CGPointMake(CGRectGetWidth(bounds)*0.5f, CGRectGetWidth(bounds)*0.5f)
                       radius:CGRectGetWidth(bounds)*0.5f
                       startAngle:0
                       endAngle:DEGREES_TO_RADIANS(180)
                       clockwise:NO];

//Add the first half of the bottom part
[drop addCurveToPoint:CGPointMake(CGRectGetWidth(bounds)*0.5f,CGRectGetHeight(bounds)) 
        controlPoint1:CGPointMake(CGRectGetWidth(bounds),CGRectGetWidth(bounds)*0.5f+CGRectGetHeight(bounds)*0.1f)]
        controlPoint2:CGPointMake(CGRectGetWidth(bounds)*0.6f,CGRectGetHeight(bounds)*0.8f)];

//Add the second half of the bottom part beginning from the sharp corner
[drop addCurveToPoint:CGPointMake(0,CGRectGetWidth(bounds)*0.5f) 
        controlPoint1:CGPointMake(CGRectGetWidth(bounds)*0.4f,CGRectGetHeight(bounds)*0.8f)
       controlPoint2:CGPointMake(0,CGRectGetWidth(bounds)*0.5f+CGRectGetHeight(bounds)*0.1f)];

[drop closePath];

Not entirely sure if this works since I couldn't test it right now. 由于目前无法测试,因此无法完全确定是否可行。 You might have to play with the controls points a bit. 您可能需要玩一些控制点。 It could be that I made some error with the orientation. 可能是我在方向方面犯了一些错误。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM