使用滚动视图通过 Swift 放大图像

2024-04-27

我正在从 Apple 的“Swift 应用程序开发”中学习 Swift。

我遇到了约束问题,特别是在第 593 页的“I Spy”实验室。它基本上希望您创建一个滚动视图,其中包含图像视图,并使其可以放大图像并滚动它,例如当您打开照片时,在“照片”应用程序中。

书上说要使滚动视图和图像视图与屏幕一样大并带有约束,所以我将顶部、底部、前导和尾随约束添加为 0,并且效果很好。

当我添加图像视图时,我开始遇到问题。如果我设置与滚动视图相同的约束,它会说它缺少 X 和 Y 位置的约束,并且它不起作用。 如果我添加这些约束,那么我将其水平和垂直对齐,图像就会拉伸到屏幕,但我仍然无法缩放或滚动。

视图控制器的代码是:

class ViewController: UIViewController, UIScrollViewDelegate {

@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var imageView: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
    scrollView.delegate = ViewController()
    updateZoomFor(size: view.bounds.size)
}

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    return imageView
}

func updateZoomFor(size: CGSize){
    let widthScale = size.width / imageView.bounds.width
    let heightScale = size.height / imageView.bounds.height
    let scale = min(widthScale,heightScale)
    scrollView.minimumZoomScale = scale
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}


}

我尝试在互联网上查找,但没有找到任何东西。我希望这不是一个愚蠢的问题,但我已经尝试了一天来解决这个问题。


让我们从约束开始,您的滚动视图已正确添加, 现在,对于您的 imageView,将其拖放到滚动视图中,按照您想要的方式指定左右顶部和底部约束,并将 imageView 垂直和水平居中,就像下面的屏幕截图一样

让我们继续处理 imageView。

在故事板上选择它,然后在助理编辑器中将内容模式更改为宽高比,如下所示:

现在让我们转向代码,

通过输入scrollView.delegate = ViewController(),您正在创建一个ViewController类型的新实例,并且您没有使用现有的实例,这就是为什么您应该将此行替换为:

scrollView.delegate = self

这样您将引用您的超类,即您现有的视图控制器

并考虑添加这个:

scrollView.minimumZoomScale = 1.0
scrollView.maximumZoomScale = 5.0

scrollView.contentSize = .init(width: 2000, height: 2000)

最好的, 马克

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

使用滚动视图通过 Swift 放大图像 的相关文章

