在旋转界面方向时将 contentOffset 保留在 UICollectionView 中

2024-03-17

我正在尝试处理 UICollectionViewController 中的界面方向更改。我想要实现的是,我想要拥有same界面旋转后的 contentOffset。意思是,它应该根据边界变化的比率进行更改。

从纵向开始,内容偏移量为 {边界.尺寸.宽度* 2, 0} …

… 也应该导致横向内容偏移 {边界.尺寸.宽度* 2, 0}(反之亦然)。

计算新的偏移量不是问题,但不知道在哪里(或何时)设置它,以获得平滑的动画。我所做的就是使布局无效willRotateToInterfaceOrientation:duration:并重置内容偏移量didRotateFromInterfaceOrientation::

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
                                duration:(NSTimeInterval)duration;
{
    self.scrollPositionBeforeRotation = CGPointMake(self.collectionView.contentOffset.x / self.collectionView.contentSize.width,
                                                    self.collectionView.contentOffset.y / self.collectionView.contentSize.height);
    [self.collectionView.collectionViewLayout invalidateLayout];
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;
{
    CGPoint newContentOffset = CGPointMake(self.scrollPositionBeforeRotation.x * self.collectionView.contentSize.width,
                                           self.scrollPositionBeforeRotation.y * self.collectionView.contentSize.height);
    [self.collectionView newContentOffset animated:YES];
}

这会更改旋转后的内容偏移量。

轮换期间如何设置?我尝试将新内容偏移量设置为willAnimateRotationToInterfaceOrientation:duration:但这会导致非常奇怪的行为。

可以在我的项目中找到一个示例GitHub https://github.com/anagromataf/TKViewControllerCollectionController/blob/develop/TKViewControllerCollectionController/TKViewControllerCollectionController.m#L86.


您可以在视图控制器中执行此操作:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)

    guard let collectionView = collectionView else { return }
    let offset = collectionView.contentOffset
    let width = collectionView.bounds.size.width

    let index = round(offset.x / width)
    let newOffset = CGPoint(x: index * size.width, y: offset.y)

    coordinator.animate(alongsideTransition: { (context) in
        collectionView.reloadData()
        collectionView.setContentOffset(newOffset, animated: false)
    }, completion: nil)
}

或者在布局本身中:https://stackoverflow.com/a/54868999/308315 https://stackoverflow.com/a/54868999/308315

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

