1

我目前正在测试下载缓存,这看起来真的很棒。

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

1) 进度视图

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

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

2)不要加载旧图像

在 iOS 中使用 Tables 或 Cellectionviews 时,请务必在设置图像之前检查 URL 是否已更改(因为 iOS 会重用对象)。我查看了下载缓存的源代码,但没有看到此检查。

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

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

3) ImageCache 大小(兆)字节

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

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

扫描文件夹并计算文件夹中所有图像的大小对性能有危险吗?

问候, 马特

4

2 回答 2

1

1) 进度视图

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

有一个DefaultImagePath提供在加载期间应显示的图像的路径。

但是如果你需要动态动画或者其他自定义视图,那么afterImageChangeAction可以使用

如您所见,您不能这样做MvxImageView-Action并不是真正适合作为可绑定属性的候选者,因此它没有作为属性公开。

但是,您可以:


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

于 2013-09-27T07:09:03.127 回答
0

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

于 2013-10-15T08:35:37.620 回答