Xamarin: How to load image from iOS library project

删除回忆录丶 提交于 2019-12-23 08:57:09

问题


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

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


回答1:


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



来源:https://stackoverflow.com/questions/32566167/xamarin-how-to-load-image-from-ios-library-project

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!