
请参阅附加屏幕截图,了解第一个和最终状态.
当用户平移上/下时,我已经获得了叠加层和屏幕顶部之间空间的CGRect.然而,当用户向上平移时,我如何使用它来移动地图和图钉同时放大地图……当用户向下平移时再次缩小,到目前为止我已经躲过了.
我尝试过不同的方法,从尝试调整可见矩形到调整地图视图的框架.答案可能在于一些MKMapRect / Region技巧.
(Freepik CC BY 3.0手形图标)
解决方法 实际上,keithbhunter的代码很慢,因为除了更快地更新区域之外,地图也会改变高度,这会导致额外的开销!我更新了代码,使其顺利运行.
使用此代码,我所做的是保持地图视图的大小相同,但我移动中心点以补偿滑动视图的高度.
要使此代码生效,您必须修改keithbhunter的设置,以便mapVIEw的底部约束完全固定到supervIEw的底部(而不是pullVIEw(以便mapVIEw始终与超级视图的大小相同).设置是一样的.
此外,还可以使用变量maxMetersdistance自定义缩放量
在这里,我总是以埃菲尔铁塔为中心
import UIKitimport MapKitclass VIEwController: UIVIEwController { @IBOutlet weak var mapVIEw: MKMapVIEw! @IBOutlet weak var slIDingVIEw: UIVIEw! @IBOutlet weak var slIDingVIEwHeight: NSLayoutConstraint! var maxMetersdistance:CGfloat = 10000.0; // customize this to set how far the map zooms out of the interest area overrIDe func vIEwDIDLoad() { super.vIEwDIDLoad() let pan = UIPanGestureRecognizer(target: self,action: "vIEwDIDPan:") self.slIDingVIEw.addGestureRecognizer(pan) firstTimeCenter() } func firstTimeCenter(){ var coordinate = CLLocationCoordinate2D(latitude: 48.8582,longitude: 2.2945) let region = MKCoordinateRegionMakeWithdistance(coordinate,Double(maxMetersdistance),Double(maxMetersdistance)) self.mapVIEw.setRegion(region,animated: true) } func reloadMap() { let height = CGfloat(self.slIDingVIEwHeight.constant) var regiondistance = (maxMetersdistance / self.vIEw.frame.height) * height regiondistance = maxMetersdistance - regiondistance var coordinate = CLLocationCoordinate2D(latitude: 48.8582,longitude: 2.2945) var mapRect = mapVIEw.visibleMapRect; var metersPerMapPoint = MKMetersPerMapPointAtLatitude(coordinate.latitude); var metersPerPixel = CGfloat(metersPerMapPoint) * CGfloat(mapRect.size.wIDth) / CGfloat(mapVIEw.bounds.size.wIDth); var totalMeters = Double(metersPerPixel) * Double(height/2) coordinate = self.translateCoord(coordinate,MetersLat: -totalMeters,MetersLong: 0.0) let region = MKCoordinateRegionMakeWithdistance(coordinate,Double(regiondistance),Double(regiondistance)) self.mapVIEw.setRegion(region,animated: false) } func vIEwDIDPan(panGesture: UIPanGestureRecognizer) { let location = panGesture.locationInVIEw(self.vIEw) self.slIDingVIEwHeight.constant = self.vIEw.frame.size.height - location.y self.reloadMap() } func translateCoord(coord:CLLocationCoordinate2D,MetersLat:Double,MetersLong:Double)->CLLocationCoordinate2D{ var tempCoord = CLLocationCoordinate2D() var tempRegion = MKCoordinateRegionMakeWithdistance(coord,MetersLat,MetersLong); var tempSpan = tempRegion.span; tempCoord.latitude = coord.latitude + tempSpan.latitudeDelta; tempCoord.longitude = coord.longitude + tempSpan.longitudeDelta; return tempCoord; }} 总结 以上是内存溢出为你收集整理的ios – 如何在MKMapView中将引脚和贴图保持在移动叠加层的中心全部内容,希望文章能够帮你解决ios – 如何在MKMapView中将引脚和贴图保持在移动叠加层的中心所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)