UIScrollView ZoomToRect 未缩放到给定的矩形(从 UITouch CGPoint 创建)

2024-03-03

我的应用程序有一个带有一个子视图的 UIScrollView。子视图是一个扩展的 UIView,它使用 drawLayer 事件中的图层将 PDF 页面打印到自身。

使用内置的捏合功能进行缩放效果非常好。 setZoomScale 也按预期工作。

我一直在努力使用 ZoomToRect 函数。我在网上找到了一个示例,它从给定的 CGPoint 生成 CGRect ZoomRect 变量。

在 TouchsEnded 函数中,如果双击并且它们一直缩小,我想放大到我创建的 PDFUIView,就好像它们在双击的位置捏合中心一样。

因此,假设我将 UITouch 变量传递给我的函数,如果双击,该函数将使用 ZoomToRect。

我从在苹果网站上找到的以下功能开始:

http://developer.apple.com/iphone/library/documentation/WindowsViews/Conceptual/UIScrollView_pg/ZoomZoom/ZoomZoom.html http://developer.apple.com/iphone/library/documentation/WindowsViews/Conceptual/UIScrollView_pg/ZoomZoom/ZoomZoom.html

以下是我的 UIScrollView 扩展类的修改版本:

- (void)zoomToCenter:(float)scale withCenter:(CGPoint)center {     

    CGRect zoomRect;
    zoomRect.size.height = self.frame.size.height / scale;
    zoomRect.size.width  = self.frame.size.width  / scale;

    zoomRect.origin.x = center.x - (zoomRect.size.width  / 2.0);
    zoomRect.origin.y = center.y - (zoomRect.size.height / 2.0); 

    //return zoomRect;

    [self zoomToRect:zoomRect animated:YES];

} 

当我这样做时, UIScrollView 似乎使用上面的 ZoomRect 的右下边缘而不是中心进行缩放。

如果我像这样制作 UIView

UIView *v = [[UIView alloc] initWithFrame:zoomRect]; 
[v setBackgroundColor:[UIView redColor]];
[self addSubview:v];

红色框显示,触摸点位于中心。

请注意:我是在 PC 上写这篇文章的,我记得在 Mac 上把除以两部分搞乱了,所以假设这会绘制一个触摸点位于中心的矩形。如果 UIView 偏离中心但缩放到正确的位置,那就太好了。

然而,发生的情况是,当它执行zoomToRect时,它似乎使用了放大结果左上角的zoomRect的右下角。

另外,我注意到根据我点击 UIScrollView 的位置,它会锚定到不同的位置。似乎中间有一个十字,它以某种方式反映了这些点,好像中间左边的任何地方都是负面反射,而中间右边的任何地方都是正面反射?

这看起来很复杂,难道不应该缩放到 UIView 能够绘制的矩形吗?

我进行了大量的研究来弄清楚如何创建高质量的 PDF,所以我假设使用 CALayer 可能会抛弃坐标系?但对于 UIScrollView 来说,它应该将其视为尺寸为 768x985 的视图。

这有点高级,请假设创建 ZoomRect 的代码都很好。 UIView 中的 CALayer 有更深层次的东西,而 UIScrollView 中......


好的另一个答案:

苹果提供的例程对我有用,但是您需要让手势识别器将点击点转换为 imageView 坐标 - 而不是滚动条。

Apple 的示例就是这样做的,但由于我们的应用程序工作方式不同(我们更改了 UIImageView),因此在 uiscrollview 上设置了gestureRecongnizer - 效果很好,但您需要在handleDoubleTap 中执行此操作:

这大致基于苹果示例代码“TaptoZoom”,但正如我所说,我们需要将手势识别器连接到滚动视图。

