2012-04-28 3 views
0

ボタンをクリックした後、特定のウィンドウに線を描画する方法はありますか?ココアに線を引く?

私はこの使用しています:

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 

? 私の目標は、内容に応じて、線を引くことができるアプリケーションを作成することである(座標)

はあなたに感謝受け取りました。あなたの図面を完了した時点で:

+0

どこに描画しますか(どのビューで)? NSViewをサブクラス化してそこに描画コードを入れなければならないと思います。私はそれがなぜあなたがそれをapplicationWillFinishLaunchingメソッドに入れるときにサブクラス化せずに動作するのか分かりません。 – rdelmar

+0

OK、私はNSviewクラス内で描画していますし、カスタムビュー内にあります – Corninos

答えて

0

あなたは[YES yourViewのsetNeedsDisplay]を呼び出してみましたがありますか?

2

あなたがビューまたはレイヤの描画方法(例えばdrawRect:)の外側に描画されるべきではありません。あなたがしたいことは、広いストロークで、フラグが設定されているときに線を描画するビューを持ち、ボタンをクリックするとフラグを設定し、ビューに再描画を指示します。

0

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

#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 
関連する問題