保持單元格對象不同於被動畫的對象,以便單元格保存UIView。當動畫回調發生時,請檢查以確保UIView仍然存在,並且如果存在,請爲這些更改設置動畫。
當單元格對象從屏幕上被碰撞並回收時,釋放將被動畫並創建一個新UIView的UIView。當動畫回調發生時,它將無所事事,因爲UIView不再存在。
上述修改是保留UIView中的某種對象,以便回調可以檢查動畫是否合適。這可能是正在下載的圖片的某種唯一標識符。如果標識符改變,則不需要動畫。如果匹配,請動畫。
編輯:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyTableCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:MyIdentifier] autorelease];
} else {
UIView *oldViewToAnimate = [cell.contentView viewWithTag:1];
[oldViewToAnimate removeFromSuperview];
}
UIView *viewToAnimate = [[UIView alloc] initWithFrame:CGRectZero]; //replace with appropriate frame
viewToAnimate.tag = 1;
[cell.contentView addSubview:viewToAnimate];
return cell;
}
當你產卵你[cell.contentView viewWithTag:1]
通過您的下載過程。下載完成後,它將更新適當的視圖。如果表格單元被重用,視圖將不再具有超級視圖,並且不會更新錯誤的單元格。
有些事情可以做,以提高效率,但這是基本的想法。如果你有一個自定義的UITableViewCell比這可能看起來有點不同。
編輯2:
要重用viewToAnimate對象,以確保如果他們的父母細胞再生,他們得到更新,這樣做如下:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyTableCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:MyIdentifier] autorelease];
} else {
UIView *oldViewToAnimate = [cell.contentView viewWithTag:1];
[oldViewToAnimate removeFromSuperview];
}
UIView *viewToAnimate = [self viewToAnimateForIndexPath:indexPath];
viewToAnimate.tag = 1;
[cell.contentView addSubview:viewToAnimate];
return cell;
}
viewToAnimateForIndexPath
需要:
- 檢查是否已爲此indexPath創建viewToAnimate
- 創建viewToAnimate如果沒有一個
- 保存到可以由indexPath中查找該視圖的引用
- 返回的viewToAnimate所以表格單元格可以用它
我不對於你的數據結構足夠了解。一旦下載過程完成,它可以調用相同的方法來獲取視圖並對其進行動畫處理。
你能跟蹤段索引和行索引嗎? – willcodejavaforfood 2010-04-27 15:29:35
我們有部分和行,但我們找不到UIViews(我們想要動畫的)。我們不知道它是哪個單元格。 – erotsppa 2010-04-27 15:33:01
如果你知道行和段,那麼你通過[tableView cellForRowAtIndexPath:indexPath]知道單元格。 – Skie 2010-04-27 15:35:52