J'ai fini par télécharger un code C objectif natif et à peu près juste le convertir en C#. Les noms des fonctions sont très similaires, les références de l'API Xamarin Documentation est très utile.
Là où quelques bosses difficiles je suis tombé autour du délégué de l'application, et comment elle est traitée différemment en C# à l'objectif C.
Voici les deux fonctions les plus difficiles à convertir et ma solution:
1) les fonctions de dessin dans la classe de superposition de cartes
public override void DrawMapRect (MKMapRect mapRect, float zoomScale, CGContext ctx)
{
InvokeOnMainThread(
() =>
{
UIImage image = UIImage.FromFile(@"indigo_eiffel_blog.png");
DrawImgRotated(image, 0, ctx);
}
);
}
public void DrawImgRotated(UIImage image, float rotDegree, CGContext c)
{
c.SaveState();
CGImage imageRef = image.CGImage;
//loading and setting the image
MKMapRect theMapRect = ((MapOverlay)this.Overlay).BoundingMapRect;//MKMapRect theMapRect = [self.overlay boundingMapRect];
RectangleF theRect = RectForMapRect(theMapRect);
//we need to flip and reposition the image
c.ScaleCTM(1.0f, -1.0f);
c.TranslateCTM(-theRect.Width/8,-theRect.Height);
// Proper rotation about a point
var m = CGAffineTransform.MakeTranslation(-theRect.Width/2,-theRect.Height/2);
m.Multiply(CGAffineTransform.MakeRotation(DegreesToRadians(rotDegree)));
m.Multiply(CGAffineTransform.MakeTranslation(theRect.Width/2,theRect.Height/2));
c.ConcatCTM(m);
c.DrawImage(theRect, imageRef);
c.RestoreState();
}
et 2) la fonction mapRect englobante dans ma classe mapOverlay primordiale MKOverlay. Oui, la position est codée en dur, je travaille sur l'unité de conversion atm mais ce sont les coordonnées correctes pour dessiner l'image comme dans le code c de l'échantillon que j'ai utilisé.
public MKMapRect BoundingMapRect
{
[Export("boundingMapRect")]
get
{
var bounds = new MKMapRect(1.35928e+08, 9.23456e+07,17890.57, 26860.05);
return bounds;
}
}
Le code source du projet Objectif C I est converti ici: https://github.com/indigotech/Blog-MKMapOverlayView
Xamarin documentation de référence API: http://iosapi.xamarin.com/