ios - 在 App-Store 中构建卡片高亮动画

标签 ios objective-c swift animation uikit

在 AppStore (iOS 11) 左侧“今日”选项卡中,有多个卡片 View 。如果突出显示一个,它会缩小一点。我怎样才能重建这个动画?

我想在动画期间更改卡片 View 的约束不是我们需要的,因为您还必须调整所有其他约束(例如标签)以匹配新大小。

有没有更简单的方法来缩小 View 及其所有 subview ?

此外,当您单击卡片时,它会增加到全屏并带有动画。您知道如何实现这种效果吗?

最佳答案

关于攻丝缩卡,我也写过this详细地。这是想法:

  • 使用缩放 transform 来动画收缩(就像在接受的答案中一样)
  • 禁用 delaysContentTouch 使其在触摸时收缩得更快 (scrollView.delaysContentTouch = false)
  • 始终允许用户使用 .allowUserInteraction 动画选项滚动:
UIView.animate(withDuration: 1.0,
               delay: 0.0,
               options: [.allowUserInteraction],
               animations: ...,
               completion: ...)

(默认情况下,当您使用 transform 时,它会稍微禁用交互。如果不这样做,用户将无法连续滚动)


关于使用动画扩展到全屏,我尝试使用 native 的转换 API 复制它,您可以在此处查看:https://github.com/aunnnn/AppStoreiOS11InteractiveTransition

简而言之,我使用UIViewControllerAnimatedTransitioning 来做自定义动画。隐藏原始卡片并为动画创建一个新的虚拟卡片 View 。然后设置该卡的 AutoLayout 约束,包括每个屏幕边缘 4 个。然后为这些约束设置动画以使其填满屏幕。

一切都完成后,隐藏该虚拟 View 并显示目标详细信息页面。

注意:确切的 implementation detail有点不同和参与。

关于ios - 在 App-Store 中构建卡片高亮动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46950635/

相关文章:

ios - 创建目录和调用 setResourceValue 的正确位置在哪里?

ios - 我怎么知道什么时候刚刚从 `UIViewController` 推送了 `UINavigationViewController`?

ios - 我无法弄清楚这种崩溃:[__NSArrayM insertObject:atIndex:]:对象不能为nil

ios - Swift 中来自字节数组的 NSData

ios - 如何从 Swift 中的 Parse 查询结果访问对象的字段?

ios - iOS 中两种纹理的非幂

ios - 如何在不注册远程静默通知的情况下获取要使用的推送 token ?

objective-c - 每次更改时保存列表

swift - 使用扩展名从字符串中删除特定字符

ios - Fabric 如何获取 iOS 设备的 iOS UDID?