随机推荐

  • 当滚动 Recyclerview 单选按钮更改其选择时

    我正在使用 RecyclerView 设置单选按钮 选定的按钮选择在滚动时会更改其位置 请帮助我 Thanx in advance 我的 RecylerView 布局
  • 在 Jenkins 上编译 Android 项目时如何修复此 ZipException?

    我最近将 Jenkins 机器上的 Android SDK 从 rev13 更新到 rev15 并且必须重做一些自定义构建内容build xml以适应 rev14 中所做的更改 我在我的工作站上解决了这个问题 并检查了它 期望一切顺利 相反
  • 标签系统:Toxi 解决方案问题

    我对标签数据库模式的 Toxi 解决方案感到有点困惑 我正在开发一个系统 用户可以向该系统提交项目 并且这些项目可以具有与其关联的标签 在阅读了 tagchemas 后 我发现 Toxi 解决方案最适合我的需求 但是 我不完全确定我的计划是
  • 从 Nginx 到 Express.js 上的 socket.io 的反向代理上“无法获取”

    我已经关注了通过私有网络让 Node js 在两台 Ubuntu 14 04 服务器上通过 Nginx 工作 Node js 位于 myappserver 上 通过私有 IP myprivatewebserver 访问 并通过 mypubl
  • 如何使用 poi 获取 java 中单元格的数据验证源?

    I have defined a list of valuses my list in one excel sheet as follow 在另一个 Excel 工作表中 我将某些单元格引用到该列表 以便该列表在单元格中显示为下拉列表 如下
  • AngularFire 0.9 解决了 UI 路由器问题

    我已按照教程进行操作here https www firebase com docs web libraries angular guide html section routes但不知何故犯了这个错误 Unknown provider c
  • C++ 部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?

    我开始尝试概念的 C 20 功能 当我意识到可以部分显式地为概念提供模板参数时 我感到非常高兴 我读了 cppreference 文章 但没有找到那里提到的内容 但后来我意识到一些奇怪的事情 模板参数的指定顺序与我的预期相反 当提供一个显式
  • 如何知道线程中的工作何时完成?

    单击按钮时我需要创建多个线程 我已经这样做了 Dim myThread As New Threading Thread AddressOf getFile myThread IsBackground True myThread Start
  • 是否有用于修改 Rails 3 的 I18n 语言环境的 Web UI?

    我正在寻找一种方法来通过 web gui 修改语言环境的 I18n yml 文件的值 是否有一些 gem 可以实现这一点 模仿 Twitter 翻译中心的 gemgithub com badrit translation center ht
  • 小米Exif方向标签错误

    我在用着ExifInterface对于通过检测方向标签从图库中选取的旋转图像 它正在工作 最近我在小米9 SE上测试了应用程序 发现相机拍摄的照片有方向标签8 旋转270 但照片方向是正确的 不需要旋转 为什么方向标签错误 如何找到正确的旋
  • PyGtk3如何更改应用程序主题?

    我尝试使用 Gtk rc parse path to Hooli gtk 3 gtk css 代码进行 rc parse 方法 但它不起作用 这个问题很简单 但解决问题并不容易 我如何更改我的 gtk 应用程序主题 或者我如何在我的 gtk
  • 在 Mac Sierra 上,如何授予 ssh 会话对显示器的访问权限?

    这是后续的使用 Jenkins 运行 ios sim https stackoverflow com questions 13518532 running ios sim with jenkins 当 Jenkins 从机通过 ssh 运行
  • MongoDB C# 驱动程序:使用 linq 在列表中使用或包含在列表中进行不区分大小写的比较

    我正在使用 MongoDB C 驱动程序 我想对集合执行 linq where 子句 将属性的小写版本与内存中列表的小写版本进行比较 像这样 items items Where i gt listToCheck Contains i Pro
  • mod_fcgid + PHP + apache 锁定

    我正在运行一个相当典型的 LAMP 堆栈 其中 PHP 通过 mod fcgid 运行 考虑到服务器收到的流量 我认为服务器处于 高负载 状态 存在一个间歇性问题 当访问依赖 PHP 的站点时 Apache 报告所有连接都处于 正在发送内容
  • Boost.MPL 和类型列表生成

    背景 这是用于游戏引擎中的内存管理器 我有一个freelist已实现 并且希望有一个编译时列表 如果有 例如 MPL 或 Fusion 向量 这freelist对应于分配大小 当分配 释放大小小于常量的对象时 它们将转到相应的freelis
  • 设置快捷方式以替换 VIM 中轻松选择的字符串

    我有很多 php html 文件 其中包含许多应该使用 gettext 国际化的字符串 因此 我必须遍历每个文件 找到 消息 字符串并将每个字符串替换为 I use vim and would like to setup a shortcu
  • 单击 libGDX 中的 Actor

    我的游戏中有一个覆盖层 其中包含屏幕图像和屏幕 上 的一组按钮 截屏 My Screen有一个Stage The Stage有一组Group对象 我将其视为图层 第一组具有背景 中间的组具有游戏元素 最前面的组具有屏幕覆盖 覆盖层由一个Im
  • 如何找出 Kubernetes 中可用的端口?

    我想在 kubernetes 集群中的不同端口上运行多个服务 并且想知道如何检查哪些端口可用并且不会与我的服务产生任何冲突 我还想知道每个端口上的服务名称 以便我可以更好地理解我的配置 有类似的问题涉及验证哪个NodePorts已经在使用中
  • Rails 4 中的“find_all_by_id”相当于什么

    我有一个 id 数组 我想使用活动记录查询从数据库中查找它们各自的记录 例如 ids 2 3 1 现在 对于我来说 要查找 id 是数组中的其中之一的特定模型的所有记录 在较低版本的 Rails 中 我想我可以执行以下操作 Model fi
  • 使用滚动视图通过 Swift 放大图像

    我正在从 Apple 的 Swift 应用程序开发 中学习 Swift 我遇到了约束问题 特别是在第 593 页的 I Spy 实验室 它基本上希望您创建一个滚动视图 其中包含图像视图 并使其可以放大图像并滚动它 例如当您打开照片时 在 照