2009-04-02 7 views
3

Ich möchte eine ähnliche Ellipse wie die Mail App in meiner iPhone App haben. Ein Screenshot nur als Referenz ist hier: http://dl-client.getdropbox.com/u/57676/screenshots/ellipse.pngWas ist der beste Weg, um diese Ellipse in einer iPhone App zu zeichnen?

Schließlich möchte ich die Ellipse mit einem numerischen Wert in der Mitte. Ist es am besten, ein UIImage für diese Aufgabe zu verwenden? Vielleicht weniger Aufwand, um es mit Quartz zu zeichnen? Wenn es mit Quartz gemacht wird, kann jemand eine Lösung zum Zeichnen zeigen?

Antwort

9

Ah, ein abgerundetes Rechteck. Das ist nicht zu schwer zu zeichnen. Sie können Bézier-Pfade verwenden, um zu erhalten, was Sie wollen. Der Code sieht wie folgt aus:

CGRect rect; 
CGFloat minX = CGRectGetMinX(rect), minY = CGFloatGetMinY(rect), maxX = CGFloatGetMaxX(rect), maxY = CGRectGetMaxY(rect); 

CGFloat radius = 3.0; // Adjust as you like 
CGContextBeginPath(context); 
CGContextMoveToPoint(context, (minX + maxX)/2.0, minY); 
CGContextAddArcToPoint(context, minX, minY, minX, maxY, radius); 
CGContextAddArcToPoint(context, minX, maxY, maxX, maxY, radius); 
CGContextAddArcToPoint(context, maxX, maxY, maxX, minY, radius); 
CGContextAddArcToPoint(context, maxX, minY, minX, minY, radius); 
CGContextClosePath(context); 

Nun, da Sie einen Pfad auf Ihrer Grafikkontext haben, können Sie es ziehen oder die CGContextDrawPath und CGContextFillPath Funktionen skizzieren.

+0

Mit einer Pille wie Mail's, bei der der Radius gleich der halben Höhe ist, können Sie dies vereinfachen, indem Sie zwei 180 ° Bögen statt vier 90 ° Bögen zeichnen. –

+0

Vielen Dank Alex und Peter, die jetzt testen. Wenn ich einen numerischen Wert auf der Ellipse planen möchte, um welche Art von Mathematik es sich handelt, um ins Zentrum von elipse zu gelangen und Text darüber zu schreiben? – Coocoo4Cocoa

+1

Ich habe nicht bemerkt, dass es Pillenform war! Tu, was Petrus gesagt hat; Es speichert Codezeilen. Sehen Sie sich die UIKit-Erweiterungen von NSString an. Sie können sizeWithFont aufrufen: in der Zeichenkette, die Sie zeichnen möchten, dann zentrieren Sie sie mit x = CGRectGetMinX (rect) + (CGRectGetWidth (rect) - textSize.width)/2.0. Wiederholen Sie für Y-Koordinate. – Alex

Verwandte Themen