Как вызвать setNeedsDisplayInRect с помощью executeSelectorOnMainThread?
Как вызвать setNeedsDisplayInRect с помощью executeSelectorOnMainThread? Проблема прямая. Я не знаю, как передать прямоугольник в методе executeSelectorOnMainThread. Этот метод запрашивает NSObject, но CGRect это не NSObject, это просто структура *.
//[self setNeedsDisplayInRect:rect];
[self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:0 waitUntilDone:YES];
}
-(void)drawRect:(CGRect)rect {
/// drawing...
}
Мне нужно вызвать метод setNeedsDisplayInRect в MainThread из не основного потока. Кто нибудь знает как это сделать?????????? Заранее спасибо..
Большое спасибо.
1 ответ
Решение
Если вы используете iOS 4.0 или более позднюю версию, вы можете использовать следующее
dispatch_async(dispatch_get_main_queue(), ^{
[self setNeedsDisplayInRect:theRect];
});
В iOS 3.2 и более ранних версиях вы можете настроить NSInvocation и запустить его в основном потоке:
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];
Возможно, вы захотите установить для waitUntilDone значение NO, если только вам абсолютно не нужно ждать завершения этого вызова, прежде чем продолжить.