2016-06-23 21 views
1

Ich möchte einen Kreis in UITableViewCell zeichnen.Zeichnungskreis in UIView Rahmen

Um die Positionierung zu vereinfachen, habe ich entschieden, UIView mithilfe des Schnittstellen-Generators zu platzieren, Beschränkungen festzulegen und dann den Kreis aus dem Code innerhalb dieser UIView zu zeichnen.

Dies ist, wie es aussehen angenommen hat: enter image description here

Allerdings hatte ich ein Problem mit dem Zeichnen des Kreises in der Mitte des Platzes Ansicht. Ich habe diese Lösung gefunden, aber für mich sieht es eher wie eine Umgehung aus. Innerhalb

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 ist im Grunde die UIView, dass der Bezugspunkt für die Zeichnung Kreis sein soll.

Meine Frage ist:

Warum verwenden Sie nicht nur center.x und center.y, warum habe ich Wert von Zentrum und Ursprung subtrahieren die mittleren Koordinate zu bekommen?

+2

machen Wenn Sie nur einen Kreis Ansicht wollen, müssen Sie versuchen, mit 'cornerRadious' mit' UIView' –

+0

Ja, das ist ein anderer Ansatz, meine Frage ist eher Neugier, warum musste ich Zentrum und Herkunft subtrahieren, um das Zentrum zu bekommen? – DCDC

+0

@DCDC, das heißt, wenn der Code zur Laufzeit ausgeführt wird, werden die Ansichten am Ursprung der Zelle (Superview) initialisiert. Sie werden erst nach dem Kompilieren an den angegebenen Koordinaten gezeichnet. Siehe meine Antwort für einen saubereren Ansatz. oder Sie müssen die Werte des Zentrums von pageBadgeView im Arccenter fest codieren, das funktioniert. –

Antwort

0

Um einen Kreis zu zeichnen, nehmen Sie UIView. Set Corner radius of layer Eigenschaft der Ansicht. Stellen Sie color für Schicht ein.

Ändern Sie Ihren Code in Swift entsprechend.

let yCoord = (cellheight - circleview height)/2 
1

Probieren Sie etwas wie dieses

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 

} 
-1

etwas Versuchen Sie, wie für Ihre Ansicht Kreis

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

was ist daran falsch? – Anny

+0

Ich denke, es ist down-voting, weil der Code unkommentiert ist und auch Variablen Name nicht mit denen in der Frage verwandt sind. Es könnte in Ordnung sein, wenn Sie sie im Code instanziieren, aber in diesem Moment sieht es wie ein Copy-Paste statt einer ausgearbeiteten Antwort auf die Benutzerfrage aus. –