2017-08-28 9 views
0

UIImageViewに表示する画像のAspectFitにスケールを設定しました。 しかし、私の画像は、iPhoneの画面の中央に表示されます。UIImageViewをUIViewContentMode.ScaleAspectFitを使用して画面上部に配置します。

これは、画面の上部にアスペクト比を維持して表示します。これはC#で行うことができます。これは私の現在のイメージを設定する方法です。

public override void Draw(CGRect rect) 
{ 
    myImageView = new UIImageView() 
    { 
     Image = UIImage.FromBundle("filename"), 
     ContentMode = UIViewContentMode.ScaleAspectFit, 
     Frame = new CGRect(0, 0, rect.Width, rect.Height) 
    }; 
} 

コードサンプルまたは提案は、大いに役立ちます。おかげさまで

マイCustomControl:

[DesignTimeVisible(true), System.ComponentModel.Category("CustomControl")] 
public partial class CustomControl : UIView 
{ 
    [Export("ImageFileName"), Browsable(true)] 
    public string ImageFileName{get;set;} 

    public static KipperView Create() 
    { 
     var arr = NSBundle.MainBundle.LoadNib("CustomControl", null, null); 
     var view = Runtime.GetNSObject<KipperView>(arr.ValueAt(0)); 
     return view; 
    } 

    public CustomControl() : base() 
    {} 

    public CustomControl(IntPtr p) : base(p) 
    {} 

    public override void Draw(CGRect rect) 
    { 
     myImageView = new UIImageView() 
     { 
      Image = UIImage.FromBundle(ImageFileName), 
      ContentMode = UIViewContentMode.ScaleAspectFit, 
      Frame = new CGRect(0, 0, rect.Width, rect.Height) 
     }; 
     this.Add(myImageView); 
    } 

    public override void TouchesBegan(NSSet touches, UIEvent evt) 
    { 
     base.TouchesBegan(touches, evt); 
     UITouch touch = touches.AnyObject as UITouch; 
     var x = (float)touch.GetPreciseLocation(myImageView).X; 
     var y = (float)touch.GetPreciseLocation(myImageView).Y; 
    } 
} 

そして、私のCustomRendered:

public class CustomRendered : ViewRenderer<MyFormsControl, CustomControl> 
{ 
    protected override void OnElementChanged(ElementChangedEventArgs<MyFormsControl> e) 
    { 
     base.OnElementChanged(e); 
     if (Control == null) 
     { 
      var control = new CustomControl(); 
      SetNativeControl(control); 
     } 
     if (this.Element == null) return; 
     Control.ImageFileName = "logo.png"; 
     Control.ContentMode = UIViewContentMode.ScaleAspectFit; 
    } 

    protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     base.OnElementPropertyChanged(sender, e); 
     switch (e.PropertyName) 
     { 
      case "ImageFileName": 
       Control.ImageFileName = "xamarin.png"; 
       this.SetNeedsDisplay(); 
       break; 
      default: 
       return; 
     } 
    } 
} 

私のようにフォームコントロールを設定します。

CGImageとしてそれを描画する方法をOnDraw使用してこれを実現
public class MyFormControl : View 
{ 
    public static readonly BindableProperty ImageNameProperty = BindableProperty.Create(nameof(ImageName), typeof(string), typeof(CustomKipperControl), null, propertyChanged: OnItemsSourcePropertyChanged); 

    private static void OnItemsSourcePropertyChanged(BindableObject bindable, object oldValue, object newValue) { } 

    public string ImageName 
    { 
     get 
     { 
      return (string)GetValue(ImageNameProperty); 
     } 
     set 
     { 
      SetValue(ImageNameProperty, value); 
     } 
    } 

    protected override void OnPropertyChanged(string propertyName) 
    { 
     base.OnPropertyChanged(propertyName); 
     switch (propertyName) 
     { 
      case "ImageFileName": 
       break; 
     } 
    }  
} 
+0

あなたが描く方法でImageViewのを初期化するのはなぜか?ImageViewのは、親ビューを持っていますか? –

+0

@ColeXiaその理由は、私はこのImageViewをCustomcontrol:UIViewに持っています。これはxamarinフォームで使用します。私はフォームから動的にイメージを変更します。私は他の提案のために開いています。 – Praddy

+0

あなたはcustomRendererを意味しますか?そのカスタムコントロールでより多くのコードを提供してください –

答えて

関連する問題