再会,
我有一个复杂的日历控件,每次我选择日期项目等时都需要使用 setneedslayout 重新绘制。我尝试在 GCD 块中运行它,但它从未运行过。但是,当我在主线程上运行它时 setNeedsLayout 运行并工作。但是,这会导致我的程序出现令人讨厌的卡顿/延迟,从而破坏用户体验。
我能知道可以做什么吗?这可以在另一个线程上执行吗?我可以使用 NSTimer 或在另一个线程上执行选择器吗?
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
dispatch_async(dispatch_get_main_queue(), ^{
//[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
});
@try {
NSLog(@"New Thread");
if (self.selectedDate) {
[datesToReload addObject:self.selectedDate];
}
if (date) {
[datesToReload addObject:date];
}
self.selectedDate = date;
[self reloadDates:datesToReload];
[self performSelectorOnMainThread:@selector(reloadDates:) withObject:datesToReload waitUntilDone:NO];
//[self perform]
if (visible && date) {
self.monthShowing = date;
}
}
@catch (NSException *exception) {
NSLog(@"Exception = %@", exception);
}
dispatch_async(dispatch_get_main_queue(), ^{
//[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
NSLog(@"Main Thread");
});
});