【发布时间】:2015-09-23 07:23:54
【问题描述】:
我想将标记和它的圆圈固定在地图的中心,而不考虑使用 swift 的位置坐标。如果用户在地图上移动相机,我希望它继续显示在中心而没有任何半径或标记闪烁,并且用户应该能够增加和减少圆的半径。 我用过
circle.position = mapView.camera.target但它没有帮助。 所以我想知道我该怎么做? 请帮忙。
【问题讨论】:
标签: ios swift google-maps
我想将标记和它的圆圈固定在地图的中心,而不考虑使用 swift 的位置坐标。如果用户在地图上移动相机,我希望它继续显示在中心而没有任何半径或标记闪烁,并且用户应该能够增加和减少圆的半径。 我用过
circle.position = mapView.camera.target但它没有帮助。 所以我想知道我该怎么做? 请帮忙。
【问题讨论】:
标签: ios swift google-maps
您的ViewController 类需要实现GMSMapViewDelegate 中的func mapView(mapView: GMSMapView!, didChangeCameraPosition position: GMSCameraPosition!) 方法。
在func mapView(mapView: GMSMapView!, didChangeCameraPosition position: GMSCameraPosition!) 方法中,您可以更新圈子的位置。该方法在地图上的任何动画或手势期间被重复调用(或一次,如果明确设置了相机)。
示例代码:
class ViewController: UIViewController, GMSMapViewDelegate {
var mapView: GMSMapView!
var cirlce: GMSCircle!
override func viewDidLoad() {
super.viewDidLoad()
let camera = GMSCameraPosition.cameraWithLatitude(-33.86,
longitude: 151.20, zoom: 6)
mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera)
mapView.myLocationEnabled = true
self.view = mapView
mapView.delegate = self
cirlce = GMSCircle(position: camera.target, radius: 100000)
cirlce.fillColor = UIColor.redColor().colorWithAlphaComponent(0.5)
cirlce.map = mapView
}
func mapView(mapView: GMSMapView!, didChangeCameraPosition position: GMSCameraPosition!) {
print("\(position.target.latitude) \(position.target.longitude)")
cirlce.position = position.target
}
}
已编辑:
如果您想制作一个与您的 mapView 相机移动无关的圆圈,您可以在您的 mapView 顶部制作一个圆形 UIView。
示例代码:
class ViewController: UIViewController {
var mapView: GMSMapView!
override func viewDidLoad() {
super.viewDidLoad()
let camera = GMSCameraPosition.cameraWithLatitude(-33.86,
longitude: 151.20, zoom: 6)
mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera)
mapView.myLocationEnabled = true
self.view = mapView
let circleView = UIView()
circleView.backgroundColor = UIColor.redColor().colorWithAlphaComponent(0.5)
view.addSubview(circleView)
view.bringSubviewToFront(circleView)
circleView.translatesAutoresizingMaskIntoConstraints = false
let heightConstraint = NSLayoutConstraint(item: circleView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 100)
let widthConstraint = NSLayoutConstraint(item: circleView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 100)
let centerXConstraint = NSLayoutConstraint(item: circleView, attribute: .CenterX, relatedBy: .Equal, toItem: view, attribute: .CenterX, multiplier: 1, constant: 0)
let centerYConstraint = NSLayoutConstraint(item: circleView, attribute: .CenterY, relatedBy: .Equal, toItem: view, attribute: .CenterY, multiplier: 1, constant: 0)
NSLayoutConstraint.activateConstraints([heightConstraint, widthConstraint, centerXConstraint, centerYConstraint])
view.updateConstraints()
UIView.animateWithDuration(1.0, animations: {
self.view.layoutIfNeeded()
circleView.layer.cornerRadius = CGRectGetWidth(circleView.frame)/2
circleView.clipsToBounds = true
})
}
}
【讨论】:
CLLocationCoordinate2D coordinate = [mapView.projection coordinateForPoint:somePoint];
import UIKit
import GoogleMaps
class ViewController: UIViewController, GMSMapViewDelegate {
var mapView: GMSMapView!
override func viewDidLoad() {
super.viewDidLoad()
let camera = GMSCameraPosition.camera(withLatitude: -33.86,
longitude: 151.20, zoom: 6)
mapView = GMSMapView.map(withFrame: .zero, camera: camera)
mapView.isMyLocationEnabled = true
self.view = mapView
mapView.delegate = self
let circleView = UIView(frame: CGRect(x: 0, y: 0, width: 20, height: 10))
circleView.backgroundColor = UIColor.red.withAlphaComponent(0.5)
view.addSubview(circleView)
view.bringSubview(toFront: circleView)
circleView.translatesAutoresizingMaskIntoConstraints = false
let heightConstraint = NSLayoutConstraint(item: circleView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 100)
let widthConstraint = NSLayoutConstraint(item: circleView, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 100)
let centerXConstraint = NSLayoutConstraint(item: circleView, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1, constant: 0)
let centerYConstraint = NSLayoutConstraint(item: circleView, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 1, constant: 0)
NSLayoutConstraint.activate([heightConstraint, widthConstraint, centerXConstraint, centerYConstraint])
view.updateConstraints()
UIView.animate(withDuration: 1.0, animations: {
self.view.layoutIfNeeded()
circleView.layer.cornerRadius = circleView.frame.width/2
circleView.clipsToBounds = true
})
}
func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
print("\(position.target.latitude) \(position.target.longitude)")
}
}
【讨论】: