Xamarin: как загрузить изображение из проекта библиотеки iOS
У меня есть проект Xamarin в стиле MvvmCross. Есть подпроекты:
- ядро (PCL)
- ViewModel (PCL)
- iOS (исполняемый файл)
Если я добавлю изображение в свой проект iOS (Resoureces/Images/test_image.png), то я могу загрузить его с помощью этого кода:
UIImage image = UIImage.FromBundle("Images/test_icon.png");
Теперь, я хочу использовать новый подпроект
- элементы управления (библиотека iOS)
эта библиотека должна загрузить изображение. Я добавлены изображения для контроля (Resoureces/изображения/test_image.png)
но я не могу загрузить это изображение в Controls proj.
мой вопрос: Как загрузить изображения из библиотек iOS?
public class MyButton : UIButton
{
public MyButton () : base()
{
Initialize ();
}
void Initialize()
{
// load image from bundle
UIImage image = UIImage.FromBundle("Images/test_icon.png");
// image is null
this.SetImage (image, UIControlState.Normal);
}
}
и класс ViewController:
public partial class FirstView : MvxViewController
{
public FirstView () : base ("FirstView", null)
{
}
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// load image from bundle
// UIImage image = UIImage.FromBundle("Images/test_icon.png");
// image is not null if added in iOS Proj
// this.imageView.Image = image;
MyButton button = new MyButton ();
View.Add (button);
View.AddConstraint (NSLayoutConstraint.Create (button, NSLayoutAttribute.Right, NSLayoutRelation.Equal, View, NSLayoutAttribute.Right, 1, 10));
View.AddConstraint (NSLayoutConstraint.Create (button, NSLayoutAttribute.Top, NSLayoutRelation.Equal, View, NSLayoutAttribute.Top, 1, 74));
View.AddConstraint (NSLayoutConstraint.Create (button, NSLayoutAttribute.Width, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 0, 64));
View.AddConstraint (NSLayoutConstraint.Create (button, NSLayoutAttribute.Height, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 0, 64));
}
}
вот полный proj:https://bitbucket.org/ww_wschaefer/xamarin-first-crossover-app/overview
1 ответов
небольшое объяснение моего комментария.
вы должны изменить
UIImage image = UIImage.FromBundle("Images/test_icon.png");
to
UIImage image = UIImage.FromFile("Images/test_icon.png");
как изображение не добавляется в комплекте ресурса.
на UIImage.FromFile()
метод загружает изображение асинхронно. это также позволяет приложению загружать изображение из внешнего местоположения.
в отличие от UIImage.FromFile()
методом UIImage.FromBundle()
метод является блокировкой вызова и загружает только изображения из приложения бандл. Однако он кэширует изображения после загрузки.
для дальнейшего понимания взгляните на книгу -разработка приложений C# для iPhone и iPad с помощью MonoTouch