Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Xamarin: How to load image from iOS library project

I have a Xamarin Project styled with MvvmCross. There are Subprojects:

  • Core (PCL)
  • ViewModel (PCL)
  • iOS (Executable)

If i add an image to my iOS project (Resoureces/Images/test_image.png), then i can load it with this code:

UIImage image = UIImage.FromBundle("Images/test_icon.png");

Now, i want to use a new Subproject

  • Controls (iOS Library)

This library should load an image. I added an image to Controls (Resoureces/Images/test_image.png)

But i can not load this image in Controls proj.

My Question: How to load images from iOS libraries?

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

and the ViewController class is :

    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

Here is full proj: https://bitbucket.org/ww_wschaefer/xamarin-first-crossover-app/overview

like image 455
iOSfleer Avatar asked Sep 14 '15 13:09

iOSfleer


People also ask

How do I import an image into Xamarin?

Android - Place images in the Resources/drawable directory with Build Action: AndroidResource. High- and low-DPI versions of an image can also be supplied (in appropriately named Resources subdirectories such as drawable-ldpi, drawable-hdpi, and drawable-xhdpi).


1 Answers

A little explanation on my comment.

You have to change

UIImage image = UIImage.FromBundle("Images/test_icon.png");

to

UIImage image = UIImage.FromFile("Images/test_icon.png");

As the image is not added as bundled resource.

The UIImage.FromFile() method loads the image asynchronously. It also allows the application to load the image from an external location.

Unlike the UIImage.FromFile() method, the UIImage.FromBundle() method is a blocking call and only loads images from within the application bundle. However, it caches the images after loading it.

For further understanding have a look at the book - Developing C# Apps for iPhone and iPad using MonoTouch

like image 81
Rohit Vipin Mathews Avatar answered Oct 01 '22 18:10

Rohit Vipin Mathews