我目前正在测试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”来检查为图像缓存定义的文件夹的大小或任何其他建议?
扫描文件夹并计算文件夹中所有图像的大小是否会对性能造成危险?
此致 马特
答案 0 :(得分:1)
我想在图像上显示进度视图,直到它被加载为止。为此,我需要在加载图像时收到通知。
有一个DefaultImagePath
,它提供了在加载过程中应显示的图像路径。
但如果您需要动态动画或其他自定义视图,则可以使用afterImageChangeAction
正如您所见,您无法在MvxImageView
中执行此操作 - Action
实际上不适合成为可绑定属性,因此它不会作为属性公开。
但是,您可以:
MvxImageViewLoader
执行此操作 - 在N + 1个样本的视图中有几个使用此示例的示例 - https://github.com/slodge/NPlus1DaysOfMvvmCross/search?q=MvxImageViewLoader MyImageView
课程来实现这一目标 - 这不是一个很难写的课程 - https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxImageView.cs 作为使用Action
回调的替代方法,您还可以继承MvxBaseImageViewLoader<T>
并为ImageHelperOnImageChanged
方法提供覆盖 - 请参阅https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding/Views/MvxBaseImageViewLoader.cs#L49
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捕获的事件。