And*_*eaZ 41 subview uiview ios google-maps-sdk-ios
我正在努力解决这个问题!我想将谷歌地图添加GMSMapView
到我UIView
的主要部分中.UIView
ViewController
它应该很简单......我用故事板创建了一个UIView
我想要的尺寸,并把它放在主要部分UIView
.
接口文件的片段:
@interface MapViewController : UIViewController <CLLocationManagerDelegate>
@property(nonatomic) IBOutlet GMSMapView *mapView;
Run Code Online (Sandbox Code Playgroud)
用mapView链接到这UIView
里面UIView
.
我在实施中做了什么:
@synthesize mapView = _mapView;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
longitude:151.2086
zoom:10];
_mapView = [GMSMapView mapWithFrame:_mapView.bounds camera:camera];
_mapView.myLocationEnabled = YES;
}
Run Code Online (Sandbox Code Playgroud)
这应该工作,不应该吗?我得到的是我的内部UIView是空的.
如果我在谷歌的起始指南谷歌地图集成文档后实例化地图,它可以工作,但它将地图分配给MAIN UIView,这是另一回事.
我甚至尝试将故事板中mapView的类更改UIView
为GMSMapView
.地图显示在内部视图中,但它以奇怪的方式进行初始化
"无法制作完整的帧缓冲区"
并减慢了很多视图的加载(在模拟器上需要2-3秒)
viewDidLoad
方法中完成的任何相机更改中都没有响应.有什么建议?
我在StackOverflow上阅读了一些帖子,但找不到有效的解决方案:(
clo*_*fin 84
根据其他答案,这里有三种实际工作方式.
.H
@interface GPViewController : UIViewController
@property (strong, nonatomic) IBOutlet GMSMapView *map1;
@property (strong, nonatomic) IBOutlet UIView *plainViewOnXIBHoldsMap3;
@end
Run Code Online (Sandbox Code Playgroud)
.M
- (void)viewDidLoad{
[super viewDidLoad];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.0
longitude:151.20
zoom:6];
/* Option 1. view on XIB is class GSMMapView */
self.map1.camera = camera;
/* Option 2. add a map as a subview */
GMSMapView *map2 = [GMSMapView mapWithFrame:CGRectMake(0, 0, 100, 100) camera:camera];
[self.view addSubview:map2];
/* Option 3. add a map to a subview already on the XIB */
GMSMapView *map3 = [GMSMapView mapWithFrame:self.plainViewOnXIBHoldsMap3.bounds camera:camera];
[self.plainViewOnXIBHoldsMap addSubview:map3];
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*e K 23
已经签出并在Swift 2.0中使用了cloudsurfin提供的所有三个选项.为那些在Swift 2.0中遇到同样问题的人翻译他的答案:
选项1 - 在XIB构建器上放置一个视图并将其类更改为GMSMapView.
选项2 - 全部编码.将地图添加为主视图的子视图.
Option3 - 将地图添加为已存在的UIView子视图的GMSMapView子视图.
选项1的 XIB准备说明:
1)为您的视图设置一个类:
2)不要忘记将您的视图与代码中的插座连接:
import UIKit
import GoogleMaps
class MapViewController: UIViewController {
@IBOutlet weak var map1 : GMSMapView!
@IBOutlet weak var map3 : UIView!
override func viewDidLoad() {
super.viewDidLoad()
let camera = GMSCameraPosition.cameraWithLatitude(53.9,
longitude: 27.5667, zoom: 6)
// Option 1. view on XIB is class GSMMapView
self.map1.camera = camera;
// Option 2. add a map as a subview
let map2 = GMSMapView.mapWithFrame(CGRectMake(0, 64, 320, 460), camera:camera)
self.view.addSubview(map2)
// Option 3. add a map to a subview of UIView class that is already on the XIB
let map3 = GMSMapView.mapWithFrame(self.plainViewOnXIBHoldsMap3.bounds, camera:camera)
self.plainViewOnXIBHoldsMap3.addSubview(map3)
}
}
Run Code Online (Sandbox Code Playgroud)
希望这个笔记能帮助别人:)
Eri*_*bes 19
我的建议:
.H
@interface MapViewController: UIViewController <CLLocationManagerDelegate>
{
IBOutlet UIView *mapViewOnSreen;
}
Run Code Online (Sandbox Code Playgroud)
.M
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
longitude:151.2086
zoom:10];
_mapView = [GMSMapView mapWithFrame:mapViewOnScreen.bounds camera:camera];
_mapView.myLocationEnabled = YES;
mapViewOnScreen = _mapView
//OR [self.view addSubview:_mapView];
//OR [mapViewOnScreen addSubview:_mapView]; <--This worked for me
}
Run Code Online (Sandbox Code Playgroud)
*编辑:我使用IB在主视图中创建了一个小的UIView.我按照列出的步骤,当我设置[mapViewOnScreen addSubview:_mapView]时,我能够在小UIView中查看地图;
小智 11
你可以通过IB做到这一点
.h
@property (weak, nonatomic) IBOutlet GMSMapView *theMapView;
.m
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868
longitude:151.2086
zoom:12];
//This next line is not needed if you have a GMSMapView outlet
//self.theMapView = [GMSMapView mapWithFrame:self.theMapView.frame camera:camera];
self.theMapView.camera=camera;
self.theMapView.mapType = kGMSTypeSatellite;
self.theMapView.delegate=self;
Run Code Online (Sandbox Code Playgroud)
小智 6
我花了大约半个小时试图让它工作,然后我发现我用错误的方法.谷歌入门示例告诉您将其放入 - (void)loadView但如果您这样做,则会出现黑屏或全屏地图.你需要把它放在 - (void)viewDidLoad中.然后它工作.
对于Swift 3,如果你是子类的话 GMSMapView
UIView
到UIViewController
在故事板GMSMapView
改为上课UiView
在UIViewController
课堂上创建参考
@IBOutlet weak var mapView: GMSMapView!
Run Code Online (Sandbox Code Playgroud)在进行子类化时,您不需要使用GMSMapView.map(withFrame: CGRect.zero, camera: camera)
文档中提到的内容.只需加载地图如下
let camera = GMSCameraPosition.camera(withLatitude: 51.50, longitude: -0.076, zoom: 10.0)
mapView.camera = camera
Run Code Online (Sandbox Code Playgroud)为了添加标记
let marker = GMSMarker()
marker.position = CLLocationCoordinate2D(latitude: 51.50, longitude: -0.076)
marker.title = "London"
marker.snippet = "UK"
marker.map = mapView
Run Code Online (Sandbox Code Playgroud)一起作为一个功能
override func viewDidLoad() {
super.viewDidLoad()
load()
}
func load() {
//map
let camera = GMSCameraPosition.camera(withLatitude: 51.50, longitude: -0.076, zoom: 10.0)
mapView.camera = camera
//marker
let marker = GMSMarker()
marker.position = CLLocationCoordinate2D(latitude: 51.50, longitude: -0.076)
marker.title = "London"
marker.snippet = "UK"
marker.map = mapView
}
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
34995 次 |
最近记录: |