/
UPCMapsViewController.m
89 lines (73 loc) · 2.98 KB
/
UPCMapsViewController.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//
// UPCMapsViewController.m
// UPC
//
// Created by Jose Gonzalez Gomez on 17/05/12.
// Copyright (c) 2012 Universitat Politècnica de Catalunya. All rights reserved.
//
#import "UPCMapsViewController.h"
#import "UPCRestKitConfigurator.h"
#import "UPCSearchResult.h"
#import "UPCSearchResultGroup.h"
#import "NSArray+SearchResultsGrouping.h"
#pragma mark Class implementation
@implementation UPCMapsViewController
#pragma mark Synthesized properties
@synthesize mapView;
#pragma mark View lifecycle management
- (void)viewDidLoad
{
[super viewDidLoad];
[self.mapView setRegion:MKCoordinateRegionMake(CLLocationCoordinate2DMake(41.65, 2), MKCoordinateSpanMake(2, 2)) animated:YES];
}
- (void)viewDidUnload
{
[self setMapView:nil];
[super viewDidUnload];
}
#pragma mark Search bar
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
static NSString *SEARCH_RESULT = @"SEARCH_RESULT";
if ([annotation isKindOfClass:[UPCSearchResultGroup class]]) {
MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:SEARCH_RESULT];
if (!annotationView) {
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:SEARCH_RESULT];
annotationView.canShowCallout = YES;
annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
annotationView.pinColor = MKPinAnnotationColorRed;
annotationView.animatesDrop = YES;
}
else {
annotationView.annotation = annotation;
}
return annotationView;
}
else {
return nil;
}
}
- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error
{
NSLog(@"Error while loading search results!");
}
- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects
{
[self.mapView removeAnnotations:self.mapView.annotations];
NSDictionary *groupedSearchResults = [objects groupByLocation];
[groupedSearchResults enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSArray *searchResultsInLocation = (NSArray *)obj;
[self.mapView addAnnotation:[[UPCSearchResultGroup alloc] initWithSearchResults:searchResultsInLocation]];
}];
}
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
[searchBar resignFirstResponder];
RKObjectManager *objectManager = [UPCRestKitConfigurator sharedManager];
NSString *searchPath = [@"/CercadorMapsv1.php" stringByAppendingQueryParameters:[NSDictionary dictionaryWithObject:searchBar.text forKey:@"text"]];
[objectManager loadObjectsAtResourcePath:searchPath usingBlock:^(RKObjectLoader *loader) {
[loader.mappingProvider setMapping:[loader.mappingProvider objectMappingForClass:[UPCSearchResult class]] forKeyPath:@""];
loader.delegate = self;
}];
}
@end