2010-04-06 7 views
0

J'ai une vue, qui possède une méthode drawRect, je sais que cette méthode est la seule façon dont je contrôle la vue pour y dessiner quelque chose. Donc, j'essaie de ma logique de dessin de cette façon:A propos du dessin à l'aide de quartz 2D sur iPhone

- (void)drawRect:(CGRect)rect { 

    //my drawing code... 
} 

À mon avis, j'utilise le IB pour relier cette classe.

[myView setNeedsDisplay]; 

Il fonctionne, donc, je conçu pour avoir un objet de commande dans la méthode drawRect, afin que je puisse le dessin dynamique en fonction de mon Cmd. Voici le code dans la vue après avoir modifié:

- (void)drawRect:(CGRect)rect { 
    self.cmdToBeExecuted = [[DrawingSomethingCmd alloc] init]; 
    [self.cmdToBeExecuted execute]; 
} 

Mon DrawingsomthingCmd:

@implementation DrawingSomethingCmd 
-(void)execute{ 
//my drawing code; 
} 

Il fonctionne aussi. Mais la question est, comment puis-je affecter le self.cmdToBeExecuted dynamiquement. Aussi, j'ai changé drawRect comme ceci:

- (void)drawRect:(CGRect)rect { 
    [self.cmdToBeExecuted execute]; 
    } 

Parce que j'ai ce faire le lien avec l'IB,

IBOutlet myDrawingView *myView; 

mais après je tape [... myView ...], il don Ne me permets pas d'obtenir la variable cmdToBeExecuted. Je READY faire ma variable accessible à .h:

@property (nonatomic, retain) Command *cmdToBeExecuted; 

.m aussi:

@synthesize cmdToBeExecuted; 

Répondre

1

Ne pas initialiser la commande à l'intérieur du dessin rect. Initialiser un défaut (peut-être dans viewDidLoad? Cela dépend de ce que vous faites) quelque part que la vue est créée et ensuite les mettre à jour dynamiquement, mais vous le faites, chaque fois que le besoin s'en fait sentir. Alors:

- (void)drawRect:(CGRect)rect 
{ 
    [[self commandToBeExecuted] execute]; 
} 

et ailleurs:

// dynamically update the drawing 
[myView setCommandToBeExected:[[[DrawingSomethingCommand alloc] init] autorelease]]; 
Questions connexes