应用平移变换时 UICollectionViewFlowLayout 边缘单元消失

2024-01-28

我正在使用自定义UICollectionViewFlowLayout使单元格在到达顶部时缩放和淡出。为此,我正在应用alpha and transform到布局属性。这是我的代码(完整演示存储库的链接 https://github.com/aheze/TransitioningCollectionLayout/tree/CustomLayout):

class EdgeZoomLayout: UICollectionViewFlowLayout {

    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        guard let collectionView = collectionView else { return nil }
        let rectAttributes = super.layoutAttributesForElements(in: rect)!.map { $0.copy() as! UICollectionViewLayoutAttributes }
        let visibleRect = CGRect(origin: collectionView.contentOffset, size: collectionView.frame.size)

        for attributes in rectAttributes where attributes.frame.intersects(visibleRect) {
            let positionInFrameY = attributes.center.y - visibleRect.origin.y /// y origin of rectangle
            let cutoff = CGFloat(30)
            
            if positionInFrameY <= cutoff {
                let translation = cutoff - positionInFrameY /// distance from the cutoff, 0 if exactly on cutoff
                let alpha = 1 - (translation / 100)
                let scale = 1 - (translation / 1000)
                
                attributes.alpha = alpha
                attributes.zIndex = Int(alpha >= 1 ? 1 : 0) /// if alpha is 1, keep on the top
                attributes.transform = CGAffineTransform(scaleX: scale, y: scale).translatedBy(x: 0, y: translation)
            } else {
                attributes.zIndex = 1 /// keep on top if not getting zoomed
            }
        }

        return rectAttributes
    }

    /// boilerplate code
    override init() { super.init() }
    required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
    override func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool { return true }
    override func invalidationContext(forBoundsChange newBounds: CGRect) -> UICollectionViewLayoutInvalidationContext {
        let context = super.invalidationContext(forBoundsChange: newBounds) as! UICollectionViewFlowLayoutInvalidationContext
        context.invalidateFlowLayoutDelegateMetrics = newBounds.size != collectionView?.bounds.size
        return context
    }
}

这几乎是完美的,但是最上面的单元格在接近边缘时突然消失:

Top cell disappears when it reached the top

如何使单元格缩放和淡出而不像那样消失?我认为这可能是因为集合视图回收了单元格......但是,我如何保留它呢?


您可以删除此行

where attributes.frame.intersects(visibleRect)

或者你可以添加一些点visibleRect by this

