应用平移变换时 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 边缘单元消失 的相关文章

  • 如何找到键盘未覆盖的视图部分(UIModalPresenationStyleFormSheet)?

    我有一个视图控制器 显示带有 UITextView 的视图 并且我想在键盘出现时调整视图的大小 以便 UITextView 不会被键盘覆盖 我几乎在所有情况下都可以正常工作 据我所知 仅当视图控制器以 ModalPresentationSt
  • 为什么performSegueWithIdentifier在viewDidLoad中不起作用?

    我试图在视图控制器上调用 viewDidLoad 后立即触发故事板转场 Segue 附加了一个标识符 当从链接到按钮或其他控件的方法内部调用时 它可以正常工作 但它在 viewDidLoad 内部不起作用 它只是默默地失败了 viewDid
  • iOS、通用链接、Swift。 continueUserActivity 未调用

    我正在为我们的 iOS 应用程序实现通用链接 这是我的一小部分 AppDelegate private func application application UIApplication openURL url URL sourceApp
  • 将自定义数据包含到 iOS 故障转储中

    你好 堆栈溢出 有一个简单的问题要问您 当我的应用程序在用户的设备上崩溃时 是否可以将自定义错误数据嵌入到自动生成的 iOS 故障转储中 例如 我的 SQlite 数据库由于某种原因无法运行 例如 数据库文件已损坏 我无法从这个错误中恢复
  • Objective-C UILabel 作为超链接

    我正在尝试做一个UILabel一个链接UIWebView 我怎样才能做一个UILabel作为超链接 您可以使用 UITapGestureRecognizer 它将实现与您想要的类似的功能 UILabel myLabel UILabel al
  • CALayer边框奇怪问题

    我正在向 CALayer 添加边框 但有一些奇怪的行为 在我应用的边框之后出现模糊边框 参见屏幕截图 这是我的代码 void configureLabel self hidden YES self textAlignment NSTextA
  • ios swift parse:从 3 个类收集数据

    我有这样的结构 User CardSet 带有指向 User objectId 的指针 user 和 col name 带有点 cards 的卡片到 Card Set objectId 和列 name 我想选择所有卡数据 包括当前用户的卡集
  • 从按钮执行 Segue 时应用程序冻结

    我的故事板中有一个按钮 它呈现一个带有模式序列的视图控制器 每次按下此按钮时 应用程序都会冻结 没有崩溃 也没有错误消息 prepareForSegue被调用 所有应该存在的视图控制器都在代码中prepareForSegue 但它们不会出现
  • iOS:生成pdf时绘制文本时如何设置字体?

    我在ios应用程序中使用drawpdf函数生成pdf 同时调用nsobject类中的drawtext函数 它根据我指定的框架和字符串清楚地绘制文本 我的代码是 void drawText NSString textToDraw inFram
  • 在 iPhone 3GS 与 iPhone 4 上为 Mobile Safari 嵌入 HTML5 视频

    我在服务器上的 mp4 文件中有 H 264 AAC 编码的视频 mime 类型的视频 mp4 添加到 Web 服务器 IIS 7 并且我有一个带有视频标签的页面
  • 会话重新启动后 AVcapture 会话启动缓慢

    我有一个主视图控制器 它连接到具有 avcapturesession 的第二个视图控制器 我第一次从主视图控制器转向捕获会话控制器 大约需要 50 毫秒 使用 仪器 检查 然后我从捕获会话返回到主视图控制器 然后从主控制器返回到 avcap
  • 如何在button.addTarget操作中发送多个按钮?斯威夫特3

    如何将button和button2发送到我的pressButton2函数中 当用户触摸按钮2时 我需要更改按钮和按钮2的颜色 当我的 button2 addTarget 看起来像这样时 我收到错误 表达式列表中存在预期表达式 import
  • 如何在代码中编辑约束

    我有一个以 100 开始宽度限制的网页 当用户单击按钮时 我想将约束更改为 200 我试过这个 NSLayoutConstraint constrain NSLayoutConstraint constraintWithItem self
  • 根据一个数组对多个数组进行排序

    如何根据数组对一堆数组进行排序createdAt 例如 2015 11 02 19 19 35 0000 将它们组合成另一种类型 字典 以便在 tableView 中使用是否有益 如果有的话如何 var comment AnyObject
  • 叠加 SKScene 未显示

    我正在尝试将 SKScene 覆盖在 SCNScene 上 当我在模拟器和 iPhone6 上运行我的应用程序时 overlayScene SKScene 按预期显示 但是当我尝试在 iPhone5 上运行它 尝试了 2 个不同的设备 时
  • Firebase ref.removeAllObservers() 是否也会递归删除子观察者?

    我看到了一些与此相关的问题 但没有一个真正证实了我的疑问 If I removeAllObservers 在父节点上 这是否也会递归地删除可能已附加在所有子节点和子节点的子节点等处的所有其他观察者 递归地 API 文档为removeAllO
  • 当直接从 usdz 文件而不是 Reality Composer 文件加载模型时,如何在 RealityKit 中渲染阴影?

    将模型直接从 usdz 文件添加到场景锚点时 模型下方不会出现接地阴影 如果您将模型导入 RealityComposer 并添加 RealityComposer 场景 则会出现这些 但是 您可以在不使用 RC 的情况下启用接地阴影吗 我尝试
  • 如何在 UICollectionView 中将行居中?

    我有一个UICollectionView与随机细胞 有什么方法可以让我将行居中吗 默认情况下它是这样的 x x x x x x x x x x x x x x 这是所需的布局 x x x x x x x x x x x x 我必须做这样的事
  • iPhone 上的纵向 UISplitViewController 在 iOS 8 中始终显示主视图和细节视图

    UISplitViewController in portrait在 iPhone 上始终显示主控和细节iOS 8 我尝试子类化UISplitViewController并将其配置为同时显示主视图和细节视图 但没有任何效果 class AP
  • 隐藏选项卡栏项目并对齐其他选项卡项目

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

随机推荐

  • 带有参数和通配符的 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