MapLayerViewController.m 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #if !defined(__has_feature) || !__has_feature(objc_arc)
  2. #error "This file requires ARC support."
  3. #endif
  4. #import "SDKDemos/Samples/MapLayerViewController.h"
  5. #import <GoogleMaps/GoogleMaps.h>
  6. @implementation MapLayerViewController {
  7. GMSMapView *mapView_;
  8. }
  9. - (void)viewDidLoad {
  10. [super viewDidLoad];
  11. GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-37.81969
  12. longitude:144.966085
  13. zoom:4];
  14. mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
  15. self.view = mapView_;
  16. dispatch_async(dispatch_get_main_queue(), ^{
  17. mapView_.myLocationEnabled = YES;
  18. });
  19. UIBarButtonItem *myLocationButton =
  20. [[UIBarButtonItem alloc] initWithTitle:@"Fly to My Location"
  21. style:UIBarButtonItemStylePlain
  22. target:self
  23. action:@selector(didTapMyLocation)];
  24. self.navigationItem.rightBarButtonItem = myLocationButton;
  25. }
  26. - (void)didTapMyLocation {
  27. CLLocation *location = mapView_.myLocation;
  28. if (!location || !CLLocationCoordinate2DIsValid(location.coordinate)) {
  29. return;
  30. }
  31. mapView_.layer.cameraLatitude = location.coordinate.latitude;
  32. mapView_.layer.cameraLongitude = location.coordinate.longitude;
  33. mapView_.layer.cameraBearing = 0.0;
  34. // Access the GMSMapLayer directly to modify the following properties with a
  35. // specified timing function and duration.
  36. CAMediaTimingFunction *curve =
  37. [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
  38. CABasicAnimation *animation;
  39. animation = [CABasicAnimation animationWithKeyPath:kGMSLayerCameraLatitudeKey];
  40. animation.duration = 2.0f;
  41. animation.timingFunction = curve;
  42. animation.toValue = @(location.coordinate.latitude);
  43. [mapView_.layer addAnimation:animation forKey:kGMSLayerCameraLatitudeKey];
  44. animation = [CABasicAnimation animationWithKeyPath:kGMSLayerCameraLongitudeKey];
  45. animation.duration = 2.0f;
  46. animation.timingFunction = curve;
  47. animation.toValue = @(location.coordinate.longitude);
  48. [mapView_.layer addAnimation:animation forKey:kGMSLayerCameraLongitudeKey];
  49. animation = [CABasicAnimation animationWithKeyPath:kGMSLayerCameraBearingKey];
  50. animation.duration = 2.0f;
  51. animation.timingFunction = curve;
  52. animation.toValue = @0.0;
  53. [mapView_.layer addAnimation:animation forKey:kGMSLayerCameraBearingKey];
  54. // Fly out to the minimum zoom and then zoom back to the current zoom!
  55. CGFloat zoom = mapView_.camera.zoom;
  56. NSArray *keyValues = @[@(zoom), @(kGMSMinZoomLevel), @(zoom)];
  57. CAKeyframeAnimation *keyFrameAnimation =
  58. [CAKeyframeAnimation animationWithKeyPath:kGMSLayerCameraZoomLevelKey];
  59. keyFrameAnimation.duration = 2.0f;
  60. keyFrameAnimation.values = keyValues;
  61. [mapView_.layer addAnimation:keyFrameAnimation forKey:kGMSLayerCameraZoomLevelKey];
  62. }
  63. @end