4

Google マップ iOS SDK 1.3 を使用するようにアプリを更新しました。GMSMarkers を除いて、すべてが機能しているようです。それらは表示されないか、間違った画像で表示されます。それらは依然としてタッチに反応し、動かすことができますが、それ以外は見えないか壊れています。

GMSMarkers を追加するコードは次のとおりです。

playerAnnotation = [[CustomPlayerAnnotation markerWithPosition:coord] retain];
[playerAnnotation setType:ANNOTATION_PLAYER];
[playerAnnotation setIcon:[UIImage imageNamed:@"Icon-72.png"]];
[playerAnnotation setGroundAnchor:ccp(.5f, .5f)];
[playerAnnotation setAnimated:NO];
[playerAnnotation setTappable:YES];
[playerAnnotation setTitle:@"Player"];
[playerAnnotation setMap:gameMapView];

GMSMarker* test = [[GMSMarker markerWithPosition:gameMapView.myLocation.coordinate] retain];
[test setIcon:[UIImage imageNamed:@"Icon-72.png"]];
[test setGroundAnchor:ccp(.5f, .5f)];
[test setAnimated:NO];
[test setTappable:YES];
[test setTitle:@"Player"];
[test setMap:gameMapView];

また、CustomPlayerAnnotation は、いくつかの追加変数を持つ単純な GMSMarker です。

@interface CustomPlayerAnnotation : GMSMarker
{
    AnnotationType type;
    int tag;
    struct CoordinatePair coordinatePair;
}

CustomPlayerAnnotation でマップし、GMSMarker をテストします。

マーカー付きの地図

大量の地面オーバーレイがあり、オーバーレイを削除するとマーカーが再表示されましたが、正しく表示されない奇妙な画像が残っているものもあります。1.2.2 では問題なく動作しますが、1.3 では動作しません。

マーカーを機能させるための回避策はありますか? GMSMarkers でこの動作を見た人はいますか?

その他の詳細: アプリは cocos2d 2.0 を使用しており、マップをロードする前にディレクターを停止し、次のように GMSMapView を追加します。

UIWindow* window = [(ProjectFusionAppDelegate*)[[UIApplication sharedApplication] delegate] window];
[[[window subviews] objectAtIndex:0] addSubview:gameMapView];
4

3 に答える 3

0

ビュー内のマップ オブジェクトを最初にカメラ位置でインスタンス化してから、GMSMarker を追加してください。マーカーを作成し、マップに追加していました。何も表示されず、ロジックが反転し、すべてが期待どおりに表示されます。私のプロジェクトでは ARC FYI を使用しています。

- (void)loadView {
  // Create a GMSCameraPosition that tells the map to display the
  // coordinates at zoom level 12.
  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:43.071482
                                                        longitude:-70.749856
                                                             zoom:12];
  mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
  mapView_.myLocationEnabled = YES;
  self.view = mapView_;

  // Creates a marker in the center of the map, make sure the mapView_ is created, and
  // has the camera position set.
  GMSMarker *marker = [[GMSMarker alloc] init];
  marker.position = CLLocationCoordinate2DMake(43.071482, -70.749856);
  marker.title = @"Portsmouth";
  marker.snippet = @"New Hampshire";
  marker.map = mapView_;

}

于 2013-06-07T23:06:50.443 に答える
0

Google側にバグがあるようです。CustomPlayerAnnotation または GMSMarker の使用をやめ、代わりに GMSGroundOverlay を使用しました。それが地図に表示されました。次に、CustomPlayerAnnotation に組み込んだタイプ、タグ、および座標ペアを使用する代わりに、タイトルに依存しました。

playerAnnotation = [[GMSGroundOverlay groundOverlayWithPosition:coord icon:[UIImage imageNamed:@"Down1.png"]] retain];
[playerAnnotation setZoomLevel:zoomLevel];
[playerAnnotation setAnchor:ccp(.5f, 1)];
[playerAnnotation setTitle:@"Player"];
[playerAnnotation setMap:gameMapView];

補足: Anchor:ccp(.5f, 1) を設定する必要があることに注意してください。(.5f, .5f) に設定されている場合、playerAnnotation オーバーレイは、他の GMSGroundOverlays とオーバーラップするときにオーバーレイの下部を切り取っていました。アンカーを変更すると、z 描画が修正されました。出てきたばかりの 1.4 では z オーダーが修正されているように見えますが、1.4 では別の問題が発生したため、今のところ 1.3.1 を使用します。

于 2013-07-17T06:42:08.267 に答える