- (void)handleDoubleTap:(UIGestureRecognizer *)gestureRecognizer {
    // double tap zooms in
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(handleSingleTap:) object:nil];
    float newScale = [imageScrollView zoomScale] * 1.5;
    // Note we need to get location of the tap in the imageView coords, not the imageScrollView
    CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:imageView]];
    [imageScrollView zoomToRect:zoomRect animated:YES];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UIScrollView ZoomToRect 未缩放到给定的矩形(从 UITouch CGPoint 创建) 的相关文章

  • 如何在iPhone中制作UIButton垂直滑块菜单

    在我的应用程序中 我想制作带有滚动视图的 UIButton 滑块 其中当我们滚动按钮的 uiscrollview 时 按钮将位于中心 请参阅这些应用程序的第一个屏幕 sothttp itunes apple com au app id422
  • iPad 上的 ios11 iphone 应用程序图标丢失

    我有一个仅限 iPhone 的应用程序 但它也可以在 iPad 上以兼容模式运行 毫不奇怪 但是当我更新了ios11的应用程序后 iPad上的应用程序图标丢失了 这是我尝试过的 在iPhone模拟器上启动 出现图标 在 iPad 模拟器上启
  • 从 iOS 中的 App Delegate 调用当前视图控制器中的方法

    我有两个视图控制器 BuildingsViewController 和 RoomsViewController 它们都使用应用程序委托中名为上传的函数 上传函数基本上执行一个 HTTP 请求 如果成功或不成功 都会触发 uialertvie
  • 从 iPhone 设备查找当前国家/地区

    我必须在 iPhone 设置中获取当前国家 地区 谁能告诉我如何在 iPhone 应用程序中获取当前国家 地区 我必须使用当前国家 地区来解析需要传递当前国家 地区的 RSS 提要 请帮我找到那个国家 提前致谢 要查找用户选择的语言所在的国
  • 适用于 iPhone 和 HTTP 直播的实时视频聊天

    所以一般来说 我想为 iPhone 制作一个具有视频聊天功能的应用程序 但经过多次搜索 我仍然找不到任何成功的结果 是否有任何公共或私有 API 可用于在 iPhone 上执行此操作 如果您的答案是 是 请帮助我 基本上 我想要的是读取连接
  • 将 UIImageView 置于 UIScrollView 内而不使用 contentInset?

    我一直无法找到我遇到的这个问题的答案 我在 UIScrollView 中有一个 UIImageView 我希望将其内容垂直居中 目前 我能够做到这一点的唯一方法是根据 UIImageView 大小的高度设置滚动视图的 contentInse
  • 基于 ID 的 UiLocalNotifications

    是否有关于根据那里的 Id 存储 UIlocalNotifications 并根据那里的 Id 取消通知的教程 在本地通知中 您有此词典的用户词典 您可以取消通知 http www picksourcecode com ps ct 1612
  • 在后台每 X 分钟执行一次函数不起作用

    我使用此代码每 X 分钟执行一次函数 void executeEveryOneMinute self myFunction dispatch after dispatch time DISPATCH TIME NOW int64 t 60
  • 如何将 NSDate 转换为 NSString?

    我想将 NSDate 转换为 NSString 这怎么可能 我尝试了这个 但它不起作用 它正在生成异常 NSString dateToString NSString alloc initWithFormat NSString dateObj
  • Excel 工作表到 iPhone 数据 -- A 点到 B 点

    尽可能简单 我有一个非常简单的 Excel 电子表格 只有 1000 多条记录 我想将其用作 iPhone 应用程序的静态数据源 最好的进攻计划是什么 我心中的可能性 1 直接读取XLS作为数据源 是否有Obj C库用于此 2 将XLS 转
  • 调用了 numberOfRowsInSection 但未调用 cellForRowAtIndexPath

    在我的表视图中节中的行数被调用两次但是cellForRowAtIndexPath不叫 我想在 tableView 中显示 Facebook 好友列表 如果 cellForRowAtIndexPath 调用我的问题就解决了 我在这里的数组中得
  • 将滚动事件从 uibutton 传递到 uiscrollview

    我有水平的UIScrollView这是从UIScrollView我添加了UIButtons水平地 我只能滚动到按钮区域之外 但如果我想滚动到任何按钮就会触发UIControlEventTouchUpInside事件 我不想要这个 我想开火U
  • 在移动网站中处理 iPhone 事件(如向左滑动)

    iPhone 浏览器是否有可以使用 Javascript 挂钩的特殊事件 例如 如果用户向左滑动 我想执行某个操作 如果有类似的活动 很高兴看到所有这些活动的参考 理想情况下 有一天所有触摸屏移动浏览器都会有一个标准 您可以访问多点触控事件
  • iPhone 应用程序中的文本在 ipad 中的 2x 模式下出现别名

    我有一个适用于 iPhone 的应用程序 使用高分辨率图像使其适用于 iPhone 和 iPad 但在 iPad 中 所有文本在 2x 模式下都会出现别名 是否可以让App在2x模式下自动改变字体大小 或者我必须手动检测设备类型并处理字体大
  • skView.ignoreSiblingOrder 在 swift 中的重要性/效率?

    这样做有多重要 高效skView ignoreSiblingOrder true初始化场景时 现在 我将其设置为 true 但由于某种原因 当我从 MainMenu 场景启动 GameScene 时 它 会在我的角色之前加载背景 即使背景的
  • 如何从 iOS 应用程序检测不安全的 wifi 网络

    我想检测我的应用程序中是否存在不安全的 wifi 网络 是否有任何公共 iOS API 可以实现相同的目的 没有记录的 API 可以获取该信息 如果您的应用程序需要通过网络发送和接收敏感数据 您通常应该假设没有安全连接
  • 如何将 UIImageView 裁剪为自定义形状

    用户是否可以在该位周围画一条虚线 圆圈 UIImageView他们希望裁剪到 然后为UIImageView调整大小到这些点 这有点像 Photoshop 中的套索 选取框效果 更新 从 iOS 8 x 开始 UIImageView 提供了m
  • 无需 iPhone 6 Plus 即可预览 iOS 应用程序

    我已经在 Yosemite 中使用 iPhone 6 和 Quicktime 完成了 iOS 应用程序预览 视频 但我无法在 iTunes Connect 中为 iPhone 6 上传它 而且我没有 iPhone 6 设备 有没有办法在没有
  • 我如何从 iPhone 设备获取电子邮件历史记录..?

    friends 我想从我的 iPhone 访问电子邮件历史记录 并且还希望在收到新邮件时收到通知 如果可能的话 请向我提供源代码片段 Thanks 简而言之 使用任何已记录的 API 都是不可能的
  • Objective C (iphone) 关于发布的问题

    如果我创建一个视图 并将其添加为子视图并将其添加到数组中 是否必须释放它两次 UIView cat UIView alloc initWithFrame someFrame self view addSubview cat self ani

