2012-04-13 7 views
2

in meinem Viewcontroller übergeben habe ich eine Taste:xcode: Linie zeichnen. wie Variablen

- (IBAction)drawLineClick:(id)sender 
{ 
    CGRect rect; 
    rect.origin.x = 20.0f; 
    rect.origin.y = 40.0f; 
    rect.size.width = 100.0f; 
    rect.size.height = 100.0f; 

    //draw line 
    DrawLine *drawLine = [[DrawLine alloc] initWithFrame:rect]; 
    [self.view addSubview:drawLine]; 
} 

in meiner DrawLine Klasse ziehe ich gerade eine Linie:

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
     [super setBackgroundColor:[UIColor clearColor]]; 
    } 
    return self; 
} 

- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code 

    [self drawLine]; 
} 

- (void)drawLine 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor); 
    CGContextSetLineWidth(context, 3.0); 
    CGContextMoveToPoint(context, 0, 0); 
    CGContextAddLineToPoint(context, 50, 50); 
    CGContextStrokePath(context); 
} 

Dies funktioniert gut, aber das ist nicht variabel. Jedes Mal ist es dieselbe Zeile. Wie kann ich die Linienfarbe, Linienbreite usw. vom ViewController an die DrawLine-Klasse übergeben, sodass ich verschiedene Linien zeichnen kann?

Danke.

Antwort

1

Erstellen Sie Eigenschaften in Ihrer DrawLine-Klasse, die die Dinge darstellen, die Sie steuern möchten. Wenn Sie das neue Objekt erstellen, legen Sie seine Eigenschaften fest, indem Sie sie entweder direkt zuweisen oder in einer benutzerdefinierten initWith...-Methode übergeben. Verwenden Sie die Eigenschaftswerte in drawRect :.

+0

Danke für die Antwort. – suyama

+0

Danke für die Antwort. In meinem benutzerdefinierten "(id) initWithFrame: (CGRect) Rahmen lineColor: (UIColor *) lColor" Ich übergebe die Objekte. Aber im ViewController bekomme ich den Fehler: Kein sichtbares @interface für 'DrawLine' deklariert den Selektor 'initWithFrame: lineColor:'. Vielen Dank. – suyama

+0

Sie müssen also die Methode in DrawLine.h deklarieren. –

0

Hier ist der Code für mich gearbeitet, ging ich linewidth-Parameter:

DrawLine.h Datei

#import <Cocoa/Cocoa.h> 

@interface DrawLine : NSView 
@property (nonatomic, strong) double *lineWidth; 
@property (nonatomic, strong) UIColor *color; 
- (void)drawRect:(CGRect)rect; 
- (id)initWithFrame:(NSRect)frameRect andLineWidth :(double)lineWidth0 andColor: (UIColor *) color0; 
... 
@end 

DrawLine.m Datei

... 
- (id)initWithFrame:(NSRect)frameRect andLineWidth :(double)lineWidth0 andColor: (UIColor *) color0; 
{ 
    self.lineWidth = lineWidth0; 
    self = [super initWithFrame:frameRect]; 
if (self) { 
    // Initialization code 
    [super setBackgroundColor:color0]; 
} 
return self; 
    return self; 
} 
... 

ViewController.m Datei

... 
- (IBAction)drawLineClick:(id)sender 
{ 
    CGRect rect; 
    rect.origin.x = 20.0f; 
    rect.origin.y = 40.0f; 
    rect.size.width = 100.0f; 
    rect.size.height = 100.0f; 

    double lineWidth = 10; 
    UIColor *color = [UIColor clearColor]; 

    //draw line 
    DrawLine *drawLine = [[DrawLine alloc] initWithFrame:rect andLineWidth: lineWidth andColor: color]; 
    [self.view addSubview:drawLine]; 
} 
... 

Es funktioniert.