📅  最后修改于: 2023-12-03 14:48:58.062000             🧑  作者: Mango
需要设置 UIView 的两个角的半径时,可以使用 QuartzCore 框架来实现。
在设置两个角半径的 UIView 文件中,导入 QuartzCore 框架:
#import <QuartzCore/QuartzCore.h>
创建一个方法,该方法接受一个 UIView 实例和两个角的半径:
- (void)setCornerRadius:(UIView *)view withRadius:(CGFloat)radius topLeft:(BOOL)topLeft topRight:(BOOL)topRight;
在方法中,首先创建一个 CAShapeLayer 实例,并设置其路径和填充颜色:
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:view.bounds
byRoundingCorners:(topLeft ? UIRectCornerTopLeft : 0) | (topRight ? UIRectCornerTopRight : 0)
cornerRadii:CGSizeMake(radius, radius)];
maskLayer.path = path.CGPath;
maskLayer.fillColor = [UIColor whiteColor].CGColor;
然后将该 CAShapeLayer 实例设置为 UIView 的遮罩层:
view.layer.mask = maskLayer;
最终的方法代码如下:
- (void)setCornerRadius:(UIView *)view withRadius:(CGFloat)radius topLeft:(BOOL)topLeft topRight:(BOOL)topRight {
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:view.bounds
byRoundingCorners:(topLeft ? UIRectCornerTopLeft : 0) | (topRight ? UIRectCornerTopRight : 0)
cornerRadii:CGSizeMake(radius, radius)];
maskLayer.path = path.CGPath;
maskLayer.fillColor = [UIColor whiteColor].CGColor;
view.layer.mask = maskLayer;
}
使用该方法时,只需要将需要设置的 UIView 实例作为第一个参数传入,两个角的半径作为第二个参数传入,以及需要设置半径的两个角的标志位传入即可。
例如,如果需要设置一个 UIView 实例左上角和右上角的半径为 10:
[self setCornerRadius:myView withRadius:10.0 topLeft:YES topRight:YES];
参考文献
返回markdown格式:
# Objective-C - 设置两个角半径
需要设置 UIView 的两个角的半径时,可以使用 QuartzCore 框架来实现。
### 步骤1 - 导入 QuartzCore 框架
在设置两个角半径的 UIView 文件中,导入 QuartzCore 框架:
```objective-c
#import <QuartzCore/QuartzCore.h>
创建一个方法,该方法接受一个 UIView 实例和两个角的半径:
- (void)setCornerRadius:(UIView *)view withRadius:(CGFloat)radius topLeft:(BOOL)topLeft topRight:(BOOL)topRight;
在方法中,首先创建一个 CAShapeLayer 实例,并设置其路径和填充颜色:
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:view.bounds
byRoundingCorners:(topLeft ? UIRectCornerTopLeft : 0) | (topRight ? UIRectCornerTopRight : 0)
cornerRadii:CGSizeMake(radius, radius)];
maskLayer.path = path.CGPath;
maskLayer.fillColor = [UIColor whiteColor].CGColor;
然后将该 CAShapeLayer 实例设置为 UIView 的遮罩层:
view.layer.mask = maskLayer;
最终的方法代码如下:
- (void)setCornerRadius:(UIView *)view withRadius:(CGFloat)radius topLeft:(BOOL)topLeft topRight:(BOOL)topRight {
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:view.bounds
byRoundingCorners:(topLeft ? UIRectCornerTopLeft : 0) | (topRight ? UIRectCornerTopRight : 0)
cornerRadii:CGSizeMake(radius, radius)];
maskLayer.path = path.CGPath;
maskLayer.fillColor = [UIColor whiteColor].CGColor;
view.layer.mask = maskLayer;
}
使用该方法时,只需要将需要设置的 UIView 实例作为第一个参数传入,两个角的半径作为第二个参数传入,以及需要设置半径的两个角的标志位传入即可。
例如,如果需要设置一个 UIView 实例左上角和右上角的半径为 10:
[self setCornerRadius:myView withRadius:10.0 topLeft:YES topRight:YES];
参考文献