UIScrollView 与居中的 UIImageView,如照片应用程序

2024-03-03

我想要带有图像内容视图的滚动视图。该图像实际上是比屏幕大得多的地图。地图最初应位于滚动视图的中心,就像当您将 iPhone 转向横向时照片应用程序中的照片一样。

我没有设法将地图置于中心并同时进行正确的缩放和滚动。 假设地图图像从屏幕顶部开始(纵向),代码如下所示:

- (void)loadView {
    mapView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"map.jpg"]];
    CGFloat mapHeight = MAP_HEIGHT * SCREEN_WIDTH / MAP_WIDTH;
    mapView.frame = CGRectMake(0, 0, SCREEN_WIDTH, mapHeight);
    scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
    scrollView.delegate = self;
    scrollView.contentSize = mapView.frame.size;
    scrollView.maximumZoomScale = MAP_WIDTH / SCREEN_WIDTH;
    scrollView.minimumZoomScale = 1;
    [scrollView addSubview:mapView];
    self.view = scrollView;
}

当我将图像框架移动到中心时,图像仅从框架顶部向下增长。我尝试使用 mapView 变换,动态更改 imageView 的框架。到目前为止,没有什么对我有用。


此代码应该适用于大多数版本的 iOS(并且已经过测试,可在 3.1 及以上版本上使用)。

它基于 Jonah 的回答中提到的 Apple WWDC 代码。

将以下内容添加到 UIScrollView 的子类中,并将tileContainerView 替换为包含图像或图块的视图:

- (void)layoutSubviews {
    [super layoutSubviews];

    // center the image as it becomes smaller than the size of the screen
    CGSize boundsSize = self.bounds.size;
    CGRect frameToCenter = tileContainerView.frame;

    // center horizontally
    if (frameToCenter.size.width < boundsSize.width)
        frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width) / 2;
    else
        frameToCenter.origin.x = 0;

    // center vertically
    if (frameToCenter.size.height < boundsSize.height)
        frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height) / 2;
    else
        frameToCenter.origin.y = 0;

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

