una source insertar images imagen fondo como c# xamarin xamarin.ios uiimage mvvmcross

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