Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何在iOS中使用Bezier路径绘制具有直线和弯曲角的不同形状_Objective C_Core Graphics_Core Animation_Uibezierpath_Cgpath - Fatal编程技术网

Objective c 如何在iOS中使用Bezier路径绘制具有直线和弯曲角的不同形状

Objective c 如何在iOS中使用Bezier路径绘制具有直线和弯曲角的不同形状,objective-c,core-graphics,core-animation,uibezierpath,cgpath,Objective C,Core Graphics,Core Animation,Uibezierpath,Cgpath,我需要画一个形状与直线和曲线的角落使用贝塞尔路径与CG点在一个数组中。数组中提到的点表示形状的角。应根据阵列中的CG点(坐标)动态绘制路径 绘制多边形的步骤 //// General Declarations CGContextRef context = UIGraphicsGetCurrentContext(); //// Polygon Drawing CGContextSaveGState(context); CGContextTranslateCTM(context, CGRec

我需要画一个形状与直线和曲线的角落使用贝塞尔路径与CG点在一个数组中。数组中提到的点表示形状的角。应根据阵列中的CG点(坐标)动态绘制路径

绘制多边形的步骤

   //// General Declarations
CGContextRef context = UIGraphicsGetCurrentContext();

//// Polygon Drawing
CGContextSaveGState(context);
CGContextTranslateCTM(context, CGRectGetMinX(frame) + 33.5, CGRectGetMinY(frame) + 226.5);
CGContextRotateCTM(context, -90 * M_PI / 180);

UIBezierPath* polygonPath = [UIBezierPath bezierPath];
[polygonPath moveToPoint: CGPointMake(99.5, 0)];
[polygonPath addLineToPoint: CGPointMake(185.67, 47.75)];
[polygonPath addLineToPoint: CGPointMake(185.67, 143.25)];
[polygonPath addLineToPoint: CGPointMake(99.5, 191)];
[polygonPath addLineToPoint: CGPointMake(13.33, 143.25)];
[polygonPath addLineToPoint: CGPointMake(13.33, 47.75)];
[polygonPath closePath];
[UIColor.grayColor setFill];
[polygonPath fill];

CGContextRestoreGState(context);
将其放在uiview的drawRect方法中:

这给出了图像:

曲线多边形:

//// Bezier Drawing
UIBezierPath* bezierPath = [UIBezierPath bezierPath];
[bezierPath moveToPoint: CGPointMake(CGRectGetMinX(frame) + 59.5, CGRectGetMinY(frame) + 126.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 55.5, CGRectGetMinY(frame) + 116.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 59.5, CGRectGetMinY(frame) + 105.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 91.5, CGRectGetMinY(frame) + 55.5)];
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 101.5, CGRectGetMinY(frame) + 44.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 91.5, CGRectGetMinY(frame) + 55.5) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 96.75, CGRectGetMinY(frame) + 48.5)];
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 113.5, CGRectGetMinY(frame) + 39.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 106.25, CGRectGetMinY(frame) + 40.5) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 113.5, CGRectGetMinY(frame) + 39.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 188.5, CGRectGetMinY(frame) + 39.5)];
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 203.5, CGRectGetMinY(frame) + 44.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 188.5, CGRectGetMinY(frame) + 39.5) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 198, CGRectGetMinY(frame) + 40.5)];
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 213.5, CGRectGetMinY(frame) + 55.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 209, CGRectGetMinY(frame) + 48.5) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 213.5, CGRectGetMinY(frame) + 55.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 245.5, CGRectGetMinY(frame) + 105.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 249.5, CGRectGetMinY(frame) + 116.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 245.5, CGRectGetMinY(frame) + 126.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 213.5, CGRectGetMinY(frame) + 173.5)];
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 203.5, CGRectGetMinY(frame) + 180.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 213.5, CGRectGetMinY(frame) + 173.5) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 209, CGRectGetMinY(frame) + 177.25)];
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 188.5, CGRectGetMinY(frame) + 183.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 198, CGRectGetMinY(frame) + 183.75) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 188.5, CGRectGetMinY(frame) + 183.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 113.5, CGRectGetMinY(frame) + 183.5)];
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 101.5, CGRectGetMinY(frame) + 180.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 113.5, CGRectGetMinY(frame) + 183.5) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 106.25, CGRectGetMinY(frame) + 183.75)];
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 94.5, CGRectGetMinY(frame) + 173.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 96.75, CGRectGetMinY(frame) + 177.25) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 94.5, CGRectGetMinY(frame) + 173.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 59.5, CGRectGetMinY(frame) + 126.5)];
[UIColor.grayColor setFill];
[bezierPath fill];
[UIColor.grayColor setStroke];
bezierPath.lineWidth = 1;
[bezierPath stroke];

