谷歌地图无法缩放到当前位置 在对象c中搜索堆栈上的许多解决方案,例如Zoom in to current location on map,但我发现解决方案可以帮助我,但它是用swift编写的 Current Location in Google Maps with swift
代码
.h文件
#import <UIKit/UIKit.h>
@import GoogleMaps;
@interface BranchesViewController : UIViewController <GMSMapViewDelegate,CLLocationManagerDelegate>
@property (weak, nonatomic) IBOutlet GMSMapView *mapView;
@property (nonatomic, retain) CLLocationManager *locationManager;
@end
.m文件
//
// BranchesViewController.m
// Geeks Diner
//
// Created by Zakaria Darwish on 5/15/16.
// Copyright © 2016 CodeBee. All rights reserved.
//
#import "BranchesViewController.h"
#import "infoWindow.h"
#import "SplashViewController.h"
#import "sharedVariables.h"
#import"AFNetworking.h"
#import "UIWebView+AFNetworking.h"
#import "SDWebImageCompat.h"
#import "SDWebImageDownloaderOperation.h"
#import "SDWebImageDownloader.h"
#import "MyGeeksTableViewController.h"
#import "GeeksLocations.h"
#import "BranchDetailsViewController.h"
@import GoogleMaps;
@interface BranchesViewController () <GMSMapViewDelegate>
@end
@implementation BranchesViewController
{
GMSMarker *marker_1;
BOOL firstLocationUpdate_;
CLLocationCoordinate2D *startPoint;
CLLocation *myLocation;
NSMutableArray *list;
}
-(void)getCurrentLocationAndZoomToIt {
}
//- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
// GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:newLocation.coordinate.latitude
// longitude:newLocation.coordinate.longitude
// zoom:17.0];
// [self.mapView animateToCameraPosition:camera];
// CLLocation *location = newLocation;
//
//
//
//
//
////
//// let userLocation = locations.last
//// let center = CLLocationCoordinate2D(latitude: userLocation!.coordinate.latitude, longitude: userLocation!.coordinate.longitude)
////
//// let camera = GMSCameraPosition.cameraWithLatitude(userLocation!.coordinate.latitude,
//// longitude: userLocation!.coordinate.longitude, zoom: 8)
//// let mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera)
//// mapView.myLocationEnabled = true
//// self.view = mapView
////
//// let marker = GMSMarker()
//// marker.position = center
//// marker.title = "Current Location"
//// marker.snippet = "XXX"
//// marker.map = mapView
////
//// locationManager.stopUpdatingLocation()
// }
-(void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker
{
NSLog(@"tapped");
// we need to move into new view //
BranchDetailsViewController *avc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"branchdetailviewcontroller"];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:avc];
// nav.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:nav animated:YES completion:nil];
}
-(UIImage *)getImage :(UIImage *)icon stop:(NSString *)stopNumber color:(UIColor *)color
{
// create label
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, icon.size.width,icon.size.height)];
[label setText:stopNumber];
[label setTextColor:color];
[label setFont:[UIFont boldSystemFontOfSize:11]];
label.textAlignment = NSTextAlignmentCenter;
//start drawing
UIGraphicsBeginImageContext(icon.size);
//draw image
[icon drawInRect:CGRectMake(0, 0, icon.size.width, icon.size.height)];
//draw label
[label drawTextInRect:CGRectMake((icon.size.width - label.frame.size.width)/2, -5, label.frame.size.width, label.frame.size.height)];
//get the final image
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultImage;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.mapView.delegate = self;
self.locationManager = [[CLLocationManager alloc] init] ;
self.locationManager.delegate = self;
[self.locationManager requestWhenInUseAuthorization];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation ;
[self.locationManager setDistanceFilter:10.0f] ;
[self.locationManager startUpdatingLocation];
// UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]];
// // Width equivalent to system default Done button's (which appears on pushed view in my case).
// rightBarButtonItem.enabled = NO;
// self.navigationItem.leftBarButtonItem = rightBarButtonItem;
[self getGeeksLocations];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
[self.locationManager stopUpdatingLocation];
CLLocationCoordinate2D zoomLocation;
// zoomLocation.latitude = self.mapView.myLocation.location.coordinate.latitude;
// zoomLocation.longitude= YourMapView.userLocation.location.coordinate.longitude;
// 2
// MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 0.5*1609.344, 0.5*1609.344);
// 3
// [self.mapView setRegion:viewRegion animated:YES];
// [self.locationManager stopUpdatingLocation];
// zoomLocation.latitude = self.mapView.userLocation.location.coordinate.latitude;
// zoomLocation.longitude= self.mapView.userLocation.location.coordinate.longitude;
// // 2
// MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 0.5*1609.344, 0.5*1609.344);
// // 3
// [self.mapView setRegion:viewRegion animated:YES];
}
所以任何人都可以帮助我吗?
答案 0 :(得分:5)
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let locValue:CLLocationCoordinate2D = manager.location!.coordinate
mapView.animate(toLocation: CLLocationCoordinate2D(latitude: locValue.latitude, longitude: locValue.longitude))
mapView.setMinZoom(4.6, maxZoom: 20)
}
答案 1 :(得分:1)
您可以平移地图或以极短的延迟更改其视角。可以通过GMSCameraPosition对象以编程方式控制地图的方位,倾斜,位置和zoom level。
您可以在GMSMapView上使用-animateToZoom:
,也可以创建GMSCameraPosition
并设置坐标和缩放级别,然后使用-animateToCameraPosition:
或创建GMSCameraUpdate
,然后使用-animateWithCameraUpdate:
GMSCameraPosition *cameraPosition = [GMSCameraPosition cameraWithLatitude:latitude
longitude:longitude
zoom:11.0];
[self.mapView animateToCameraPosition:cameraPosition];
或
GMSCameraUpdate *update = [GMSCameraUpdate zoomTo:11.0];
[self.mapView animateWithCameraUpdate:update];
或
[self.mapView animateToZoom:11.0];