2016-03-28 16 views
7

私はAndroidとiOSの両方のアプリを開発しています。地図の2つのボタンをタップするとアンドロイドマップビューがビューの下部に表示されます。 (方向とGoogleマップ)は、GoogleのIセットアップからの指示グーグルからマップを表示する迅速でのMapView次アップロードされた画像即時マップで方向ボタンを表示googleMapsを使用して表示api

enter image description here

を参照してください。マークをタップすると、mapViewにボタンが表示されません。何故ですか?迅速でのMapViewを設定するための

グーグル命令: https://developers.google.com/maps/documentation/ios-sdk/start

+3

をインポートするために必要な要求 "appleMap" のための迅速な ただ単にあなたのViewControllerにクラスを追加下

class CustomButton: UIButton { var gps = "" override func awakeFromNib() { super.awakeFromNib() //TODO: Code for our button } } 

?私は同じものを正確に探しています!ここ –

+2

同じ、私は... 3日間それを不可解だといくつかのいずれかがそれを尋ねられたとき、彼らは否決します! – Engineeroholic

答えて

6

私はこのためにグーグルが、私は何も見つかりませんでした。私は手動でそれをしました。オーバーライドすることによって「didTapMarkerは、」私は、これらの2つのボタンが追加:

func mapView(mapView: GMSMapView, didTapMarker marker: GMSMarker) -> Bool { 
      if marker.title != nil { 

       let mapViewHeight = mapView.frame.size.height 
       let mapViewWidth = mapView.frame.size.width 


       let container = UIView() 
       container.frame = CGRectMake(mapViewWidth - 100, mapViewHeight - 63, 65, 35) 
       container.backgroundColor = UIColor.whiteColor() 
       self.view.addSubview(container) 

       let googleMapsButton = CustomButton() 
       googleMapsButton.setTitle("", forState: .Normal) 
       googleMapsButton.setImage(UIImage(named: "googlemaps"), forState: .Normal) 
       googleMapsButton.setTitleColor(UIColor.blueColor(), forState: .Normal) 
       googleMapsButton.frame = CGRectMake(mapViewWidth - 80, mapViewHeight - 70, 50, 50) 
       googleMapsButton.addTarget(self, action: "markerClick:", forControlEvents: .TouchUpInside) 
       googleMapsButton.gps = String(marker.position.latitude) + "," + String(marker.position.longitude) 
       googleMapsButton.title = marker.title 
       googleMapsButton.tag = 0 

       let directionsButton = CustomButton() 

       directionsButton.setTitle("", forState: .Normal) 
       directionsButton.setImage(UIImage(named: "googlemapsdirection"), forState: .Normal) 
       directionsButton.setTitleColor(UIColor.blueColor(), forState: .Normal) 
       directionsButton.frame = CGRectMake(mapViewWidth - 110, mapViewHeight - 70, 50, 50) 
       directionsButton.addTarget(self, action: "markerClick:", forControlEvents: .TouchUpInside) 
       directionsButton.gps = String(marker.position.latitude) + "," + String(marker.position.longitude) 
       directionsButton.title = marker.title 
       directionsButton.tag = 1 
       self.view.addSubview(googleMapsButton) 
       self.view.addSubview(directionsButton) 
      } 
      return true 
     } 

func markerClick(sender: CustomButton) { 
     let fullGPS = sender.gps 
     let fullGPSArr = fullGPS!.characters.split{$0 == ","}.map(String.init) 

     let lat1 : NSString = fullGPSArr[0] 
     let lng1 : NSString = fullGPSArr[1] 


     let latitude:CLLocationDegrees = lat1.doubleValue 
     let longitude:CLLocationDegrees = lng1.doubleValue 

     if (UIApplication.sharedApplication().openURL(NSURL(string:"comgooglemaps://")!)) { 
      if (sender.tag == 1) { 
       UIApplication.sharedApplication().openURL(NSURL(string: 
        "comgooglemaps://?saddr=&daddr=\(latitude),\(longitude)&directionsmode=driving")!) 
      } else if (sender.tag == 0) { 
       UIApplication.sharedApplication().openURL(NSURL(string: 
        "comgooglemaps://?center=\(latitude),\(longitude)&zoom=14&views=traffic")!) 
      } 

     } else { 
      let regionDistance:CLLocationDistance = 10000 
      let coordinates = CLLocationCoordinate2DMake(latitude, longitude) 
      let regionSpan = MKCoordinateRegionMakeWithDistance(coordinates, regionDistance, regionDistance) 
      var options = NSObject() 
      if (sender.tag == 1) { 
       options = [ 
        MKLaunchOptionsMapCenterKey: NSValue(MKCoordinate: regionSpan.center), 
        MKLaunchOptionsMapSpanKey: NSValue(MKCoordinateSpan: regionSpan.span), 
        MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving 
       ] 
      } else if (sender.tag == 0) { 
       options = [ 
        MKLaunchOptionsMapCenterKey: NSValue(MKCoordinate: regionSpan.center), 
        MKLaunchOptionsMapSpanKey: NSValue(MKCoordinateSpan: regionSpan.span) 
       ] 
      } 

      let placemark = MKPlacemark(coordinate: coordinates, addressDictionary: nil) 
      let mapItem = MKMapItem(placemark: placemark) 
      mapItem.name = sender.title 
      mapItem.openInMapsWithLaunchOptions(options as? [String : AnyObject]) 
     } 
    } 

二つのボタンがのMapViewの右下に追加され、それらをタップした後、Googleマップのアプリは(存在する場合)が開かれます。投票のご返信ありがとうございました:(

+0

当初チェックするためには、次のようになります。 (UIApplication.shared.canOpenURL(URL(文字列: "comgooglemaps://"))!)の代わりに (UIApplication.sharedApplication()のOpenURL(NSURL(文字列の 。: "comgooglemaps://"))) – Anuraj

+2

こっちCustomButtonクラスは何ですか!? – poojathorat

1

私はObjective-cと同じ問題を抱えていましたが、実装したコードに従います マーカーアイコンをタップした後にGoogleマップを使用して方向アイコンを追加したい方は、グーグルマップ上の2つのボタンを追加し、私は迅速なバージョン3のコードを使用して、私は私がcontainViewにUIImageViewのサブビューを追加するビューが含まれている変更

-(bool)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker{ 

    UIButton *directionsButton = [[UIButton alloc] init]; 
    [directionsButton setTitle:@"" forState:UIControlStateNormal]; 
    [directionsButton setImage:[UIImage imageNamed:@"ic_google_direction"] forState:UIControlStateNormal]; 
    [directionsButton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; 
    [directionsButton setFrame:CGRectMake(self->mapView.frame.size.width - 110, self->mapView.frame.size.height - 130, 50, 50)]; 
    [directionsButton addTarget:self action:@selector(markerClick) forControlEvents:UIControlEventTouchUpInside]; 
    [directionsButton setTag:1]; 
    [[self view] addSubview:directionsButton]; 

    return NO; 
} 

-(void) markerClick{ 

    NSMutableArray *installedNavigationApps = [[NSMutableArray alloc] initWithObjects:@"Apple Maps", nil]; 

    if ([[UIApplication sharedApplication] canOpenURL: 
     [NSURL URLWithString:@"comgooglemaps://"]]) { 
     [installedNavigationApps addObject:@"Google Maps"]; 
    } 

    UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:@"Selecione um aplicativo" message:@"Abrir com" preferredStyle:UIAlertControllerStyleActionSheet]; 


    for (NSString *app in installedNavigationApps) { 

     if([app isEqualToString:@"Apple Maps"]){ 

      [actionSheet addAction:[UIAlertAction actionWithTitle:app style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 

       [[UIApplication sharedApplication] openURL: 
       [NSURL URLWithString: [NSString stringWithFormat:@"http://maps.apple.com/?saddr=%@,%@&daddr=%@,%@", _latitude, _longitude, _denuncia.Latitude, _denuncia.Longitude]]]; 
      }]]; 

     } 
     else if([app isEqualToString:@"Google Maps"]){ 
      [actionSheet addAction:[UIAlertAction actionWithTitle:app style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 

       [[UIApplication sharedApplication] openURL: 
       [NSURL URLWithString: [NSString stringWithFormat:@"comgooglemaps://?saddr=%@,%@&daddr=%@,%@&zoom=14&directionsmode=driving", _latitude, _longitude, _denuncia.Latitude, _denuncia.Longitude]]]; 
      }]]; 
     } 


    } 
    [actionSheet addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil]]; 

