制作不同宽度和高度的 UIView 的 Circle

Posted

技术标签:

【中文标题】制作不同宽度和高度的 UIView 的 Circle【英文标题】:Make Circle of a UIView which is of different width and height 【发布时间】:2014-07-09 07:26:31 【问题描述】:

我有一个UIView,它具有不同的宽度和高度,即 width:45,height:37,当我尝试使用它所在层的 cornerRadius 使其精确为圆形时,结果并不准确我想要的圆圈。宽度和高度之间的差异会导致这种差异吗?如何得到这个大小的精确圆?

顺便说一句,这是我的代码 -

myView.layer.cornerRadius = myView.frame.size.width/2.f;
myView.masksToBounds = YES;

我也试过了,myView.layer.cornerRadius = myView.frame.size.width/myView.frame.size.height;

这不是诀窍!我对此进行了更多研究,如果myView 的宽度和高度相同,那么myView.layer.cornerRadius = myView.frame.size.width/2.f; 就可以了!但不知何故,我无法使其具有相同的宽度和高度。

【问题讨论】:

【参考方案1】:

我不确定这是不是最好的答案,但我会尝试reframe 我的视图,然后设置我的cornerRadius

CGFloat borderWidth = MAX(myView.frame.size.width, myView.frame.size.height);
myView.frame = CGRectMake(myView.frame.origin.x, myView.frame.origin.y, borderWidth, borderWidth);
[myView.layer setCornerRadius:borderWidth/2];

通过这样做,您可能会遇到界面问题(您的视图的widthheight 会更大并且可以隐藏视图)这就是为什么我认为可能有更好的做法。

【讨论】:

【参考方案2】:

根据@sebastienFCT 的建议,我应用此逻辑为myView 获得(更接近)圆形。

CGFloat max = MAX(myView.frame.size.width, myView.frame.size.height);
CGFloat min = MIN(myView.frame.size.width, myView.frame.size.height);
CGFloat diff = max - min;
CGFloat borderWidth = max - (diff/2.f);
myView.frame = CGRectMake(myView.frame.origin.x, myView.frame.origin.y, borderWidth, borderWidth);
myView.layer.cornerRadius = borderWidth/2.f;
myView.layer.masksToBounds = YES;

我知道这不是正确的方法,但现在它帮助我通过第一次构建发送给客户并让我的老板很高兴!

【讨论】:

以上是关于制作不同宽度和高度的 UIView 的 Circle的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个类访问 UIView 的宽度和高度?

如何在 Swift 中使用 SnapKit 使 UIView 具有相等的宽度和高度?

UIView 不会改变 Rotate 的宽度和高度

从 UIText 字段的用户输入更改 UIView 框架的高度和宽度

如何将 UIView 的大小调整为特定的高度和宽度,包括其子视图?

表单高度和宽度的测量方式与 TextBox 高度不同