for attributes in rectAttributes where attributes.frame.intersects(visibleRect.insetBy(dx: 0, dy: -15)) {
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用平移变换时 UICollectionViewFlowLayout 边缘单元消失 的相关文章

  • 从 Google/Facebook 帐户重新验证用户身份

    因此 我需要创建一个 REST API 来为 IOS 应用程序提供功能 我们允许用户仅使用普通帐户或使用脸书 谷歌登录 我最近一直在阅读 OAuth 我想我了解在我的情况下如何使用 OAuth 的过程 当用户使用脸书 谷歌登录 在我的应用程
  • 无法将类型“(User?, Error?) -> ()”的值转换为预期参数类型“AuthDataResultCallback?”

    当我更新 firebase pod 时出现此错误 无法将类型 User Error gt 的值转换为预期参数类型 AuthDataResultCallback 又名 可选 gt static func signUp username Str
  • iOS 显示 UIImage 全屏并启用缩放(捏合和双击)

    我有一个UIImage从相机捕获UIImagePickerController 现在 在用户单击它之后 我希望它显示全屏 并且能够使用捏合手势进行放大和缩小 还可以使用双击手势来放大特定区域 换句话说 我想模拟ios默认图像浏览器的功能 我
  • 使 Swift 类符合需要 init 的协议

    我有以下内容protocol in Swift protocol FooConvertible typealias FooType init foo FooType 我会做Swift类在类定义中符合它 class Bar FooConver
  • 如何在文本末尾添加按钮,如 Facebook 的“继续阅读”?

    当状态帖子太长时 Facebook 应用程序会剪切文本并在末尾添加 继续阅读 它如何知道在哪里剪切文本并添加 继续阅读 不仅仅是向 textView 或标签添加按钮 而是如何剪切字符串 例如 在下图中 我将行数限制为 7 我可以在 text
  • 使用捏合手势;如何放大用户手指实际“捏”的位置?

    我已经在我的应用程序中的 UIImageView 上实现了 UIPinchGestureRecognizer 但是无论我在图像的哪个位置捏合 它似乎都会放大到同一个位置 有谁知道我如何让它放大到用户实际 捏 的地方 请参阅下面的代码 视图控
  • 我可以使用 NSDateFormatter 将此日期字符串转换为 NSDate 吗?

    我有这个字符串 2010 08 24T16 00 00 05 00 我想从中提取时间部分 即 16 00 并将其转换为 12 小时等效值 即下午 04 00 我正在尝试使用 NSDateFormatter 来完成此任务 但它不起作用 NSD
  • 取消交互式 UINavigationController 弹出手势不会调用 UINavigationControllerDelegate 方法

    如果拖动 a 的边缘UIViewController开始交互式流行过渡UINavigationController the UIViewController在电流下方有viewWillAppear 调用 然后是UINavigationCon
  • 未安装的应用程序的URL方案

    简单的问题 我正在开发一个将注册自己的 URL 方案的应用程序 我计划通过人们最喜欢的 QRCode 阅读器使用 QRCode 启动该应用程序 我的问题 如果我的应用程序尚未安装在他们的 iPhone iPad 上 会发生什么 他们会被引导
  • 将多个数组合并为一个数组

    如何将多个数组合并为一个二维数组 鉴于我有以下输入 var arr1 1 2 3 var arr2 a b c var arr3 aa bb cc 我需要这样的输出 1 a aa 2 b bb 1 c cc 我认为你想要的是将三个数组组合成
  • 使用 iOS 设备作为 TCP 客户端 - 无 Bonjour

    我想使用 iOS 设备作为 TCP 客户端 但我找不到可理解的 API 指南 示例来说明如何做到这一点 我试过SimpleNetworkStreams and PictureSharing 但他们都使用 Bonjour 我可以轻松建立 UD
  • 处理核心数据中的重复条目

    我有一个允许用户保存收藏夹的应用程序 我正在使用 Core Data 将收藏夹存储为托管对象 我已经编写了一些代码来防止存储重复项的可能性 但我想知道是否有更好的方法来做到这一点 每个收藏夹对象都有一个唯一的 ID 字段 在下面的代码中 我
  • iPhone / iPad IOS 应用程序仪器内存计数与 task_info 内存计数

    我一直在使用 Instruments Leak Tester 它给出了大约 1 3 meg 的应用程序总分配数字 但是 当使用 task info 时 它会报告更大的内存量 例如 10 20 meg 我想我只是想确认task info正在返
  • 为什么 iOS 5.0 不喜欢纯窗口应用程序?为什么它要求使用视图控制器?

    我有一个使用 Xcode 4 0 的 基于窗口的应用程序 模板创建的 iOS 应用程序 当时运行良好 并且使用的是 iOS 4 3 SDK 这是一个简单地将按钮 标签等直接放置到窗口上的应用程序 没有视图控制器 什么都没有 但现在我已经升级
  • 子视图控制器旋转方法未被调用

    Summary 我试图将子视图控制器添加到父视图控制器 并让父视图控制器通知子视图控制器旋转事件 但是 旋转消息不会转发到子视图控制器 这是默认行为 为什么这种默认行为没有发生 环境 iOS 7 XCode 5 OSX 10 9 Detai
  • SDWebImage 显示缓存中图像的占位符

    在 iOS 5 1 项目 iPad 中使用 SDWebImage 3 我们展示相当大的图像 700x500 并且我们有很多图像 1000 我们预取图像并缓存到磁盘 然后允许用户浏览它们 效果很好 除了当您浏览图像时 您总是会看到占位符显示一
  • iOS 11 getUserMedia 不起作用?

    苹果公司发表声明称getUserMedia将在 iOS 11 上完全正常运行 安装 iOS 11 Beta 版本 5 后 我确实收到一条消息 表明我的网站请求访问我的相机和麦克风 但似乎是这样的 video src window URL c
  • 在应用程序内启用或禁用 Iphone 推送通知

    我有一个 iPhone 应用程序 可以接收推送通知 目前 我可以通过转到 iPhone 设置 通知来禁用我的应用程序的推送通知 但我想在我的应用程序中添加一个开关或按钮来启用或禁用推送通知 这是可以做到的 因为我在 foursquare i
  • 更新查询时 ios 中出现“数据库锁定”错误

    我正在使用下面的代码更新查询 using sqlite 但我越来越 database is locked error 我尝试搜索一些 SO 链接 建议关闭数据库 但我再次执行此操作时遇到相同的错误 我已经提到过代码中出现错误的地方 cons
  • diffable 数据源节标题在更新期间闪烁

    我目前面临的问题是 当将新快照应用于当前数据源时 页眉 页脚和装饰视图不是集合视图子视图的一部分 这可以被视为奇怪的闪烁 以前有人遇到过这个问题吗 我通过以下方式更新数据源 var snapshot NSDiffableDataSource

随机推荐

  • 带有参数和通配符的 SQL LIKE 运算符

    我有一个查询 我想返回名称中具有特定字符串且两侧带有通配符的所有客户端 因此 输入可能是 Smith 我想返回 The John Smith Company 或 Smith and Bros 等所有内容 我希望 Client 得到提示 因此
  • 在 Angular 和 Chrome DevTools 中提取 css 文件的问题

    I use ng serve sm ec提取 scss 文件angular 5 但是当我做出改变时Elements的翁格莱Chrome DevTools像那样 它没有自动保存 我必须改变它Sourcesonglet 并保存以使其正常工作 我
  • iTextSharp - 如何打开/读取/提取文件附件?

    我有一些 PDF 文件 其中包含两个带有静态名称的附加文件 我想使用 iTextSharp 将这些文件提取到临时目录 以便我可以进一步使用它们 我尝试按照教程进行操作但当我遇到问题时iTextSharp text pdf PdfReader
  • 在 C# 中设置 MimeType

    在 C 中设置 mimetypes 是否有比我尝试做的更好的方法 提前致谢 static String MimeType string filePath String ret null FileInfo file new FileInfo
  • C++ 中网络掩码转换为 CIDR 格式

    我必须将 2 个 DWORD IP 地址和网络掩码转换为 CDIR 格式 所以我有 2 个 DWORD 对应 1 1 1 1 和 255 255 255 255 我想拿出字符串 1 1 1 1 32 对此有什么想法吗 Thanks 最简单的
  • xml.etree.ElementTree - 设置 xmlns = '...' 时遇到问题

    我肯定错过了什么 我正在尝试设置谷歌产品提要 但我很难注册命名空间 例子 路线在这里 https support google com merchants answer 160589 https support google com mer
  • Oracle NUMBER 类型是否可能溢出?

    我正在使用名为 Appworx 的进程调度软件 其中 每个进程和子进程可以有任意数量的 条件 如果条件为真 则采取一些条件操作 goto 语句是可能的条件操作之一 其中一个普通整数是标签 每个条件从 1 开始编号 我想使用此功能来循环评估和
  • 将 SDL 应用程序移植到 iOS

    我仅使用 SDL 无 OpenGL 用 C 创建了一个小游戏 并希望将其移植到 iOS 6 我无意公开发布 仅供个人使用 该应用程序仅使用准系统 SDL 库本身 没有 ttf 或图像 那么 将游戏移植到 iOS 6 的最佳无麻烦方式是什么
  • 在可区分联合中使用 F# 中的 and 关键字

    我今天面临以下 DU 声明 type Grammar Definition list and Definition Def of string Expression and Range Char of char Range of char
  • 使用htaccess重写使子目录成为其自己的根目录以用于根相对路径请求

    我可以使用 htaccess 捕获来自某个子目录的请求并使该目录使用自身作为任何根相对路径请求的根目录吗 例如 如果我有 http www example com subFIXED subANY restofpath 其中 subFIXED
  • 如何检测何时使用 MKUserTrackingBarButtonItem

    我目前正在尝试找到一种方法来检测何时MKUserTrackingBarButtonItem被使用 除了处理mapView didUpdateUserLocation 委托方法 我尝试设置ActionMKUserTrackingBarButt
  • 在cowplot::plot_grid 的多面板图中设置单个面板的宽度和高度

    我正在使用多面板图ggplot2 and cowplot包 但我需要更改单个图的高度 最简单地用一个例子来展示 library ggplot2 library cowplot p1 lt ggplot iris aes Sepal Widt
  • 表单 Google 脚本防止重复

    我正在制作一个谷歌表单 有一个名为 name 的字段 其中包含其他字段 如标题 公司和电子邮件地址 如果数据库中已经有一个特定的人 我希望其他信息用新信息替换旧信息 即更新功能 但我在使用 Google Apps 脚本执行此操作时遇到麻烦
  • 如何在使用通用开发服务器的团队环境中使用 Coldfusion Builder 2?

    我们的 CF 9 开发环境位于通用开发服务器 DEVWEB 上 我们正在考虑从 Dreamweaver 迁移到 Coldfusion Builder 作为我们的 IDE 我担心 CF Builder 在项目根目录中放置 settings 目
  • 详细了解大量 3x3 矩阵的逆算法

    我遵循这个原始帖子 用于反转大量 3x3 矩阵的 PyCuda 代码 https stackoverflow com questions 55357826 pycuda adapt existing code and kernel code
  • 如何在 Rust 中将十六进制值转换为 Base64

    我在理解 Rust 中的特征概念时遇到一些问题 我正在尝试将一个简单的十六进制值编码为 Base64 但没有运气 这是我的代码 还有一个字符串到 Base64 的示例 extern crate serialize use serialize
  • 如何在 CAS 服务管理中注册我的 Web 应用程序?

    我的学校想要实现一个CAS服务 我做了大部分配置 但是我需要注册webapp 如何在CAS服务管理中注册webapp 或者如果您有一些可以帮助我的样本 我将非常感激 我尝试过使用 cas 管理应用程序 版本为 4 2 x 我不确定您想使用什
  • 通知 PendingIntent 意图额外内容被另一个通知覆盖

    当使用新的 PendingIntent 创建新通知时 其意图中的额外内容将覆盖任何先前通知的 PendingIntent 意图额外内容 例如 假设我使用 PendingIntent1 创建Notification1 其中包含 Intent1
  • 带动画的事件时间线

    我想要构建的是一个带有一些动画的垂直时间轴组件 我尝试的动画是从第一个圆圈开始 无论哪个项目的状态为true 垂直线都会从上到下绘制 同时无论完成哪个步骤 当线穿过它时 都会从圆形变为已完成的复选标记 我怎样才能实现上面的动画 到目前为止我
  • 应用平移变换时 UICollectionViewFlowLayout 边缘单元消失

    我正在使用自定义UICollectionViewFlowLayout使单元格在到达顶部时缩放和淡出 为此 我正在应用alpha and transform到布局属性 这是我的代码 完整演示存储库的链接 https github com ah