将 UIBezierPath 添加到 UIView
add UIBezierPath to UIView
我有一个带有布局约束的 UIView(宽度:400,height:180),我想在视图中添加一个贝塞尔曲线。
我的贝塞尔曲线是这样的:
UIBezierPath* bezierPath = [UIBezierPath bezierPath];
// origin, height | left border
[bezierPath moveToPoint: CGPointMake(0, 20)];
// origin, height | left border
[bezierPath addLineToPoint: CGPointMake(0, _donationView.frame.size.height)];
// height, width | bottom border
[bezierPath addLineToPoint: CGPointMake(_donationView.frame.size.width , _donationView.frame.size.height)];
[bezierPath addLineToPoint: CGPointMake(_donationView.frame.size.width, 20)];
[bezierPath addLineToPoint: CGPointMake(_donationView.frame.size.width - 20, 20)];
[bezierPath addLineToPoint: CGPointMake(_donationView.frame.size.width - 30, 15)];
[bezierPath addLineToPoint: CGPointMake(_donationView.frame.size.width - 40, 20)];
[bezierPath addLineToPoint: CGPointMake(0, 20)];
[bezierPath closePath];
[UIColor.grayColor setFill];
[bezierPath fill];
[UIColor.blackColor setStroke];
bezierPath.lineWidth = 1;
[bezierPath stroke];
创建贝塞尔曲线后我传递给:
CAShapeLayer *shapeView = [[CAShapeLayer alloc] initWithLayer:_donationView.layer];
[shapeView setPath:bezierPath.CGPath];
_donationView.layer.mask = shapeView;
但是贝塞尔曲线转到这个 CGRect(0, 0, 240, 128);
我怎样才能拥有 (0,0,400, 180) 的 CGRect?
谢谢大家
问题是您做得太早了,donationView
还没有达到最终大小。因此,当您读出它的 frame.size
时,您会得到错误的结果。您需要推迟添加蒙版,直到 布局完成后。
如果 donationView
以后 调整过大小,您还可以 运行 进入更多问题。遮罩层(或任何层)不参与自动布局是非常烦人的。因此,如果调整 donationView
的大小,您将必须删除此掩码并创建一个具有正确大小的新掩码并再次添加 。
我有一个带有布局约束的 UIView(宽度:400,height:180),我想在视图中添加一个贝塞尔曲线。
我的贝塞尔曲线是这样的:
UIBezierPath* bezierPath = [UIBezierPath bezierPath];
// origin, height | left border
[bezierPath moveToPoint: CGPointMake(0, 20)];
// origin, height | left border
[bezierPath addLineToPoint: CGPointMake(0, _donationView.frame.size.height)];
// height, width | bottom border
[bezierPath addLineToPoint: CGPointMake(_donationView.frame.size.width , _donationView.frame.size.height)];
[bezierPath addLineToPoint: CGPointMake(_donationView.frame.size.width, 20)];
[bezierPath addLineToPoint: CGPointMake(_donationView.frame.size.width - 20, 20)];
[bezierPath addLineToPoint: CGPointMake(_donationView.frame.size.width - 30, 15)];
[bezierPath addLineToPoint: CGPointMake(_donationView.frame.size.width - 40, 20)];
[bezierPath addLineToPoint: CGPointMake(0, 20)];
[bezierPath closePath];
[UIColor.grayColor setFill];
[bezierPath fill];
[UIColor.blackColor setStroke];
bezierPath.lineWidth = 1;
[bezierPath stroke];
创建贝塞尔曲线后我传递给:
CAShapeLayer *shapeView = [[CAShapeLayer alloc] initWithLayer:_donationView.layer];
[shapeView setPath:bezierPath.CGPath];
_donationView.layer.mask = shapeView;
但是贝塞尔曲线转到这个 CGRect(0, 0, 240, 128);
我怎样才能拥有 (0,0,400, 180) 的 CGRect?
谢谢大家
问题是您做得太早了,donationView
还没有达到最终大小。因此,当您读出它的 frame.size
时,您会得到错误的结果。您需要推迟添加蒙版,直到 布局完成后。
如果 donationView
以后 调整过大小,您还可以 运行 进入更多问题。遮罩层(或任何层)不参与自动布局是非常烦人的。因此,如果调整 donationView
的大小,您将必须删除此掩码并创建一个具有正确大小的新掩码并再次添加 。