【问题标题】:How to draw in rect with bezier path?如何用贝塞尔路径绘制矩形?
【发布时间】:2023-07-21 19:34:01
【问题描述】:

我的视图中有一个矩形,我想使用 UIBezierPath 在该矩形中绘制一个图形。

我认为那个方法

UIBezierPath myBezierPath = [UIBezierPath bezierPathWithRect:myRect]; 

将创建一个名为 myBezierPath 的空 UIBezierPath,具有 myRect 赋予它的边界,然后我可以使用 moveToPoint 和 addLineToPoint “绘制” myBezierPath。但是,该代码创建了一个正方形(我正在描边那条路径,所以描边为正方形),其边界位于 myRect 中。 但我不想让他被看见。如果我尝试这个,我只想要那个:

NSLog(@"myBezierPath rect size %f,%f",myBezierPath.bounds.size.width,myBezierPath.bounds.size.height);

它返回 myRect 的宽度和高度。 因此我可以在我的 moveToPoint 方法和 addLine 方法中使用它。比如这样:

[myBezierPath addLineToPoint: CGPointMake(suit.bounds.size.width/2, 0)];

谢谢。

我的问题是:«如何使用贝塞尔路径绘制矩形?»

我用方法做了这个,这里的 myRect 有将 CGRect 和 myBezierPath 放在视图中心的原点。

myBezierPath = [UIBezierPath bezierPathWithRoundedRect:myRect cornerRadius:20.0];

Example 1 http://i.minus.com/iguFjeqZQrsb6.png

我怎样才能做出类似的事情(将我的另一幅图放在原点的中心)? 现在我有了这个:

Example 2 http://i.minus.com/ifVY9UAP7hVv3.png

【问题讨论】:

  • 有什么问题?你已经解决了这个问题。构建路径,构建它;不要使用bezierPathWithRect,因为它会构建一个不是你想要的矩形路径。
  • 这里没有实际问题。它所说的只是你思考了一些事情并(正确地)发现你错了。 (阅读文档可以防止这种情况发生。)这很好,但毫无疑问。
  • @matt 我的问题是,如果您不理解,我该如何做我想做的事。我在文档和互联网中找不到方法。我更新了我的问题。
  • 我刚刚告诉过你;要么在正确的原点以moveToPoint 开始,要么从零开始并以applyTransform: 移动原点
  • applyTransform 绘制矩形然后更改原点的方式。正常的方法是先思考,提前弄清楚原点,然后从那里开始。请参阅下面的代码。

标签: objective-c xcode drawing uibezierpath cgrect


【解决方案1】:

示例(您的界面中需要一个 UIImageView):

CGRect r = self.myImageView.bounds;
UIGraphicsBeginImageContextWithOptions(r.size, NO, 0);
UIBezierPath* p = [UIBezierPath bezierPathWithRoundedRect:CGRectInset(r,10,10) cornerRadius:10];
[p stroke];
CGPoint c = CGPointMake(r.size.width/2.0, r.size.height/2.0);
p = [UIBezierPath bezierPath];
[p moveToPoint:CGPointMake(c.x-30, c.y)];
[p addLineToPoint:CGPointMake(c.x, c.y-30)];
[p addLineToPoint:CGPointMake(c.x+30, c.y)];
[p addLineToPoint:CGPointMake(c.x, c.y+30)];
[p closePath];
[p fill];
self.myImageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

【讨论】:

  • 我做了我想要的,现在我明白为什么你不能理解我的问题:)。我根本没有办法做到这一点,但我确信它是。我把它添加到CGPointMake() 我计算的原点。谢谢马特。