【iOS】自己画描边圆角,自己出坑爹问题(2019.7.8更新)

本文详细探讨了iOS应用中自定义圆角描边按钮存在的问题,包括描边宽度缩窄和圆角显示异常。通过分析原有实现,发现了圆角绘制和CGContext相关方法的潜在问题,并尝试了多种解决方法,最终解决了描边宽度问题,但仍有边框粗细不一致的遗留问题。
摘要由CSDN通过智能技术生成

这是一个产品由来以久的问题,结果伴随着新版本的测试上线,设计表示实在忍无可忍(明显欺负我新来的嘛),只好花时间去看看这个问题怎么回事。

圆角描边问题

首先说明设计的规范:

1.圆角长宽都为矩形高度一半

2.圆角描边宽度borderWidth为1单位

3.被点击时表框也需要变化

由于第三点,因此不能使用系统默认样式,这是业务前提

我们可以先看看系统默认样式下的表现,描边宽度为1单位(即button.layer.borderWidth = 1)

可以看到定义.layer.borderWidth为1单位的时候,宽度其实是2px

然后看一下我们自己写的按钮,同样定义描边宽度为1单位

可以看出问题在于圆角变成了只有一个像素,也就是0.5单位。

这个问题其实在版本中一直存在,只是因为描边按钮的曝光机会不大因此一直没有修改(设计其实已经多次提出)

这次在一个主要页面会有两次曝光,因此一定要解决这个问题。


原版本实现分析

首先讲一下这个有问题的圆角是怎么实现的。

为了实现点击时描线框可以改变颜色,并且考虑到效率问题,这整个描线框其实是一个继承UIImageView的view

也就是说这个描线框是按钮(继承UIButton)的backgroudView而非layer一部分,在此基础上所有对按钮的描线框、背景的设置其实都是由一个view来响应。

@interface RoundedRectangle : UIImageView
@property(nonatomic,assign) CGFloat  cornerRadius;
@property(nonatomic,assign) CGFloat  borderWidth;
@property(nonatomic,strong) UIColor *borderColor;
@end

这个定义很好理解,当上面参数变化的时候都会调用刷新背景的方法:- (void)_updateDisplay

因此我们下面聚焦这个方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值