c# - source - Xamarin: Cómo cargar imágenes desde el proyecto de la biblioteca de iOS
show image xamarin forms (1)
Tengo un proyecto Xamarin diseñado con MvvmCross. Hay Subproyectos:
- Núcleo (PCL)
- ViewModel (PCL)
- iOS (ejecutable)
Si agrego una imagen a mi proyecto iOS (Resoureces / Images / test_image.png), entonces puedo cargarlo con este código:
UIImage image = UIImage.FromBundle("Images/test_icon.png");
Ahora, quiero usar un nuevo Subproyecto
- Controles (Biblioteca de iOS)
Esta biblioteca debe cargar una imagen. Agregué una imagen a Controles (Resoureces / Images / test_image.png)
Pero no puedo cargar esta imagen en Controls proj.
Mi pregunta: ¿cómo cargar imágenes de las bibliotecas de 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);
}
}
y la clase ViewController es:
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));
}
}
Aquí está el proyecto completo: https://bitbucket.org/ww_wschaefer/xamarin-first-crossover-app/overview
Una pequeña explicación sobre mi comentario.
Tienes que cambiar
UIImage image = UIImage.FromBundle("Images/test_icon.png");
a
UIImage image = UIImage.FromFile("Images/test_icon.png");
Como la imagen no se agrega como recurso agrupado.
El método UIImage.FromFile()
carga la imagen de forma asincrónica. También permite que la aplicación cargue la imagen desde una ubicación externa .
A diferencia del método UIImage.FromFile()
, el método UIImage.FromBundle()
es una llamada de bloqueo y solo carga imágenes desde el paquete de la aplicación . Sin embargo, almacena en caché las imágenes después de cargarlo.
Para una mayor comprensión, eche un vistazo al libro - Desarrollo de aplicaciones C # para iPhone y iPad usando MonoTouch