1

私はiOS用のgooglemapsdkを初めて使用します。ビューにマップを追加しました。このmapViewに入ると、自分の位置を特定したいので、次のように記述しました。

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                        longitude:151.2086
                                                             zoom:6];
_iMapView = [GMSMapView mapWithFrame:CGRectMake(0, 0, 320, 480) camera:camera];
self.iMapView.myLocationEnabled = YES;
self.iMapView.delegate=self;

GMSMarkerOptions *annotation = [[GMSMarkerOptions alloc] init];
annotation.position = CLLocationCoordinate2DMake(-33.8683, 151.2086);
annotation.title = @"Sydney";
annotation.snippet = @"Australia";
//annotation.infoWindowAnchor=CGPointMake(0.5, 0.5);
[self.iMapView addMarkerWithOptions:annotation];

//[self.view  addSubview:self.iMapView];
self.view=self.iMapView;

しかし、座標(33.8683,151.2086)にmapViewビューがあり、mapViewをワイポジションに移動したいだけです。また、グーグルにはコールバック関数の参照がないことがわかりました
self.iMapView.myLocationEnabled = YES;

返信ありがとうございます。

4

2 に答える 2

21

カメラを現在の位置にアニメーション化/設定するには、まず次のことを行う必要があります。

self.googleMapsView.myLocationEnabled = YES;

次に、GMSMapView ヘッダー ファイルのドキュメントに次のコメントがあります。

/**
* If My Location is enabled, reveals where the user location dot is being
* drawn. If it is disabled, or it is enabled but no location data is available,
* this will be nil.  This property is observable using KVO.
*/ 
@property (nonatomic, strong, readonly) CLLocation *myLocation;

したがって、viewWillAppear メソッドでキー値オブザーバーをセットアップすると、GoogleMaps SDK の Location Manager で位置情報を更新できます。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    // Implement here to check if already KVO is implemented.
    ...
    [self.googleMapsView addObserver:self forKeyPath:@"myLocation" options:NSKeyValueObservingNew context: nil]
}

そして物件を観察。

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"myLocation"] && [object isKindOfClass:[GMSMapView class]])
    {
        [self.googleMapsView animateToCameraPosition:[GMSCameraPosition cameraWithLatitude:self.googleMapsView.myLocation.coordinate.latitude
                                                                                 longitude:self.googleMapsView.myLocation.coordinate.longitude
                                                                                      zoom:self.googleMapsView.projection.zoom]];
    }
}

viewWillDisappear でオブザーバーを登録解除することを忘れないでください。

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    // Implement here if the view has registered KVO
    ...
    [self.googleMapsView removeObserver:self forKeyPath:@"myLocation"];
}

よろしくお願いします

于 2013-03-08T10:02:30.917 に答える
0

注:この回答は間違っています。Robert の回答を参照してください。

Google Maps SDK for iOS には、デバイスの位置が変更されたときに通知するデリゲートがありません。

CLLocationManagerクラスを自分で使用して、デバイスの現在の位置を取得し、マップ ビューを更新する必要があります。

アップデート:

ロケーション マネージャーが提供する新しいマップ ビューを更新するにはCLLocation、次のようにします。

GMSMapView* mapView = ...;
CLLocation* location = ...;
GMSCameraPosition* camera = [GMSCameraPosition 
    cameraWithLatitude: location.coordinate.latitude
    longitude: location.coordinate.longitude
    zoom: 6];
mapView.camera = camera;

または、マップ ビューを新しい場所にアニメーション化する場合は、次のようにします。

[mapView animationToCameraPosition: camera];
于 2013-03-07T08:18:40.307 に答える