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;