2015-09-14 19 views
6

Tôi có một Dự án Xamarin được tạo kiểu với MvvmCross. Có Các tiểu dự án:Xamarin: Cách tải hình ảnh từ dự án thư viện iOS

  • Core (PCL)
  • ViewModel (PCL)
  • iOS (thực thi)

Nếu tôi thêm hình ảnh cho dự án iOS của tôi (Resoureces/Images/test_image. png), sau đó tôi có thể tải nó với mã này:

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

Bây giờ, tôi muốn sử dụng một tiểu dự án mới

  • Controls (iOS Library)

Thư viện này nên tải một hình ảnh. Tôi đã thêm hình ảnh vào Điều khiển (Resoureces/Images/test_image.png)

Nhưng tôi không thể tải hình ảnh này trong phần Điều khiển.

Câu hỏi của tôi: Cách tải hình ảnh từ thư viện 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); 
     } 
    } 

và lớp ViewController là:

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

Dưới đây là toàn Proj: https://bitbucket.org/ww_wschaefer/xamarin-first-crossover-app/overview

+1

Bạn không thể sử dụng từ Bundle trừ khi có sẵn của nó như là nguồn bundeled, tôi nghĩ bạn sẽ là tốt hơn về sử dụng 'UIImage.FromFile ("Images/test_icon.png") '. Bạn cũng nên xem [Câu hỏi] này (http://stackoverflow.com/q/18130779/1155650). –

+1

Tôi không thể tin được, giải pháp này thật dễ dàng, cảm ơn Rohit. – iOSfleer

+0

vui mừng vì sự cố của bạn đã được giải quyết. Tôi đã thêm phần giải thích nếu bạn quan tâm. –

Trả lời

8

Một lời giải thích chút về nhận xét của tôi.

Bạn phải thay đổi

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

để

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

Như hình ảnh không được thêm vào như tài nguyên kèm.

Phương thức UIImage.FromFile() tải hình ảnh một cách không đồng bộ. Nó cũng cho phép ứng dụng tải hình ảnh từ một vị trí bên ngoài.

Không giống như phương pháp UIImage.FromFile(), phương pháp UIImage.FromBundle() là cuộc gọi chặn và chỉ tải hình ảnh từ trong gói ứng dụng. Tuy nhiên, nó lưu trữ các hình ảnh sau khi tải nó.

Để hiểu rõ hơn nữa có một cái nhìn vào cuốn sách - Developing C# Apps for iPhone and iPad using MonoTouch

+0

@iOSfleer - Bạn có thể vui lòng xác nhận xem đây có phải là giải pháp phù hợp với bạn không? –

Các vấn đề liên quan