| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- /*
- * Copyright 2016 Google Inc. All rights reserved.
- *
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
- * file except in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
- * ANY KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
- #import "GoogleMapsDemos/Samples/AnimatedCurrentLocationViewController.h"
- @implementation AnimatedCurrentLocationViewController {
- CLLocationManager *_manager;
- GMSMapView *_mapView;
- GMSMarker *_locationMarker;
- }
- - (void)viewDidLoad {
- [super viewDidLoad];
- GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:38.8879
- longitude:-77.0200
- zoom:17];
- _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
- _mapView.settings.myLocationButton = NO;
- _mapView.settings.indoorPicker = NO;
- self.view = _mapView;
- // Setup location services
- if (![CLLocationManager locationServicesEnabled]) {
- NSLog(@"Please enable location services");
- return;
- }
- if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) {
- NSLog(@"Please authorize location services");
- return;
- }
- _manager = [[CLLocationManager alloc] init];
- if ([_manager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
- [_manager requestWhenInUseAuthorization];
- }
- _manager.delegate = self;
- _manager.desiredAccuracy = kCLLocationAccuracyBest;
- _manager.distanceFilter = 5.0f;
- [_manager startUpdatingLocation];
- }
- #pragma mark - CLLocationManagerDelegate
- - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
- if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) {
- NSLog(@"Please authorize location services");
- return;
- }
- NSLog(@"CLLocationManager error: %@", error.localizedFailureReason);
- return;
- }
- - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
- CLLocation *location = [locations lastObject];
- if (_locationMarker == nil) {
- _locationMarker = [[GMSMarker alloc] init];
- _locationMarker.position = location.coordinate;
- // Animated walker images derived from an www.angryanimator.com tutorial.
- // See: http://www.angryanimator.com/word/2010/11/26/tutorial-2-walk-cycle/
- NSArray *frames = @[[UIImage imageNamed:@"step1"],
- [UIImage imageNamed:@"step2"],
- [UIImage imageNamed:@"step3"],
- [UIImage imageNamed:@"step4"],
- [UIImage imageNamed:@"step5"],
- [UIImage imageNamed:@"step6"],
- [UIImage imageNamed:@"step7"],
- [UIImage imageNamed:@"step8"]];
- _locationMarker.icon = [UIImage animatedImageWithImages:frames duration:0.8];
- _locationMarker.groundAnchor = CGPointMake(0.5f, 0.97f); // Taking into account walker's shadow
- _locationMarker.map = _mapView;
- } else {
- [CATransaction begin];
- [CATransaction setAnimationDuration:2.0];
- _locationMarker.position = location.coordinate;
- [CATransaction commit];
- }
- GMSCameraUpdate *move = [GMSCameraUpdate setTarget:location.coordinate zoom:17];
- [_mapView animateWithCameraUpdate:move];
- }
- @end
|