2010-11-18 4 views
3

Comment appeler setNeedsDisplayInRect en utilisant performSelectorOnMainThread? Le problème est rect. Je ne sais pas comment passer le rect dans la méthode performSelectorOnMainThread. Cette méthode demande à NSObject, mais CGRect n'est pas NSObject, c'est juste structure *.Comment appeler setNeedsDisplayInRect en utilisant performSelectorOnMainThread?

//[self setNeedsDisplayInRect:rect]; 
[self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:0 waitUntilDone:YES]; 
} 

-(void)drawRect:(CGRect)rect { 

    /// drawing... 

} 

J'ai besoin d'invoquer la méthode setNeedsDisplayInRect dans MainThread de ne pas thread principal. Est-ce que quelqu'un sait comment le faire ?????????? Merci d'avance ..

Vraiment merci.

Répondre

4

Si vous êtes sur iOS 4.0 ou version ultérieure, vous pouvez utiliser les éléments suivants

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self setNeedsDisplayInRect:theRect]; 
}); 

Sur iOS 3.2 et versions antérieures, vous pouvez configurer un NSInvocation et courir que sur le thread principal:

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:@selector(setNeedsDisplayInRect:)]]; 
[invocation setTarget:self]; 
[invocation setSelector:@selector(setNeedsDisplayInRect:)]; 
// assuming theRect is my rect 
[invocation setArgument:&theRect atIndex:2]; 
[invocation retainArguments]; // retains the target while it's waiting on the main thread 
[invocation performSelectorOnMainThread:@selector(invoke) withObject:nil waitUntilDone:YES]; 

Vous pouvez définir waitUntilDone sur NO sauf si vous devez absolument attendre la fin de cet appel avant de poursuivre.

Questions connexes