Я пытаюсь реализовать пользовательский ImageRenderer в iOS, подклассифицируя собственный UIImageView, но у меня возникают некоторые проблемы с CreateNativeControl.
В более старой версии Xamarin.Forms (например, 4.2) пользовательский собственный класс то, что я инициализировал protected override UIImageView CreateNativeControl() { return new NativeImage(); }
, выглядит так, как будто его никогда не вызывают (сообщение, которое я регистрирую в конструкторе, не отображается). Пользовательский рендерер правильно инициализирован (правильное сообщение записано в журнал).
В последней стабильной версии (например, 4.4) в переопределении CreateNativeControl возвращаемый тип, который называется FormsUIImageView, никогда о нем не слышал Во всяком случае, я также попытался создать подкласс этой, но такой же проблемы, как и раньше, кажется, что она никогда не вызывается, поскольку сообщение конструктора не записывается Custom Renderer правильно инициализирован (правильное сообщение записано).
Вот код, который я использовал:
public class IOSImageView : ImageRenderer
{
public IOSImageView()
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Image> e)
{
base.OnElementChanged(e);
if(Control == null)
{
return;
}
Console.WriteLine("PIPPO created from Custom Renderer"); //this message is correctly logged
}
protected override UIImageView CreateNativeControl() //FormsUIImageView in XF 4.4
{
return new NativeImage();
}
}
public class NativeImage : UIImageView //FormsUIImageView in XF 4.4
{
public NativeImage() : base()
{
Console.WriteLine("PIPPO created from native IOS"); //this message is NOT logged
}
public override void TouchesBegan(NSSet touches, UIEvent evt)
{
base.TouchesBegan(touches, evt);
Console.WriteLine("PIPPO touched"); //this (of course because no NativeImage is shown and there is no image to touch) is NOT logged
}
}