【问题标题】:Xamarin: How to load image from iOS library projectXamarin:如何从 iOS 库项目加载图像
【发布时间】:2015-09-14 13:31:17
【问题描述】:

我有一个使用 MvvmCross 样式的 Xamarin 项目。有子项目:

  • 核心 (PCL)
  • ViewModel (PCL)
  • iOS(可执行文件)

如果我将图像添加到我的 iOS 项目 (Resourceces/Images/test_image.png),那么我可以使用以下代码加载它:

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

现在,我想使用一个新的子项目

  • 控件(iOS 库)

这个库应该加载一个图像。我在控件中添加了一张图片 (Resourceces/Images/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)); 
        }
    }

这里是完整的项目:https://bitbucket.org/ww_wschaefer/xamarin-first-crossover-app/overview

【问题讨论】:

  • 你不能从 Bundle 中使用,除非它可以作为捆绑资源使用,我认为你最好使用 UIImage.FromFile("Images/test_icon.png")。你也应该看看这个Question
  • 我不敢相信,解决方案如此简单,谢谢 Rohit。
  • 很高兴您的问题得到了解决。如果您有兴趣,我已添加说明。
  • 如果您不介意,如果它解决了您的问题,请务必接受答案,以便对其他人也有帮助。 @iOSfleer

标签: c# xamarin xamarin.ios uiimage mvvmcross


【解决方案1】:

对我的评论的一点解释。

你必须改变

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

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

由于图像未作为捆绑资源添加。

UIImage.FromFile() 方法异步加载图像。 它还允许应用从外部位置加载图像

UIImage.FromFile() 方法不同,UIImage.FromBundle() 方法是一个阻塞调用,仅从应用程序包中加载图像。但是,它会在加载后缓存图像。

为了进一步了解,请看这本书 - Developing C# Apps for iPhone and iPad using MonoTouch

【讨论】:

  • @iOSfleer - 请确认这是否适合您的解决方案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 2020-05-18
  • 2016-03-04
  • 1970-01-01
  • 2018-05-25
相关资源
最近更新 更多