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;
}
}
}
あなたが描く方法でImageViewのを初期化するのはなぜか?ImageViewのは、親ビューを持っていますか? –
@ColeXiaその理由は、私はこのImageViewをCustomcontrol:UIViewに持っています。これはxamarinフォームで使用します。私はフォームから動的にイメージを変更します。私は他の提案のために開いています。 – Praddy
あなたはcustomRendererを意味しますか?そのカスタムコントロールでより多くのコードを提供してください –