随机推荐

  • 如何消除数字范围中的重叠 (AWK)

    我正在尝试删除文件内的重叠部分 有一堆以 A 开头的记录 并且具有 起始值 和 结束值 还有一堆以 B 开头的记录 也有范围 并且显示与以 A 开头的记录可能重叠 这个想法是从 A 中删除重叠范围 以便只存在非重叠范围 B 中的某些记录具有
  • 为什么GCC的ifstream >> double分配这么多内存?

    我需要读取一系列数字以空格分隔的人类可读文件 https earth info nga mil GandG wgs84 gravitymod egm96 ww15mgh grd z并做了一些数学计算 但我在读取文件时遇到了一些真正奇怪的内存
  • WPF 在单独的 UI 线程上加载动画? (C#)

    好的 我有一个加载动画 在填充大型数据表时运行 让用户知道程序尚未冻结 我的动画工作正常 但在数据表更新时它也会冻结 是否有某种方法可以拥有多个 UI 线程 以便在 DataTable 加载信息时动画能够继续运行 编辑 当前代码如下 pri
  • 检查 git 存储库的完整性

    当我的磁盘在访问 git 存储库时报告了一长串 不可恢复的读取错误 后 我担心我对其他存储库进行了一些推送 这些存储库可能会将错误的内容转发给它们 顺便说一句 在使用提交 推 拉访问存储库时 没有任何 git 命令报告任何错误 但访问存储库
  • PyQt QML 错误控制台丢失

    标题几乎说明了一切 假设我有这个简单的应用程序 main py gt gt gt import sys from PyQt5 QtCore import QUrl from PyQt5 QtWidgets import QApplicati
  • BeautifulSoup findall 带有类属性 - unicode 编码错误

    我正在使用 BeautifulSoup 从中提取新闻报道 仅标题 黑客新闻 http news ycombinator com到现在为止就这么多了 import urllib2 from BeautifulSoup import Beaut
  • 在具有大标题的导航控制器中时,UIRefreshControl 不会以横向方式显示

    我有一个普通的UITableViewController嵌入一 个UINavigationController which 喜欢大标题 我向表视图控制器添加了刷新控件 在 iOS 11 中的 iPhone 上 如果我以纵向模式启动应用程序
  • 列出已安装的移动配置文件

    在 OSX 上 有什么方法可以以编程方式获取计算机上安装的所有 iOS 移动配置文件的列表 这是您可以在 XCode 管理器中看到的列表 这可能是同一个列表 但如果你看一下 Library MobileDevice Provisioning
  • 为什么运行我的 Java 应用程序时 proxyHost/proxyPort 不起作用?

    我有一个与一些 REST 服务通信的 java 应用程序 我想使用 Fiddler 查看 HTTP 流量 Fiddler 充当 localhost 8888 上的代理 因此以下 Java VM 选项应该配置 java 以使用此代理 Dhtt
  • Android Studio 0.4.0 中添加新首选项屏幕的选项在哪里?

    Android Studio 0 4 0 Hello 我想在 Android Studio 中添加一个新的首选项屏幕 但是 我找不到执行此操作的菜单选项 在 Eclipse 中 您可以右键单击资源目录 新的 xml 文件 资源类型 偏好 但
  • 不小心安装了 python 3.5 与 python3.5:这不好吗?

    我运行预装了 Python 3 4 x 的 Linux Mint 我正在开始一个新项目 想要利用 3 5 左右的东西 所以我决定安装 3 5 并创建指向它的新虚拟环境 所以 我不小心输入了 sudo apt get install pyth
  • 使用 Paramiko SSH 设置 virtualenv

    我在 Windows 中使用 Python 和 Django 的经验有限 现在我试图了解如何将我的代码部署到 Ubuntu 16 04 LTS VPS 在阅读了有关 SE 的各种教程和大量答案后 我成功地取得了很大的进展 好吧 对我来说 但
  • CUT 是否支持多个空格作为分隔符?

    我有这样的文字 word1 word2 word3 word4 一对单词之间可能有多个空格 我想从每行中获取一些单词列 当我使用cat file cut d f1 2 4似乎有些字段是空间 这不是我所期望的 我知道awk可以实现这一点 问题
  • PhantomJSDriver 接受警报

    如何使用 Java 中的 PhantomJSDriver 接受警报 我正在尝试通过 YouTube 来实现这一点 我无法让它工作 我尝试使用此代码在任何驱动程序上接受 但它不适用于 PhantomJS static void confirm
  • 用不同类型的对象填充列表

    我正在研究一种推荐算法 一切正常 但现在我想将这段代码实现到我的开发团队的分支中 我将从顶部开始 我的算法可以推荐两种类型的对象 餐厅和菜肴 餐厅 public class Restaurant public Guid Id get set
  • SignalR Core - 错误:Websocket 已关闭,状态代码:1006

    我在 Angular 应用程序中使用 SignalR 当我销毁 Angular 中的组件时 我也想停止与集线器的连接 我使用命令 this hubConnection stop 但我在 Chrome 控制台中收到错误 Websocket 已
  • 在 Javascript 中从 BLOB URL 读取数据

    我有一个 BLOB URL 我想将其重新创建为第二个 BLOB URL 以便默认下载它 var blob1 new Blob Hello world type text plain url1 window URL createObjectU
  • DatePickerDialog 已将 androidx.fragment.app.DialogFragment 中的按钮涂黑

    这个简单的类 class DateSelectionDialogFragment DialogFragment override fun onCreateDialog savedInstanceState Bundle Dialog val
  • Spring boot安全-多个WebSecurityConfigurerAdapter

    我有一个 auth cas 库 它为我的 Spring Boot 项目提供身份验证 在这个 auth cas 库中有一个类扩展WebSecurityConfigurerAdapter具有以下配置功能 Override Conditional
  • UIScrollView ZoomToRect 未缩放到给定的矩形(从 UITouch CGPoint 创建)

    我的应用程序有一个带有一个子视图的 UIScrollView 子视图是一个扩展的 UIView 它使用 drawLayer 事件中的图层将 PDF 页面打印到自身 使用内置的捏合功能进行缩放效果非常好 setZoomScale 也按预期工作