2016-09-11 2 views
0

Как распечатать местоположение пользователя, когда я нажимаю кнопку «Поделиться»? Вот мой кодПечать координат пользователей при нажатии кнопки i - Swift

Как вы можете видеть, у меня есть строка/код, который выводит координаты, но если я хочу, чтобы эти координаты печатались, когда я нажимаю кнопку совместного доступа. Могу ли я это сделать, и если, как?

Надеюсь, вы понимаете, что я имею в виду.

Я довольно новый в Xcode и Swift!

import UIKit 
import MapKit 
import Firebase 

class MapController: UICollectionViewController, UICollectionViewDelegateFlowLayout, CLLocationManagerDelegate, MKMapViewDelegate { 


var window: UIWindow? 
var mapView: MKMapView? 
let locationManager = CLLocationManager() 

let distanceSpan: Double = 500 

var locationData: CLLocation! 

let coordLabel = UILabel(frame: CGRectMake(10,100,400,50)) 


override func viewDidLoad() { 
    super.viewDidLoad() 

    navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Share", style: .Plain, target: self, action: #selector(share)) 


    navigationItem.title = "Current Location" 

    self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 
    self.view.backgroundColor = UIColor.whiteColor() 

    self.mapView = MKMapView(frame: CGRectMake(0, 20, (self.window?.frame.width)!, (self.window?.frame.height)!)) 
    self.view.addSubview(self.mapView!) 

    self.locationManager.delegate = self 
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    self.locationManager.requestWhenInUseAuthorization() 
    self.locationManager.startUpdatingLocation() 
    self.mapView!.showsUserLocation = true 


    //Show User Location Button 
    let button: UIButton = UIButton(type: UIButtonType.Custom) 
    button.setImage(UIImage(named: "MyLocationButton"), forState: UIControlState.Normal) 
    button.addTarget(self, action: #selector(locationManagerButton), forControlEvents: UIControlEvents.TouchUpInside) 
    button.frame = CGRectMake(0, 0, 30, 30) 
    let barButton = UIBarButtonItem(customView: button) 
    self.navigationItem.leftBarButtonItem = barButton 

    // user is not logged in 
    if FIRAuth.auth()?.currentUser?.uid == nil { 
     performSelector(#selector(handleLogout), withObject: nil, afterDelay: 0) 



} 

    view.addSubview(coordLabel) 

} 

func share() { 

    coordLabel.text = String(locationData.coordinate.longitude) + ", " + String(locationData.coordinate.latitude) 

} 


func handleLogout() { 

    do { 
     try FIRAuth.auth()?.signOut() 
    } catch let logoutError { 
     print(logoutError) 
    } 

    let loginController = LoginController() 
    presentViewController(loginController, animated: true, completion: nil) 

} 




func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) { 
    if let mapView = self.mapView { 
     let region = MKCoordinateRegionMakeWithDistance(newLocation.coordinate, self.distanceSpan, self.distanceSpan) 
     mapView.setRegion(region, animated: true) 
     mapView.showsUserLocation = true 
    } 
} 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

    let locationData = locations.last 

    let center = CLLocationCoordinate2D(latitude: locationData!.coordinate.latitude, longitude: locationData!.coordinate.longitude) 

    let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)) 

    self.mapView!.setRegion(region, animated: true) 
    self.locationManager.stopUpdatingLocation() 

    let locValue:CLLocationCoordinate2D = manager.location!.coordinate 
    print("locations = \(locValue.latitude) \(locValue.longitude)") 




} 

func locationManagerButton() { 

    mapView!.setCenterCoordinate(mapView!.userLocation.coordinate, animated: true) 



} 


func locationManager(manager: CLLocationManager, didFailWithError error: NSError) 
{ 
    print("Errors: " + error.localizedDescription) 
} 


} 

ответ

1

Вам понадобится ярлык, содержащий выведенные координаты.

coordLabel = UILabel(frame: CGRectMake(10,100,400,50)) 
view.addSubview(coordLabel); 

тогда вам понадобится глобальная переменная координат, которая будет обновляться по делегированному вызову. Таким образом, после того, как let distanceSpan: Double = 500 поставил

var locationData: CLLocation!; 

Затем обновить глобальное значение с в методе делегата ... поэтому вместо location = locations.last поставил locationData = locations.last и обновить имя переменной в другом месте, если это необходимо.

И, наконец, данные о местоположении на выходе при необходимости.

func share(){ 
    coordLabel.text = String(locationData.coordinates.longitude) + ", " + String(locationData.coordinates.latitude) 
} 

Это на первый взгляд ... вы можете столкнуться с некоторыми проблемами ... держите меня в курсе.

+0

Хорошо, теперь я получаю эту ошибку, когда я нажимаю кнопку, «фатальная ошибка: неожиданно обнаружена нуль при развертывании необязательного значения» и EXC_BAD_INSTRUCTION (код = EXC_I386_INVOP, subcode = 0x0) в строке coordLabel.text – Stevic

+0

ok сделал Обновить. Извините, написал это из моей головы без тестирования, может быть несколько ошибок. Поместите 'let' по объявлению coordLabel –

+0

В файле coordLabel.text = String (locationData.coordinates.longitude) + "," + String (locationData.coordinates.latitude) – Stevic