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

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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

Этот код создаст круг 10x10 в координатах 10,10:

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

Как только у вас есть свой путь, вы хотите установить цвет для текущего контекста рисования. Есть два цвета, инсульт и заливка; ход - это контур пути, а заливка - цвет интерьера. Чтобы установить цвет, вы отправляете "set" в объект "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];
}

Ответ 3

Вы можете использовать простой 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;
}

Ответ 4

    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));