iOS大头针(自定义大头针,定位,画线)


//************************************自定义大头针 .h文件


#import <Foundation/Foundation.h>

#import <MapKit/MapKit.h>


@interface MyAnn : NSObject <MKAnnotation>


@property (nonatomic,assign)CLLocationCoordinate2D coordinate;

@property (nonatomic,copy)NSString *name;

@property (nonatomic,copy)NSString *address;


-(id)initWithTitle:(NSString *)title withSubTitle:(NSString*)subTitle withCoordinate:(CLLocationCoordinate2D)coordinate;


@end


//************************************自定义大头针 .m文件


#import "MyAnn.h"


@implementation MyAnn


-(id)initWithTitle:(NSString *)title withSubTitle:(NSString *)subTitle withCoordinate:(CLLocationCoordinate2D)coordinate

{

    self=[super init];

    if (self)

    {

        self.name=title;

        self.address=subTitle;

        self.coordinate=coordinate;

    }

    return self;

    

}


-(NSString*)title

{

    return self.name;

}


-(NSString*)subTitle

{

    return self.address;

}


@end


//************************************MapViewController.h


#import <UIKit/UIKit.h>

#import <MapKit/MapKit.h>

@interface MapViewController : UIViewController<MKMapViewDelegate>

{

    MKMapView *map_view;

}


@end


//************************************MapViewController.m



#import "MapViewController.h"

#import "MyAnn.h"

@implementation MapViewController


- (void)viewDidLoad

{

    [super viewDidLoad];

    //创建对象

    map_view=[[MKMapView alloc] initWithFrame:self.view.frame];

    map_view.mapType=MKMapTypeStandard;

    map_view.showsUserLocation=YES;

    map_view.delegate=self;

    map_view.userLocation.title=@"我的位置";

    map_view.userLocation.subtitle=@"娃哈哈";

    [self.view addSubview:map_view];

    

    //定位按钮

    UIButton *button=[UIButton buttonWithType:UIButtonTypeCustom];

    button.frame=CGRectMake(0, 20, 60, 60);

    button.backgroundColor=[UIColor redColor];

    [button setTitle:@"定位" forState:UIControlStateNormal];

    [button addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:button];

    

    //在地图上画图

    //画多变形   曲线 

    CLLocationCoordinate2D points[4];

    points[0] = CLLocationCoordinate2DMake(41.000512, -109.050116);

    points[1] = CLLocationCoordinate2DMake(41.002371, -102.052066);

    points[2] = CLLocationCoordinate2DMake(36.993076, -102.041981);

    points[3] = CLLocationCoordinate2DMake(36.99892, -109.045267);

    

   // MKPolygon *gon=[MKPolygon polygonWithCoordinates:points count:4];

   // [map_view addOverlay:gon];

    

    MKCircle *circle=[MKCircle circleWithCenterCoordinate:points[0] radius:5000];

    [map_view addOverlay:circle];

    

    

    MKPolyline *line=[MKPolyline polylineWithCoordinates:points count:4];

    [map_view addOverlay:line];

    

}


-(void)btnClick:(UIButton *)button;

{

    map_view.centerCoordinate=map_view.userLocation.coordinate;

    

    //创建一个以用户为中心的区域  附近多少米

    MKCoordinateRegion region=MKCoordinateRegionMakeWithDistance(map_view.userLocation.coordinate, 5000, 5000);

    [map_view setRegion:region animated:YES];

    

    MyAnn *myAnn=[[MyAnn alloc] initWithTitle:@"大头针" withSubTitle:@"小毛驴儿" withCoordinate:map_view.userLocation.coordinate];

    [map_view addAnnotation:myAnn];

    

}



//将用户位置作为屏幕中心  此方法是代理方法 自动调用

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation

{

    map_view.centerCoordinate=userLocation.coordinate;

}


-(MKAnnotationView*)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation

{

    

    static NSString *identifer=@"AnnotationView";

    

    MKPinAnnotationView  *annView=(MKPinAnnotationView*)[map_view dequeueReusableAnnotationViewWithIdentifier:identifer];

    

    if (annView==nil)

    {

        annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifer];

    }

    //判断是否是用户标记点

    if (mapView.userLocation==annotation)

    {

        return nil;

    }

    //设置打头针的颜色

   annView.pinColor=MKPinAnnotationColorPurple;

    //设置能够显示弹出气泡

    annView.canShowCallout=YES;

    //添加右边的试图

    UIButton *button=[UIButton buttonWithType:UIButtonTypeDetailDisclosure];

    annView.rightCalloutAccessoryView=button;

    

    //视图

    UIImageView *imageView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)];

    imageView.image=[UIImage imageNamed:@"b.jpg"];

    annView.leftCalloutAccessoryView=imageView;

    return annView;

    

}


//点击详情  调用的方法

-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control

{

    //调用浏览器打开浏览器

    [[UIApplication  sharedApplication] openURL:[NSURL URLWithString:@"http://www.baidu.com"]];

}



//  renderer   描绘 装饰品

-(MKOverlayRenderer*)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay

{

    //判断覆盖的类型

    if ([overlay isKindOfClass:[MKPolygon class]])

    {

        //创建多边形渲染

        MKPolygonRenderer *aRenderer=[[MKPolygonRenderer alloc] initWithPolygon:(MKPolygon*)overlay];

        //多边形的填充颜色

        aRenderer.fillColor=[UIColor redColor];

        //边框的颜色

        aRenderer.strokeColor=[UIColor blueColor];

        //线的宽度

        aRenderer.lineWidth=4;

        return aRenderer;

        

    }

    

    

    else if ([overlay isKindOfClass:[MKPolyline class]])

    {

        MKPolylineRenderer *lineRenderer=[[MKPolylineRenderer alloc] initWithPolyline:(MKPolyline*)overlay];

        

        lineRenderer.strokeColor=[UIColor redColor];

        

        lineRenderer.lineWidth=3;

        

        return lineRenderer;

        

    }

    

    

    else if([overlay isKindOfClass:[MKCircle class]])

    {

        

        MKCircleRenderer *circleRenderer=[[MKCircleRenderer alloc] initWithOverlay:(MKCircle*)overlay];

        circleRenderer.strokeColor=[UIColor redColor];

        circleRenderer.fillColor=[UIColor purpleColor];

        circleRenderer.lineWidth=3;

        return circleRenderer;

        

    }

        

    return nil;

}






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值