From 17565510afdb61646c3427b1869993521a6ac36e Mon Sep 17 00:00:00 2001 From: jingcheng1988 Date: Tue, 2 Jan 2024 19:40:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=9C=86=E8=A7=92=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E6=94=AF=E6=8C=81=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E7=99=BE=E5=88=86=E6=AF=94=EF=BC=8C=E4=BB=A5=E5=8F=8A=E6=9C=80?= =?UTF-8?q?=E5=A4=A7=E4=B8=8D=E8=B6=85=E8=BF=8750%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GaiaXiOS/GaiaXiOS/Component/Node/GXBaseNode.h | 6 +++-- GaiaXiOS/GaiaXiOS/Component/Node/GXBaseNode.m | 26 ++++++++++++++++--- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/GaiaXiOS/GaiaXiOS/Component/Node/GXBaseNode.h b/GaiaXiOS/GaiaXiOS/Component/Node/GXBaseNode.h index a75d903fa..0153f3e1e 100644 --- a/GaiaXiOS/GaiaXiOS/Component/Node/GXBaseNode.h +++ b/GaiaXiOS/GaiaXiOS/Component/Node/GXBaseNode.h @@ -28,8 +28,10 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic) CGFloat opacity; // 边框宽度, 默认0 @property (nonatomic) CGFloat borderWidth; -// 圆角, 默认0 -@property (nonatomic) CGFloat cornerRadius; +// 圆角, 默认0,最大不超过50% +@property (nonatomic) CGFloat cornerRadius; +// 百分比圆角,最大不超过50% +@property (nonatomic) CGFloat percentCornerRadius; // 超出视图截断,默认为YES @property (nonatomic, assign) BOOL clipsToBounds; // 边框颜色, 默认nil diff --git a/GaiaXiOS/GaiaXiOS/Component/Node/GXBaseNode.m b/GaiaXiOS/GaiaXiOS/Component/Node/GXBaseNode.m index ea45d71ec..68d0c69cb 100644 --- a/GaiaXiOS/GaiaXiOS/Component/Node/GXBaseNode.m +++ b/GaiaXiOS/GaiaXiOS/Component/Node/GXBaseNode.m @@ -396,6 +396,7 @@ - (BOOL)updateLayoutStyle:(NSDictionary *)styleInfo{ self.bottomRightRadius = [GXStyleHelper converSimpletValue:bottomRight]; } self.cornerRadius = 0.f; + self.percentCornerRadius = 0.f; //更新标记 if (!isMark) { @@ -404,7 +405,7 @@ - (BOOL)updateLayoutStyle:(NSDictionary *)styleInfo{ } else if (cornerRadius) { //设置全圆角属性 - self.cornerRadius = [GXStyleHelper converSimpletValue:cornerRadius]; + [self handleBorderRadius:cornerRadius]; self.topLeftRadius = 0.f; self.topRightRadius = 0.f; self.bottomLeftRadius = 0.f; @@ -536,7 +537,14 @@ - (void)setupCornerRadius:(UIView *)view{ //设置圆角 & 表框 view.layer.borderColor = self.borderColor.CGColor; view.layer.borderWidth = self.borderWidth; - view.layer.cornerRadius = self.cornerRadius; + + CGFloat radius = 0.0; + if (self.percentCornerRadius > 0) { + radius = view.frame.size.height * self.percentCornerRadius; + } else { + radius = MIN(view.frame.size.height / 2.0, self.cornerRadius); + } + view.layer.cornerRadius = radius; } } @@ -727,9 +735,10 @@ - (void)configureStyleInfo:(NSDictionary *)styleJson{ NSString *borderRadius = [styleJson gx_stringForKey:@"border-radius"]; if (borderRadius.length) { isNeedFlat = NO; - self.cornerRadius = [GXStyleHelper converSimpletValue:borderRadius]; + [self handleBorderRadius:borderRadius]; } else { self.cornerRadius = 0.f; + self.percentCornerRadius = 0.f; } } @@ -742,6 +751,17 @@ - (void)configureStyleInfo:(NSDictionary *)styleJson{ } +// 处理全圆角的逻辑 +- (void)handleBorderRadius:(NSString *)borderRadius { + if ([borderRadius hasSuffix:@"%"]) { + CGFloat value = [[borderRadius substringToIndex:(borderRadius.length - 1)] floatValue] / 100.0f; + self.percentCornerRadius = MAX(MIN(0.5, value), 0); + self.cornerRadius = 0.0; + } else { + self.cornerRadius = [GXStyleHelper converSimpletValue:borderRadius]; + self.percentCornerRadius = 0.0; + } +} #pragma mark - 属性设置