我有一個使用開源類MMGridView的iPad應用程序。 基本上我執行一個CoreData查詢,然後這個類在屏幕上以網格模式繪製框來表示結果。這些箱子包括照片。 一切工作正常,除了有時有一個不明原因的時間滯後,直到UI在屏幕上繪製。有時刷新是瞬間的,有時超過20秒。它的行爲看起來非常隨機。DrawRect完成和UI刷新之間的時間差
我已經成功地確定:
- 的drawRect被調用每次。
- 表示滯後不在DrawRect方法中發生。
- 當我運行時間簡檔,從我所知道的,沒有什麼是這個時間差
我的問題是,會發生什麼後的drawRect被調用,我可以嘗試一下,以確定問題的過程中發生?
絕對任何想法將不勝感激。
還要注意,用戶交互能夠縮短滯後時間。 - 旋轉的iPad(觸發重繪)總是讓用戶界面刷新立即 - 按下按鈕重做相同的查詢通常會刷新屏幕
所以它真的看起來像有隻我打一些隨機的延遲,而不是任何類型的處理器/工作負載問題。問題在於編程,我無法分辨UI是否已更新。否則,我可以讓它重新繪製。
我包含DrawRect方法的代碼,以防萬一引發任何想法,但從我所知道的情況來看,此方法在滯後發生之前完成。在對這個問題的迴應由Peter Hosey:由於解決了的時候用一個非常清晰和簡潔的描述,當不使用的drawRect
- (void)drawRect:(CGRect)rect {
if (self.dataSource && self.numberOfRows > 0 && self.numberOfColumns > 0) {
NSInteger noOfCols = self.numberOfColumns;
NSInteger noOfRows = self.numberOfRows;
NSUInteger cellsPerPage = noOfCols * noOfRows;
NSLog(@"rows = %d, cols = %d", noOfCols, noOfRows);
CGRect gridBounds = self.scrollView.bounds;
CGRect cellBounds = CGRectMake(0, 0, gridBounds.size.width/(float)noOfCols,
gridBounds.size.height/(float)noOfRows);
CGSize contentSize = CGSizeMake(self.numberOfPages * gridBounds.size.width, gridBounds.size.height);
[self.scrollView setContentSize:contentSize];
for (UIView *v in self.scrollView.subviews) {
[v removeFromSuperview];
}
for (NSInteger i = 0; i < [self.dataSource numberOfCellsInGridView:self]; i++) {
MMGridViewCell *cell = [self.dataSource gridView:self cellAtIndex:i];
[cell performSelector:@selector(setGridView:) withObject:self];
[cell performSelector:@selector(setIndex:) withObject:[NSNumber numberWithInt:i]];
NSInteger page = (int)floor((float)i/(float)cellsPerPage);
NSInteger row = (int)floor((float)i/(float)noOfCols) - (page * noOfRows);
CGPoint origin = CGPointMake((page * gridBounds.size.width) + ((i % noOfCols) * cellBounds.size.width),
(row * cellBounds.size.height));
CGRect f = CGRectMake(origin.x, origin.y, cellBounds.size.width, cellBounds.size.height);
cell.frame = CGRectInset(f, self.cellMargin, self.cellMargin);
[self.scrollView addSubview:cell];
}
}
}
我沒有得到你的結果。你能解釋一下嗎(包括一些代碼)?我遇到了MMGridView的問題。基本上,我設置了x行和y列,有時會顯示y行和x colums奇怪地放置...我嘗試了很多組合,但我不知道是什麼導致它。即使演示工作不正常(我在iOS6上測試它) – Piotr 2012-10-28 00:35:48
我的問題是,它選擇繪製網格的方式依賴於MMGridView.m中的方法( - (void)drawRect:(CGRect)矩形) ,但只有在視圖需要重繪時纔會調用此方法。你可以通過調用'[self.view setNeedsDisplay]'來做到這一點。但是這種方法沒有實際的繪圖。該方法實際上創建並放置視圖以形成網格。因此,setNeedsDisplay不會觸發此方法被調用。我簡單地將它重命名爲( - (void)drawCells),並直接使用'[myMMGridView drawCells]'調用它' – Scoop 2012-10-31 09:53:32
你們是否遇到了在使用ios5滾動頁面時閃爍gridview的問題?在ios6中,它很好。 – Linson 2013-08-30 14:24:41