#import 'FTUploadAddressController.h'
#import 'FTBMKPoiInfo.h'
#import 'FTPoiCell.h'
@interface FTUploadAddressController ()
@property(nonatomic,strong)BMKLocationService *locService;
@property(nonatomic,strong)BMKUserLocation *userLocation;
@property(nonatomic,strong)BMKMapView *mapView;
@property(nonatomic,strong)UITableView *tableview;
@property(nonatomic,strong)BMKGeoCodeSearch *geocodesearch;
@property(nonatomic,strong)UIImageView *loactionView;
@property(nonatomic,strong)NSMutableArray *dataA;
@property(nonatomic,strong)LxButton *poiBackBtn;
@property(nonatomic,assign)CLLocationCoordinate2D selectedCoordinate;
@property(nonatomic,strong)NSString *selectAddress;
@end
@implementation FTUploadAddressController
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self.fd_interactivePopDisabled = YES;
if (!([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedAlways || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse) &&[CLLocationManager authorizationStatus] != kCLAuthorizationStatusNotDetermined){
[self judgeOpenlocation];
}else{
[_mapView viewWillAppear];
_mapView.delegate = self; // 此處記得不用的時候需要置nil,否則影響內(nèi)存的釋放
_locService.delegate = self;
_geocodesearch.delegate = self; // 此處記得不用的時候需要置nil,否則影響內(nèi)存的釋放
_mapView.showsUserLocation = NO;//先關(guān)閉顯示的定位圖層
_mapView.userTrackingMode = 0;
_mapView.showsUserLocation = YES;//顯示定位圖層
[self.locService startUserLocationService];
}
}
-(void)judgeOpenlocation{
UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@'打開[定位服務(wù)]來允許[應(yīng)用名字]確定您的位置' message:@'請在系統(tǒng)設(shè)置中開啟定位服務(wù)(設(shè)置>隱私>定位服務(wù)>應(yīng)用名字>始終)' preferredStyle:UIAlertControllerStyleAlert];
[alertVC addAction:[UIAlertAction actionWithTitle:@'取消' style:UIAlertActionStyleCancel handler:nil]];
[alertVC addAction:[UIAlertAction actionWithTitle:@'去設(shè)置' style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.000000) {
//跳轉(zhuǎn)到定位權(quán)限頁面
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if( [[UIApplication sharedApplication]canOpenURL:url] ) {
[[UIApplication sharedApplication] openURL:url];
}
}else {
//跳轉(zhuǎn)到定位開關(guān)界面
NSURL *url = [NSURL URLWithString:@'prefs:root=LOCATION_SERVICES'];
if( [[UIApplication sharedApplication]canOpenURL:url] ) {
[[UIApplication sharedApplication] openURL:url];
}
}
}]];
[self presentViewController:alertVC animated:YES completion:nil];
}
-(void)viewWillDisappear:(BOOL)animated
{
self.fd_interactivePopDisabled = NO;
[_mapView viewWillDisappear];
_mapView.delegate = nil; // 不用時,置nil
[self.locService stopUserLocationService];
_geocodesearch.delegate = nil; // 不用時,置nil
_locService.delegate = nil;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.title = @'所在位置';
self.locService = [[BMKLocationService alloc]init];
self.geocodesearch = [[BMKGeoCodeSearch alloc]init];
[self setup];
self.navigationItem.leftBarButtonItem =[[UIBarButtonItem alloc]initWithImage:[[UIImage imageNamed:@'return']imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] style:UIBarButtonItemStylePlain target:self action:@selector(backReturn)];
}
-(void)backReturn{
if (self.selectBlock) {
self.selectBlock(self.selectAddress, self.selectedCoordinate);
[self.navigationController popViewControllerAnimated:YES];
}
}
-(void)setup{
[self.view addSubview:self.mapView];
[self.view addSubview:self.tableview];
[self.mapView addSubview:self.loactionView];
[self.mapView addSubview:self.poiBackBtn];
[self.poiBackBtn LX_SetShadowPathWith:[UIColor grayColor] shadowOpacity:0.5 shadowRadius:5 shadowSide:LXShadowPathBottom shadowPathWidth:3];
FTWS(weakSelf);
[self.poiBackBtn addClickBlock:^(UIButton *button) {
[weakSelf.mapView setCenterCoordinate:weakSelf.userLocation.location.coordinate];
}];
}
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
// NSLog(@'didUpdateUserLocation lat %f,long %f',userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);
[_mapView updateLocationData:userLocation];
self.userLocation = userLocation;
[self.mapView setCenterCoordinate:userLocation.location.coordinate];
BMKReverseGeoCodeOption * option = [[BMKReverseGeoCodeOption alloc]init];
option.reverseGeoPoint = userLocation.location.coordinate;
BOOL flag = [_geocodesearch reverseGeoCode:option];
if (flag) {
}
//更新位置之后必須停止定位,
[_locService stopUserLocationService];
}
-(void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{
NSLog(@'地圖拖動');
[UIView animateWithDuration:0.30 animations:^{
self.loactionView.centerY -=8;
} completion:^(BOOL finished) {
self.loactionView.centerY +=8;
}];
CGPoint touchPoint = self.mapView.center;
CLLocationCoordinate2D touchMapCoordinate =
[self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView];//這里touchMapCoordinate就是該點的經(jīng)緯度了
NSLog(@'touching %f,%f',touchMapCoordinate.latitude,touchMapCoordinate.longitude);
//選擇的上傳地址
self.selectedCoordinate = touchMapCoordinate;
BMKReverseGeoCodeOption * option = [[BMKReverseGeoCodeOption alloc]init];
option.reverseGeoPoint = touchMapCoordinate;
BOOL flag = [_geocodesearch reverseGeoCode:option];
if (flag) {
}
}
#pragma mark---獲取反編碼的數(shù)據(jù)---
-(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error
{
BMKAddressComponent *component=[[BMKAddressComponent alloc]init];
component=result.addressDetail;
[self.dataA removeAllObjects];
for (int i =0; i< result.poilist.count;="" i++)="">
BMKPoiInfo *info = result.poiList[i];
FTBMKPoiInfo *ftInfo =[[FTBMKPoiInfo alloc]init];
ftInfo.address = info.address;
ftInfo.seleced = NO;
if (i == 0) {
ftInfo.seleced = YES;
self.selectAddress = ftInfo.address;
}
[self.dataA addObject:ftInfo];
}
[self.tableview reloadData];
}
#pragma mark--- 定位的方法--
- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation
{
[_mapView updateLocationData:userLocation];
// NSLog(@'heading is %@',userLocation.heading);
}
-(BMKMapView *)mapView{
if (!_mapView) {
_mapView =[[BMKMapView alloc]initWithFrame:CGRectMake(0, NAVH, Device_Width, 350)];
_mapView.zoomLevel = 18;
_mapView.minZoomLevel = 3;
_mapView.maxZoomLevel = 21;
// BMKLocationViewDisplayParam *displayParam = [[BMKLocationViewDisplayParam alloc]init];
// displayParam.isRotateAngleValid = true;//跟隨態(tài)旋轉(zhuǎn)角度是否生效
// displayParam.isAccuracyCircleShow = false;//精度圈是否顯示
// displayParam.locationViewOffsetX = 0;//定位偏移量(經(jīng)度)
// displayParam.locationViewOffsetY = 0;//定位偏移量(緯度)
// [_mapView updateLocationViewWithParam:displayParam];
}
return _mapView;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.dataA.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
FTPoiCell *cell =[tableView dequeueReusableCellWithIdentifier:@'cell' forIndexPath:indexPath];
if (!cell) {
cell =[[FTPoiCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@'cell'];
}
FTBMKPoiInfo *info = self.dataA[indexPath.row];
cell.info = info;
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
FTBMKPoiInfo *info = self.dataA[indexPath.row];
self.selectAddress = info.address;
[self.dataA enumerateObjectsUsingBlock:^(FTBMKPoiInfo * obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (obj == info) {
obj.seleced = YES;
}else{
obj.seleced = NO;
}
[self.tableview reloadData];
}];
if (self.selectBlock) {
self.selectBlock(self.selectAddress,self.selectedCoordinate);
[self.navigationController popViewControllerAnimated:YES];
}
}
-(UITableView *)tableview{
if (!_tableview) {
_tableview =[[UITableView alloc]initWithFrame:CGRectMake(0, self.mapView.bottom, Device_Width, Device_Height - self.mapView.bottom) style:UITableViewStylePlain];
_tableview.delegate = self;
_tableview.dataSource = self;
_tableview.showsVerticalScrollIndicator = NO;
_tableview.showsHorizontalScrollIndicator = NO;
_tableview.tableFooterView = [UIView new];
_tableview.rowHeight = 44;
[_tableview registerNib:[UINib nibWithNibName:@'FTPoiCell' bundle:nil] forCellReuseIdentifier:@'cell'];
// [_tableview registerClass:[UITableViewCell class] forCellReuseIdentifier:@'cell'];
}
return _tableview;
}
-(NSMutableArray *)dataA{
if (!_dataA) {
_dataA =[NSMutableArray array];
}
return _dataA;
}
-(UIImageView *)loactionView{
if (!_loactionView) {
_loactionView =[[UIImageView alloc]initWithImage:[UIImage imageNamed:@'ditu_red']];
_loactionView.center = CGPointMake(self.mapView.width/2, self.mapView.height/2);
}
return _loactionView;
}
-(LxButton *)poiBackBtn{
if (!_poiBackBtn) {
_poiBackBtn =[LxButton LXButtonWithTitle:nil titleFont:nil Image:nil backgroundImage:nil backgroundColor:[UIColor whiteColor] titleColor:nil frame:CGRectMake(Device_Width - 75, self.mapView.height - 75, 50, 50)];
[_poiBackBtn setFTCornerdious:25];
UIImageView *imageView =[[UIImageView alloc]initWithImage:[UIImage imageNamed:@'poi_back']];
imageView.center = CGPointMake(25, 25);
[_poiBackBtn addSubview:imageView];
}
return _poiBackBtn;
}
@end