Dibujar círculo en Objective-c

Soy un principiante en la progtwigción de iPhone. Necesito crear círculos como la Figura 1, donde debería dividirse en seis partes diferentes con cuatro niveles diferentes (ver Figura 1). Además, necesito crear un círculo de acuerdo con un dato dado como se muestra en la Figura 2. Cada parte debe ser capaz de hacer clic para ampliar la parte específica (ver Figura 3).

introduzca la descripción de la imagen aquí
Figura 1: ilustra seis colors diferentes, donde dos de ellos se dividen en uno y el rest cuatro de ellos se dividen en tres partes.
introduzca la descripción de la imagen aquí
Figura 2: muestra los resultados de diferentes categorías en diferentes niveles.
introduzca la descripción de la imagen aquí
Figura 3: Es una visión ampliada de la categoría elegida.

Tengo un storyboard que carga una UIView personalizada y usa el método drawRect para dibujar el círculo.

La pregunta es ahora, ¿cómo crear el gráfico circular como las figuras?

He intentado muchas cosas y podría usar un poco de guiña, o por favor, dé un ejemplo de esto.
Gracias

Eche un vistazo a la Guía de progtwigción de Quartz 2D , especialmente a las secciones Elipses y Recortes a las routes . El rest es solo algunas matemáticas básicas y geometry.

Subclass UIView, usa el marco de Quartz 2D para dibujar tus círculos y probablemente implemente los touchesBegan: y touchesEnded: methods para manejar los touchesEnded: en los círculos.

Si de alguna manera quieres que los cambios se animen (como cuando aumentas el zoom en una categoría en la última image), entonces realmente deberías tratar de usar la mayor cantidad posible de Core Animation.

Eche un vistazo a este gran tutorial sobre cómo crear un gráfico circular animatable personalizado con Core Animation . Estoy seguro de que puedes modificarlo para get lo que quieres.

Además, si no le interesan las animaciones y están bien solo con mostrar círculos que saltan de estado a estado, entonces Core Animation probablemente solo haga que las cosas sean demasiado complejas y algo así como Core Graphics (como las otras respuestas mencionadas) probablemente sea la forma correcta ir.

Ejemplo de gráfico circular:

 int sum = 0; CGFloat offset; CGFloat angleArray[numberOfSections+1]; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetAllowsAntialiasing(context, true); CGContextSetShouldAntialias(context, true); for(int i=0; i<numberOfSections; i++) { sum += angle; } for(int i=0; i<numberOfSections; i++) { angleArray[i] = (float)((angle)/(float)sum)*(2*M_PI); CGContextMoveToPoint(context, radius, radius); if(i == 0) { CGContextAddArc(context, radius, radius, radius, 0, angleArray[i], 0); } else { CGContextAddArc(context, radius, radius, radius, offset, (offset+angleArray[i]), 0); } offset += angleArray[i]; CGContextSetFillColorWithColor(context, ((UIColor *)[hjulColorArray objectAtIndex:i]).CGColor); CGContextClosePath(context); CGContextFillPath(context); } 

De hecho, creo que esta respuesta revisada te ayudará más a largo ploop. Eche un vistazo a la documentation de estos:

 CGPathAddLineToPoint CGPathAddArc 

Esto es lo que solía hacer, básicamente, exactamente lo que intentas hacer.

    Intereting Posts