3

ボタンをクリックした後、特定のウィンドウに線を引くにはどうすればよいですか?

私はこれを使用しています:

NSBezierPath * path = [NSBezierPath bezierPath];
        [path setLineWidth: 4];

        NSPoint startPoint = {  21, 21 };
        NSPoint endPoint   = { 128,128 };
        [path  moveToPoint: startPoint];    
        [path lineToPoint:endPoint];

        [[NSColor redColor] set]; 
        [path stroke];

しかし、それは私がそれを入れた場合にのみ機能します:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification

どうすればこれを解決できますか? 私の目標は、受け取った詳細(座標)に従って、線を描画できるアプリケーションを作成することです

ありがとうございました。

4

2 に答える 2

2

ビューまたはレイヤーの描画方法 (例: drawRect:) の外で描画しないでください。大まかに言えば、フラグが設定されているときに線を描画するビューがあり、ボタンをクリックするとフラグが設定され、ビューに再描画するように指示されます。

于 2012-04-28T00:52:41.537 に答える
2

マウスイベントをクリックしたとき。このコードは、線、曲線、描画を作成します。

  #import <Cocoa/Cocoa.h>


    @interface BezierView : NSView {
        NSPoint points[4];
        NSUInteger pointCount;
    }

    @end

    #import "BezierView.h"

    @implementation BezierView
    - (id)initWithFrame:(NSRect)frame {
        self = [super initWithFrame:frame];
        if (self) {
            // Initialization code here.
        }
        return self;
    }

    - (void)drawRect:(NSRect)rect 
    {
        NSBezierPath *control1 = [NSBezierPath bezierPath];
        [control1 moveToPoint: points[0]];
        [control1 lineToPoint: points[1]];
        [[NSColor redColor] setStroke];
        [control1 setLineWidth: 2];
        [control1 stroke];

        NSBezierPath *control2 = [NSBezierPath bezierPath];
        [control2 moveToPoint: points[2]];
        [control2 lineToPoint: points[3]];
        [[NSColor greenColor] setStroke];
        [control2 setLineWidth: 2];
        [control2 stroke];

        NSBezierPath *curve = [NSBezierPath bezierPath];
        [curve moveToPoint: points[0]];
        [curve curveToPoint: points[3]
              controlPoint1: points[1]
              controlPoint2: points[2]];

        [[NSColor blackColor] setStroke];
        CGFloat pattern[] = {4, 2, 1, 2};
        [curve setLineDash: pattern
                     count: 4
                     phase: 1];
        [[NSColor grayColor] setFill];
        [curve fill];
        [curve stroke];
    }

    - (void)mouseDown: (NSEvent*)theEvent
    {
        NSPoint click = [self convertPoint: [theEvent locationInWindow]
                                  fromView: nil];
        points[pointCount++ % 4] = click;
        if (pointCount % 4 == 0)
        {
            [self setNeedsDisplay: YES];
        }
    }
    @end
于 2015-09-15T09:22:01.400 に答える