日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Xamarin的坑 - 绑定(二) - 高德iOS SDK(.Framework)绑定的一些事

發(fā)布時(shí)間:2023/12/4 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Xamarin的坑 - 绑定(二) - 高德iOS SDK(.Framework)绑定的一些事 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

編者語:入門總是用一個(gè)hello world,總會讓人覺得寫code會是很容易的事。開篇綁定了一下微信SDK,不會有太多的難點(diǎn),可是接下來的這個(gè)例子如果欠缺一些耐心,估計(jì)你整個(gè)人就崩潰了(我從來不會放棄任何的事)。ps這里得謝謝CSDN回帖的人,提示我把一些概念搞錯(cuò)了。嗯!我會修正回來。?我直接拿名家@onevat的日志重新把靜態(tài)庫(.a)和動(dòng)態(tài)框架(Framework)的概念重新引用一次,哈哈希望不會有任何理解上的.

? ? ? ?
? ? ? ?了解更多可以看?https://onevcat.com/2016/01/create-framework/

? ? ? ?第三庫在iOS 8后更多用Framework進(jìn)行封裝。本篇以高德SDK為例去完成一個(gè)Xamarin對Framework綁定的示例, 我樂意為大家填坑。
? ? ? ?高德地圖iOS SDK?http://lbs.amap.com/api/ios-sdk/summary?

? ? ? ?我在這里主要用3D地圖,主要涉及兩個(gè)Framework AMapFoundationKit.framework(這是高德的基礎(chǔ)庫任意地方都需要使用) 和 MAMapKit.framework(3D地圖庫) 。
? ? ? ?

