Hero技术博客精选:社区最佳实践与教程汇总

Hero技术博客精选:社区最佳实践与教程汇总

【免费下载链接】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框架logo

快速入门指南

基本使用示例

以下是两个最基础的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中设置HeroIDHeroModifiers属性。

Storyboard视图配置 Storyboard控制器配置

安装指南

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:标签栏控制器转场动画

默认动画效果1 默认动画效果2

动画修饰符(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提供了多个示例项目,展示不同场景下的最佳实践:

常见问题解决

问题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的使用,为你的应用增添流畅优雅的转场效果。

如果觉得本文对你有帮助,请点赞收藏并分享给更多开发者,也欢迎在社区中分享你的使用经验和创意实现!

【免费下载链接】Hero 【免费下载链接】Hero 项目地址: https://gitcode.com/gh_mirrors/her/Hero

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值