我一直在尋找一個關於在C#Monotouch中爲Mapkit添加圖像疊加的好教程。MonoTouch Mapkit圖像疊加
我發現了許多彩色圓圈或多邊形的疊加示例。但是我想在我的地圖上加載一個PNG。我來自MonoAndroid並在那裏完成,但需要將我的程序轉移到iOS。
即使是一個客觀的C例子也會有所幫助,但Mono會更好。
我一直在尋找一個關於在C#Monotouch中爲Mapkit添加圖像疊加的好教程。MonoTouch Mapkit圖像疊加
我發現了許多彩色圓圈或多邊形的疊加示例。但是我想在我的地圖上加載一個PNG。我來自MonoAndroid並在那裏完成,但需要將我的程序轉移到iOS。
即使是一個客觀的C例子也會有所幫助,但Mono會更好。
我最終下載了一些本地目標C代碼,幾乎把它轉換成C#。函數名稱非常相似,Xamarin API參考文檔非常有用。
有其中一些棘手的顛簸我跑進周圍的應用程序委託,以及它是如何在C#中的處理方式不同,以客觀C.
這裏是轉換兩個最難的功能,我的解決方案:
1 )地圖疊加類中的Draw函數
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();
}
和2)我的mapOverlay類中的bounding mapRect函數覆蓋MKOverlay。 是的位置是硬編碼的,我正在處理單位轉換atm,但這些是繪製圖像的正確座標,與我使用的樣本對象c代碼相同。
public MKMapRect BoundingMapRect
{
[Export("boundingMapRect")]
get
{
var bounds = new MKMapRect(1.35928e+08, 9.23456e+07,17890.57, 26860.05);
return bounds;
}
}
爲目標C項目我轉換的源代碼是在這裏:https://github.com/indigotech/Blog-MKMapOverlayView
Xamarin API參考文檔:http://iosapi.xamarin.com/
你想要這樣做的方式將取決於你想疊加的圖像的種類。如果它非常小,則只需使用單個圖像即可脫身。但是,如果它覆蓋使用期望可以放大的較大區域,則可能必須將其分割爲單獨的區塊才能獲得更好的性能。
這裏的堆棧溢出可能會爲您一一解答了一些其他問題:
How do I create an image overlay and add to MKMapView?
iPhone - Image overlay MapKit framework?
看到蘋果的WWDC2010示例代碼tilemap的 https://github.com/klokantech/Apple-WWDC10-TileMap(被人發佈到GitHub上)
這與Mono沒有任何關係,但您應該可以將其轉換爲...