Ek Açıklama Görüntüleme çift vurarak zum üzerinde kaybolan ile Sayı

oy
1

Ben iPhone'da MapKit içinde açıklama manzaralı bir sorunla karşılaştık ettik. Haritaya özel açıklama görüşlerini çizmek yönetmek - sorun yoktur. Hatta sürükleyerek veya yakınlaştırma sonra bunları yeniden çizmeye yönetmek. örnek çift dokunun yakınlaştırma olacaktır: Ancak, yeniden çizilmesi çalışmıyor durumlar vardır.

Haritaya spesifik yerlerde birkaç dikdörtgenler çizmek nerede bazı kod eklemek ve bir iki parmak hareketini kullanarak zoom yaparken (dikdörtgenler yeniden uyarlanır yani), her şey iyi çalışır. Ben iki defa hafifçe Ancak, dikdörtgenler kaybolur. Ne bile yabancıydı tüm yöntemler için onlar gerektiğini de denilen olsun yani, ve sonunda, hatta drawRect çağrılan - ama dikdörtgenler çizilmiş değildir.

: İki parmak eserler yakınlaştırma ancak çift dokunun yakınlaştırma değil - Yani burada kod, kendiniz deneyin

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

Herhangi bir yardım takdir edilmektedir. İşte sıkıştırılmış bir proje: bağlantı

Oluştur 03/10/2009 saat 06:32
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

böylece sıfıra ayarlanarak, çerçevenin kökenli üst biriminin koordinat sisteminde olduğu unutmayın muhtemelen ekranı kapalı koyuyor. Ben hiç hiç çalışır nedeni ancak bunun başarısız nereye olanlarda, çoğu durumda senin arkandan reset gidiyor olduğunu sanıyorum.

değiştirin: self.frame = CGRectMake (0,0,40,40);

ile: self.frame = CGRectMake (self.frame.origin.x, self.frame.origin.y, 40,40);

Cevap 28/02/2010 saat 00:10
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more