代码之家  ›  专栏  ›  技术社区  ›  Matt Long

AssetsLibrary和ImageView-设置图像慢度

  •  0
  • Matt Long  · 技术社区  · 16 年前

    所以这是一个非常奇怪的广告,我不确定问题是否出在AssetsLibrary API上,但我不知道还会发生什么。

    我在ALAssetsGroup上使用-EnumerateAssetSingBlock方法加载一个包含ALAssets的数组。当它完成时,我正在加载一个自定义的图像滚动条。当滚动程序完成滚动时,我使用NSInvocationOperations从磁盘上的照片库加载当前可见视图(页面)的图像。一旦图像被加载并被缓存,它就会通知代理,然后代理从缓存中获取图像并将其显示在滚动条的图像视图中。

    一切正常,但从-setImage:实际被调用到它实际显示在屏幕上所花费的时间是无法忍受的——有时需要10秒或更长时间才能真正显示出来。

    我已经尝试过有和没有图像大小调整,这几乎没有增加任何处理时间,当我做的大小调整。正如我所说的,在调用image视图中的-setImage之后,速度会有所放缓。有人知道AssetLibrary API的某些方面可能导致这种情况吗?

    以下是一些相关代码:

    - (void)setImagesForVisiblePages;
    {
      for (MomentImageView *page in visiblePages)
      {
        int index = [page index];
        ALAsset *asset = [photos objectAtIndex:index];
    
        UIImage *image = [assetImagesDictionary objectForKey:[self idForAsset:asset]];
    
        // If the image has already been cached, load it into the
        // image view. Otherwise, request the image be loaded from disk.
        if (image)
        {
          [[page imageView] setImage:image];
        }
        else {
          [self requestLoadImageForAsset:asset];      
          [[page imageView] setImage:nil];
        }
      }  
    }
    
    1 回复  |  直到 16 年前
        1
  •  0
  •   Matt Long    16 年前

    这可能会打乱任何试图解决AssetsLibrary问题的web搜索,为此我深表歉意。事实证明,问题根本不是assetsbrary,而是我对多线程的使用。一旦图像加载完毕,我将使用默认的NSNotificationCenter发布通知。它将它发布在后台线程上,然后该线程使用-setImage更新(或尝试更新)UIImageView。一旦我将它改为使用-performselectornmainthread并让选择器设置图像,一切都很好。

    推荐文章