制作不同宽度和高度的 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];
通过这样做,您可能会遇到界面问题(您的视图的width
或height
会更大并且可以隐藏视图)这就是为什么我认为可能有更好的做法。
【讨论】:
【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中使用 SnapKit 使 UIView 具有相等的宽度和高度?
从 UIText 字段的用户输入更改 UIView 框架的高度和宽度