开发者

How to call setNeedsDisplayInRect using performSelectorOnMainThread?

开发者 https://www.devze.com 2023-01-25 16:01 出处:网络
How to call setNeedsDisplayInRect using performSelectorOnMainThread? The problem is rect. I do not know how to pass the rect in performSelectorOnMainThread method. This method ask NSObject, but CGRect

How to call setNeedsDisplayInRect using performSelectorOnMainThread? The problem is rect. I do not know how to pass the rect in performSelectorOnMainThread method. This method ask NSObject, but CGRect is not NSObject, it is just structure *.

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

-(void)drawRect:(CGRect)rect {

    /// drawing...

}

I need to invoke setNeedsDisplayInRect method in MainThread from not Main Thread. Does anyone know how to do it?????????? Th开发者_StackOverflowanks in advance..

Really Thanks.


If you're on iOS 4.0 or later, you can use the following

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

On iOS 3.2 and earlier, you can set up an NSInvocation and run that on the main thread:

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];

You may want to set waitUntilDone to NO unless you absolutely need to wait for this call to finish before proceeding.

0

精彩评论

暂无评论...
验证码 换一张
取 消