web-dev-qa-db-ja.com

ObjectiveCとCocoaでプログラムで色付きのバブル/サークルを作成します

誰かがプログラムで色付きのバブル/サークルを作成する正しい方法で私を導くことができますか?

ユーザーの操作に応じて任意の色にする必要があるため、画像を使用できません。

私の考えは、白い円の画像を作成し、その上に色を重ねることでした。しかし、これがうまくいくかどうか、または実際にそれをどうやって行うのかはわかりません。

誰かが私に正しい方向を示すことができれば、私はそれをいただければ幸いです。

15
kdbdallas

NSColorをivarとして保持するNSViewサブクラスを作成します。 drawRectメソッドで、ビューの境界を使用して、適切なサイズのNSBezierPathを作成します。次に、色を設定します[myColor set]そしてパスを埋める[myPath fill]。透明度の設定や境界線など、できることは他にもたくさんありますが、具体的な質問がない限り、ドキュメントに任せます。

NSViewサブクラスを使用するには、ビューオブジェクトをペン先にドラッグし、IBのインスペクターのカスタムクラスでサブクラスの名前を選択するだけです。必要に応じて色を変更できるように、コントローラーでコンセントも設定する必要があります。

11

ココアで何かを描くにはいくつかのステップがあります。

まず、描画するオブジェクトを定義するために使用されるパスが必要です。ココアでパスを作成するためのガイドについては、こちらをご覧ください 基本的な形状の描画 。 「appendBezierPathWithOvalInRect」メッセージを「NSBezierPath」オブジェクトに送信することに最も関心があります。これは、描画する円の境界となる長方形を取ります。

このコードは、座標10,10に10x10の円を作成します。

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

パスを取得したら、現在の描画コンテキストの色を設定します。ストロークと塗りつぶしの2色があります。ストロークはパスの輪郭で、塗りは内部の色です。色を設定するには、「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];
}
32
joshperry

単純なUIViewを使用して、パラメータradiusのみでperfect円を作成できます。

// 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;
}
12
Almas Adilbek
    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));
7
Sorted

Appleからスケッチをダウンロードします。 http://developer.Apple.com/library/mac/#samplecode/Sketch

それはもっとたくさんのことができますが、一つのことは円を描くことです。

2