iOS*_*eer 7 c# uiimage xamarin.ios mvvmcross xamarin
我有一个用MvvmCross设计的Xamarin项目.有子项目:
如果我将图像添加到我的iOS项目(Resoureces/Images/test_image.png),那么我可以使用以下代码加载它:
UIImage image = UIImage.FromBundle("Images/test_icon.png");
Run Code Online (Sandbox Code Playgroud)
现在,我想使用一个新的子项目
该库应该加载图像.我在Controls(Resoureces/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);
}
}
Run Code Online (Sandbox Code Playgroud)
而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));
}
}
Run Code Online (Sandbox Code Playgroud)
这是完整的项目:https://bitbucket.org/ww_wschaefer/xamarin-first-crossover-app/overview
对我的评论有点解释.
你必须改变
UIImage image = UIImage.FromBundle("Images/test_icon.png");
Run Code Online (Sandbox Code Playgroud)
至
UIImage image = UIImage.FromFile("Images/test_icon.png");
Run Code Online (Sandbox Code Playgroud)
由于图像未添加为捆绑资源.
该UIImage.FromFile()方法异步加载图像.它还允许应用程序从外部位置加载图像.
与该UIImage.FromFile()方法不同,该UIImage.FromBundle()方法是阻塞调用,仅从应用程序包中加载图像.但是,它会在加载后缓存图像.
为了进一步了解,请阅读本书 - 使用MonoTouch为iPhone和iPad开发C#应用程序