在 UIView 框架内绘制圆圈

Posted

技术标签:

【中文标题】在 UIView 框架内绘制圆圈【英文标题】:Drawing circle inside UIView frame 【发布时间】:2016-06-23 09:57:31 【问题描述】:

我想在 UITableViewCell 内画一个圆圈。

为了使定位更容易,我决定使用界面生成器放置 UIView,设置约束,然后在此 UIView 内的代码中绘制圆圈。

它应该是这样的:

但是,我在方形视图的中间绘制圆圈时遇到了问题。我想出了这个解决方案,但对我来说它看起来更像是解决方法。里面

tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)

let xCoord = cell.pageBadgeView.center.x - cell.pageBadgeView.frame.origin.x
let yCoord = cell.pageBadgeView.center.y - cell.pageBadgeView.frame.origin.y

let circlePath = UIBezierPath(arcCenter: CGPoint(x: xCoord ,y: yCoord), radius: CGFloat(20), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)

pageBadgeView 基本上就是 UIView,它应该是绘制圆的参考点。

我的问题是:

为什么不用center.x和center.y,为什么我要减去center和origin的值才能得到中间坐标?

【问题讨论】:

如果您只是想要一个圆形视图,您可以尝试使用cornerRadiousUIView 是的,这是另一种方法,我的问题更多的是好奇,为什么我必须减去中心和原点才能真正得到中心? @DCDC,这是因为在执行代码时,在运行时,视图在单元格的原点(超级视图)初始化。它们仅在编译后以指定的坐标绘制。请参阅我的答案以获得更清洁的方法。或者您必须在 arccenter 中硬编码 pageBadgeView 中心的值,这将起作用。 【参考方案1】:

试试这样的

  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) 

var someName = UIView()
var someNameRadius = 25.0
let cell = tableView.dequeueReusableCellWithIdentifier("experienceCell", forIndexPath: indexPath) as! YourCellClass

someName.backgroundColor = UIColor.clearColor()
someName.layer.borderWidth = 3.0
someName.layer.borderColor = UIColor.redColor().CGColor
someName.center = cell.contentView.center
someName.frame.size = CGSize(width: someNameRadius*2, height: someNameRadius*2)
someName.layer.cornerRadius = someNameRadius  // Note, this is half of the width of the view's width
cell.contentView.addSubView(someName)


return cell


【讨论】:

【参考方案2】:

要画圆,请使用UIView。设置视图的Corner radius of layer 属性。为图层设置color

相应地快速修改您的代码。

 let yCoord = (cellheight - circleview height)/2

【讨论】:

【参考方案3】:

尝试使用类似的方法来制作您的视图圈

_circleView.layer.cornerRadius = _circleView.frame.size.width/2;
_circleView.layer.borderColor = [UIColor redColor].CGColor;
_circleView.layer.borderWidth = 2;
_circleView.clipsToBounds = YES;

【讨论】:

我猜它被否决了,因为代码未注释,而且变量名称与问题中的名称无关。如果您在代码中实例化它们可能会很好,但此时它看起来像是复制粘贴,而不是对用户问题的详细回答。

以上是关于在 UIView 框架内绘制圆圈的主要内容,如果未能解决你的问题,请参考以下文章

iOS:动态更改 UIView

为啥我可以在框架上绘制但不能在容器内绘制?

根据内容大小设置 UIView 的大小

Swift按顺序绘制多个圆圈

仅在使用 matplotlib 的圆圈内绘制绘图 [重复]

绘制带有线条的圆圈并检查鼠标是不是在圆圈内 - Java Graphics- Geometry