iOS百度地图反编码个人见解
类似于微信中的发送位置拖拽从新定位以及反编码列表附近的位置。
百度地图拖拽更新位置.gif
思路就是将一个UIImageView 固定在地图中间每次更新位置给UIImageView添加劢画即可。
代码如下
#import "FTBasicControl ler.h"typedef void (^SelectBlock) (NSString *address,CLLocationCoordinate2D select);@interface FTUploadAddressControl ler : FTBasicControl ler
@property(nonatomic, copy)SelectBlock selectBlock;
@end
#import "FTUploadAddressControl ler.h"
#import "FTBMKPoiInfo.h"
#import "FTPoiCel l.h"
@interface FTUploadAddressControl ler
()<BMKMapViewDelegate,BMKLocationServiceDelegate,UITableViewDelegate,UITableViewDataSource,BMKGeoCodeSearchDelegate>
@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 FTUploadAddressControl ler
-(void)viewWi l lAppear:(BOOL)animated{
[superviewWi l lAppear:animated];self.fd_interactivePopDisabled =YES;if (!([CLLocationManager authorizationStatus] ==kCLAuthorizationStatusAuthorizedAlways | | [CLLocationManager authorizationStatus] ==
kCLAuthorizationStatusAuthorizedWhenInUse)&&[CLLocationManagerauthorizationStatus] != kCLAuthorizationStatusNotDetermined){
[self judgeOpenlocation] ;
}else{
[_mapView viewWi l lAppear] ;
_mapView.delegate = self; //此处记得丌用的时候需要置ni l 否则影响内存的释放
_locService.delegate = self;
_geocodesearch.delegate= self;//此处记得丌用的时候需要置ni l 否则影响内存的释放
_mapView.showsUserLocation= NO;//先关闭显示的定位图层
_mapView.userTrackingMode = 0;
_mapView.showsUserLocation=YES;//显示定位图层
[self. locService startUserLocationService] ;
}
}
-(void)judgeOpenlocation{
UIAlertControl ler *alertVC= [UIAlertControl ler alertControl lerWithTitle:@"打开[定位服务]来允许[应用名字]确定您的位置"message:@"请在系统设置中开启定位服务(设置>隐私>定位服务>应用名字>始终) "preferredStyle:UIAlertControl lerStyleAlert];
[alertVC addAction:[UIAlertActionactionWithTitle:@"取消"style:UIAlertActionStyleCancel handler:ni l] ];
[alertVC addAction:[UIAlertActionactionWithTitle:@"去设置"style:UIAlertActionStyleDefault handler:^(UIAlertAction *_Nonnul l action) {if ([ [[UIDevice currentDevice] systemVersion] floatValue] >= 10.000000) {
//跳转到定位权限页面
NSURL *url = [NSURL URLWithString:UIAppl icationOpenSettingsURLString];if( [[UIAppl ication sharedAppl ication]canOpenURL:url] ) {
[[UIAppl ication sharedAppl ication]openURL:url] ;
}
}else{
//跳转到定位开关界面
NSURL *url = [NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"];if( [[UIAppl ication sharedAppl ication]canOpenURL:url] ) {
[[UIAppl ication sharedAppl ication]openURL:url] ;
}
}
}] ];
[self presentViewControl ler:alertVC animated:YES completion:ni l];
}
-(void)viewWi l lDisappear:(BOOL)animated
{self.fd_interactivePopDisabled = NO;
[_mapViewviewWi l lDisappear];
_mapView.delegate = ni l; //丌用时置ni l
[self. locService stopUserLocationService];
_geocodesearch.delegate = ni l ;//丌用时置ni l
_locService.delegate = ni l;
}
- (void)viewDid Load{
[superviewDidLoad];
//Doanyadditional setup after loading the view.self.title =@"所在位置";self. locService = [[BMKLocationService al loc] init] ;self.geocodesearch= [ [BMKGeoCodeSearchal loc] init];
[self setup];self.navigationItem. leftBarButtonItem=[[UIBarButtonItemal loc] initWithImage:[ [UIImageimageNamed:@"return"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] style:UIBarButtonItemStylePlain target:self action:@selector(backReturn)];}
-(void)backReturn{if (self.selectBlock) {self.selectBlock(self.selectAddress, self.selectedCoordinate);
[self.navigationControl ler popViewControl lerAnimated:YES];
}
}
-(void)setup{
[self.viewaddSubview:self.mapView] ;
[self.viewaddSubview:self.tableview];
[self.mapViewaddSubview:self. loactionView];
[self.mapViewaddSubview:self.poiBackBtn] ;
[self.poiBackBtn LX_SetShadowPathWith:[UIColorgrayColor] shadowOpacity:0.5shadowRadius:5 shadowSide:LXShadowPathBottom shadowPathWidth:3];
FTWS(weakSelf);
[self.poiBackBtnaddCl ickBlock:^(UIButton *button) {
[weakSelf.mapViewsetCenterCoordinate:weakSelf.userLocation. location.coordinate];
}] ;
}
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
// NSLog(@"didUpdateUserLocationlat%f, long%f",userLocation. location.coordinate. latitude,userLocation. location.coordinate. longitude);
[_mapView updateLocationData:userLocation];self.userLocation = userLocation;
[self.mapViewsetCenterCoordinate:userLocation. location.coordinate];
BMKReverseGeoCodeOption *option = [ [BMKReverseGeoCodeOption al loc] init] ;option.reverseGeoPoint= userLocation. location.coordinate;
BOOLflag = [_geocodesearch reverseGeoCode:option];if (flag) {
}
//更新位置之后必须停止定位
[_locService stopUserLocationService];
}
-(void)mapView:(BMKMapView*)mapViewregionDidChangeAnimated:(BOOL)animated{
NSLog(@"地图拖劢");
[UIViewanimateWithDuration:0.30animations:^{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就是该点的经纬度了
NSLog(@"touching%f,%f",touchMapCoordinate. latitude,touchMapCoordinate. longitude);
//选择的上传地址self.selectedCoordinate = touchMapCoordinate;
BMKReverseGeoCodeOption *option = [ [BMKReverseGeoCodeOption al loc] init] ;option.reverseGeoPoint= touchMapCoordinate;
BOOLflag = [_geocodesearch reverseGeoCode:option];if (flag) {
}
}
#pragma mark---获取反编码的数据---
-(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcherresult:(BMKReverseGeoCodeResult *)resulterrorCode:(BMKSearchErrorCode)error{
BMKAddressComponent *component=[ [BMKAddressComponental loc]init] ;component=result.addressDetai l;
[self.dataA removeAl lObjects];for (int i =0; i< result.poiList.count; i++) {
BMKPoiInfo*info = result.poiList[i];
FTBMKPoiInfo*ftInfo=[[FTBMKPoiInfo al loc]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=[ [BMKMapViewal loc] initWithFrame:CGRectMake(0,NAVH,Device_Width, 350)] ;
_mapView.zoomLevel = 18;
_mapView.minZoomLevel = 3;
_mapView.maxZoomLevel = 21;
// BMKLocationViewDisplayParam*displayParam=
[ [BMKLocationViewDisplayParam al loc] init] ;
// displayParam. isRotateAngleVal id = true;//跟随态旋转角度是否生效// displayParam. isAccuracyCircleShow= false;//精度圈是否显示// displayParam. locationViewOffsetX= 0;//定位偏移量(经度)
// displayParam. locationViewOffsetY= 0;//定位偏移量纬度
// [_mapView updateLocationViewWithParam:displayParam];
}return_mapView;
}
-(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section{returnself.dataA.count;
}
-(UITableViewCel l *)tableView:(UITableView*)tableViewcel lForRowAtIndexPath:(NSIndexPath *)indexPath{
FTPoiCel l *cel l =[tableViewdequeueReusableCel lWithIdentifier:@"cel l "forIndexPath: indexPath];if (!cel l) {cel l =[ [FTPoiCel l al loc] initWithStyle:UITableViewCel lStyleDefaultreuseIdentifier:@"cel l "];
}
FTBMKPoiInfo*info = self.dataA[indexPath.row] ;cel l. info= info;returncel l ;
}
-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath
*)indexPath{
[tableView deselectRowAtIndexPath: indexPath animated:YES] ;
FTBMKPoiInfo*info = self.dataA[indexPath.row] ;self.selectAddress = info.address;
[self.dataAenumerateObjectsUsingBlock:^(FTBMKPoiInfo*obj,NSUInteger idx,BOOL *_Nonnul l stop) {i f (o bj == info) {obj.seleced =YES;
}else{obj.seleced =NO;
}
[self.tableviewreloadData] ;
}] ;if (self.selectBlock) {self.selectBlock(self.selectAddress,self.selectedCoordinate);
[self.navigationControl ler popViewControl lerAnimated:YES];
}
}
-(UITableView*)tableview{if (!_tableview) {
_tableview=[ [UITableViewal loc]initWithFrame:CGRectMake(0,self.mapView.bottom,Device_Width,Device_Height - self.mapView.bottom)style:UITableViewStylePlain];
_tableview.delegate = self;
_tableview.dataSource = self;
_tableview.showsVerticalScrol lIndicator= NO;
_tableview.showsHorizontalScrol lIndicator= NO;
_tableview.tableFooterView= [UIView new];
_tableview.rowHeight= 44;
[_tableview registerNib: [UINib nibWithNibName:@"FTPoiCel l "bundle:ni l]forCel lReuseIdentifier:@"cel l "] ;
// [_tableview registerClass:[UITableViewCel l class] forCel lReuseIdentifier:@"cel l "];}return_tableview;
}
-(NSMutableArray*)dataA{i f (!_d a ta A) {
_dataA=[NSMutableArrayarray];
}return_dataA;
}
-(UIImageView*)loactionView{if (!_loactionView) {
_loactionView=[[UIImageViewal loc] initWithImage: [UIImageimageNamed:@"ditu_red"]] ;
_loactionView.center = CGPointMake(self.mapView.width/2,self.mapView.height/2);
}return_loactionView;
}
-(LxButton *)poiBackBtn{if (!_poiBackBtn) {
_poiBackBtn =[LxButton LXButtonWithTitle:ni l titleFont:ni l Image:ni lbackgroundImage:ni l backgroundColor:[UIColorwhiteColor] titleColor:ni lframe:CGRectMake(Device_Width - 75, self.mapView.height - 75, 50, 50)];
[_poiBackBtn setFTCornerdious:25] ;
UIImageView*imageView=[[UIImageViewal loc] initWithImage:[UIImageimageNamed:@"poi_back"] ];imageView.center = CGPointMake(25,25);
[_poiBackBtnaddSubview: imageView] ;
}return_poiBackBtn;
}
@end
Digital-VM商家目前也在凑热闹的发布六月份的活动,他们家的机房蛮多的有提供8个数据中心,包括日本、洛杉矶、新加坡等。这次六月份的促销活动全场VPS主机六折优惠。Digital-VM商家还是有一点点特点的,有提供1Gbps和10Gbps带宽的VPS主机,如果有需要大带宽的VPS主机可以看看。第一、商家优惠码优惠码:June40全场主机六折优惠,不过仅可以月付、季付。第二、商家VPS主机套餐1...
Friendhosting商家在前面的篇幅中也又陆续介绍到,是一家保加利亚主机商,主要提供销售VPS和独立服务器出租业务,数据中心分布在:荷兰、保加利亚、立陶宛、捷克、乌克兰和美国洛杉矶等。这不近期黑色星期五活动,商家也有推出了黑五优惠,VPS全场一次性45折,虚拟主机4折,全球多机房可选,老用户续费可获9折加送1个月使用时长,VDS折后最低仅€14.53/年,有需要的可以看看。Friendhos...
rangcloud怎么样?rangcloud是去年年初开办的国人商家,RangCloud是一家以销售NAT起步,后续逐渐开始拓展到VPS及云主机业务,目前有中国香港、美国西雅图、韩国NAT、广州移动、江门移动、镇江BGP、山东联通、山东BGP等机房。目前,RangCloud提供香港CN2线路云服务器,电信走CN2、联通移动直连,云主机采用PCle固态硬盘,19.8元/月起,支持建站使用;美国高防云...