在 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的值才能得到中间坐标?
【问题讨论】:
如果您只是想要一个圆形视图,您可以尝试使用cornerRadious
和UIView
是的,这是另一种方法,我的问题更多的是好奇,为什么我必须减去中心和原点才能真正得到中心?
@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 框架内绘制圆圈的主要内容,如果未能解决你的问题,请参考以下文章