2017年底因公司業務組合部門調整,新的團隊部分維護的項目用React Native技術混合開發。為適應環境變化,開啟瘋狂RN學習之旅,晚上回來啃資料看視頻。可能由于本身對RN技術體驗不感冒或者在環境之下強迫學習有點不爽。開始尋找代替方案,Fluter像一束曙光引起了我的注意,之后一直關注并利用閑余時間開始探索。2018年一直學習到使用Flutter寫項目,從0.2.0開始到現在1.5版本的發布,終于開始慢慢的爬出坑位了,但是因為部分控件感覺還是不如原生控件好用,因而Flutter提供了PlatformView部件。近期因項目中嚴重使用依賴地圖,故而做了Fluterr使用原生IOS高德地圖調研。因為我本身是一名android開發人員,初學IOS并記錄下來。
在網站設計、成都網站建設過程中,需要針對客戶的行業特點、產品特性、目標受眾和市場情況進行定位分析,以確定網站的風格、色彩、版式、交互等方面的設計方向。成都創新互聯公司還需要根據客戶的需求進行功能模塊的開發和設計,包括內容管理、前臺展示、用戶權限管理、數據統計和安全保護等功能。
PlatformView是 flutter 官方提供的一個可以嵌入 Android 和 iOS 平臺原生 view 的小部件。
在我們實際開發中,我們遇到一些 flutter 官方沒有提供的插件可以自己創建編寫插件來實現部分功能,但是原生View在 flutter 中會遮擋住flutter 中的小部件,比如你想使用高德地圖sdk、視頻播放器、直播等原生控件,就無法很好的與 flutter 項目結合。
1、info.plist文件設置
2、 ios 端實現原生組件PlatformView提供原生view
3 、ios 端創建PlatformViewFactory用于生成PlatformView
4、 ios 端創建FlutterPlugin用于注冊原生組件
5 、flutter 平臺嵌入 原生view
iOS端的UiKitView目前還只是preview狀態, 默認是不支持的, 需要手動打開開關, 在info.plist文件中新增一行io.flutter.embedded_views_preview為true.
創建類 FlutterMapView 并實現FlutterPlatformView 協議
FlutterMapView.h
FlutterMapView.m
FlutterMapFactory.h
FlutterMapFactory.m
FlutterMapPlugin.h
FlutterMapPlugin.m
請前往 高德開放平臺控制臺 申請 iOS Key。
注意:Bundle Identifier需要與申請的時候填寫的一致
地圖依賴的庫列舉如下:
基礎 SDK AMapFoundationKit.framework
第一步:將解壓后的MAMapKit.framework 文件 copy 或 拖拽 到工程文件夾中,左側目錄選中工程名,在 TARGETS-Build Phases- Link Binary With Libaries 中點擊“+”按鈕,在彈出的窗口中點擊“Add Other”按鈕,選擇工程目錄下的 MAMapKit.framework 文件添加到工程中。
千萬不要忘記將AMapFoundationKit也一起加入工程。
3D地圖正確配置應如下圖所示:
需要引入的資源文件包括:AMap.bundle,其中:AMap.bundle 在 MAMapKit.framework 包中,AMap.bundle資源文件中存儲了定位、默認大頭針標注視圖等圖片,可利用這些資源圖片進行開發。
左側目錄中選中工程名,在右鍵菜單中選擇Add Files to “工程名”…,從MAMapKit.framework中選擇AMap.bundle文件,并勾選“Copy items if needed”復選框,單擊“Add”按鈕,將資源文件添加到工程中。
成功跑起來 。。 。
以橫條廣告為例的廣告插入實現,插屏廣告同理,積分墻廣告待續。
工具/原料
SDK
方法/步驟
注冊下載SDK
創建項目,創建完成項目后、將會得到應用ID、應用密鑰這兩個字符串:
將下載下來的庫添加到本地項目中,選擇選項:
其次添加依賴框架、這步很重要,
所要添加的依賴框架框架:
AdSupport.framework
Security.framework
StoreKit.framework
ImageIO.framework
MapKit.framework
QuartzCore.framework
SystemConfiguration.framework
CoreTelephony.framework
CoreGraphics.framework
添加完成、編譯....
最后代碼實現...顯示橫幅廣告
這里需要做3件事:
1)首先要到AppController.mm 中初始化代理
2)調用initQuMiGuangGao初始化方法
3)顯示廣告橫幅
1 將所要現實的那個.cpp文件改成.mm文件
2 在.mm文件中把頭文件包含進來
解決的辦法:A頁面生成一個mapView,然后大家共用它,而不是每次點擊單元格都創建一個地圖。因為A頁面和B頁面切換速度過快,地圖繪制是很耗時間的,地圖還沒有創建出來就退出,有時候就會導致內存泄露--crash。
第一步:申請Key,用于搜索SDK。
提示:MapKit是不需要Key的,該key僅用于高德的iOS SDK搜索功能。
第二步:初始化MKMapView ,并添加到Subview。同時,進行定位,設置定位模式,在地圖上顯示定位點。
注意:
(1)MapKit中的定位(showUserLocation= YES),在回調中獲取的坐標不用進行坐標偏轉;若使用CLLocationManager方法進行定位,需要進行坐標偏轉(參考附加內容)。
(2)MapKit沒有申請定位權限,需在代碼中申請一下定位權限。
申請方法:在 info.plist中追加NSLocationWhenInUseUsageDescription或NSLocationAlwaysUsageDescription字段。其中:
NSLocationWhenInUseUsageDescription表示應用在前臺的時候可以搜到更新的位置信息。
NSLocationAlwaysUsageDescription表示應用在前臺和后臺(suspend或terminated)都可以獲取到更新的位置數據。
代碼如下:
//申請定位權限
- (void) initLocation
{
if(nil == _locationManager)
{
_locationManager = [[CLLocationManager alloc] init];
}
if([[[UIDevice currentDevice] systemVersion] floatValue] = 8.0)
{
[_locationManager requestAlwaysAuthorization];
}
}
//初始化MapView
- (void) initMapView{
//構造MKMapView
_mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 21, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds))];
_mapView.delegate = self;
_mapView.showsUserLocation = YES;//顯示定位圖標
[_mapView setUserTrackingMode:MKUserTrackingModeFollow];//設置定位模式
//將mapview添加到Subview中
[self.view addSubview:_mapView];
}
第三步:初始化主搜索對象AMapSearchAPI
構造AMapSearchAPI對象,并設置搜索結果語言。(支持英文結果的搜索功能包括:POI搜索、逆地理編碼和地理編碼、輸入提示,能夠滿足基本的搜索功能)
//初始化AMapSearchAPI
- (void)initSearch
{
//構造AMapSearchAPI
_search = [[AMapSearchAPI alloc] initWithSearchKey:APIKey Delegate:self];
_search.language = AMapSearchLanguage_en;//設置語言
}
第四步:構造搜索對象,設置搜索參數,發起查詢,在相應的回調中進行結果展示(如:POI查詢結果以大頭針標注等等)。
以Demo中的POI查詢為例,以選擇的輸入提示語為關鍵字
/* POI 搜索. */
- (void)searchPOIWithKey:(NSString *)key adcode:(NSString *)adcode
{
if (key.length == 0)
{
return;
}
//構造POI搜索對象AMapPlaceSearchRequest
AMapPlaceSearchRequest *place = [[AMapPlaceSearchRequest alloc] init];
//設置關鍵字、
place.keywords = key;
place.requireExtension = YES;//設置成YES,返回信息詳細,較費流量
if (adcode.length 0)
{
place.city = @[adcode];
}
//發起查詢
[_search AMapPlaceSearch:place];
}
//回調中顯示結果
- (void)onPlaceSearchDone:(AMapPlaceSearchRequest *)request response:(AMapPlaceSearchResponse *)respons
{
if (respons.pois.count == 0)
{
return;
}
NSMutableArray *poiAnnotations = [NSMutableArray arrayWithCapacity:respons.pois.count];
[respons.pois enumerateObjectsUsingBlock:^(AMapPOI *obj, NSUInteger idx, BOOL *stop) {
[poiAnnotations addObject:[[POIAnnotation alloc] initWithPOI:obj]];
}];
/* 將結果以annotation的形式加載到地圖上. */
[_mapView addAnnotations:poiAnnotations];
/* 如果只有一個結果,設置其為中心點. */
if (poiAnnotations.count == 1)
{
_mapView.centerCoordinate = [poiAnnotations[0] coordinate];
}
/* 如果有多個結果, 設置地圖使所有的annotation都可見. */
else
{
[_mapView showAnnotations:poiAnnotations animated:NO];
}
}
當前文章:高德地圖ios開發,高德地圖 ios
網站地址:http://m.kartarina.com/article20/dseiejo.html
成都網站建設公司_創新互聯,為您提供App開發、外貿建站、品牌網站建設、企業網站制作、響應式網站、網站內鏈
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