gpt4 book ai didi

iphone - 当图像加载到每个单元格中时,如何提高表格 View 中的滚动速度?

转载 作者:行者123 更新时间:2023-12-03 19:41:03 25 4
gpt4 key购买 nike

查看 [return cell] 之前的最后几行。加载图像后,滚动速度正在降低。滚动似乎被卡住了

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
}

int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];
NSString *itemDescription=[[stories objectAtIndex: storyIndex]
objectForKey:@"title"];

CGRect aframe = CGRectMake(80, 30, 250, 40);
textLabel = [[UILabel alloc] initWithFrame:aframe];
textLabel.font = [UIFont boldSystemFontOfSize:14];
textLabel.numberOfLines=0;
textLabel.textColor = [UIColor darkTextColor];
textLabel.backgroundColor = [UIColor whiteColor];
[cell.contentView addSubview:textLabel];
textLabel.text=itemDescription;

CGRect frame = CGRectMake(0, 0, 70,80);
UIImageView *TopImageView = [[UIImageView alloc] init];
[cell.contentView addSubview:TopImageView];
TopImageView.frame=frame;

m_strImage = [m_imglinkArray objectAtIndex:storyIndex];

TopImage = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:m_strImage]]];
TopImageView.image=TopImage;

return cell;
}

你们能帮我提高滚动速度吗?

问候

阿伦

最佳答案

我相信您可能会遇到两个问题。首先是图像加载不进行多线程的问题,其次是如何使用 UITableViewCell。

只要屏幕上出现一个单元格,iPhone 就会调用 cellForRowAtIndexPath - 如果您向下滚动,则上面的所有内容都会在您再次向上滚动时卸载并重新加载。正如已经指出的,这可以通过多线程模式来解决 - 或者发布到 markj.net 的链接,和/或使用 NSThread。 NSThread 的优点是您可以更灵活地处理问题或加载不仅仅是图像数据的数据。 (我会同时使用)

为了有效地做到这一点,您需要有一个自定义的 UITableViewCell。无论如何,这都是很好的,因为您可以让表格单元格而不是 View Controller 负责其内容,并且您可以有效地操纵单元格格式和内容。以下是关于 UITableCellView 的精彩帖子的链接:http://blog.atrexis.com/index.cfm/2009/1/6/iPhone--Customize-the-UITableCellView

当您实现 UITableViewCell 时,请尽力将所有 addSubView 和格式化调用放入“if(cell==nil)” block 中,如果您无法将它们放入自定义 initWithFrame 中。您会发现 iPhone 会堆叠您添加的每个 subview - 它不会清除旧 View 。您可以通过将所有背景颜色设置为“UIColorclearColor”,然后在点击之间更改文本来看到这一点——您将看到一堆文本彼此叠在一起。这通常是不可见的,因为实心填充的背景会覆盖所有“旧” subview 。

在组合这两种方法之前,请考虑实现一个“模型”。您有一个 View 和一个 Controller ,但所有数据都应该位于模型中。所有图像 URL、内容等都应该位于 NSMutableArray 之类的东西中,您自己的自定义对象,或者可能通过 SQLite。有了模型后,您就可以实现图像缓存。通过缓存,所有图像都将在应用程序加载之间保留,这将节省电池、带宽和时间。

我会: 1. 将所有数据放入某种模型中(NSMutableArray、SQLLite 等) 2. 实现自己的自定义UITableViewCell 3. 确保 cellForRowAtIndexPath 的事件 block 内有 0 个 addSubView、init 或 alloc 调用 4.使用delegation example或者NSThread在后台加载所有图片 5.添加本 map 片缓存

苹果论坛上有一些关于缓存图像的很好的例子。

关于iphone - 当图像加载到每个单元格中时,如何提高表格 View 中的滚动速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/823475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com