美好的一天,的iOS SetNeedsLayout上線
我有一個需要使用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");
});
});
其運行setNeedsLayout的reloadDates操作,並導致該問題。目前,在主線程上運行它的上述修復程序當然仍然會造成延遲 – raaj