    // Present action sheet. 
    [self presentViewController:actionSheet animated:YES completion:nil]; 
} 
+0

@Guilherme:あなたのコードを共有するためのおかげで。あなたは、私がswift3 – Lithium

1

をし、私が使用します。以下のコードは、私のために働きました。一番上とリチウムのコード。

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool { 

    if marker.title != nil { 
     let mapViewHeight = mapView.frame.size.height 
     let mapViewWidth = mapView.frame.size.width 


     let container = UIView() 
     container.frame = CGRect.init(x: mapViewWidth - 100, y: mapViewHeight - 63, width: 65, height: 35) 
     container.backgroundColor = UIColor.white 
     self.view.addSubview(container) 

     let googleMapsButton = CustomButton() 
     googleMapsButton.setTitle("", for: .normal) 
     googleMapsButton.setImage(UIImage(named: "googlemaps")?.resizableImage(withCapInsets: UIEdgeInsets.init(top: 0, left: 0, bottom: 50, right: 50)),for: .normal) 
     googleMapsButton.setTitleColor(UIColor.blue, for: .normal) 
     googleMapsButton.frame = CGRect.init(x: mapViewWidth - 80, y: mapViewHeight - 70, width: 50, height: 50) 
     googleMapsButton.addTarget(self, action: #selector(self.markerClick(sender:)), for: .touchUpInside) 
     googleMapsButton.gps = String(marker.position.latitude) + "," + String(marker.position.longitude) 
     googleMapsButton.title = marker.title 
     googleMapsButton.tag = 0 

     let directionsButton = CustomButton() 
     directionsButton.setTitle("", for: .normal) 
     directionsButton.setImage(UIImage(named: "googlemapsdirection")?.resizableImage(withCapInsets: UIEdgeInsets.init(top: 0, left: 0, bottom: 50, right: 50)),for: .normal) 
     directionsButton.setTitleColor(UIColor.blue, for: .normal) 
     directionsButton.frame = CGRect.init(x:mapViewWidth - 110, y:mapViewHeight - 70, width:50, height: 50) 
     directionsButton.addTarget(self, action: #selector(self.markerClick(sender:)), for: .touchUpInside) 
     directionsButton.gps = String(marker.position.latitude) + "," + String(marker.position.longitude) 
     directionsButton.title = marker.title 
     directionsButton.tag = 1 
     self.view.addSubview(googleMapsButton) 
     self.view.addSubview(directionsButton) 
    } 

    return false 
} 

func markerClick(sender:CustomButton){ 
    let fullGPS = sender.gps 
    let fullGPSArr = fullGPS!.characters.split{$0 == ","}.map(String.init) 

    let lat1 : String = fullGPSArr[0] 
    let lng1 : String = fullGPSArr[1] 


    guard let lat1_double = Double(lat1),let lng1_double = Double(lng1) else{ 
     return 
    } 

    let latitude:CLLocationDegrees = lat1_double 
    let longitude:CLLocationDegrees = lng1_double 

    if (UIApplication.shared.openURL(URL(string:"comgooglemaps://")!)) { 
     if (sender.tag == 1) { 
      UIApplication.shared.openURL(URL(string: 
       "comgooglemaps://?saddr=&daddr=\(latitude),\(longitude)&directionsmode=driving")!) 
     } else if (sender.tag == 0) { 
      UIApplication.shared.openURL(URL(string: 
       "comgooglemaps://?center=\(latitude),\(longitude)&zoom=14&views=traffic")!) 
     } 

    } else { 
     let regionDistance:CLLocationDistance = 10000 
     let coordinates = CLLocationCoordinate2DMake(latitude, longitude) 
     let regionSpan = MKCoordinateRegionMakeWithDistance(coordinates, regionDistance, regionDistance) 
     var options : NSDictionary! = nil 
     if (sender.tag == 1) { 
      options = [ 

       MKLaunchOptionsMapCenterKey: NSValue.init(mkCoordinate: regionSpan.center), 
       MKLaunchOptionsMapSpanKey: NSValue(mkCoordinateSpan: regionSpan.span), 
       MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving 
      ] 
     } else if (sender.tag == 0) { 
      options = [ 
       MKLaunchOptionsMapCenterKey: NSValue(mkCoordinate: regionSpan.center), 
       MKLaunchOptionsMapSpanKey: NSValue(mkCoordinateSpan: regionSpan.span) 
      ] 
     } 

     let placemark = MKPlacemark(coordinate: coordinates, addressDictionary: nil) 
     let mapItem = MKMapItem(placemark: placemark) 
     mapItem.name = sender.title 
     mapItem.openInMaps(launchOptions: options as? [String : Any]) 
    } 
} 
+0

それは私がカスタムボタンのクラス場所を知っていること、他の人のために役立つことでしょうか? – Luca

+0

が何をしたかを説明しなければならない – Apinun

+0

Hiに迅速2からコードを変更私は迅速3のコードを使用して – anson

0

CustomButton - この質問は否決されたのはなぜMapKit

関連する問題