iOS开发--MKMapView添加UIPanGestureRecognizer

当我们想给MKMapView添加拖动手势时,第一个想法可能是这样:

- (void)viewDidLoad
{
    //....
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    [self.mapView addGestureRecognizer:panGesture];
}

- (void)handlePan:(UIPanGestureRecognizer*) recognizer
{
    NSLog("handlePan");
}

运行程序,然后拖动地图,我们会发现,控制台并没有打印任何的“handlePan”,也就是说手势识别处理函数handlePan从来没有被执行。后来在stackoverflow上找到了答案,正确的解决方法如下:

- (void)viewDidLoad
{
    //......
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    panGesture.delegate = self;
    [self.mapView addGestureRecognizer:panGesture];
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

- (void)handlePan:(UIPanGestureRecognizer*) recognizer
{
    NSLog("handlePan");
}

对比一下前后两段程序,后一段程序对手势识别的代理进行了赋值,并实现了shouldRecognizeSimultaneouslyWithGestureRecognizer代理方法。

分析一下第二段代码运行成功的原因:MKMapView内部实现时,已经添加了一个UIPanGestureRecognizer,而这里我们又添加了另外一个UIPanGestureRecognizer,也就是说同一个MKMapView有两个相同类型的手势识别,然而运行时内部默认相同类型的手势识别只有一个会得到处理,所以第一段代码始终没有输出handlePan。幸好UIPanGestureRecognizerDelegate提供了gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer方法,该方法返回YES时,意味着所有相同类型的手势识别都会得到处理。

时间: 2024-08-05 11:00:59

iOS开发--MKMapView添加UIPanGestureRecognizer的相关文章

如何在iOS开发中添加新的字体

iOS 开发默认字体是 Heiti SC ,即我们常用的「黑体-简」 用过一段时间后,就会发现字体过于单调了 ,那么怎么在iOS开发中添加新的字体呢 ,这里教你两种方法. 1.使用系统自带的字体 搜索fonts,不难发现,系统中是有不少字体的,而这些字体也是都是可以使用的. 这些字体只用时可以通过代码来设置,也可以直接来设置,方法很简单: 将text的属性设置为Attributed,再选择自己想要的系统字体就OK啦 2.使用自己从网上下载的字体 首先从网上下载自己喜欢的字体,将下载好的字体拖入当

李洪强iOS开发之添加手势

李洪强iOS开发之添加手势 02 - 添加手势

iOS开发--MKMapView截图

地图控件MKMapView由于要从网络上加载地图数据并在内存中缓存,因此通常占用的内存开销特别大,特别是当用户进行放大缩小.快速拖动.3d旋转时,内存基本呈直线上升,单个地图控件占用百兆内存不成问题. 假设在一个UITableView中,每个Cell的宽度和高度分别为320.150,每个Cell中都放置一个高度为320*150的MkMapView,采用Cell重用的方式,这种情况下iPhone 4s上UITableView中将最多包含4个MkMapView.又假设这里的MkMapView仅仅用于

iOS开发中添加PrefixHeader.pch要注意的问题

在Xcode6.0已经不默认生成PrefixHeader.pch文件了,而PrefixHeader.pch文件对我们开发带来的便利性是不言而喻的,所以我们怎么在工程中添加PrefixHeader.pch文件呢. 首先.我们创建一个PrefixHeader.pch 然后将这个prefix文件和这个工程关联, 在Build Settings 中搜索Prefix ,在Apple LLVM 6.0 -Languge 中的Prefix Herder 添加新建   的Prefix的路径(直接将这个文件拖进去

【iOS开发】添加子控件方式(懒加载,GCC)

1 // 2 // ViewController.m 3 // GCC 4 // 5 // Created by admin on 15/10/7. 6 // Copyright © 2015年 admin. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 11 @interface ViewController () 12 13 @property (nonatomic, strong) UIButton* bt

iOS开发项目-02添加子控制器以及项目分层

iOS开发项目-02添加子控制器以及项目分层 一.添加子控制器 1.设置根控制器(自定义) 说明:分析新浪微博应用,观察其整体建构层次.而系统的控制器不能满足项目开发的需求,这里把项目中原有的控制器删除. 自己定义一个TabBarViewController类.让这个类作为window窗口的根控制器. YYAppDelegate.m文件代码: 1 #import "YYAppDelegate.h" 2 #import "YYTabBarViewController.h&quo

ios开发——UIPanGestureRecognizer判定方向

有时我们在做拖动功能的时候会用到UIPanGestureRecognizer手势,例如之前封装过的一个侧滑导航栏: ios开发--仿新版QQ侧滑导航栏的实现 今天在用这个导航栏的时候发现一个问题,UIPanGestureRecognizer是任何滑动手势都会辨别,它不像UISwipeGestureRecognizer一样有方向,这样就会导致如果导航栏的MainView不是UIScrollView或者UITableView的话上下滑动会出现视图消失的错误,这是因为上下滑动也会触发手势的响应方法.

iOS 开发之 点击tabbarItem添加是否跳转登录页面判断

iOS 开发之 点击tabbarItem添加是否跳转登录页面判断 项目里面在点击tabbarItem的时候需要判断是否是登录状态,如果未登录直接跳转登录页面,如果已登录则直接进入. 首先设置UITabBarController的代理为appdelegate如下:myTabBar.delegate = self; 然后在interface后面写上代理<UITabBarControllerDelegate> 实现代理里面的- (BOOL)tabBarController:(UITabBarCont

文顶顶 iOS开发UI篇—在UIImageView中添加按钮以及Tag的参数说明

ios开发UI篇—在ImageView中添加按钮以及Tag的参数说明 一.tag参数 一个视图通常都只有一个父视图,多个子视图,在开发中可以通过使用子视图的tag来取出对应的子视图.方法为Viewwithtag: 提示点:在xib中如果想要通过tag参数获取对应的控件(属性),不要把tag的参数设置为0,因为xib中所有的对象默认tag都为0,设置为0取不到对象. 二.ImageView中添加按钮(1)ImageView和Button的比较 Button按钮的内部可以放置多张图片(4),而Ima