2017-11-13 8 views
1

Google Maps SDKを使用してUIViewControllerでマップを生成していますが、画面全体にマップが生成されています。画面の半分にマップを作成する必要があります。私はそれをどのように達成するのですか?iOSで画面全体に適合しないGoogleマップを作成する

class MapViewController: UIViewController,CLLocationManagerDelegate{ 
    var locationManager = CLLocationManager() 
    var mapView = GMSMapView() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // User Location 
     locationManager.delegate = self 
     //locationManager.requestWhenInUseAuthorization() 
     locationManager.requestAlwaysAuthorization() 
     view.backgroundColor = UIColor.gray 

     locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     locationManager.startUpdatingLocation() 
    } 

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     let userLocation = locations.last 
     let center = CLLocationCoordinate2D(latitude: userLocation!.coordinate.latitude, longitude: userLocation!.coordinate.longitude) 

     let camera = GMSCameraPosition.camera(withLatitude: userLocation!.coordinate.latitude, 
               longitude: userLocation!.coordinate.longitude, zoom: 9.1) 

     mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera) 
     mapView.isMyLocationEnabled = true 
     self.view = mapView 

     locationManager.stopUpdatingLocation() 
    } 
} 

答えて

2

loadView方法のself.view外を設定しないでください。

適切な解決策は、viewDidLoadにマップビューを1回作成することです。 self.viewに割り当てるのではなく、self.viewのサブビューとして追加します。 viewWillAppearに1度フレームを設定します。必要に応じてフレームの半分になるようにフレームを設定します。

必要に応じて、didUpdateLocationsデリゲートメソッドでマップビューの場所を更新します。

1

あなたが希望通りのサイズであるあなたのViewController上の別のビューを作成し、その後、代わりに: self.view = mapView あなたはここでself.(insert your new view name here) = mapView

0

を行うことができますあなたのMapViewを設定している主な問題

self.view = mapView 

です画面に表示されるビューのフルサイズを意味するself.viewとして

代わりにdidLoadのように

self.view.addSubview(mapView) 

それはwillAppearフレームセットまたはdidAppear

mapView.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width , height: self.view.frame.size.height/2) 
関連する問題