2014-01-20 2 views
1

У меня есть проект MvvmCross, который использует MvxImageViewLoader для загрузки изображений из URL-адресов в фоновом режиме. Я использую DefaultImagePath, чтобы указать изображение по умолчанию, если URL-адрес неверен или URL не указан вообще.MvxImageViewLoader изображение по умолчанию игнорирование ресурсов сетчатки

Проблема заключается в том, что этот путь игнорирует изображения сетчатки @2x из файловой системы и всегда отображает изображение не сетчатки.

Это код:

_imageLoader = new MvxImageViewLoader(() => ImageView) 
{ 
    // After loading the Image view, the scale of the image is always 1.0 
    DefaultImagePath = NSBundle.MainBundle.PathForResource("image", "png") 
}; 
// At this point, ImageView.Image.CurrentScale is 1.0 (WRONG) on retina devices 

где ImageView является стандартным UIImageView.

Но загрузка изображения с пути непосредственно работает:

// The scale of this image is 2.0 on retina devices (as expected) 
var image = UIImage.FromFile(NSBundle.MainBundle.PathForResource("image", "png")); 

В качестве временного решения, я добавил это условное именование:

var imageName = UIScreen.MainScreen.Scale > 1 ? "[email protected]" : "image"; 
_imageLoader = new MvxImageViewLoader(() => ImageView) 
{ 
    DefaultImagePath = NSBundle.MainBundle.PathForResource(imageName, "png") 
}; 
// At this point, ImageView.Image.CurrentScale is 2.0 on retina devices as expected 

Но это не принимать во внимание другие соглашения об именах как ~ipad для iPad и @2x~ipad для IPad сетчатки. Поэтому мне интересно, что я делаю что-то неправильно или это плагин MvvmCross, который должен использовать удобные методы инициализации UIImage.

Кажется, что MvxTouchLocalFileImageLoader класс already uses UIImage.FromFile, поэтому я не уверен, почему поведение отличается.

EDIT: Описание: downloadable sample project Воспроизведение проблемы.

Спасибо.

+0

Если вы просто используете 'UIImage.FromFile' в каком-либо тестовом коде в своем приложении, правильно ли он отображает изображения сетчатки? Если нет, попробуйте сначала решить эту проблему - проверьте действия сборки, попробуйте очистить/перестроить и т. Д. Если тестовый код действительно работает, я немного застрял в идеях прямо сейчас. – Stuart

+0

@Stuart второй кусок кода - это именно тот случай, и он работает так, как ожидалось. – redent84

+0

@Stuart добавил пример проекта, воспроизводящего проблему – redent84

ответ

2

Похоже, что adding the prefix res: to the file path делает MvxTouchLocalFileImageLoaderto use UIImage.FromFile и в противном случае it reads the file to a MemoryStream, игнорируя любой классификатор шкалы или устройства.

Итак, это теперь работает, как ожидалось:

_imageLoader = new MvxImageViewLoader(() => ImageView) 
{ 
    DefaultImagePath = "res:" + NSBundle.MainBundle.PathForResource(imageName, "png") 
}; 

Не уверен, если это предполагаемое поведение или это ошибка в MvxTouchLocalFileImageLoader в любом случае.

Смежные вопросы