unioil-loyalty-rn-app/ios/Pods/GoogleMaps/Example/GoogleMapsDemos/Samples/AnimatedCurrentLocationView...

106 lines
3.6 KiB
Objective-C
Executable File

/*
* 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