📜  为目标 c 设置两个角半径 - Objective-C (1)

📅  最后修改于: 2023-12-03 14:48:58.062000             🧑  作者: Mango

Objective-C - 设置两个角半径

需要设置 UIView 的两个角的半径时,可以使用 QuartzCore 框架来实现。

步骤1 - 导入 QuartzCore 框架

在设置两个角半径的 UIView 文件中,导入 QuartzCore 框架:

#import <QuartzCore/QuartzCore.h>
步骤2 - 创建一个方法

创建一个方法,该方法接受一个 UIView 实例和两个角的半径:

- (void)setCornerRadius:(UIView *)view withRadius:(CGFloat)radius topLeft:(BOOL)topLeft topRight:(BOOL)topRight;
步骤3 - 实现方法

在方法中,首先创建一个 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>
步骤2 - 创建一个方法

创建一个方法,该方法接受一个 UIView 实例和两个角的半径:

- (void)setCornerRadius:(UIView *)view withRadius:(CGFloat)radius topLeft:(BOOL)topLeft topRight:(BOOL)topRight;
步骤3 - 实现方法

在方法中,首先创建一个 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];

参考文献