Am fugit într-o problemă cu vederi de adnotare în MapKit pe iPhone. Am reușit să atragă opinii personalizate de adnotare pe hartă - nici o problema acolo. chiar am reușit să le redesena după tragerea sau zoom. Cu toate acestea, există cazuri în care retrasarea nu funcționează: un exemplu ar fi zoom dublu-robinet.
Am atașați un cod în cazul în care am trage cateva dreptunghiuri la anumite locații de pe hartă, iar când am zoom, folosind un gest cu două degete, totul merge bine (de exemplu, dreptunghiurile sunt redesenat). Cu toate acestea, atunci când am atingeți de două ori, dreptunghiurile dispar. Ce e mai ciudat este faptul că toate metodele apelate în ordinea în care acestea ar trebui, și în cele din urmă, chiar drawRect devine numit - dar dreptunghiurile nu sunt desenate.
Deci, aici este codul, vă rugăm să încercați pentru tine - cu două degete zoom lucrări, dar apăsați de două ori zoom-ul nu:
PlaygroundViewController.h
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface PlaygroundViewController : UIViewController <MKMapViewDelegate>{
MKMapView *mapView_;
NSMutableDictionary* myViews_;
}
@end
PlaygroundViewController.m
#import PlaygroundViewController.h
#import Territory.h
#import TerritoryView.h
@implementation PlaygroundViewController
- (void)viewDidLoad {
[super viewDidLoad];
mapView_=[[MKMapView alloc] initWithFrame:self.view.bounds];
[self.view insertSubview:mapView_ atIndex:0];
mapView_.delegate = self;
[mapView_ setMapType:MKMapTypeStandard];
[mapView_ setZoomEnabled:YES];
[mapView_ setScrollEnabled:YES];
myViews_ = [[NSMutableDictionary alloc] init];
for (int i = 0; i < 10; i++ ) {
Territory *territory;
territory = [[[Territory alloc] init] autorelease];
territory.latitude_ = 40 + i;
territory.longitude_ = -122 + i;
[mapView_ addAnnotation:territory];
}
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
MKAnnotationView* territoryView = (MKAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@Territory];
if (!territoryView){
territoryView = [[[TerritoryView alloc] initWithAnnotation:annotation reuseIdentifier:@Territory] autorelease];
Territory* currentTerritory = (Territory*) annotation;
[myViews_ setObject:territoryView forKey:currentTerritory.territoryID_];
}
else{
territoryView.annotation = annotation;
}
return territoryView;
}
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
for (NSObject* key in [myViews_ allKeys]) {
TerritoryView* territoryView = [myViews_ objectForKey:key];
[territoryView initRedraw];
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)dealloc {
[super dealloc];
}
Territory.h
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface Territory : NSObject <MKAnnotation> {
float latitude_;
float longitude_;
NSString* territoryID_;
}
@property (nonatomic) float latitude_;
@property (nonatomic) float longitude_;
@property (nonatomic, retain) NSString* territoryID_;
@end
Territory.m
#import Territory.h
@implementation Territory
@synthesize latitude_;
@synthesize longitude_;
@synthesize territoryID_;
- (CLLocationCoordinate2D)coordinate {
CLLocationCoordinate2D coord_ = {self.latitude_, self.longitude_};
return coord_;
}
-(id) init {
if (self = [super init]) {
self.territoryID_ = [NSString stringWithFormat:@%p, self];
}
return self;
}
@end
TerritoryView.h
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface TerritoryView : MKAnnotationView {
}
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier;
- (void)initRedraw;
@end
TerritoryView.m
#import TerritoryView.h
@implementation TerritoryView
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier {
if ([super initWithAnnotation:annotation reuseIdentifier:@Territory]) {
self.initRedraw;
}
return self;
}
- (void)initRedraw {
self.frame = CGRectMake(0,0,40,40);
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect {
NSLog(@in draw rect);
}
@end
Orice ajutor este apreciat. Iată proiectul arhivat: link -