在旋转界面方向时将 contentOffset 保留在 UICollectionView 中 的相关文章

  • 如何制作带有 SWIFT 图像的弹出窗口

    我想知道如何制作类似于此示例的弹出窗口 原始窗口充满了按钮 选择这些按钮后将拉出我想要使用的图像 我会简单地创建一个可重用的UIView组件以及作为子视图所需的一切 例如UIImageView为了你的形象 UILabel or a UIBu
  • 如何从 SDK 实现每个会话的 Google Places 自动完成功能?

    是否可以从 Android 和 iOS 应用程序的 place sdk 实现基于会话的自动完成 根据 6 月 11 日生效的新 Google 地图框架定价 对自动完成的请求可以分为基于击键 会话的请求 我找不到描述实施步骤的文档 除了这个参
  • 每 24 小时触发一次方法

    我正在尝试每天在给定时间触发一个方法 我尝试了一些方法 但我无法真正使其发挥作用 任何意见 将不胜感激 此外 如果无论应用程序是否打开它都会触发 那就更理想了 这可能吗 UI本地通知 http developer apple com lib
  • ios swift parse:从 3 个类收集数据

    我有这样的结构 User CardSet 带有指向 User objectId 的指针 user 和 col name 带有点 cards 的卡片到 Card Set objectId 和列 name 我想选择所有卡数据 包括当前用户的卡集
  • dyld:无法加载插入的库

    当我尝试运行 UI 和单元测试时 出现异常 dyld 无法加载插入的库 private var containers Bundle Application AutoTestingApp app Frameworks IDEBundleInj
  • 在 iPhone 3GS 与 iPhone 4 上为 Mobile Safari 嵌入 HTML5 视频

    我在服务器上的 mp4 文件中有 H 264 AAC 编码的视频 mime 类型的视频 mp4 添加到 Web 服务器 IIS 7 并且我有一个带有视频标签的页面
  • iOS 7 上 Safari 浏览器的用户代理

    我只想在带有 Safari 浏览器的 iPhone 和 iPod 中打开我的网站 对于 Chrome Dolphin 等任何其他浏览器 它不应该打开 但目前我从几乎所有设备获得相同的用户代理 对于Safari User Agent Stri
  • 贴纸包会在模拟器上使 iMessage 崩溃,但在 iPhone 上不会崩溃

    按照 Apple 的在线说明和视频在 Xcode 中创建了一个贴纸包 所有图像的尺寸均正确且远低于文件大小阈值 如果我在我的实体 iPhone 上构建并运行贴纸包 一切都会完美运行 如果我在模拟器上构建并运行贴纸包 对于任何模拟的 iPho
  • 如何在代码中编辑约束

    我有一个以 100 开始宽度限制的网页 当用户单击按钮时 我想将约束更改为 200 我试过这个 NSLayoutConstraint constrain NSLayoutConstraint constraintWithItem self
  • UITableViewCell显示多种字体

    我想在 uitableviewcell 中以类似于 iPhone 地址簿的不同字体显示两个单词 例如 约翰Buchanan 您应该使用两个 UILable 或者您可以使用OH属性标签 https github com AliSoftware
  • iPhone:UIApplication WillResignActiveNotification 从未被调用

    我正在视图控制器中播放视频 当用户按下硬件主页按钮并且当前正在播放视频时 应用程序崩溃并显示EXC BAD ACCESS在模拟器中 我读到我应该使用applicationWillResignActive停止视频播放的消息应该可以解决崩溃问题
  • 如何在 UIScrollView 中启用缩放

    如何启用缩放功能UIScrollView 答案是here https developer apple com documentation uikit uiscrollview 滚动视图还可以处理内容的缩放和平移 当用户做出捏合或张开手势时
  • 接收者'ClassName'是一个转发类,对应的@interface可能不存在

    我目前正在寻找一个UIPickerTable在 UIPickerView subviews 内 所以我循环并执行isKindOfClass UIPickerTable class 它有效 但由于 UIPickerTable 的标头未公开 我
  • 使用 MapKit 的地形和卫星视图

    我是 Mapkit View 的新手 当我给出没有目的地的纬度和经度时 我想显示 MapKit中是否可以通过地形 卫星视图来显示地图 有教程链接吗 我看过一些访问 Google 地图 API html 文件 的示例 有必要吗 或者您可以通过
  • UIView 圆角 - Swift 2.0?

    我会尝试将一些项目更新到 Swift 2 0 我有一个视图 左上角有一个圆角 在 Swift 没有警告 没有错误 只是没有圆角 这就是它在 Swift let maskPath UIBezierPath roundedRect conten
  • iOS:如何知道 reloadData() 已完成其任务?

    我想滚动到给定索引 self boldRowPath 但是当我调试时scrollToRow之前执行reloadData 如何知道reloadData已完成 func getAllTimeEvent self arrAllTimeEvent
  • 模态转场需要点击 2 次而不是 1 次

    我的 UITableView 需要点击 2 次才能显示所选单元格的详细信息页面 一次用于选择 另一次用于显示详细信息视图 我希望有一个 CLI 直接显示所单击单元格的详细视图 我在 UITableViewManager m 中使用此方法的模
  • 为什么 Objective-C 允许在方法定义末尾使用分号? [复制]

    这个问题在这里已经有答案了 可能的重复 Objective C 实现文件中方法名后面的分号 https stackoverflow com questions 5678360 semicolon after the method name
  • ios - 如何声明静态变量? [复制]

    这个问题在这里已经有答案了 C 中声明的静态变量如下 private const string Host http 80dfgf7c22634nbbfb82339d46 cloudapp net private const string S
  • 隐藏选项卡栏项目并对齐其他选项卡项目

    在我的应用程序中 我有 4 个选项卡栏项目 我正在 XIB 文件中添加这 4 个选项卡栏项目 最初我必须显示 3 个选项卡栏项目 同步后我必须在我的应用程序中显示第 4 个选项卡栏项目 因此 为此 我使用以下代码隐藏第四个选项卡栏项目 se

