如何在 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的主要内容,如果未能解决你的问题,请参考以下文章

在 UIView (Swift) 中绘制圆形切口

Swift 4为UIView添加自定义圆形[关闭]

如何在 iOS Swift 中制作加载动画?

如何在 UIView 中制作透明孔

如何在 iOS Swift4 中创建这个圆形?

如何在 Swift 中创建一个圆形按钮? [关闭]