我正在尝试将引脚添加到我在其中一个类中创建的几个位置,这些位置称为" Places"。
这些地点的关键词被定义为" places_coordinates"。
我尝试将这些引脚放置如下:
View Controller.h
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
#import <Parse/Parse.h>
@interface ViewController : UIViewController<CLLocationManagerDelegate, MKMapViewDelegate>
@property (nonatomic, retain) CLLocationManager *locationManager;
@property(nonatomic, strong) MKPinAnnotationView *geoPointAnnotation;
@property(nonatomic, strong)MKPointAnnotation *annotation;
@property(nonatomic, strong)CLLocation *location;
@property (nonatomic, strong) PFObject *detailItem;
@property (weak, nonatomic) IBOutlet MKMapView *appleMap;
@end
ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
if (nil == self.locationManager){
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
//Configure Accuracy depending on your needs, default is kCLLocationAccuracyBest
self.locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
// Set a movement threshold for new events.
self.locationManager.distanceFilter = 500; // meters
[self.locationManager startUpdatingLocation];
[self.locationManager requestWhenInUseAuthorization];
[self.locationManager requestAlwaysAuthorization];
}
self.appleMap.delegate = self;
// Map will show current location
self.appleMap.showsUserLocation = YES;
// Maps' opening spot
self.location = [self.locationManager location];
CLLocationCoordinate2D coordinateActual = [self.location coordinate];
// Map's zoom
MKCoordinateSpan zoom = MKCoordinateSpanMake(0.010, 0.010);
// Create a region
MKCoordinateRegion region = MKCoordinateRegionMake(coordinateActual, zoom);
// Method which sets exibition method
[self.appleMap setRegion:region animated:YES];
//Map's type
self.appleMap.mapType = MKMapTypeStandard;
}
#pragma mark - Location Manager Callbacks
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
[PFGeoPoint geoPointForCurrentLocationInBackground:^(PFGeoPoint *geoPoint, NSError *error) {
if (!error) {
// Create Object
PFObject *offersLocation = [PFObject objectWithClassName:@"Places"];
//Create a point for markers
PFGeoPoint *offersPoint = offersLocation[@"places_coordinate"];
// Check current Location
NSLog(@"%@", offersPoint);
// Create a query for Places of interest near current location
PFQuery *query = [PFQuery queryWithClassName:@"Places"];
[query whereKey:@"places_coordinate" nearGeoPoint:geoPoint withinKilometers:5.0];
NSLog(@"Query: %@",query);
// Limit the query
query.limit = 10;
// Store objects in the array
NSArray *offersArray = [query findObjects];
NSLog(@"Array: %@",offersArray);
if (!error) {
for (query in offersArray) {
self.annotation = [[MKPointAnnotation alloc]
init];
CLLocationCoordinate2D coord = {offersPoint.latitude, offersPoint.longitude};
self.annotation.coordinate = coord ;
[self.appleMap addAnnotation:self.annotation];
NSLog(@"Annotation: %@",self.annotation);
}
}
}
}];
}
#pragma mark - MKMapViewDelegate
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
static NSString *MapViewAnnotationIdentifier = @"places_coordinate";
MKPinAnnotationView *pinOffers = [[MKPinAnnotationView alloc] initWithAnnotation:self.annotation reuseIdentifier:MapViewAnnotationIdentifier];
pinOffers.pinColor = MKPinAnnotationColorRed;
pinOffers.canShowCallout = YES;
pinOffers.animatesDrop = YES;
return pinOffers;
}
我的日志显示了offersArray中的所有商品,但我没有找到将标记放入其中的方法。
我还尝试了其他几个主题,但并没有真正理解它:
how to add multiple pin at the same lat/long
Adding mapview annotations within parse query returns null randomly
最诚挚的问候,
答案 0 :(得分:1)
发生的事情是我的for循环没有正确构建。
应该是这样的:
...
if (!error) {
for (PFObject *offerObject in offersArray) {
PFGeoPoint *offerPoint = [offerObject objectForKey:@"coordenadas"];
MKPointAnnotation *geoPointAnnotation = [[MKPointAnnotation alloc]
init];
geoPointAnnotation.coordinate = CLLocationCoordinate2DMake(offerPoint.latitude, offerPoint.longitude);
[self.appleMap addAnnotation:geoPointAnnotation];
NSLog(@"Annotation: %@",geoPointAnnotation);
}
}
...