Id как мое приложение для отправки местоположения пользователей так же, как Карты Apple на экране. Я прочитал этот ответ «link», но я не понимаю, как его реализовать. Ive пробовал это с помощью CLPlaceMark, но я могу только отправить адрес в текстовом формате. Вот мой код. Отправка пользователей Текущее местоположение Xcode
//.h
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
#import <MessageUI/MessageUI.h>
@interface ViewController : UIViewController<MKMapViewDelegate,CLLocationManagerDelegate, MFMessageComposeViewControllerDelegate>{
CLLocationCoordinate2D coordinates;
MKMapView *mapView;
}
@property (nonatomic, retain) IBOutlet MKMapView *mapView;
@property (strong, nonatomic) CLLocationManager *locationManager;
-(IBAction)SetMap:(id)sender;
- (IBAction)getLocation:(id)sender;
- (IBAction)send:(id)sender;
@end
//.m
#import "ViewController.h"
#import <MessageUI/MFMessageComposeViewController.h>
@interface ViewController()
@end
@implementation ViewController{
CLGeocoder *geoCoder;
CLPlacemark *placeMark;
}
@synthesize mapView;
@synthesize locationManager;
- (void)viewDidLoad {
[super viewDidLoad];
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[locationManager requestWhenInUseAuthorization];
}
mapView.showsUserLocation = YES;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[self.mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
[locationManager startUpdatingLocation];
CLLocation *location1 = [locationManager location];
coordinates = [location1 coordinate];
geoCoder = [[CLGeocoder alloc]init];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSLog(@"Location: %@", newLocation);
CLLocation *currentLocation = newLocation;
[geoCoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) {
if (error == nil && [placemarks count] > 0) {
placeMark = [placemarks lastObject];
_adressLabel.text = [NSString stringWithFormat:@"%@ %@\n%@ %@\n%@\n%@",
placeMark.subThoroughfare, placeMark.thoroughfare,
placeMark.postalCode, placeMark.locality,
placeMark.administrativeArea,
placeMark.country];
} else {
NSLog(@"%@", error.debugDescription);
}
} ];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(IBAction)SetMap:(id)sender{
switch (((UISegmentedControl *)sender).selectedSegmentIndex) {
case 0:
mapView.mapType = MKMapTypeStandard;
break;
case 1:
mapView.mapType = MKMapTypeSatellite;
break;
case 2:
mapView.mapType = MKMapTypeHybrid;
break;
default:
break;
}
}
- (IBAction)getLocation:(id)sender {
mapView.showsUserLocation = YES;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[self.mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
[locationManager startUpdatingLocation];
CLLocation *location = [locationManager location];
coordinates = [location coordinate];
}
- (IBAction)send:(id)sender {
MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
[controller setMessageComposeDelegate:self];
if([MFMessageComposeViewController canSendText])
{
[controller setRecipients:[NSArray arrayWithObjects:nil]];
[controller setBody:[NSString stringWithFormat:@"%@ %@\n%@ %@\n%@\n%@",
placeMark.subThoroughfare, placeMark.thoroughfare,
placeMark.postalCode, placeMark.locality,
placeMark.administrativeArea,
placeMark.country]];
[self presentViewController:controller animated:YES completion:NULL];
}else{
NSLog(@"NO Texting");
}
}
-(void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
[self dismissViewControllerAnimated:YES completion:NULL];
}
@end
Ive отредактировал мой вопрос, чтобы его было ясно. Отличное решение! Спасибо огромное! возможно, другие извлекут выгоду из этого обсуждения из-за того, что для этой темы не так много на эту тему. Еще раз спасибо! – Jeff
@Scrappy Рад помочь человеку, дайте мне знать, если у вас есть другие вопросы. – John