15

谁能指导我以正确的方式以编程方式构建彩色气泡/圆圈?

我不能使用图像,因为我需要它能够根据用户交互成为任何颜色。

我的想法可能是制作一个白色的圆圈图像,然后在其上叠加一种颜色。但是我不确定这是否可行,或者如何真正去做。

如果有人能指出我正确的方向,我将不胜感激。

4

5 回答 5

32

在 Cocoa 中绘制东西有几个步骤。

首先,您需要一个用于定义您将要绘制的对象的路径。在此处查看绘制基本形状,了解在 Cocoa 中创建路径的指南。您最感兴趣的是将“appendBezierPathWithOvalInRect”消息发送到“NSBezierPath”对象,这需要一个矩形来限制您要绘制的圆。

此代码将在坐标 10,10 处创建一个 10x10 的圆:

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

一旦你有了你的路径,你就想为当前的绘图上下文设置颜色。有描边和填充两种颜色;stroke 是路径的轮廓,fill 是内部颜色。要设置颜色,您将“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];
}
于 2008-12-10T00:02:08.513 回答
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;
}
于 2012-12-09T08:42:06.537 回答
10

创建一个将 NSColor 作为 ivar 保存的 NSView 子类。在 drawRect 方法中,使用视图的边界创建一个适当大小的 NSBezierPath。然后设置颜色[myColor set]并填充路径[myPath fill]。你可以做的还有很多,比如设置透明度、边框等等,但除非你有特定的问题,否则我会把它留给文档。

要使用 NSView 子类,只需将视图对象拖到您的 nib 上,然后在 IB 的检查器中的自定义类中选择您的子类的名称。您还需要在控制器中为其设置一个插座,以便您可以根据需要更改颜色。

于 2008-12-09T23:40:23.923 回答
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));
于 2011-10-11T11:09:32.113 回答
2

从苹果下载草图。http://developer.apple.com/library/mac/#samplecode/Sketch

它可以做更多的事情,但其中之一就是画圈。

于 2008-12-09T23:46:18.327 回答