Criar uma bolha / círculo colorido programaticamente em ObjectiveC e Cocoa

votos
14

Alguém pode me orientar de maneira correta para construir uma cor bolha / círculo de programação?

Eu não pode usar imagens como eu preciso que ele seja capaz de ser de qualquer cor, dependendo interação do usuário.

Meu pensamento foi talvez para fazer uma imagem círculo branco e, em seguida, sobrepor uma cor em cima dela. No entanto, eu não tenho certeza se isso iria funcionar, ou como realmente fazê-lo.

Se alguém pudesse me aponte na direção certa eu apreciaria.

Publicado 10/12/2008 em 00:28
fonte usuário
Em outras línguas...                            


5 respostas

votos
31

Existem algumas etapas para desenhar algo em Cocoa.

Primeiro você precisa de um caminho que será usado para definir o objeto que você está indo para ser desenho. Dê uma olhada aqui Desenhando formas fundamentais para um guia sobre a criação de caminhos em Cocoa. Você estará mais interessado em enviar a mensagem "appendBezierPathWithOvalInRect" a um objeto "NSBezierPath", isso leva um retângulo que circunda o círculo que você deseja desenhar.

Este código irá criar um círculo 10x10 nas coordenadas 10,10:

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

Depois de ter seu caminho que você deseja definir a cor para o contexto atual do desenho. Há duas cores, traço e preenchimento; acidente vascular cerebral é o esboço do caminho e o preenchimento é a cor interior. Para definir uma cor que você enviar "set" para um objeto "NSColor".

Isso define o curso para o preto eo preenchimento para vermelho:

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

Agora que você tem o seu caminho e você tem suas cores Conjunto basta preencher o caminho e, em seguida, desenhá-lo:

[path stroke];
[path fill];

Tudo isto terá de ser feito em um contexto de gráficos como em drawRect de uma visão talvez. Tudo isso junto com um contexto gráfico ficaria assim:

- (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];
}
Respondeu 10/12/2008 em 01:02
fonte usuário

votos
12

Você pode usar simples UIViewpara criar perfeito círculo com ú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;
}
Respondeu 09/12/2012 em 09:42
fonte usuário

votos
11

Criar uma subclasse NSView que detém uma NSColor como um ivar. No método drawRect, criar um NSBezierPath do tamanho apropriado, utilizando limites da vista. Em seguida, defina a cor [myColor set]e preencha o caminho [myPath fill]. Há muito mais você pode fazer, como a transparência conjunto, uma borda, e assim por diante e assim por diante, mas vou deixar isso para os documentos, a menos que você tem uma pergunta específica.

Para usar a subclasse NSView, basta arrastar um objeto de exibição em seu bico, e escolher o nome da sua subclasse em classe personalizada no inspetor-IB. Você precisará também definir uma saída para ela em seu controlador, então você pode mudar a cor, conforme necessário.

Respondeu 10/12/2008 em 00:40
fonte usuário

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));
Respondeu 11/10/2011 em 12:09
fonte usuário

votos
2

Baixar esboço de maçã. http://developer.apple.com/library/mac/#samplecode/Sketch

Ele pode fazer muito mais, mas uma das coisas que é desenhar círculos.

Respondeu 10/12/2008 em 00:46
fonte usuário

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