Ios 在左上角创建自定义圆角矩形按钮?

Ios 在左上角创建自定义圆角矩形按钮?,ios,objective-c,cocoa-touch,cashapelayer,Ios,Objective C,Cocoa Touch,Cashapelayer,我有一个自定义按钮,我想让左上角的边框看起来像正常的圆形矩形 我发现代码可以让所有的角落变得更圆: _myButton.layer.cornerRadius = 8; _myButton.layer.borderWidth = 0.5; _myButton.layer.borderColor = [UIColor grayColor].CGColor; _myButton.clipsToBounds = YES; 如何修复代码,使其仅在左上角循环 编辑: 此代码不起作用。整个按钮都消失了。

我有一个自定义按钮,我想让左上角的边框看起来像正常的圆形矩形

我发现代码可以让所有的角落变得更圆:

_myButton.layer.cornerRadius = 8;
_myButton.layer.borderWidth = 0.5;
_myButton.layer.borderColor = [UIColor grayColor].CGColor;
_myButton.clipsToBounds = YES;

如何修复代码,使其仅在左上角循环


编辑:


此代码不起作用。整个按钮都消失了。

您几乎得到了它,但是,在构建
CAShapeLayer
后,使用它将自身添加为按钮层的子层,而不是隐藏按钮的某些部分(在这种情况下是角)的alpha遮罩


下面是一个类似的问题/答案,关于如何使用UIBezierPath来判断在UIView上保留/屏蔽哪些角:我使用了这里提供的代码。但它不起作用。我在问题的末尾添加了代码。你能帮我@Brayden吗?谢谢,看这行:
[\u myButton.layer addSublayer:shapePath]
你是说
shapeLayer
而不是shapePath?这就是我的意思sry。你所说的“不起作用”是什么意思?它看起来像什么?它没有显示边界。我只能看到按钮文本。没有边界。我不明白,我只是在一个样本项目中尝试了一下,它成功了。我得到了边界…太奇怪了,你能把项目发给我吗?这是我的电子邮件:alirezai83@yahoo.com
_myButton.layer.borderWidth = 2;
_myButton.layer.borderColor = [UIColor blackColor].CGColor;

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:_myButton.bounds
                                                    byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight
                                                        cornerRadii:CGSizeMake(7.0, 7.0)];

CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];

maskLayer.frame = _myButton.bounds;
maskLayer.path = maskPath.CGPath;
_myButton.layer.mask = maskLayer;
[maskLayer release];
UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(10,300,300,40);
[button setTitle:@"Hey" forState:(UIControlStateNormal)];
[button setTitleColor:[UIColor blueColor] forState:(UIControlStateNormal)];

UIBezierPath *shapePath = [UIBezierPath bezierPathWithRoundedRect:button.bounds
                                                byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight
                                                      cornerRadii:CGSizeMake(7.0, 7.0)];

CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.frame = button.bounds;
shapeLayer.path = shapePath.CGPath;
shapeLayer.fillColor = [UIColor clearColor].CGColor;
shapeLayer.strokeColor = [UIColor blackColor].CGColor;
shapeLayer.lineWidth = 2;
[button.layer addSublayer:shapeLayer];

[self.view addSubview:button];
CAShapeLayer * positiveCorner = [CAShapeLayer layer];
positiveCorner.path = [UIBezierPath bezierPathWithRoundedRect: self.button.bounds
                                            byRoundingCorners: UIRectCornerTopRight | UIRectCornerBottomRight
                                                  cornerRadii: (CGSize){5, 5}].CGPath;

self.button.layer.mask = positiveCorner;