如何在 Swift 中制作圆形 UIView
Posted
技术标签:
【中文标题】如何在 Swift 中制作圆形 UIView【英文标题】:How to make a circle UIView in Swift 【发布时间】:2017-11-07 08:05:13 【问题描述】:以下代码在 iPhone 上有效,但在 iPad 上,圆圈不是均匀圆角的。
如何使两个设备上的视图看起来像一个圆圈?
let width:CGFloat = UIScreen.main.bounds.width*0.0533
label.layer.masksToBounds = true
label.layer.cornerRadius = width/2
【问题讨论】:
我觉得好像高度不等于宽度.. 还有一个原因是您的按钮宽度是小数而不是四舍五入的整数。 (例如 33.33 像素)label.layer.cornerRadius = min(label.frame.size.width/2, label.frame.size.height/2)
,即使原始框架不是正方形,也会使圆形平滑。
【参考方案1】:
如果你想让你的 UIView 显示为一个圆圈,有几种方法可以做到这一点。
将其角半径设置为宽度/高度的一半(最常用的方式)如果您事先不知道视图的高度/宽度。您可以简单地覆盖其父视图类中的layoutSubviews()
函数或视图控制器中的func viewDidLayoutSubviews()
函数并直接在那里设置角半径。
override func layoutSubviews()
super.layoutSubviews()
label.layer.cornerRadius = label.frame.size.width/2
不要忘记将 UIView 层的 masksToBounds 属性设置为 true。
设置遮罩层为遮罩层指定贝塞尔路径。每次视图更改其大小时,必须更新图层的框架。
圆形图像如果您正在处理图像,您还可以考虑在 UIImageView 中显示之前对图像本身进行四舍五入 - 就性能而言,它可能比以前的选项更快。
【讨论】:
【参考方案2】:为了制作完整的圆圈,您应该保持标签的高度和宽度相同。 使用此代码。
let width:CGFloat = UIScreen.main.bounds.width*0.0533
label.frame = CGRect(0,0,width,width)
label.layer.masksToBounds = true
label.layer.cornerRadius = width/2
【讨论】:
【参考方案3】:发生这种情况的一个原因是,如果自动布局由于约束冲突而改变了标签的大小。
检查调试控制台以查看是否发生这种情况,或者仅使用“调试视图层次结构”查看视图的实际尺寸。
【讨论】:
以上是关于如何在 Swift 中制作圆形 UIView的主要内容,如果未能解决你的问题,请参考以下文章