MVVMCross Downloadcache - 加载过程中的ProgressView

时间:2013-09-26 19:00:30

标签: mvvmcross

我目前正在测试downloadcache,这看起来真的很棒。

我对这个插件有一些疑问(我对C#很新,并且不了解该插件的完整源代码):

1)ProgressView

我想在图像上显示进度视图,直到它被加载为止。 为此,我需要在加载图像时收到通知。

在“MvxImageViewLoader”中,我看到有一个Action“afterImageChangeAction”(默认为null)。 但是,我不明白我是否以及如何从“MvxImageView”访问该Action? (如何设置)

2)请勿加载旧图片

在iOS中使用Tables或Cellectionviews时,在设置图像之前检查URL是否已更改非常重要(因为iOS会重用对象)。我查看了downloadcache的源代码,我没有看到这个检查。

但是,在“MvxDynamicImageHelper.cs”类中,我看到当设置新URL时,它调用“ClearCurrentHttpImageRequest();”删除“更新”事件。

所以我认为这足以防止将图像设置为错误的UIImageView?

3)ImageCache大小(兆字节)

ImageCache没有用于定义持久性图像存储(在HD上)的最大大小(例如,兆字节)的属性。我更喜欢使用(兆字节)字节的最大大小而不是最大数量的文件,因为用户会关心应用占用多少空间而不是应用程序存储的文件数量。

我认为对我来说最简单的方法是定义一个独立于MvxFileDownloadCache中的“TimeSpan PeriodSaveInterval”来检查为图像缓存定义的文件夹的大小或任何其他建议?

扫描文件夹并计算文件夹中所有图像的大小是否会对性能造成危险?

此致 马特

2 个答案:

答案 0 :(得分:1)

1)ProgressView

  

我想在图像上显示进度视图,直到它被加载为止。为此,我需要在加载图像时收到通知。

有一个DefaultImagePath,它提供了在加载过程中应显示的图像路径。

但如果您需要动态动画或其他自定义视图,则可以使用afterImageChangeAction

正如您所见,您无法在MvxImageView中执行此操作 - Action实际上不适合成为可绑定属性,因此它不会作为属性公开。

但是,您可以:


作为使用Action回调的替代方法,您还可以继承MvxBaseImageViewLoader<T>并为ImageHelperOnImageChanged方法提供覆盖 - 请参阅https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding/Views/MvxBaseImageViewLoader.cs#L49

2)不要加载旧图像

3)ImageCache大小(兆字节)

MvvmCross的接口驱动和插件结构定义为允许您实现替代方案。

在从HTTP加载图像的情况下,有许多选择 - 您不必使用MvvmCross下载缓存进行图像加载。

目前唯一可用于下载缓存插件的文档是https://github.com/slodge/MvvmCross/wiki/MvvmCross-plugins#downloadcache

对于Android,有关替代实施的一些建议列于:https://github.com/slodge/MvvmCross/issues/416

对于iOS,阅读https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html可能会有用,包括<Application_Home>/Library/Caches

部分

答案 1 :(得分:0)

我知道斯图尔特已经提供了一个很好的答案。但是当我需要完全相同的功能时,我所做的就是继承MvxImageView并覆盖UIImageView.Image属性。设置图像时,我会触发一个由viewcontroller捕获的事件。