随机推荐

  • 从 Dock 中删除 AppleScript 脚本的图标

    如何隐藏正在运行的 AppleScript 的停靠栏图标 并仅将应用程序保留在菜单栏中 要隐藏应用程序使其不显示在 Dock 中 您需要修改应用程序内的 Info plist 文件 最简单的方法是在 Finder 窗口中选择应用程序 按住
  • numpy 中两个二维掩码数组的快速内积

    我的问题如下 我有两个数组X and Y形状为 n p 其中p gt gt n 例如 n 50 p 10000 我也有口罩mask 大小为布尔值的一维数组p 关于p of small密度 例如np mean mask 为 0 05 我尝试尽
  • 如何删除 XQuery 中的重复节点?

    我有一个动态生成的 XML 文档 我需要一个函数来消除其中的任何重复节点 我的函数如下所示 declare function local start2 let data local scan books return
  • 修改向量的元素(按值、按引用)函数 C++

    我有一个必须修改向量值的函数 在 C 中返回向量是一个好的做法吗 功能一 vector
  • 如何使用 MediaRecorder 作为 MediaSource

    作为学习 WebRTC 的练习 我试图并排显示本地网络摄像头和网络摄像头的延迟播放 为了实现这一目标 我尝试将记录的 blob 传递到 BufferSource 并使用相应的 MediaSource 作为视频元素的源 the ondataa
  • Google oAuth2 令牌越来越多地失效

    我有一个基于 oAuth2 构建的 Web 应用程序 该应用程序已经投入生产 5 年多了 用户通过 Google 进行身份验证和授权 并授予我的应用程序对 Google Analytics 数据的访问权限 突然间 我发现刷新用户 oAuth
  • 如何为多个变量声明具有多个限制的 sympy Piecewise

    同情 我如何声明Piecewise子函数中多个变量具有多个限制的函数 这是我的背景和尝试 from sympy import Piecewise Symbol exp from sympy abc import z x1 Symbol x1
  • 绕过 CloudFlare 的 100 秒超时

    我正在尝试 AJAX 化我的报告 以绕过 CloudFlare 对通过其站点运行的请求强加的 100 秒超时 See 是否可以增加 CloudFlare 超时 https stackoverflow com questions 385361
  • 正则表达式提取可选组

    我有一些格式为的日志字符串 T01 Warning Tag1 Message T23 Tag2 Message2 我正在尝试提取T数 检测是否存在Warning 然后将标签和消息的文本全部放在一个正则表达式中 不过 警告 的可选要求让我感到
  • 如何在cakephp中生成'a href="javascript:void(0)"'之类的链接?

    如何在 CakePHP 中生成类似 a href javascript void 0 的链接 我制作了一个应用程序 当用户单击图像列表时 内容将插入到编辑器文本区域中 我向这些图像添加一个类 并在 javascript 文件中编写一些代码
  • 为什么我要创建一个别名来创建函数?

    我偶尔会看到这种模式 尤其是在有关 Bash 提示定制的问题上 alias f useful code 我认为根本没有理由在这里创建别名 明显的重构 f useful code 它完全避免了声明别名 并且简单地一劳永逸地定义了函数 看起来更
  • .Net 使用 Lockbits 从位图中获取 RGB 值

    我使用下面的代码从图像中提取 RGB 值 有时这有效 但是在某些文件上 似乎步幅不能被位图宽度整除 它返回混合值 Dim rect As New Rectangle 0 0 bmp Width bmp Height Dim bmpData
  • 如何使用 Apache POI 插入换行符作为单元格的数据?

    我使用 Apache POI 3 16 创建 Excel 文件 我想将特定单元格内的数据设置为有换行符 rowConsommationEtRealisation createCell 0 setCellValue Consommation
  • VennDiagram 创建 vennCounts 列表

    我有一个这样的表 gt updownregtable PIM WDR MYC OBX ILMN 1651282 0 0 0 0 ILMN 1651354 0 0 0 0 ILMN 1651358 0 0 0 0
  • GData Youtube:获取缩略图

    我有一堆 youtube VideoID youtube com 网址的参数 watch v 中的字母数字字符串 我必须获取每个视频的缩略图 现在 我为每个 videoid 创建一个 HTTP GET 请求 如下所示 s VIDEOID 实
  • 我们如何在 MVC5 中启用 Bundles 缓存

    我在我的 mvc 项目中创建了 2 个包 如下所示 public static void RegisterBundles BundleCollection bundles bundles Add new ScriptBundle Scrip
  • 如何优雅地将所有枚举放入 std::set 中

    我有一个枚举 我想将它们全部放入集合中 然后使用 set intersection 算法删除一些 但这是题外话 除了我卡在第 1 步之外 一切都很好 如果我有 真实类具有基数更高的枚举 class MyClass enum Color re
  • 将 span 标签包裹在 div 内

    我有几个相互嵌套的 div 标签和一些嵌套的 span 标签 如下所示 div div span class mytags a href tag1 a span span class mytags a href tag2 a span di
  • 将 Matplotlib 中的多个 .png 图形输出到 Python 3.4 中的一个 zip 文件

    我编写了一个程序 使用 Python 中的 MatPlotLib 从 CSV 文件输出多个不同的饼图 超过 60 个 我认为我不需要共享所有代码 但我有一个draw 创建图形的函数 其结尾如下 def draw data make the
  • 在旋转界面方向时将 contentOffset 保留在 UICollectionView 中

    我正在尝试处理 UICollectionViewController 中的界面方向更改 我想要实现的是 我想要拥有same界面旋转后的 contentOffset 意思是 它应该根据边界变化的比率进行更改 从纵向开始 内容偏移量为 边界 尺