如何使用双击放大/缩小地图视图+;ios刷卡识别器(如谷歌地图)
如何使用双击+滑动识别器(如谷歌地图)放大/缩小地图视图 要添加到地图视图的识别器是什么,我更喜欢swift lang 谢谢 预览:如何使用双击放大/缩小地图视图+;ios刷卡识别器(如谷歌地图),ios,swift,xcode,Ios,Swift,Xcode,如何使用双击+滑动识别器(如谷歌地图)放大/缩小地图视图 要添加到地图视图的识别器是什么,我更喜欢swift lang 谢谢 预览: @IBOutlet var map: MKMapView! override func viewDidLoad() { super.viewDidLoad() map.showsUserLocation = true map.delegate = self
@IBOutlet var map: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
map.showsUserLocation = true
map.delegate = self
let LongPress = UILongPressGestureRecognizer(target: self, action: "LongPress:")
LongPress.minimumPressDuration = 1
LongPress.numberOfTapsRequired = 2
map.addGestureRecognizer(LongPress)
对于双击,您可以使用以下代码:
let tap = UITapGestureRecognizer(target: self, action: #selector(doubleTapped))
tap.numberOfTapsRequired = 2
view.addGestureRecognizer(tap)
func doubleTapped() {
// do your code here
}
在链接上,您可以看到更多手势。提供了放大/缩小功能。 双击- 除了双击之外,您不需要自己实现任何识别器。MKMapView构建在与UIScrollView相同的类之上。通过查看其协议,您将看到可用的方法。但是,MKMapKit会覆盖它们,并且不能将独立委托分配给其内部UIScrollView。但是你可以覆盖
- mapView:regionWillChangeAnimated:
- mapView:regionDidChangeAnimated:
协议和手动比较可见矩形和缩放级别的方法。我找到了解决方案。显然,这是一个泛感觉事件,但是你不能使用任何手势来实现,因为双击手势在你离开屏幕之前不会触发。因此,另一种方法是覆盖mapView中的touchesMoved函数:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
for touch in touches {
if(touch.tapCount == 2) // tapCount 2 means tap on map twice
{
tapPositionY = touch.location(in: self).y // self is the mapView
}
}
}
override func touchsbegind(touch:Set,带有事件:UIEvent?){
super.touchesbeated(touches,with:event)
接触{
if(touch.tapCount==2)//tapCount 2表示在地图上点击两次
{
tapPositionY=touch.location(在:self中)。y//self是地图视图
}
}
}
t位置用于存储用户在屏幕上触摸的位置。因此,我们可以知道放大或缩小地图视图
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesMoved(touches, with: event)
for touch in touches {
if(touch.tapCount == 2)
{
let positionY = touch.location(in: self).y
// 0.95 and 1.05 is zoom in/ zoom out parameter. you can change it
let zoom = positionY - tapPositionY > 0 ? 0.95 : 1.05
var region = self.region
var span = self.region.span
span.latitudeDelta = span.latitudeDelta * zoom
span.longitudeDelta = span.longitudeDelta * zoom
region.span = span
self.setRegion(region, animated: false)
tapPositionY = positionY // storage the position
}
}
}
override func touchesMoved(touch:Set,带有事件:UIEvent?){
super.touchesMoved(touches,with:event)
接触{
如果(touch.tapCount==2)
{
让positionY=触摸位置(in:self).y
//0.95和1.05是放大/缩小参数。您可以更改它
让缩放=位置Y-t位置Y>0?0.95:1.05
var区域=自我区域
var span=self.region.span
span.latitudeDelta=span.latitudeDelta*缩放
span.longitudeDelta=span.longitudeDelta*缩放
region.span=span
self.setRegion(区域,动画:false)
t位置Y=位置Y//存储位置
}
}
}
setRegion animated必须为false,但效果相同。如果设置为true,则会像延迟一样。我知道UIPinchGestureRecognizer已经添加到地图中以进行放大/缩小,但我需要添加一个识别器,该识别器只需使用一个手指(双击+滑动)即可执行相同操作。您可以在谷歌地图应用程序中尝试此操作,然后您就会理解我。