捏合 MKMapView 时保持中心坐标

2024-04-13

如果您在跟踪设备位置时在 Apple 地图应用程序中进行捏合放大/缩小,则捏合手势的“平移”部分将被忽略,蓝色位置指示器将保持固定在屏幕中央。使用普通的时情况并非如此MKMapView.

假设我已经有了用户的位置,我怎样才能达到这个效果呢?我尝试重置代表的中心坐标regionDid/WillChangeAnimated:方法,但它们仅在手势开始和结束时调用。我也尝试添加UIPinchGestureRecognizer当触摸移动时重置中心坐标的子类,但这会导致渲染故障。


Edit:对于那些感兴趣的人,以下内容对我有用。

// CenterGestureRecognizer.h
@interface CenterGestureRecognizer : UIPinchGestureRecognizer

- (id)initWithMapView:(MKMapView *)mapView;

@end
// CenterGestureRecognizer.m
@interface CenterGestureRecognizer ()

- (void)handlePinchGesture;

@property (nonatomic, assign) MKMapView *mapView;

@end

@implementation CenterGestureRecognizer

- (id)initWithMapView:(MKMapView *)mapView {
  if (mapView == nil) {
    [NSException raise:NSInvalidArgumentException format:@"mapView cannot be nil."];
  }

  if ((self = [super initWithTarget:self action:@selector(handlePinchGesture)])) {
    self.mapView = mapView;
  }

  return self;
}

- (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
  return NO;
}

- (BOOL)canPreventGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
  return NO;
}

- (void)handlePinchGesture {
  CLLocation *location = self.mapView.userLocation.location;
  if (location != nil) {
    [self.mapView setCenterCoordinate:location.coordinate];
  }
}

@synthesize mapView;

@end

然后只需将其添加到您的MKMapView:

[self.mapView addGestureRecognizer:[[[CenterGestureRecognizer alloc] initWithMapView:self.mapView] autorelease]];

当用户在实际设备(而不是模拟器)上捏合屏幕时,会导致平移and捏合手势 – 捏合包含运动的“缩放”元素,平移包含垂直和水平变化。你需要拦截并阻挡平底锅,这意味着使用UIPanGestureRecognizer.

Set scrollEnabled to NO,然后添加一个UIPanGestureRecognizer重置中心坐标。该组合将阻止单指平移和捏合的平移部分。


Edit添加更多详细信息,并在看到您的代码后:touchesMoved:withEvent在平移已经开始之后调用,因此如果您更改那里的 MKMapView 中心,您将遇到您所描述的不稳定的渲染问题。你真正需要的是创建一个UIPanGestureRecognizer带有目标动作,如下所示:

    UIPanGestureRecognizer *pan = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(didRecognizePan)] autorelease];
    pan.delegate = self;
    [self.mapView addGestureRecognizer:pan];

...然后添加一个didRecognizePan方法到您的控制器,并在那里进行中心重置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

