Создание цветной пузырь / круг программно в ObjectiveC и какао

голоса
14

Может кто-нибудь вести меня в правильном пути, чтобы построить цветной пузырь / круг программно?

Я не могу использовать образы, как мне нужно, чтобы иметь возможность быть любого цвета, в зависимости от взаимодействия с пользователем.

Моя мысль была, может быть, чтобы сделать белый круг изображения, а затем накладывать цвет на вершине. Однако я не уверен, если это будет работать, или как на самом деле идти об этом.

Если кто-то может указать мне правильное направление, я был бы признателен.

Задан 10/12/2008 в 00:28
источник пользователем
На других языках...                            


5 ответов

голоса
31

Есть несколько шагов к рисовать что-то в какао.

Прежде всего , необходимо путь , который будет использоваться для определения объекта , который вы собираетесь быть рисунок. Посмотрите здесь Рисунок Основополагающие Формы для руководства по созданию путей в какао. Вы будете наиболее заинтересованы в отправке сообщения «appendBezierPathWithOvalInRect» на объект «NSBezierPath», это занимает прямоугольник, ограничивающий круг , который вы хотите сделать.

Этот код будет создавать 10x10 круг в точке с координатами 10,10:

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

После того, как у Вас есть свой путь, который вы хотите установить цвет для текущего контекста рисования. Есть два цвета, обводка и заливка; Инсульт является контур пути и заливки является цвет интерьера. Для того, чтобы установить цвет вы посылаете «установить» на объект «NSColor».

Это устанавливает обводку черным и заливку на красный:

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

Теперь, когда у вас есть свой путь, и у вас есть ваши цветы набора просто заполнить путь, а затем сделать его:

[path stroke];
[path fill];

Все это нужно будет сделать в графическом контексте, как в DrawRect из точки зрения, может быть. Все это вместе с графическим контекстом будет выглядеть следующим образом:

- (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];
}
Ответил 10/12/2008 в 01:02
источник пользователем

голоса
12

Вы можете использовать простые , UIViewчтобы создать идеальный круг с единственным параметром 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;
}
Ответил 09/12/2012 в 09:42
источник пользователем

голоса
11

Создайте подкласс NSView , который держит в NSColor как Ивар. В методе DrawRect, создать NSBezierPath соответствующего размера, используя границы представления. Затем установите цвет [myColor set]и заполнить путь [myPath fill]. Там намного больше , вы можете сделать, например, установить прозрачность, границы, и так далее и так далее, но я оставлю это на документы , если у вас есть конкретный вопрос.

Чтобы использовать подкласс NSView, просто перетащите объект вида на свой СИБ, и выберите имя подкласса в пользовательском классе в инспекторе ПБА. Вам нужно будет также установить выход к нему в контроллере, так что вы можете изменить цвет по мере необходимости.

Ответил 10/12/2008 в 00:40
источник пользователем

голоса
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));
Ответил 11/10/2011 в 12:09
источник пользователем

голоса
2

Скачать эскиз из яблока. http://developer.apple.com/library/mac/#samplecode/Sketch

Это может сделать намного больше, но одна из вещей рисовать круги.

Ответил 10/12/2008 в 00:46
источник пользователем

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