UIScrollView 与居中的 UIImageView,如照片应用程序 的相关文章

  • 仅 iOS 7 应用程序在启动时崩溃

    我最近将我的 xcode 项目更改为仅支持 iOS 7 而不支持 iOS 5 应用程序启动后进行此更改后 我会在控制台中收到此消息 UICachedDeviceWhiteColor shadowColor unrecognized sele
  • 大端还是小端? [复制]

    这个问题在这里已经有答案了 可能的重复 如何检查系统是大端还是小端 https stackoverflow com questions 4181951 how to check whether a system is big endian
  • Crashlytics 集成问题

    我在整合时遇到问题崩溃解决方案进入我的项目 按照网站上的说明进行操作 但不久之后安装 Crashlytics mac 应用程序 添加新的构建脚本 粘贴脚本 然后我构建我的项目以继续 然后应用程序崩溃了 Update 当时 我忘记在 AppD
  • jquery mobile 和 iphone - 页面底部的空白区域

    我有一个 jquery 移动网页 它在桌面浏览器和 Android 上看起来都不错 但在 iPhone 的 safari 中 我在页面底部有一个奇怪的空白 它看起来像是 ui 页面的最小高度的问题 因为空白区域与 safari 的标题栏 u
  • Appium:能否用于跨平台应用程序测试

    我有一个使用跨平台开发工具开发的应用程序 该应用程序对于 ios ipa 和 android apk 具有相同的界面 我可以编写一个自动化脚本并在两个平台上运行它 即 Android 和 iOS 应用程序吗 有人用 Appium 尝试过吗
  • 使用 DatePicker 展开和折叠 UITableViewCells

    我正在构建一个应用程序 让用户从 UITableView 中选择日期 tableView 是静态且分组的 我浏览了很多问题 包括this one https stackoverflow com questions 18973573 ios
  • iOS上数组的Swift Metal并行求和计算

    基于 Kametrixomanswer https stackoverflow com questions 38164634 compute sum of array values in parallel with metal swift
  • Xcode:libpods.a 为红色

    有人知道为什么吗 我正在使用 SWRevealViewController 到目前为止它一直在工作 我正在使用工作区 并且我已经研究过其他文章 但到目前为止没有任何效果 它不会引发错误 但是当我运行程序时 它不会加载任何内容 因为 SWRe
  • 无法在 Crashlytics/fabric 中获取崩溃报告。显示错误:“看起来我们缺少 dSYM 来处理以下版本的崩溃。”

    我的 iOS 应用程序的 Fabric crashlytics 中未生成崩溃报告 Fabric 仪表板上显示错误 如屏幕截图所示 按照fabric的指示 我尝试从安装fabric mac应用程序的机器 我创建应用程序的版本 中搜索聚光灯下给
  • 在代码中创建时 UISearchDisplayController 不工作?

    我正在开发一个选项卡栏应用程序 其中一个选项卡有一个连接到 UISearchBar 的 UISearchDisplayController 所有这些都已连接到 NIB 中并且正在工作 当我点击搜索栏时 范围 和 取消 按钮会飞入等 并且搜索
  • Swift - 带有两行文本的 UIButton

    我想知道是否可以创建一个包含两行文本的 UIButton 我需要每一行都有不同的字体大小 第一行为 17 点 第二行为 11 点 我尝试过将两个标签放在 UIButton 内 但我无法让它们留在按钮的范围内 我试图在 ui 构建器中完成所有
  • UIStatusBarStyle PreferredStatusBarStyle 在 iOS 7 上不起作用

    在我使用 Xcode 5 for iOS 7 构建的 iPhone 应用程序中 我设置了UIViewControllerBasedStatusBarAppearance YES in info plist 并在我的ViewControlle
  • 如何在 Objective-C 中运行时查找字符串常量?

    我的公司开发了一个广告 SDK 可以协调其他广告网络 在运行时 它通过使用检查其他广告网络是否存在NSClassFromString 并发送这些类消息 如果存在 这对于 Objective C 对象来说效果很好 但是如何在运行时加载字符串常
  • 我们可以在 Tiff 文件中添加自定义键或如何在 Tiff 文件的图像属性中添加温度数据

    我想在选定点添加图像的温度数据 它是否有任何预定义的属性 或者我们是否可以在 Tiff 文件中创建自定义 私钥来存储图像的温度数据 Answer 使用 TIFF 库文档在 TIFF 文件中创建您自己的自定义键 在文档中 他提到了如何创建和使
  • 删除 ios 和 android 的 PhoneGap 中的闪屏

    我正在尝试在 ios 和 android 的phonegap应用程序中完全删除启动屏幕 这navigator hide 函数仅在加载 html 页面后才起作用 但我需要在此之前删除启动屏幕 请告诉我是否有任何选项可以执行此操作 Cordov
  • iOS 中tableview 的动态搜索

    I ve a tableview和我实现搜索方法的文本字段 现在 当我在其中写入一些值时textfield然后点击搜索按钮 然后在tableview 但是 我希望它是动态的 意味着我开始输入的那一刻textfield它应该开始搜索而不点击任
  • iOS 7,搜索模式下范围栏变黑

    我使用嵌入到 UiTableViewController 的 UISearchDisplayController 在我的表格视图中创建一个搜索栏 但是 如果我设置搜索栏的背景图像 则范围栏不会在搜索模式下显示 而是显示黑条 这很奇怪 因为它
  • 错误:CUICatalog:提供的资源名称无效:(空),或无效的比例因子:2.000000

    TableViewApplication 1458 70b CUICatalog Invalid asset name supplied null or invalid scale factor 2 000000 使用 TableViewC
  • 当应用程序置于后台时,GCD 分派操作未运行

    我启动了一种方法 本质上是一个无限循环 使用dispatch queue create进而dispatch async 然后代码循环位于分派块内 循环完美运行 但是 当应用程序进入后台时 它会暂停 然后当应用程序进入前台时它会重新启动 我怎
  • 核心数据推导表达式关键路径使用运算符作为中间组件

    我正在尝试编写一对多关系属性之和的派生表达式 我有一个商品和一个组 该商品有价格和总价 金额 价格 我想编写一个表达式 将该组的总价格作为其组成部分的总和 当我构建时出现错误 错误 属性配置错误 LAEItemGroup totalPric

