2015-09-14 7 views
6

Ich habe ein Xamarin-Projekt gestylt mit MvvmCross. Es gibt Teilprojekte:Xamarin: Wie man Bild von iOS-Bibliotheksprojekt lädt

  • Core (PCL)
  • Ansichtsmodell (PCL)
  • iOS (Executable)

Wenn ich hinzufügen, um ein Bild zu meinem iOS-Projekt (Resoureces/Bilder/test_image. png), dann kann ich es mit diesem Code laden:

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

Nun, ich möchte ein neues Teilprojekt verwenden

  • Controls (iOS-Bibliothek)

Diese Bibliothek sollte ein Bild laden. Ich habe ein Bild zu Controls hinzugefügt (Resources/Images/test_image.png)

Aber ich kann dieses Bild nicht in Controls proj laden.

Meine Frage: Wie Bilder aus iOS-Bibliotheken geladen werden?

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

und die Viewcontroller Klasse:

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

enter image description here

ist hier voll proj: https://bitbucket.org/ww_wschaefer/xamarin-first-crossover-app/overview

+1

Sie aus Bundle, wenn sein als gebündelte Ressource verwenden kann nicht, ich glaube, Sie verwenden 'UIImage.FromFile („Images/test_icon.png“besser wäre,) '. Sie sollten sich auch diese [Frage] (http://stackoverflow.com/q/18130779/1155650) ansehen. –

+1

kann ich nicht glauben, die Lösung ist so einfach, danke Rohit. – iOSfleer

+0

froh, dass dein Problem gelöst wurde. Ich habe die Erklärung hinzugefügt, wenn Sie interessiert sind. –

Antwort

8

Eine kleine Erklärung auf meinen Kommentar.

Sie haben

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

zu

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

ändern Da das Bild nicht als gebündelte Ressource hinzugefügt wird.

Die Methode UIImage.FromFile() lädt das Bild asynchron. Es ermöglicht auch der Anwendung, das Bild von einem externen Speicherort zu laden.

Im Gegensatz zur UIImage.FromFile() Methode, die UIImage.FromBundle() Methode ist ein blockierender Aufruf und nur lädt Bilder aus der Anwendung heraus Bündel. Allerdings werden die Bilder nach dem Laden zwischengespeichert.

Zum weiteren Verständnis haben einen Blick auf das Buch - Developing C# Apps for iPhone and iPad using MonoTouch

+0

@iOSfleer - Können Sie bitte bestätigen, ob dies die Lösung ist, die für Sie funktioniert hat? –