为啥cornerRadius.width/2 不给我一个完美的圆?
Posted
技术标签:
【中文标题】为啥cornerRadius.width/2 不给我一个完美的圆?【英文标题】:Why doesn't cornerRadius.width/2 give me a perfect circle?为什么cornerRadius.width/2 不给我一个完美的圆? 【发布时间】:2018-09-29 08:09:20 【问题描述】:我正在尝试使用此代码从方形视图创建一个圆圈:
self.situationerCircle.layer.cornerRadius = self.situationerCircle.frame.size.width/2.0
situationerCircle.clipsToBounds = true
但我仍然没有得到一个完美的圆。我很确定这与我的约束有关,因为我使用这些约束进行了测试循环:
使用此代码:
testc.layer.cornerRadius = self.testc.frame.size.width/2
testc.clipsToBounds = true
这非常有效。然而,坏圈的约束如下所示:
原因是因为我想让它的大小与其容器成比例地增长,同时保持相同的 1:1 比例。但结果是一个半圆形,具有微妙但可见的边缘。任何想法如何解决这个问题?
【问题讨论】:
我猜是因为您根据width
应用cornerRadius
太快了。这意味着当你这样做时,width
它还不是最后一个。在didLayoutSubview()
中进行操作。您可以通过打印您所做的宽度以及它在didLayoutSubview()
中的呈现方式来检查它。
好人,成功了!非常感谢! :)
【参考方案1】:
如果您尝试在viewDidLoad()
中执行此代码,则可能会发生这种情况。 viewDidAppear()
可以工作,但如果您在单元格内尝试,则有一个名为 awakeFromNib()
的方法,您可以在其中定义对象。添加它并在那里替换您的代码。我同意 Larme 的回答,您可以致电 layoutIfNeeded()
刷新视图并强制完成我认为的完美圆圈。
【讨论】:
以上是关于为啥cornerRadius.width/2 不给我一个完美的圆?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 sklearn.cluster.AgglomerativeClustering 不给我们合并集群之间的距离?
为啥 glColorPointer 不给三角形着色 - 以及 opengl es 的其他奇怪的东西