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)); 
        }
    }

enter image description here

вот полный 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