1

これは私の実装ファイルです:

#import "mapViewController.h"
@interface mapViewController ()
@end
@implementation mapViewController
@synthesize mapView,source,dest,latdest,latsource,longdest,longsource;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self)
    {
        dest=@"delhi";
    // Custom initialization
    }
    return self;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    CLGeocoder *geocoder1 = [[CLGeocoder alloc] init];
    [geocoder1 geocodeAddressString:source
                 completionHandler:^(NSArray* placemarks, NSError* error)
    {
        for (CLPlacemark* aPlacemark in placemarks)
        {
            CLLocationCoordinate2D coordinate;
            coordinate.latitude = aPlacemark.location.coordinate.latitude;
            latsource=&coordinate.latitude;
            coordinate.longitude = aPlacemark.location.coordinate.longitude;
            longsource=&coordinate.longitude;
            MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
            [annotation setCoordinate:(coordinate)];
            [annotation setTitle:source];
            annotation.subtitle = @"I'm here!!!";
            [self.mapView addAnnotation:annotation];
        }
    }];
}
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    MKCoordinateRegion region =MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 800, 800);
    [self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES];
    MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
    point.coordinate = userLocation.coordinate;
    point.title = @"Where am I?";
    point.subtitle = @"I'm here!!!";    
    [self.mapView addAnnotation:point];
    [self.view addSubview:self.mapView];
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end

これは私のヘッダーファイルです:

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface mapViewController : UIViewController <MKMapViewDelegate>
@property (strong, nonatomic) IBOutlet MKMapView *mapView;
@property(strong,nonatomic) NSString *source,*dest;
@property(nonatomic) CLLocationDegrees *latsource,*longsource;
@property(nonatomic) CLLocationDegrees *latdest,*longdest;
@end

最初に、didUpdateUserLocation メソッドが呼び出されない理由を知りたいです。また、座標が latdest と longdest に格納されている目的地を追加するコードも知りたいです。どちらも、値を持つ静的変数「dest」から値を取得します。私の最終的な目的は、マップ上のソース座標 (latsource、longsource) から目的地座標 (latest、longdest) までのルートをトレースすることです。私はiOS開発に慣れていないので、初心者の間違いを犯した可能性があります。

4

1 に答える 1

0

didUpdateUserLocation設定しないとメソッドは呼び出されませんmapView.delegate = self;

デリゲート メソッドを持つクラスを使用していて、それらを使用したい場合は、毎回そのデリゲート = セルフを設定する必要があります。

デリゲートと同じ名前を使用しないでください: mapView

ヘッダー内:

@property (weak, nonatomic) IBOutlet MKMapView *myMapView;

IBOutlet MKMapView *myMapViewに接続していることを確認してくださいIterfaceBuilder

実装ファイル:

@synthesize myMapView;

あなたの- (void)viewDidLoad

myMapView.delegate = self;

すべてを修正する必要がありself.mapViewますmyMapView

あなたは本当に大きな間違いを犯しました:

使用するIBOutlet場合は、追加してInterfaceBuilder接続する必要があります。または、コードからすべてを作成できます。

@property (weak, nonatomic) MKMapView *myMapView;
myMapView = [[MKMapView alloc] initWithFrame:CGRectMake(0,0,320,480)];

次に、画面を追加します

 [self.view addSubview:myMapView];
于 2013-09-21T13:49:00.933 に答える