9

カスタム AnnotationView が新しい座標で更新されます。しかし、問題は、ズームや移動など、MKMapView を使用したいくつかの操作の後にのみ視覚的に更新されることです。マップ上の視覚的な位置を手動で更新するにはどうすればよいですか?

PS。地域を現在の地図の地域に変更しようとしました。しかし、それはズームを変更します。それは奇妙です。

[mapView setRegion:[mapView region] animated:YES];
4

7 に答える 7

13

MKMapViewを介して注釈の座標プロパティを監視しますKVOKVO適切なプロトコルを観察し、アノテーションwillChangeValueForKey:を送信し、座標を更新する前後didChangeValueForKey:のキーパスを送信するだけです。@"coordinate"

同様にtitlesubtitleも によって観察されMKMapViewます。したがって、それらを更新して、コールアウトの値を自動的に変更したい場合は、同じように呼び出しwillChangeValueForKey:て、didChangeValueForKey:

于 2010-07-30T13:26:45.230 に答える
9

スレッドから注釈を追加しても機能しません。私は同じ問題を抱えていて、注釈を追加していた関数を次のようにラップするだけでうまくいきました

[self performSelectorOnMainThread:@selector(addCameraIconOnMain:) obj waitUntilDone:true];  

-(void) addCameraIconOnMain:(myobjecttype*)obj
{
    // this isnt the entire function, customize for your own purpose.....
    [mapView addAnnotation:annotation];
}
于 2010-11-19T01:12:47.487 に答える
2

ここでの答えは、MapView や Annotation を更新しないことです!

MKAnnotation の座標プロパティには KVO があります。マップ上に表示したいオブジェクトの id ポインターを mapview に追加し、座標プロパティを新しい場所で更新するだけで、MKMapView が残りの作業を行います。

無料ランチに限りなく近い!

于 2010-09-07T20:44:21.410 に答える
0

このエラーは、少なくとも 0.5 遅延の非同期呼び出しで解決しました。

例えば:[self performSelector:@selector(redrawPins) withObject:nil afterDelay:0.5];

「redrawPins」は、ピンを追加および削除する関数です。

于 2011-08-01T19:21:35.477 に答える
-2

注釈を削除してから再度追加できない理由はありません。仮の移動であっても、マップ全体を移動するよりもおそらくはるかに効率的です。

于 2010-07-30T13:29:29.837 に答える
-7

MapAnnotation へのインターフェースは次のとおりです。

//  CSMapAnnotation.h
//  mapLines
//  Created by Craig on 5/15/09.
//  Copyright 2009 Craig Spitzkoff. All rights reserved.

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>    

// types of annotations for which we will provide annotation views. 
typedef enum {
    MapAnnotationTypeStart = 0,
    MapAnnotationTypeEnd   = 1,
    MapAnnotationTypeImage = 2
} MapAnnotationType;

@interface MapAnnotation : NSObject <MKAnnotation>
{
    CLLocationCoordinate2D _coordinate;
    MapAnnotationType      _annotationType;
    NSString*              _title;
    NSString*              _subtitle;
    NSString*              _userData;
    NSString*              speed;
    NSString*              identifier;
}

@property (nonatomic, retain) NSString *speed;
@property (nonatomic, retain) NSString *identifier;

-(id) initWithCoordinate:(CLLocationCoordinate2D)coordinate 
    annotationType: (MapAnnotationType) annotationType
    title: (NSString*) title
    subtitle: (NSString*) subtitle
    speed: (NSString *) speed
    identifier: (NSString *) identifier;    
-(id) setWithCoordinate: (CLLocationCoordinate2D) coordinate 
    annotationType: (MapAnnotationType) annotationType
    title: (NSString*) title
    subtitle: (NSString*) subtitle
    speed: (NSString*) speed
    identifier: (NSString*) identifier;    
@property MapAnnotationType annotationType;
@property (nonatomic, retain) NSString* userData;    
@end    

そして、ここに実装があります:

//  CSMapAnnotation.m
//  mapLines
//  Created by Craig on 5/15/09.
//  Copyright 2009 Craig Spitzkoff. All rights reserved.

#import "MapAnnotation.h"    

@implementation MapAnnotation

@synthesize coordinate     = _coordinate;
@synthesize annotationType = _annotationType;
@synthesize userData       = _userData;
@synthesize speed;
@synthesize identifier;

-(id) initWithCoordinate:(CLLocationCoordinate2D)coordinate 
    annotationType: (MapAnnotationType) annotationType
    title: (NSString*)title
    subtitle: (NSString*) subtitle
    speed: (NSString *) speedz
    identifier: (NSString *) identifierz
{
    self = [super init];
    _coordinate = coordinate;
    _title  = [title retain];
    _subtitle = [subtitle retain];
    _annotationType = annotationType;
    speed = speedz;
    identifier = identifierz;
    return self;
}    
-(id) setWithCoordinate:(CLLocationCoordinate2D)coordinate 
    annotationType: (MapAnnotationType) annotationType
    title: (NSString*) title
    subtitle: (NSString*) subtitle
    speed: (NSString*) speedz
    identifier: (NSString*) identifierz
{
    _coordinate = coordinate;
    _title = [title retain];
    _subtitle = [subtitle retain];
    _annotationType = annotationType;
    speed = speedz;
    identifier = identifierz;       
    return self;
}    
-(NSString*) title
{
    return _title;
}    
-(NSString*) subtitle
{
    return _subtitle;
}    
-(void) dealloc
{
    [_title    release];
    [_userData release];
    [super dealloc];
}    
@end
于 2009-10-10T13:56:37.767 に答える