Cree una burbuja / círculo coloreado programáticamente en ObjectiveC y Cocoa

votos
14

¿Alguien puede guiarme de la manera correcta para construir una burbuja / círculo de color programáticamente?

No puedo usar imágenes como las necesito para poder usar cualquier color dependiendo de la interacción del usuario.

Mi pensamiento fue tal vez hacer una imagen de círculo blanco y luego superponer un color en la parte superior. Sin embargo, no estoy seguro de si esto funcionaría o cómo hacerlo realmente.

Si alguien pudiera indicarme la dirección correcta, lo agradecería.

Publicado el 10/12/2008 a las 00:28
fuente por usuario
En otros idiomas...                            


5 respuestas

votos
31

Hay un par de pasos para dibujar algo en Cocoa.

Primero necesita una ruta que se usará para definir el objeto que va a dibujar. Mire aquí Dibujo Formas fundamentales para obtener una guía sobre cómo crear caminos en Cocoa. Lo que más le interesará es enviar el mensaje "appendBezierPathWithOvalInRect" a un objeto "NSBezierPath", esto toma un rectángulo que limita el círculo que desea dibujar.

Este código creará un círculo de 10x10 en las coordenadas 10,10:

NSRect rect = NSMakeRect(10, 10, 10, 10);
NSBezierPath* circlePath = [NSBezierPath bezierPath];
[circlePath appendBezierPathWithOvalInRect: rect];

Una vez que tenga su ruta, quiere establecer el color para el contexto de dibujo actual. Hay dos colores, trazo y relleno; el trazo es el contorno del camino y el relleno es el color interior. Para establecer un color, envía "set" a un objeto "NSColor".

Esto establece el trazo en negro y el relleno en rojo:

[[NSColor blackColor] setStroke];
[[NSColor redColor] setFill];

Ahora que tienes tu camino y tienes tus colores establecidos simplemente llena el camino y luego dibuja:

[path stroke];
[path fill];

Todo esto tendrá que hacerse en un contexto de gráficos como en drawRect de una vista, tal vez. Todo esto junto con un contexto de gráficos se vería así:

- (void)drawRect:(NSRect)rect
{
    // Get the graphics context that we are currently executing under
    NSGraphicsContext* gc = [NSGraphicsContext currentContext];

    // Save the current graphics context settings
    [gc saveGraphicsState];

    // Set the color in the current graphics context for future draw operations
    [[NSColor blackColor] setStroke];
    [[NSColor redColor] setFill];

    // Create our circle path
    NSRect rect = NSMakeRect(10, 10, 10, 10);
    NSBezierPath* circlePath = [NSBezierPath bezierPath];
    [circlePath appendBezierPathWithOvalInRect: rect];

    // Outline and fill the path
    [circlePath stroke];
    [circlePath fill];

    // Restore the context to what it was before we messed with it
    [gc restoreGraphicsState];
}
Respondida el 10/12/2008 a las 01:02
fuente por usuario

votos
12

Es posible utilizar sencilla UIViewpara crear perfecto círculo con único parámetro radius:

// Add framework CoreGraphics.framework
#import <QuartzCore/QuartzCore.h>

-(UIView *)circleWithColor:(UIColor *)color radius:(int)radius {
    UIView *circle = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 2 * radius, 2 * radius)];
    circle.backgroundColor = color;
    circle.layer.cornerRadius = radius;
    circle.layer.masksToBounds = YES;
    return circle;
}
Respondida el 09/12/2012 a las 09:42
fuente por usuario

votos
11

Cree una subclase NSView que contenga un NSColor como un ivar. En el método drawRect, crea un NSBezierPath del tamaño apropiado, usando los límites de la vista. Luego configura el color [myColor set]y llena el camino [myPath fill]. Hay mucho más que puede hacer, como establecer la transparencia, un borde, etc., pero lo dejo a los documentos a menos que tenga una pregunta específica.

Para usar la subclase NSView, simplemente arrastre un objeto de vista a su plumilla, y elija el nombre de su subclase en clase personalizada en el inspector de IB. También deberá configurar una toma de corriente en su controlador, para que pueda cambiar el color según sea necesario.

Respondida el 10/12/2008 a las 00:40
fuente por usuario

votos
7
    CGContextRef c = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(c, 40, 0, 255, 0.1);
    CGContextSetRGBStrokeColor(c, 0, 40, 255, 0.5);

   // Draw a green solid circle
    CGContextSetRGBFillColor(c, 0, 255, 0, 1);
    CGContextFillEllipseInRect(c, CGRectMake(100, 100, 25, 25));
Respondida el 11/10/2011 a las 12:09
fuente por usuario

votos
2

Descargar boceto de manzana. http://developer.apple.com/library/mac/#samplecode/Sketch

Puede hacer mucho más, pero una de las cosas es dibujar círculos.

Respondida el 10/12/2008 a las 00:46
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more