要生成与图像相似的结果,请执行以下操作:

//// Bezier Drawing
UIBezierPath* bezierPath = [UIBezierPath bezierPath];
[bezierPath moveToPoint: CGPointMake(CGRectGetMinX(frame) + 57.5, CGRectGetMinY(frame) + 126.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 55.5, CGRectGetMinY(frame) + 116.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 57.5, CGRectGetMinY(frame) + 105.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 73.5, CGRectGetMinY(frame) + 55.5)];
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 78.5, CGRectGetMinY(frame) + 44.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 73.5, CGRectGetMinY(frame) + 55.5) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 76.12, CGRectGetMinY(frame) + 48.5)];
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 84.5, CGRectGetMinY(frame) + 39.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 80.88, CGRectGetMinY(frame) + 40.5) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 84.5, CGRectGetMinY(frame) + 39.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 122, CGRectGetMinY(frame) + 39.5)];
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 129.5, CGRectGetMinY(frame) + 44.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 122, CGRectGetMinY(frame) + 39.5) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 126.75, CGRectGetMinY(frame) + 40.5)];
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 134.5, CGRectGetMinY(frame) + 55.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 132.25, CGRectGetMinY(frame) + 48.5) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 134.5, CGRectGetMinY(frame) + 55.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 150.5, CGRectGetMinY(frame) + 105.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 152.5, CGRectGetMinY(frame) + 116.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 150.5, CGRectGetMinY(frame) + 126.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 134.5, CGRectGetMinY(frame) + 173.5)];
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 129.5, CGRectGetMinY(frame) + 180.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 134.5, CGRectGetMinY(frame) + 173.5) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 132.25, CGRectGetMinY(frame) + 177.25)];
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 122, CGRectGetMinY(frame) + 183.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 126.75, CGRectGetMinY(frame) + 183.75) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 122, CGRectGetMinY(frame) + 183.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 84.5, CGRectGetMinY(frame) + 183.5)];
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 78.5, CGRectGetMinY(frame) + 180.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 84.5, CGRectGetMinY(frame) + 183.5) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 80.88, CGRectGetMinY(frame) + 183.75)];
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 75, CGRectGetMinY(frame) + 173.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 76.12, CGRectGetMinY(frame) + 177.25) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 75, CGRectGetMinY(frame) + 173.5)];
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 57.5, CGRectGetMinY(frame) + 126.5)];
[UIColor.grayColor setStroke];
bezierPath.lineWidth = 1;
[bezierPath stroke];

最初,我为形状创建了CG可变路径,然后按照下面的链接更新形状上的弯角1)2)有人能解决我的问题吗?这是什么条件?我想在上面的问题中再添加一个条件,即我在将使用的数组中有CG点用于使用贝塞尔路径创建形状。应根据阵列中的CGPoints(坐标)动态绘制路径HI先生T,您对上述问题有解决方案吗?如何将点存储在阵列中?r u只考虑一个屏幕大小的贝塞尔路径?浮点x=[[UIScreen mainScreen]界限].size.width;浮动y=[[UIScreen mainScreen]界限].size.height;