2013-02-26 1 views
2

Итак, я последовал за this guide о том, как добавить карту Google в приложение iOS, и все работает отлично. Но я хочу назначить карту, а не self.view, но пользовательский вид, который я вытащил на раскадровку внутри (?) Другого представления, потому что при добавлении карты в self.view я не могу добавить другие элементы, например кнопки , или хорошо, я, вероятно, могу, но я не знаю, как это сделать.Невозможно присвоить карту карт Google для пользовательского представления

Код:

// Start locationmanager 
locationManager = [[CLLocationManager alloc] init]; 
locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
locationManager.delegate = self; 
[locationManager startUpdatingLocation]; 

// Set up the startposition for the camera when the app first starts. 
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:59.34702 longitude:18.04053 zoom:10]; 
mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera]; 
self.view = mapView_; 

Так я создал UIView внутри зрения в настоящее время, содержащего карту и Ctrl тащили его, чтобы создать выход под названием MAPview в этом viewController. Таким образом, я изменил строку кода из

self.view = _mapView; 

в

self.mapView = _mapView; 

, но это, кажется, не работает вообще, просто пустым. И self.view, и self.mapsView являются экземплярами UIView, так почему это не работает?

Update:

Это то, что мой viewDidLoad выглядит атм:

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

[self.mapView addSubview:mapView_]; 

// Start locationmanager 
locationManager = [[CLLocationManager alloc] init]; 
locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
locationManager.delegate = self; 
[locationManager startUpdatingLocation]; 

// Standard cameraposition 
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:59.34702 longitude:18.04053 zoom:10]; 
mapView_ = [GMSMapView mapWithFrame:self.mapView.frame camera:camera]; 


self.mapView = mapView_; 
} 

ответ

0

Try это в вашем проекте:

// 
// testViewController.m 
// maps 
// 
// Created by Millén on 2013-02-25. 
// Copyright (c) 2013 JamWeb. All rights reserved. 
// 

#import "testViewController.h" 
#import <GoogleMaps/GoogleMaps.h> 

@interface testViewController() 
@property(nonatomic, strong) GMSMapView *gMapView; 
@end 

@implementation testViewController { 
    CLLocation *oldLocation; 
} 

-(void)loadView 
{ 
    CLLocationDegrees lat = 59.34702; 
    CLLocationDegrees lon = 18.04053; 

    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:lat longitude:lon zoom:10]; 
    self.gMapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; 
    self.gMapView.myLocationEnabled = YES; 
    self.view = self.gMapView; 

    [self updateLocation]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 


    // Start locationmanager 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    locationManager.delegate = self; 
    [locationManager startUpdatingLocation]; 


} 

- (IBAction)updateLocation { 
    [locationManager startUpdatingLocation]; 
} 



- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
    CLLocation *location = [locations lastObject]; 

    /* 
    if(!oldLocation) 
    { 
     oldLocation = location; 
    } 

    if (![location isEqual:oldLocation]) { 
     GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude: location.coordinate.latitude 
                   longitude: location.coordinate.longitude 
                    zoom:7]; 

     mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera]; 
     mapView_.myLocationEnabled = YES; 
     self.view = mapView_; 

     oldLocation = location; 
     [locationManager stopUpdatingLocation]; 
    } 
    */ 



    NSLog(@"lat%f - lon%f", location.coordinate.latitude, location.coordinate.longitude); 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 
+0

Я думаю, что это все равно будет иметь «базовый вид» в качестве представления с использованием карты.Это уже не проблема. Если вы заинтересованы, см. Комментарии к исходному сообщению. Спасибо за ваши усилия! – Millenjo

0

В коде у вас есть:

mapView_ = [GMSMapView mapWithFrame: CGRectZero камера: камера];

CGRectZero сделает свой размер равным нулю. Вместо этого вы должны использовать self.mapView.frame.

необходимо также добавить добавить mapView_, как подвид из MAPview:

[self.mapView addSubview:mapView_]; 
+0

Пробовал это, см. Мое обновление на исходное сообщение для моего кода. К сожалению, никакой разницы. – Millenjo

+0

вот ссылка на мой «projekt», https://github.com/millenjo/maps.git – Millenjo

11

Выполните следующие действия:

  1. Изменить свой пользовательский вид класса до GMSMapView в удостоверении личности IB
  2. создать выход mapView для этого настраиваемого представления в просмотре контроллера (обратите внимание, что на выходе типа также GMSMapView)

Так что теперь при запуске приложения этот экземпляр будет создан, и он будет отображать местоположение по умолчанию на карте (недалеко от Лондона). Теперь вам нужно только создать камеру и добавить ее к объекту карты. Добавьте этот код в методе ViewDidLoad:

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:45.24 longitude:19.84 zoom:6]; 
// set camera location to Novi Sad, Serbia :-) 

[self.mapView setCamera:camera];  // set the camera to map 

Thats это, вам не нужно переменную экземпляра mapView_ от Google образец кода, ни какой-либо другой код из образца Google. Наслаждайтесь!

+0

Бонусные баллы за указание, что переменная экземпляра больше не нужна, что пользовательский вид занимает свое место. Как только я удалил и скорректировал все ссылки на это, я получил свой пользовательский вид, чтобы принять методы gMap. И поскольку это объявление '@ property', нет необходимости в создании экземпляра. –

 Смежные вопросы

  • Нет связанных вопросов^_^