随机推荐

  • Pdfplumber 无法识别表 python [重复]

    这个问题在这里已经有答案了 我使用 Pdfplumber 提取第 2 页第 3 部分的表格 通常 但它只适用于某些 pdf 其他则不起作用 对于失败的 pdf 文件 似乎 Pdfplumber 读取的是按钮表而不是我想要的表 我怎样才能拿到
  • Windows 如何更改或插入物理扇区到另一个文件中?

    我有 20 个文件 其中数据结构在 NTFS 中与 4k 扇区对齐 我想合并所有文件无需复制任何数据 目标是编写一种通过直接更改 NTFS 虚拟集群和物理集群来工作的插入 API 目标是从 50GB 块中获得大小为 1TB 的文件 而无需复
  • 将值传递给 Sql 中的空值列

    我有一个Sections表 在该表中我有列SectionId CourseId Name Capacity 这里CourseId是一个空值列 它的外键在这里聚焦于Course表 这个CourseId列是一个新添加了一个 我正在尝试向此表添加
  • 关闭 SVG 标签,显式关闭还是自动关闭?

    我正在验证我的代码 并收到以下错误Tag cannot be self closing Use an explicit closing tag 在 IE 中作为我的 svg 路径 因为它是自动关闭的
  • 时髦的 haskell 惰性列表隐式递归

    在 Haskell 中 由于懒惰 您可以构建无限列表 Prelude gt let g 4 g Prelude gt g 0 4 Prelude gt take 10 g 4 4 4 4 4 4 4 4 4 4 现在 当我尝试构建这样的列表
  • python 中的无循环 3D 矩阵乘法

    我希望在 python numpy 中执行以下操作 Matrix A is M x N x R Matrix B is N x 1 x R 矩阵乘法 AB C 其中 C 是 M x 1 x R 矩阵 本质上 A 的每个 M x N 层 其中
  • 了解 Perl 正则表达式修饰符 /m 和 /s [重复]

    这个问题在这里已经有答案了 我一直在阅读带有修饰符 s m 和 g 的 perl 正则表达式 我知道 g 是全局匹配 它将是贪婪搜索 但我对修饰符 s 和 m 感到困惑 谁能用代码示例解释 s 和 m 之间的区别 以展示它们有何不同 我尝试
  • 如何从 MVC 控制器在 debian linux 中打印 pdf

    AsP NET MVC 4 应用程序使用 Mono 在 Debian Squeeze Linux 中运行 控制器使用下面的代码从 html 创建 pdf 文件 如何将 pdf 文件打印到连接到服务器的三星打印机 有一些可执行文件可以用于此目
  • Select2 - formatNoMatches 上的链接

    我在用着Select2 http ivaynberg github com select2 来增强我的
  • 在 Python 中验证 HTML/RDFa

    编写可以验证 HTML 尤其是使用嵌入式 RDFa 的 python 模块的最佳方法是什么 我熟悉 validator w3 org 并且有兴趣编写一个执行类似功能的自定义验证器 但针对使用 RDFa 作为元素元数据的不同标准 有哪些值得查
  • (NextAuth) 类型错误:类型“{}”上不存在属性“会话”

    我在 NextJs 项目上使用 NextAuth 时收到错误 Type error Property session does not exist on type 我正在添加session按照此处的建议将属性添加到我的 app tsx 中
  • 四组设计模式如何融入 MVC 范式?

    我仔细考虑过设计模式一段时间以来 我刚刚开始考虑如何真正开始将其中一些更有意地融入到我的开发工作中 然而 我仍然对他们在本书开头对 MVC 的处理以及它与本书其余部分的关系感到困惑 我使用过的大多数框架 Spring Yii ASP NET
  • AWS Cognito - JavaScript 中的开发人员身份验证(浏览器)

    我在浏览器脚本中获取凭据时遇到问题 身份验证服务器返回 cognito identityId 和 cognito token 然后我设置了一个Cookie cookie cognitoidentityId cookie cognito to
  • 如何为弹跳球创建碰撞检测?

    我已经为三个沙滩球在屏幕上弹跳编写了一个动画 用Python 我现在希望它们全部碰撞并能够相互弹开 我非常感谢您能提供的任何帮助 import pygame import random import sys class Ball def i
  • 准备好使用移动应用程序的后端了吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从 github 添加厨师食谱

    我使用以下命令从 opscode 网站下载了许多食谱 Knife Cookbook网站安装git例如 但是现在我想从 github 上的存储库下载一本说明书到我当前的说明书目录中 我该怎么做呢 我应该将存储库克隆到我的食谱目录中吗 谢谢你
  • 在 javax.scripting javascript 环境中导入地图

    我在 javax scripting 地图实现中看到一些奇怪的行为 在线示例显示example http java sun com developer technicalArticles J2SE Desktop scripting 添加到
  • 两个对象上的 Linq 完全外连接

    我有两个名为 CountryMobility 的对象 我相信我需要将它们与完整的外部联接结合起来 我该如何使用 linq 来做到这一点 public class CountryMobility public string countryCo
  • 评论解释的代码和性能

    我总是 尽力 评论我的代码 我已将服务器配置为在交付前删除这些注释 额外的空白 在实时系统代码 Javascript php 中不要添加注释 从而减少这种开销或者删除或解释是否会更好 如果是这样 我怎样才能鱼与熊掌兼得呢 对于 PHP 来说
  • UIScrollView 与居中的 UIImageView,如照片应用程序

    我想要带有图像内容视图的滚动视图 该图像实际上是比屏幕大得多的地图 地图最初应位于滚动视图的中心 就像当您将 iPhone 转向横向时照片应用程序中的照片一样 我没有设法将地图置于中心并同时进行正确的缩放和滚动 假设地图图像从屏幕顶部开始