捏合 MKMapView 时保持中心坐标 的相关文章

  • 在 UITextView 中获取 HTML

    我在中显示htmlUITextView by self textView setValue b Content b forKey contentToHTMLString 编辑内容后UITextView 我想获取包含 html 的内容 所以我
  • 使用特定的 url 启动 UIWebview

    我目前有一个包含四个按钮的视图 并且希望能够启动 UIWebview 并为每个不同的按钮提供特定的 url 我目前可以使用 url 从外部启动 safari 我知道我可以使用代码在每个按钮中显示 UIWebview 并且可以在 UIWebv
  • 如何区分 iTunes Connect / Apple TestFlight 上的 STAGE 和 PRODUCTION 版本?

    阶段构建与阶段服务器的对话 阶段服务器与生产服务器尽可能相同 以用于测试目的 生产构建与生产服务器的通信 生产服务器存储真实的关键数据 这些构建本质上是针对同一应用程序的 但是 iTunes Connect 界面将向您显示以下内容 即构建由
  • 如何组合两个 SwiftyJSON 对象

    我有一个 swiftyJSON 对象 例如 location http img http commentCount 0 timestamp 1432460217550 我希望能够向其附加另一个 swiftyJSON 对象 使其看起来像 lo
  • 使用自动布局、IB 和字体大小时表头视图高度错误

    我正在尝试为我的 uiTableView 创建一个标题视图 不是节标题 我已经有了 我已经在界面生成器中设置了一个 XIB 所有的连接都已连接好并且运行良好 除了桌子没有给它足够的空间 我的问题是表格顶部与表格标题有一点重叠 我的 XIB
  • Objective C 中类别是如何实现的?

    作为一名程序员 我知道如何使用类别 但我很好奇它们是如何实现的 编译器是否将它们编译为对类替换方法 http developer apple com library mac documentation Cocoa Reference Obj
  • iOS Swift 在后台下载大量小文件

    在我的应用程序中 我需要下载具有以下要求的文件 下载大量 例如 3000 个 小 PNG 文件 例如 5KB 逐个 如果应用程序在后台继续下载 如果图像下载失败 通常是因为互联网连接丢失 请等待 X 秒然后重试 如果失败Y次 则认为下载失败
  • 是否可以使用UIPageControl来控制UITableView的移动?

    从Apple示例 PageControl 中我们可以知道UIPageControl可以用来控制scrollview中页面的移动 由于 UITableView 是 UIScrollView 的子类 我想使用 UIPageControl 来控制
  • 在情节提要中将 Segue 拖至自身

    我想将一个 Segue 从我的视图控制器拖到其自身 所以我可以推送该特定视图控制器的 无限 实例 我知道如何在代码中执行此操作 即以编程方式实例化视图控制器 但是 我想尽可能使用 segues 我发现了一些在故事板中进行自我延续的 技巧 但
  • 将 Armadillo C++ 库导入 Xcode

    我是 Mac 用户 正在尝试安装和导入 C Armadillo 库 以下是我到目前为止所采取的步骤 1 我从其网站下载了犰狳库 2 我仔细阅读了下载文件中的 Readme txt 文件 解释了如何安装它 3 我使用CMake将犰狳下载文件制
  • NSURLCache 不缓存

    我正在使用 Xcode 6 1 6A1030 iOS7 和 iOS8 模拟器 NSURLCache 似乎没有缓存任何东西 我使用 Cache Control 标头 我的服务器返回带有 max age 6000 的 Cache Control
  • 访问 google reader 的 Endpoints API 时出错

    我正在尝试在iPhone APP中实现google reader 到目前为止我已经成功收到了sid and auth 当我尝试使用以下命令调用 Endpoints API 时 问题就出现了GET 这是代码 ASIHTTPRequest re
  • 为arm64或arm7s编译OpenSSL FIPS功能库时出现未知的cpu类型

    我可以成功 至少没有警告并生成 a 文件 针对 arm7 x86 64 和 i386 进行编译 当我编译arm64时 我得到Unknown cpu type 100000c no adjustments made 当我编译arm7s时 我得
  • 使用 ZBarSDK 时 iPhone 相机失去自动对焦功能

    我正在开发一个应用程序 用户可以选择是否要扫描条形码或拍摄某物的照片 为了拍照 我正在使用UIImagePickerController照常 为了扫描条形码 我使用 ZbarSDK 1 2ZBarReaderViewController 拍
  • XCode 7 中的 AWSS3TransferManagerUploadRequest

    我今天升级到 Xcode 7 Swift 2 0 我的项目正在使用 CocoaPods 我正在 POD 文件中导入所有与 AWS 相关的文件 我已经设置了桥接标头 并导入了 Amazon 告诉我的所有文件 在升级到 Swift 2 0 之前
  • 当 ViewController 从 UIStoryboard 实例化时,isMemberOfClass 返回 no

    我有一个 OCUnit 测试类 PatientTestViewControllerTests 下面是界面 interface PatientTestViewControllerTests SenTestCase property nonat
  • 带有文本字段的 iPhone AlertView

    我有一个UIAlertView with a UITextField在里面 我想输入mail id并提交于UIAlertView s ok按钮 但是UITextField in the UIAlertView没有回复 请帮助我 thankz
  • 下载进度条在 iOS 企业发行版中没有改变进度

    我正在通过企业分发开发和分发 iPad 应用程序 它们下载并执行良好 因此一切正常 Web 链接 ipa 文件 plist 文件 配置 问题 是 当用户单击链接进行下载时 iPad 中显示下载进度的进度条显示 正在等待 但却是空的并且永远不
  • 游戏中心邀请处理程序,它属于哪里?

    我已经搜索了该网站并发现了这个 GameCenter 邀请处理程序 https stackoverflow com questions 4639284 gamecenter invitation handler He says 正如文档中所
  • 对象指针值作为字典的键

    我想使用对象的引用值作为字典的键 而不是对象值的副本 因此 我本质上想在字典中存储与另一个对象的特定实例关联的对象 并稍后检索该值 这可能吗 是不是完全违背了NSDictionary的理念 我可以看出我可能以错误的方式处理这个问题 因为字典