? ? ? ?1. 在命令行下通過sharpie把兩個(gè)framework進(jìn)行分別轉(zhuǎn)換
? ? ? ? ? ?AMapFoundationKit轉(zhuǎn)換

  • sharpie?bind?-framework?/your?path/AMapFoundationKit.framework?-sdk?iphoneos10.2??


  • ? ? ? ? ? ?MAMapKit轉(zhuǎn)換


  • sharpie?bind?-framework?/your?path/MAMapKit.framework?-sdk?iphoneos10.2??

  • ? ? ? ?2. 分別創(chuàng)建對應(yīng)于AMapFoundationKit和MAMapKit?Binding項(xiàng)目,并把生成文件嵌入對應(yīng)項(xiàng)目中(你可以參照本系列一進(jìn)行操作http://blog.csdn.net/u014388424/article/details/55517845),還有把Framework放進(jìn)Binding項(xiàng)目中的Native References文件夾中。
    ? ? ? ?
    ? ? ? 2. 首先嘗試編譯AMap.iOS Binding ,估計(jì)都不會成功的啦,這是常識吧!
    ? ? ??
    ? ? ? 看看錯(cuò)誤在Structs
    ? ? ??

    ? ? ? 是類型錯(cuò),一般nint需要轉(zhuǎn)換為C#的類型,我這里把它轉(zhuǎn)換成ulong就基本上完事了。 再編譯會提示Verify的問題了,把它注釋掉。再重新編譯就可以順利把AMapFoundationKit的Binding解決了。(這個(gè)和WeChat SDK差不多)。還有別忘記加入using CoreLocation 因?yàn)?CLLocationCoordinate2D 需要用到的。

    ? ?轉(zhuǎn)換時(shí)的命名錯(cuò)誤也是需要修改
    ? ?

    ? ? ?修正后為
    ? ? ?


  • <span?style="font-size:14px;">public?enum?MAOfflineCityStatus?:?uint??

  • {??

  • ????None?=?MAOfflineItemStatus.None,??

  • ????Cached?=?MAOfflineItemStatus.Cached,??

  • ????Installed?=?MAOfflineItemStatus.Installed,??

  • ????Expired?=?MAOfflineItemStatus.Expired??

  • }</span>??


  • ?
    ? ? ?2. 入坑后,再編譯AMap.iOS.3D Binding估計(jì)你就會哭了,別怕哥幫你刷眼淚。不過這也是一個(gè)很好的長經(jīng)驗(yàn)例子。
    ? ? ??
    ? ? ? 初始錯(cuò)誤分幾種
    ? ? ? a. Structs.cs類型錯(cuò),這種和第一步一樣修正為long
    ? ? ???
    ? ? ? b.ApiDefinition.cs?[Verify(ConstantsInterfaceAssociation)]
    ? ? ? ? ?這里得說明一下,除了注釋這個(gè)字段外,還需要合并多個(gè)partial?interface?Constants為一個(gè)Constants。

  • partial?interface?Constants??

  • ????{??

  • ????????//?extern?NSString?*const?AMapFoundationVersion;??

  • ????????[Field("AMapFoundationVersion",?"__Internal")]??

  • ????????NSString?AMapFoundationVersion?{?get;?}??

  • ??

  • ????????//?extern?NSString?*const?AMapFoundationName;??

  • ????????[Field("AMapFoundationName",?"__Internal")]??

  • ????????NSString?AMapFoundationName?{?get;?}??

  • ??

  • ????????//?extern?NSString?*const?MAMapKitVersion;??

  • ????????[Field("MAMapKitVersion",?"__Internal")]??

  • ????????NSString?MAMapKitVersion?{?get;?}??

  • ??

  • ????????//?extern?NSString?*const?MAMapKitName;??

  • ????????[Field("MAMapKitName",?"__Internal")]??

  • ????????NSString?MAMapKitName?{?get;?}??

  • ????????//?extern?const?MAMapSize?MAMapSizeWorld;??

  • ????????[Field("MAMapSizeWorld",?"__Internal")]??

  • ????????MAMapSize?MAMapSizeWorld?{?get;?}??

  • ??

  • ????????//?extern?const?MAMapRect?MAMapRectWorld;??

  • ????????[Field("MAMapRectWorld",?"__Internal")]??

  • ????????MAMapRect?MAMapRectWorld?{?get;?}??

  • ??

  • ????????//?extern?const?MAMapRect?MAMapRectNull;??

  • ????????[Field("MAMapRectNull",?"__Internal")]??

  • ????????MAMapRect?MAMapRectNull?{?get;?}??

  • ??

  • ????????//?extern?const?MAMapRect?MAMapRectZero;??

  • ????????[Field("MAMapRectZero",?"__Internal")]??

  • ????????MAMapRect?MAMapRectZero?{?get;?}??

  • ??

  • ????????//?extern?NSString?*const?kMAMapLayerCenterMapPointKey;??

  • ????????[Field("kMAMapLayerCenterMapPointKey",?"__Internal")]??

  • ????????NSString?kMAMapLayerCenterMapPointKey?{?get;?}??

  • ??

  • ????????//?extern?NSString?*const?kMAMapLayerZoomLevelKey;??

  • ????????[Field("kMAMapLayerZoomLevelKey",?"__Internal")]??

  • ????????NSString?kMAMapLayerZoomLevelKey?{?get;?}??

  • ??

  • ????????//?extern?NSString?*const?kMAMapLayerRotationDegreeKey;??

  • ????????[Field("kMAMapLayerRotationDegreeKey",?"__Internal")]??

  • ????????NSString?kMAMapLayerRotationDegreeKey?{?get;?}??

  • ??

  • ????????//?extern?NSString?*const?kMAMapLayerCameraDegreeKey;??

  • ????????[Field("kMAMapLayerCameraDegreeKey",?"__Internal")]??

  • ????????NSString?kMAMapLayerCameraDegreeKey?{?get;?}??

  • ??

  • ????????[Field("MAOfflineMapDownloadReceivedSizeKey",?"__Internal")]??

  • ????????NSString?MAOfflineMapDownloadReceivedSizeKey?{?get;?}??

  • ??

  • ????????//?extern?NSString?*const?MAOfflineMapDownloadExpectedSizeKey;??

  • ????????[Field("MAOfflineMapDownloadExpectedSizeKey",?"__Internal")]??

  • ????????NSString?MAOfflineMapDownloadExpectedSizeKey?{?get;?}??

  • ????????[Field("MAOfflineMapErrorDomain",?"__Internal")]??

  • ????????NSString?MAOfflineMapErrorDomain?{?get;?}??

  • ????}??

  • ? ? ? ? 這里有一些接口的錯(cuò)誤
    ? ? ? ??
    ? ? ? ? 修改為:
    ? ? ? ??
    ? ? ? ? 需要修正命名錯(cuò)誤,用sharpie轉(zhuǎn)換很容易把不同方法轉(zhuǎn)換成同個(gè)名字
    ? ? ? ??

    ? ? ? ? 還有把Objective-C的指針*作為變量加上去了(這個(gè)也夠搞笑,希望Sharpie下個(gè)版本能修正),都要?jiǎng)h除掉*就解決了 ?


  • //?-(void)renderLinesWithPoints:(CGPoint?*)points?pointCount:(NSUInteger)pointCount?strokeColor:(UIColor?*)strokeColor?lineWidth:(CGFloat)lineWidth?looped:(BOOL)looped?LineJoinType:(MALineJoinType)lineJoinType?LineCapType:(MALineCapType)lineCapType?lineDash:(BOOL)lineDash;??

  • [Export("renderLinesWithPoints:pointCount:strokeColor:lineWidth:looped:LineJoinType:LineCapType:lineDash:")]??

  • unsafe?void?RenderLinesWithPoints(CGPoint*?points,?nuint?pointCount,?UIColor?strokeColor,?nfloat?lineWidth,?bool?looped,?MALineJoinType?lineJoinType,?MALineCapType?lineCapType,?bool?lineDash);??

  • ? ? ? ? ?還是Verify字段要去掉

    ? ? ? ??
    ? ? ? ?這里有一個(gè)更好玩的事,就是擴(kuò)展方法這里轉(zhuǎn)換老提示以下錯(cuò)誤

    ? ? ? ?

    ? ? ? ?我查看了一下,發(fā)現(xiàn)是怎么也不認(rèn)擴(kuò)展方法,看了看stackoverflow ,發(fā)現(xiàn)需要把每個(gè)屬性的get/set通過方法描述解決,這也是醉了。。。。。如這個(gè)


  • [Export("allowsAnnotationViewSorting")]??

  • bool?AllowsAnnotationViewSorting?{?get;?set;?}??

  • ? ? ? ?需要修正為:

  • [Export("allowsAnnotationViewSorting")]??

  • //bool?AllowsAnnotationViewSorting?{?get;?set;?}??

  • bool?AllowsAnnotationViewSorting();??

  • [Export("setAllowsAnnotationViewSorting:")]??

  • void?SetAllowsAnnotationViewSorting(bool?allowsAnnotationViewSorting);???

  • ? ? ? 按照上述步驟基本上就可以把項(xiàng)目編譯成功了。? ? ? ???


    ? ? ??

    ? ? ? 3.接下來就是添加一個(gè)iOS項(xiàng)目,做一個(gè)簡單測試。

    ? ? ? 這里需要補(bǔ)充一下,需要對MAMapKit.framework補(bǔ)充關(guān)聯(lián)

    ? ? ? ??

    ? ? ? ? 在Info.plist中 Location Always Usage Description

    ? ? ? ??? ? ? ?

    ? ? ? ? 還需要把兩個(gè)綁定Binding引用進(jìn)去

    ? ? ? ??

    ? ? ? ? 還需要把AMap資源引用去Resource目錄(bundle在MAMapKit.framework內(nèi))

    ? ? ? ??

    ? ? ? ? 最后只需要在ViewController.cs添加如下代碼就可以了

  • AMapServices.SharedServices.ApiKey?=?"你申請的key";??

  • AMapServices.SharedServices.EnableHTTPS?=?true;??

  • MAMapView?map?=?new?MAMapView();??

  • map.Frame?=?this.View.Bounds;??

  • map.SetShowsUserLocation(true);??

  • map.SetUserTrackingMode(MAUserTrackingMode.Follow);??

  • this.View.AddSubview(map);??

  • ? ? ? ?Rebuild一下運(yùn)行


    ? ? ? ?? ?

    ? ? ? 爽爽!!

    ? ? ? 代碼在github上?https://github.com/lokinfey/AMapSDK,由于時(shí)間有限我只會暫時(shí)先放一個(gè)簡單的定位功能上去。給有緣人自己添加功能了。


    相關(guān)文章:

    • Xamarin的坑 - 綁定(一) - 拿微信iOS SDK 簡單說起

    原文地址:http://blog.csdn.net/kinfey/article/details/56303998


    .NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注

    贊賞

    人贊賞

    總結(jié)

    以上是生活随笔為你收集整理的Xamarin的坑 - 绑定(二) - 高德iOS SDK(.Framework)绑定的一些事的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。