如何使用 swift 在 google 地图中更改我的位置按钮的位置
How to change location of my location button in google maps using swift
我在我的项目中使用 google 地图 我想显示我的位置按钮
我应该怎么做 swift
您可以通过设置地图视图的内边距来更改 MapControls 的位置。
let mapView = GMSMapView()
mapView.isMyLocationEnabled = true
mapView.settings.myLocationButton = true
mapView.padding = UIEdgeInsets(top: 0, left: 0, bottom: 50, right: 50)
它将更改我的位置控件的填充。从底部 50px 到右侧 50px
参考下面的屏幕截图,它从底部和右侧添加了 50px 的填充。
与 Subramanian 一样,这非常有效:
mapView.padding = UIEdgeInsets(top: 0, left: 0, bottom: 50, right: 0)
如果您的应用程序中有导航栏,这是完美的。
swift4 的更新:仅更改我的位置按钮的位置
for object in self.mapView.subviews{
if(object.theClassName == "GMSUISettingsPaddingView"){
for view in object.subviews{
if(view.theClassName == "GMSUISettingsView"){
for btn in view.subviews{
if(btn.theClassName == "GMSx_QTMButton"){
var frame = btn.frame
frame.origin.y = frame.origin.y - 100
btn.frame = frame
}
}
}
}
}
}
public extension NSObject {
public var theClassName: String {
return NSStringFromClass(type(of: self))
}
}
这是我的 Google Maps SDK 5.1.0 功能,因为按钮的 class 已重命名为 'GMSx_MDCFloatingButton',以防有人需要更新方法。
另外,根据您的实现,您可能希望在 viewDidAppear() 上调用它。
func moveLocationButton(){
for object in self.googleMapsView!.subviews{
if(object.thisClassName == "GMSUISettingsPaddingView"){
for view in object.subviews{
if(view.thisClassName == "GMSUISettingsView"){
for btn in view.subviews{
if(btn.theClassName == "GMSx_MDCFloatingButton"){
var frame = btn.frame
frame.origin.x = frame.origin.x - 50
frame.origin.y = frame.origin.y - 150
btn.frame = frame
}
}
}
}
}
}
}
public extension NSObject {
var thisClassName: String {
return NSStringFromClass(type(of: self))
}
}
使用此函数并在 viewDidLayoutSubviews()
处调用
func changeLocationBtnFrame(){
self.mapView.settings.myLocationButton = true
for obj in self.mapView.subviews{
if String(describing: obj.classForCoder) == "GMSUISettingsPaddingView"{
for viw in obj.subviews{
if String(describing: viw.classForCoder) == "GMSUISettingsView"{
for btn in viw.subviews{
if String(describing: btn.classForCoder) == "GMSx_MDCFloatingButton"{
var frame = btn.frame
btn.frame = CGRect(x: 316, y: 0, width: 56, height: 56)
//USE you want frame this line
break
}
}
break
}
}
break
}
}
}
我在我的项目中使用 google 地图 我想显示我的位置按钮 我应该怎么做 swift
您可以通过设置地图视图的内边距来更改 MapControls 的位置。
let mapView = GMSMapView()
mapView.isMyLocationEnabled = true
mapView.settings.myLocationButton = true
mapView.padding = UIEdgeInsets(top: 0, left: 0, bottom: 50, right: 50)
它将更改我的位置控件的填充。从底部 50px 到右侧 50px
参考下面的屏幕截图,它从底部和右侧添加了 50px 的填充。
与 Subramanian 一样,这非常有效:
mapView.padding = UIEdgeInsets(top: 0, left: 0, bottom: 50, right: 0)
如果您的应用程序中有导航栏,这是完美的。
swift4 的更新:仅更改我的位置按钮的位置
for object in self.mapView.subviews{
if(object.theClassName == "GMSUISettingsPaddingView"){
for view in object.subviews{
if(view.theClassName == "GMSUISettingsView"){
for btn in view.subviews{
if(btn.theClassName == "GMSx_QTMButton"){
var frame = btn.frame
frame.origin.y = frame.origin.y - 100
btn.frame = frame
}
}
}
}
}
}
public extension NSObject {
public var theClassName: String {
return NSStringFromClass(type(of: self))
}
}
这是我的 Google Maps SDK 5.1.0 功能,因为按钮的 class 已重命名为 'GMSx_MDCFloatingButton',以防有人需要更新方法。
另外,根据您的实现,您可能希望在 viewDidAppear() 上调用它。
func moveLocationButton(){
for object in self.googleMapsView!.subviews{
if(object.thisClassName == "GMSUISettingsPaddingView"){
for view in object.subviews{
if(view.thisClassName == "GMSUISettingsView"){
for btn in view.subviews{
if(btn.theClassName == "GMSx_MDCFloatingButton"){
var frame = btn.frame
frame.origin.x = frame.origin.x - 50
frame.origin.y = frame.origin.y - 150
btn.frame = frame
}
}
}
}
}
}
}
public extension NSObject {
var thisClassName: String {
return NSStringFromClass(type(of: self))
}
}
使用此函数并在 viewDidLayoutSubviews()
处调用func changeLocationBtnFrame(){
self.mapView.settings.myLocationButton = true
for obj in self.mapView.subviews{
if String(describing: obj.classForCoder) == "GMSUISettingsPaddingView"{
for viw in obj.subviews{
if String(describing: viw.classForCoder) == "GMSUISettingsView"{
for btn in viw.subviews{
if String(describing: btn.classForCoder) == "GMSx_MDCFloatingButton"{
var frame = btn.frame
btn.frame = CGRect(x: 316, y: 0, width: 56, height: 56)
//USE you want frame this line
break
}
}
break
}
}
break
}
}
}