随机推荐

  • DrawingContext.DrawLine:笔没有完全不透明度?

    当我画这样的东西时 这里只是随机画 public partial class MainWindow Window public MainWindow InitializeComponent DrawingVisual visual new
  • 专业密钥的许可证检查

    因此 我想制作一个加载了完整功能的免费应用程序 在应用程序检测到许可的专业版密钥之前 专业版功能将被禁用 当然 我想让专业密钥使用 LVL 检查其许可证 虽然到目前为止我知道如何正确做事 但我不知道如何使专业版密钥与应用程序进行通信以启用专
  • 当在封闭类模板中引用特化时,成员类模板的隐式实例化

    include
  • fetch-api 中的“最大重定向”错误意味着什么?

    我试图从网站获取一些数据 但收到以下错误 FetchError maximum redirect reached at
  • 在 Bash 中的函数内部使用声明

    我想使用函数更改全局变量 或至少附加到它 input Hello example input func declare x example input World func echo input 其输出将是 Hello 的原始值 如果该函数
  • 重新排序时无法将 UITableViewCell 从当前位置拖动

    我试图让我的核心数据支持的 UITableView 具有重新排序的能力 在实现所有这些委托和提到的核心数据的一些技术之后here https stackoverflow com q 1077568 147564我发现奇怪的行为 点击编辑按钮
  • 垃圾收集和 JNI 调用

    我遇到 JNI 程序随机内存不足的问题 这是一个 32 位 java 程序 它读取文件 进行一些图像处理 通常使用 250MB 到 1GB 然后 所有这些对象都会被丢弃 然后程序对 JNI 程序进行一系列调用 通常需要 100 250MB
  • 转换为Weka日期格式

    我有一个带有一些属性的 csv 文件 一种是日期属性 日期采用这种形式 yyyy mm dd hh mm ss 但 Weka 将其视为名义类型而不是日期类型 如何解决这个问题 请在这件事上给予我帮助 我用Weka资源管理器 一个很好的参考
  • 执行 `brew tap exolnet/homebrew-deprecated` 时出错

    我要安装 电子邮件受保护 cdn cgi l email protection在我的 MacBook Pro 和 Macos M1 上 我想执行以下步骤 brew tap exolnet homebrew deprecated brew i
  • OpenCV - 如何在 iOS 上将自适应阈值应用于图像

    我正在尝试将自适应阈值应用于 A4 纸的图像 如下所示 我使用下面的代码来应用图像处理 UIImage processImageWithOpenCV UIImage inputImage cv Mat cvImage inputImage
  • 将 jQuery 加载到 chrome-extension 中

    我正在尝试迈入 Chrome 扩展的神奇世界的第一步 现在我已经构建了我的清单并尝试加载jquery name Test Extension version 0 1 manifest version 2 description First
  • 删除表中的重复条目[重复]

    这个问题在这里已经有答案了 我想从下表中删除多个重复的键 id name uid 1 ekta 5 2 ekta 5 3 sharma 10 4 sharma 10 希望它像 id name uid 1 ekta 5 3 sharma 10
  • 如何从点击事件中知道是否选择了垫选项?

    我有多个mat select并想知道是否mat option所单击的内容已被选择或取消选择 这 event target对象传递时 click 被解雇 没有selected我可以使用的属性
  • 在图表上绘制单点

    我有一个小提琴图 如下所示 我想在小提琴顶部的每个 x 值上绘制一些单独的点 或线 十字 点 以最简单的为准 如下所示 我该怎么做呢 这是制作小提琴图的代码 参见使用 Matplotlib 绘制小提琴图 http pyinsci blogs
  • 使用div和jquery连续循环

    我正在继续一个上一篇文章 https stackoverflow com questions 1748656 images sliding continuously with table and jquery 但我想我应该打开一个新线程 因
  • 是否可以将实体框架与 Windows Azure 开发存储服务一起使用?

    编辑 是否可以将实体框架与 Windows Azure 开发存储服务一起使用 如何 Thanks 不 这是不可能或不切实际的 Azure 存储 与 SQL Azure 不同 不支持加入 并且可能无法很好地响应即席查询 但你不需要它 Azur
  • 覆盖 ZipArchiveEntry 的内容

    如何覆盖 a 的内容ZipArchiveEntry 以下代码使用StreamWriter with StringBuilder如果新文件内容比原始文件内容短 则会失败 例如 using System IO Compression using
  • Git 1.8:推送错误:dst ref refs/heads/master 从多个 src 接收

    git 1 8 的另一个问题 git push error dst ref refs heads master receives from more than one src error failed to push some refs t
  • 如何使用加密的 DLQ 将重新驱动策略添加到 SNS

    我有一个 SNS 用 KMS 加密 由两个 lambda 订阅 我正在尝试向其中一项订阅添加重新驱动策略 相关 DLQ 已加密 添加重新驱动策略会出现错误 无法检查 Amazon SQS 队列权限 确保队列存在并且您的帐户有权读取队列的属性
  • 捏合 MKMapView 时保持中心坐标

    如果您在跟踪设备位置时在 Apple 地图应用程序中进行捏合放大 缩小 则捏合手势的 平移 部分将被忽略 蓝色位置指示器将保持固定在屏幕中央 使用普通的时情况并非如此MKMapView 假设我已经有了用户的位置 我怎样才能达到这个效果呢 我