【问题标题】:Reset asynchronous UIImageView before loading加载前重置异步 UIImageView
【发布时间】:2011-08-04 12:21:37
【问题描述】:

我的应用层次结构如下:

UINavigationController
|_____
      UITableViewController (display products summary with thumbnail image)
      |_____
            UIViewController (display product details with image)

我正在使用以下类在 UITableViewController 和 UIViewController 中异步加载图像,因为从 Internet 获取图像时加载视图太慢

http://www.markj.net/iphone-asynchronous-table-image

我在 UITableViewController 中没有任何问题,问题是当单击单元格时它会在 UIViewController 中加载图像,如果我返回 UITableViewController 然后单击另一个单元格,UIViewController 会使用上一个图像打开,直到加载新图像

如何在 UIViewController 中重置 UIImageView 直到加载新图像?

这是加载详情视图的代码:

CGRect frame;
frame.size.width=240; frame.size.height=130;
frame.origin.x=0; frame.origin.y=0;
AsyncImageView* asyncImage = [[[AsyncImageView alloc] initWithFrame:frame] autorelease];
asyncImage.tag = 999;
NSURL *url = [NSURL URLWithString:@"http://i53.tinypic.com/5ezwc4.jpg"];
[asyncImage loadImageFromURL:url];
[detailsViewController.imgProduct addSubview:asyncImage];

请帮忙。

【问题讨论】:

  • 贴出创建 detailsviewcontroller 的代码。您可能希望从中删除 asyncImage 或在点击 tableview 时重新创建控制器。
  • 细节视图控制器是在IB中创建的,细节视图中asyncImage背后的原因是因为它从互联网读取图像打开细节视图太慢

标签: iphone objective-c uiviewcontroller uiimageview uitableview


【解决方案1】:

这是 AsyncImageview 方法的 loadimagefromurl 方法中的 bz,它缓存了你的 prev 数据,你需要一个重置缓存 - 来设置它

    imageCache = nil; in the method 

但它会影响其他使用 asynimageview 的视图控制器,

我希望你的 detailsview 控制器中有单个图像,所以

我应该建议为此使用 GCD

NSString *finalStr = [NSString stringWithFormat:@"/no-image-available.png"];    

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);

dispatch_async(queue, ^{


    NSURL* url = [NSURL URLWithString:finalStr];

    NSData *imgData = [NSData dataWithContentsOfURL:url];

    dispatch_sync(dispatch_get_main_queue(), ^{



    UIImage *img01 = [UIImage imageWithData:imgData];


    imgView.image = img01;  
    });

});

 http://blog.slaunchaman.com/2011/02/28/cocoa-touch-tutorial-using-grand-central-dispatch-for-asynchronous-table-view-cells/

这会给你同样的表现

【讨论】:

  • 谢谢Karthikeyan,据我了解,GCD 将有助于我没有任何问题的表格视图单元格,我的问题仅在加载详细信息视图时其图像未重置而新图片正在加载中!
  • 我试图将 imageCache = nil 放入其中,但它会引发错误!这是 loadImageFromURL: -(void)loadImageFromURL:(NSURL*)url { [connection release]; 【数据发布】; NSURLRequest* request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];连接 = [[NSURLConnection alloc] initWithRequest:request delegate:self]; }
【解决方案2】:

值得增强 AsyncImageView 类。添加您自己的 init 方法,如下所示:

- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; 如果(自我){ self.image = [UIImage imageNamed:@"loading.png"]; } 回归自我; }

loading.png 文件必须在您的包中,并且包含在远程图像加载时要显示的适当内容。

【讨论】:

  • 感谢 Slava,我将此方法放在 AsynchImageView.m 中,但出现以下错误:语义问题:需要使用属性分配语法将 Setter 方法分配给对象
  • 尝试来自here的远程图像查看文件ZZImageView.*loading.png并且不要忘记包含导入的文件(查看ZZImageView.m的标题)。
猜你喜欢
  • 2013-10-11
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
相关资源
最近更新 更多