Ios 注释按钮不显示
我是第一次使用Mapkit,我遇到了一个注释按钮不显示的问题 我使用的是xCode 5和iOS7。我也尝试过xCode 4.6 iOS 6.1,但也没有成功 ViewController.hIos 注释按钮不显示,ios,mapkit,Ios,Mapkit,我是第一次使用Mapkit,我遇到了一个注释按钮不显示的问题 我使用的是xCode 5和iOS7。我也尝试过xCode 4.6 iOS 6.1,但也没有成功 ViewController.h #import <UIKit/UIKit.h> #import <MapKit/MapKit.h> #import <MapKit/MKAnnotation.h> @interface ViewController : UIViewController <UITe
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <MapKit/MKAnnotation.h>
@interface ViewController : UIViewController <UITextFieldDelegate> {
IBOutlet UITextField *name;
MKMapView *mapView;
CLLocationManager *locationManager;
NSString *dateString;
NSString *nameString;
//MKPinAnnotationView *pinView;
NSString *pinID;
}
@property(nonatomic, retain) IBOutlet MKMapView *mapView;
@property(nonatomic, retain) UITextField *name;
-(IBAction)addPin;
-(IBAction)addName;
@end
有几点想法:
- 指定
的委托;及self
- 视图控制器应实现该调用
委托
。事实上,需要预先警告的是,物理设备上的定位服务实际上每次都要进行几次迭代,并且精度越来越高(即水平精度
值越小)addPin
中,您正在实例化一个新的位置管理器对象。(顺便说一句,您也没有发布之前的实例。)您应该只使用在viewDidLoad
中创建的实例,而不是实例化一个新实例注释视图是否被调用?我希望您在Interface Builder中将视图控制器指定为地图的委托
dealloc
中发布的类属性(例如位置管理器)。我将通过静态分析器(“产品”菜单上的“分析”)运行此代码,并更正它警告您的任何内容- 指定
的委托;及self
- 视图控制器应实现该调用
委托
。事实上,需要预先警告的是,物理设备上的定位服务实际上每次都要进行几次迭代,并且精度越来越高(即水平精度
值越小)addPin
中,您正在实例化一个新的位置管理器对象。(顺便说一句,您也没有发布之前的实例。)您应该只使用在viewDidLoad
中创建的实例,而不是实例化一个新实例注释视图是否被调用?我希望您在Interface Builder中将视图控制器指定为地图的委托
dealloc
中发布的类属性(例如位置管理器)。我将通过静态分析器(“产品”菜单上的“分析”)运行此代码,并更正它警告您的任何内容NSLog
语句中哪些是你看到的,哪些不是?当你说“注释按钮”时,你的意思是你的注释视图(pin)永远不会出现吗?您能否确认您看到的是和未看到的NSLog语句中的哪些?
#import "ViewController.h"
#import "PinDrop.h"
#import <MapKit/MapKit.h>
#import <MapKit/MKAnnotation.h>
@interface ViewController ()
@end
@implementation ViewController
@synthesize mapView;
@dynamic name;
- (void)viewDidLoad
{
name.delegate = self;
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
mapView.showsUserLocation = YES;
[mapView setMapType:MKMapTypeStandard];
[mapView setZoomEnabled:YES];
[mapView setScrollEnabled:YES];
//Get Location
locationManager = [[CLLocationManager alloc] init];
locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
NSLog(@"%@", [self deviceLocation]);
//Make Pin
MKCoordinateRegion region = { { 0.0, 0.0 }, { 0.0, 0.0 } };
region.center.latitude = locationManager.location.coordinate.latitude;
region.center.longitude = locationManager.location.coordinate.longitude;
region.span.longitudeDelta = 0.005f;
region.span.longitudeDelta = 0.005f;
[mapView setRegion:region animated:YES];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(IBAction)addPin {
[self getDateTime];
//Get Location
locationManager = [[CLLocationManager alloc] init];
locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
NSLog(@"%@", [self deviceLocation]);
//Make Pin
MKCoordinateRegion region = { { 0.0, 0.0 }, { 0.0, 0.0 } };
region.center.latitude = locationManager.location.coordinate.latitude;
region.center.longitude = locationManager.location.coordinate.longitude;
region.span.longitudeDelta = 0.005f;
region.span.longitudeDelta = 0.005f;
[mapView setRegion:region animated:YES];
//Pin Info
PinDrop *ann = [[PinDrop alloc] init];
nameString = name.text;
NSLog(@"Name: %@", nameString);
ann.title = [NSString stringWithFormat:@"Title: %@", nameString];
ann.subtitle = [NSString stringWithFormat:@"Date: %@", dateString];
ann.coordinate = region.center;
[mapView addAnnotation:ann];
//Clear name and stuff
name.text = @"";
}
- (NSString *)deviceLocation {
return [NSString stringWithFormat:@"latitude: %f longitude: %f", locationManager.location.coordinate.latitude, locationManager.location.coordinate.longitude];
}
-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:
(id <MKAnnotation>)annotation {
MKPinAnnotationView *pinView = nil;
if(annotation != mapView.userLocation)
{
static NSString *defaultPinID = @"com.invasivecode.pin";
pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
if ( pinView == nil ) pinView = [[[MKPinAnnotationView alloc]
initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];
pinView.pinColor = MKPinAnnotationColorGreen;
pinView.canShowCallout = YES;
pinView.animatesDrop = YES;
}
else {
[mapView.userLocation setTitle:@"I am here"];
NSLog(@"Was Else");
}
return pinView;
}
- (void)dealloc
{
[mapView release];
[super dealloc];
}
@end
#import <Foundation/Foundation.h>
#import <MapKit/MKAnnotation.h>
@interface PinDrop : NSObject <MKAnnotation> {
CLLocationCoordinate2D coordinate;
NSString *title;
NSString *subtitle;
}
@property(nonatomic, assign) CLLocationCoordinate2D coordinate;
@property(nonatomic, copy) NSString *title;
@property(nonatomic, copy) NSString *subtitle;
@end
#import "PinDrop.h"
@implementation PinDrop
@synthesize coordinate, title, subtitle;
@end