Eateries <iOS API Waze API>


#1

Здравствуйте, в приложении Eateries прикрутил кнопку на MapViewController через которую пытаюсь передать координаты определенного ресторана в приложение Waze …
import UIKit
import MapKit

class MapViewController: UIViewController, MKMapViewDelegate {

var restaurant: Restaurant!

@IBAction func wazeButton(_ sender: UIButton) {
    
    func viewWaze(location : CLLocation) {

// var latitude:Double = location.coordinate.latitude
// var longitude:Double = location.coordinate.longitude

        var link: String = "waze://"
        let url: NSURL = NSURL(string: link)!
        
        if UIApplication.shared.canOpenURL(url as URL) {
            
            let urlStr: NSString = NSString(format: "waze://?ll=%f,%f&navigate=yes", location.coordinate as CVarArg)
            
            UIApplication.shared.openURL(NSURL(string: urlStr as String) as! URL)
            UIApplication.shared.isIdleTimerDisabled = true
            
            
        } else {
            link = "http://itunes.apple.com/us/app/id323229106"
            UIApplication.shared.openURL(NSURL(string: link)! as URL)
            UIApplication.shared.isIdleTimerDisabled = true
        }
    }
}
@IBOutlet weak var mapView: MKMapView!
override func viewDidLoad() {
    super.viewDidLoad()
    
    mapView.delegate = self
    
    let geocoder = CLGeocoder()
    geocoder.geocodeAddressString(restaurant.location!) { (placemarks, error) in
        
        guard error == nil else {return}
        guard let placemarks = placemarks else {return}
        
        let placemark = placemarks.first!
   // ставим аннотацию на карте...

посоветуйте как грамотно передать координаты в виде “location.coordinate”…


#2

!!Форум просто переполнен знающими людьми желающими помочь!!


#3

Люди отвечают в свободное время - у вас же прошло даже меньше суток.
Остыньте, пожалуйста)


#4

В методе wazeButton: вы объявляете метод viewWaze: и нигде его не вызываете, непонятно что вы этим хотели сказать, из чего следует вы даже не удосужились почитать учебник, но теме не менее с чего то взяли что вам обязаны здесь помочь :slight_smile:

Я даже не знаю что такое Waze, но думаю должно быть вроде этого:

class MapViewController: UIViewController, MKMapViewDelegate {
    
    @IBOutlet weak var mapView: MKMapView!
    
    var restaurantLocation: CLLocation!
    var restaurant: Restaurant!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        mapView.delegate = self
        
        CLGeocoder().geocodeAddressString(restaurant.location!) { placemarks, error in
            guard let placemark = placemarks?.first else {return}
            self.restaurantLocation = placemark.location
        }
    }
    
    func viewWaze(location: CLLocation) {
        var link = "waze://"
        let url = URL(string: link)!
        let app = UIApplication.shared
        
        if app.canOpenURL(url) {
            let urlStr = String(format: "waze://?ll=%f,%f&navigate=yes", location.coordinate.latitude, location.coordinate.longitude)
            app.openURL(URL(string: urlStr)!)
        } else {
            link = "http://itunes.apple.com/us/app/id323229106"
            app.openURL(URL(string: link)!)
        }
    }
    
    @IBAction func wazeButton(_ sender: UIButton) {
        viewWaze(location: restaurantLocation)
    }
}

#5

Люди отвечают - Eateries <iOS API Waze API>

В твоем сообщении какой смысл??


#6

Waze - местная интерактивная gps программа…
смысл моего вопроса в том что пользователь при нажатии кнопки переходит с MapView прямо в Waze с уже определение координатам конкретного ресторана - благо они предоставляют такую возможность взаимодействия между программами IOS API Waze
не суть что за программа, суть помочь человеку (не заглянувшему в учебник) грамотно прописать код …
haymob благодарю за ответ - как доктор прописал:+1:
единственное что: выбрасывает меня в аппсторе на страницу аппликации, а должен ,по идее, в уже установленную app с конкретными координатами ресторана…

class MapViewController: UIViewController, MKMapViewDelegate {

var restaurant: Restaurant!
var restaurantLocation: CLLocation!

@IBOutlet weak var mapView: MKMapView!

override func viewDidLoad() {
    super.viewDidLoad()
    
    mapView.delegate = self
    
    CLGeocoder().geocodeAddressString(restaurant.location!) { placemarks, error in
        guard let placemark = placemarks?.first else {return}
        self.restaurantLocation = placemark.location
    }
    
    let geocoder = CLGeocoder()
    geocoder.geocodeAddressString(restaurant.location!) { (placemarks, error) in
        
        guard error == nil else {return}
        guard let placemarks = placemarks else {return}
        
        let placemark = placemarks.first!
        // ставим аннотацию на карте
        let annotation = MKPointAnnotation()
        annotation.title = self.restaurant.name
        annotation.subtitle = self.restaurant.type
        //какие координаты должна иметь наша аннотация
        guard let location = placemark.location else {return}
        annotation.coordinate = location.coordinate
        //отображает нашу аннотацию текстовую
        self.mapView.showAnnotations([annotation], animated: true)
        self.mapView.selectAnnotation(annotation, animated: true)
        
    }
    // Do any additional setup after loading the view.
}
func viewWaze(location: CLLocation) {
    
    let latitude: Double = location.coordinate.latitude
    let longitude: Double = location.coordinate.longitude
    var link: String = "waze://"
    let url: NSURL = NSURL(string: link)!
    
    if  UIApplication.shared.canOpenURL(url as URL) {
        let urlStr: NSString = NSString(format: "waze://?ll=%f,%f&navigate=yes", latitude,longitude)
        UIApplication.shared.open(NSURL(string: urlStr as String) as! URL)
    } else {
        link = "http://itunes.apple.com/us/app/id323229106"
        UIApplication.shared.open(NSURL(string: link)! as URL)
    }
}

@IBAction func wazeButton(_ sender: UIButton) {
    viewWaze(location: restaurantLocation)
}

P.S. по поводу Учебник полностью согласен, не сочтите за наглость…
просто я только начинаю свой путь в изучении swift
кроме того работа плюс учеба на все времени не хватает…
http://swiftbook.ru учебная платформа или я ошибаюсь :slight_smile:


#7

а какой смысл в ваших сообщениях типа “сарказма”:

!!Форум просто переполнен знающими людьми желающими помочь!!


#8

просто обходи мои темы стороной мэтр :joy::joy::joy:


#9

Ничего обещать не могу, увы - для вас
Ваша проблема, судя по всему, решена… в связи с этим - удаляюсь из темы


#10

Вообщем, кому интересно, добил я это дело:
Еще раз предлагаю взглянуть на код:

func viewWaze(location: CLLocation) {
    
    let latitude: Double = location.coordinate.latitude
    let longitude: Double = location.coordinate.longitude
    var link: String = "waze://"
    let url: NSURL = NSURL(string: link)!
    
    if  UIApplication.shared.canOpenURL(url as URL) {
        let urlStr: NSString = NSString(format: "waze://?ll=%f,%f&navigate=yes", latitude,longitude)
        UIApplication.shared.open(NSURL(string: urlStr as String)! as URL)
    } else {
        link = "http://itunes.apple.com/us/app/id323229106"
        UIApplication.shared.open(NSURL(string: link)! as URL)
    }
}

@IBAction func wazeButton(_ sender: UIButton) {
    viewWaze(location: restaurantLocation)
}

кроме этого нужно открыть info.plist -> As -> Source Code:

и вписать туда следующее:

    <key>LSApplicationQueriesSchemes</key>
<array>
    <string>waze</string>
</array>

после этого ваша кнопка, в моем случае с MapView, у вас она может быть где угодно перебросит вас с уже заданными координатами конкретного места -> прямо на экран навигации Waze.App без доп манипуляций…

Еще раз благодарю mrhaymob за оказанную помощь.