Hero技术博客精选:社区最佳实践与教程汇总
【免费下载链接】Hero 项目地址: https://gitcode.com/gh_mirrors/her/Hero
关于Hero框架
Hero是一个iOS视图控制器转场动画库,提供了声明式API来简化UIKit复杂的转场动画实现。它类似于Keynote的"神奇移动"(Magic Move)效果,通过匹配视图的heroID属性自动创建平滑过渡动画。Hero支持交互式手势控制、动态动画时长计算,并兼容Auto Layout、UICollectionView等各种布局方式。
核心优势
- 声明式API设计,简化自定义转场实现
- 自动匹配具有相同
heroID的视图并创建过渡动画 - 支持交互式手势控制转场过程
- 基于Material Design Motion Guide自动计算动画时长
- 兼容各种布局方式和UI组件
快速入门指南
基本使用示例
以下是两个最基础的Hero使用示例,展示了如何通过少量代码实现流畅的转场动画。
示例1:基础视图匹配
视图控制器1
redView.hero.id = "ironMan"
blackView.hero.id = "batMan"
视图控制器2
self.hero.isEnabled = true
redView.hero.id = "ironMan"
blackView.hero.id = "batMan"
whiteView.hero.modifiers = [.translate(y:100)]
示例2:级联动画效果
视图控制器1
greyView.hero.id = "skyWalker"
视图控制器2
self.hero.isEnabled = true
greyView.hero.id = "skyWalker"
// collectionView是所有红色单元格的父视图
collectionView.hero.modifiers = [.cascade]
for cell in redCells {
cell.hero.modifiers = [.fade, .scale(0.5)]
}
Storyboard集成
Hero完全支持Storyboard可视化配置,你可以直接在Interface Builder中设置HeroID和HeroModifiers属性。
安装指南
Hero提供多种安装方式,你可以根据项目需求选择最适合的方式。
CocoaPods
pod 'Hero'
Carthage
github "HeroTransitions/Hero"
Swift Package Manager
.package(url: "https://gitcode.com/gh_mirrors/her/Hero.git", .upToNextMajor(from: "1.6.3"))
手动安装
直接将Sources文件夹拖入你的项目中。
官方安装文档:Package.md
核心功能详解
默认动画效果
Hero提供多种预设动画效果,可以直接通过属性设置:
heroModalAnimationType:模态视图转场动画heroNavigationAnimationType:导航控制器转场动画heroTabBarAnimationType:标签栏控制器转场动画
动画修饰符(Modifiers)
Hero提供丰富的动画修饰符,用于定义视图的动画效果:
// 常用修饰符示例
cell.hero.modifiers = [
.fade, // 淡入淡出效果
.scale(0.5), // 缩放效果
.translate(x: 100, y: 0),// 平移效果
.rotate(x: 0, y: 0, z: 90),// 旋转效果
.opacity(0.8), // 透明度调整
.delay(0.2), // 延迟开始
.duration(0.5), // 动画时长
.spring(stiffness: 200, damping: 20) // 弹性效果
]
完整修饰符列表请参考HeroModifier.swift
坐标空间
Hero支持两种坐标空间模式,用于控制视图动画的参考系:
- 全局坐标空间(Global Coordinate Space)
- 局部坐标空间(Local Coordinate Space)
社区最佳实践
示例项目
Hero提供了多个示例项目,展示不同场景下的最佳实践:
- AppStoreCardExample.swift:App Store风格卡片转场
- BuiltInTransitionExample.swift:内置过渡效果演示
- MatchExample.swift:视图匹配动画示例
- MatchInCollectionExample.swift:集合视图中的匹配动画
常见问题解决
问题1:转场动画不生效
确保在导航控制器上也启用了Hero:
navigationController?.hero.isEnabled = true
问题2:视图在动画过程中被遮挡
尝试使用全局坐标空间修饰符:
view.hero.modifiers = [.useGlobalCoordinateSpace]
问题3:自定义动画与默认动画冲突
可以禁用默认动画:
self.hero.navigationAnimationType = .none
更多常见问题请参考README.zh-cn.md
高级教程
交互式转场
Hero支持通过手势控制的交互式转场,实现流畅的用户体验:
// 基本交互式转场设置
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
view.addGestureRecognizer(panGesture)
@objc func handlePan(_ gesture: UIPanGestureRecognizer) {
let translation = gesture.translation(in: view)
let progress = translation.y / view.bounds.height
switch gesture.state {
case .began:
hero.dismissViewController()
case .changed:
hero.updateInteractiveTransition(progress)
case .ended, .cancelled:
if progress > 0.5 {
hero.finishInteractiveTransition()
} else {
hero.cancelInteractiveTransition()
}
default:
break
}
}
自定义转场动画
通过实现HeroAnimator协议创建完全自定义的动画效果:
class CustomAnimator: HeroAnimator {
override func animate(fromViews: [UIView], toViews: [UIView], using containerView: UIView) {
// 自定义动画逻辑
UIView.animate(withDuration: 0.5) {
// 动画内容
} completion: { _ in
self.completeAnimation(finished: true)
}
}
}
// 使用自定义动画器
viewController.hero.animator = CustomAnimator()
更多高级用法请参考HeroAnimator.swift
参考资源
官方文档
源码结构
社区资源
- GitHub仓库:https://gitcode.com/gh_mirrors/her/Hero
- 贡献指南:CONTRIBUTING.md
结语
Hero框架极大简化了iOS应用中的视图控制器转场动画实现,无论是简单的页面切换还是复杂的交互式动画,都能通过简洁的API快速实现。希望本文汇总的最佳实践和教程能帮助你更好地掌握Hero的使用,为你的应用增添流畅优雅的转场效果。
如果觉得本文对你有帮助,请点赞收藏并分享给更多开发者,也欢迎在社区中分享你的使用经验和创意实现!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考






