Gemini 1.4.0

Gemini 1.4.0

测试已测试
语言语言 SwiftSwift
许可协议 MIT
发布最后发布2019 年 6 月
SPM支持 SPM

Shohei维护。



Gemini 1.4.0

  • 作者:
  • shoheiyokoyama

概述

什么是 Gemini?

Gemini 是一个用于 iOS 的基于滚动的高性能动画框架,使用 Swift 编写。你可以轻松使用 GeminiCollectionView,它是 UICollectionView 的子类。

Gemini 允许你制作各种具有自定义属性的多重动画,而且还可以创建你自己的自定义滚动动画。

Gemini 还提供了一个基于方法链的流畅接口。你可以直观地简单地使用此接口。

collectionView.gemini
    .circleRotationAnimation()
    .radius(400)
    .rotateDirection(.clockwise)

功能

Platform Cocoapods Carthage compatible License Swift pod

  • 具有滚动功能的丰富动画
  • 易于使用
  • 高度可定制
  • 多种动画类型和属性
  • 支持垂直和水平流布局
  • 支持缓动函数
  • 支持 Swift5.0
  • 基于方法链的流畅接口
  • Carthage 兼容
  • CocoaPods 兼容
  • 带有大量标准动画的示例项目
  • 更多...

目录

动画类型和属性

以下提供动画类型。有关详细信息,请参阅示例代码

此外,您还可以定制以下属性。

正方体

这是一个类似于Instagram的立方体动画。如果您想自定义立方体动画,请更改cubeDegree。如果cubeDegree为90,它将像常规六面体一样移动。

collectionView.gemini
    .cubeAnimation()
    .cubeDegree(90)

圆旋转

动画在圆内移动。您可以更改circleRadiusCircleRotationDirection

collectionView.gemini
    .circleRotationAnimation()
    .radius(450) // The radius of the circle
    .rotateDirection(.clockwise) // Direction of rotation. 
    .itemRotationEnabled(true) // Whether the item rotates or not.

三维向量旋转

适用于翻转俯仰偏航动画。这些旋转动画基于三维向量设计。图-1显示了基于设备的旋转方向。

图1 俯仰滚转轴

参考:UIKit应用事件处理指南

Roll旋转

俯仰旋转

横滚旋转

每种类型的旋转动画都有RotationEffect(例如RollRotationEffect)和旋转角度。

自定义RotationEffectupdownsineWavereverseSineWave)和旋转角度。

rollRotation的情况下,如下所示

collectionView.gemini
    .rollRotationAnimation()
    .degree(45)
    .rollEffect(.rollUp)

缩放

scaleUp逐渐增加帧大小,scaleDown减小。

collectionView.gemini
    .scaleAnimation()
    .scale(0.75)
    .scaleEffect(.scaleUp) // or .scaleDown

自定义

您可以灵活轻松地自定义滚动动画。自定义 GeminiAnimation.custom 的属性,例如 scalescaleEffectrotationAngletranslationeasingshadowEffectalphacornerRadiusbackgroundColoranchorPoint 等。

gif动画的定制方式如下

collectionView.gemini
    .customAnimation()
    .translation(y: 50)
    .rotationAngle(y: 13)
    .ease(.easeOutExpo)
    .shadowEffect(.fadeIn)
    .maxShadowAlpha(0.3)

或gif的右侧定制如下

collectionView.gemini
    .customAnimation()
    .backgroundColor(startColor: lightGreenColor, endColor: lightBlueColor)
    .ease(.easeOutSine)
    .cornerRadius(75)

更多示例代码请参见CustomAnimationViewController.swift

缓动函数

Gemini 支持根据滚动距离的各种缓动函数。

  • linear
  • easeInQuad
  • easeOutQuad
  • easeInOutQuad
  • easeInCubic
  • easeOutCubic
  • easeInOutCubic
  • easeInQuart
  • easeOutQuart
  • easeInOutQuart
  • easeInQuint
  • easeOutQuint
  • easeInOutQuint
  • easeInSine
  • easeOutSine
  • easeInOutSine
  • easeInExpo
  • easeOutExpo
  • easeInOutExpo
  • easeInCirc
  • easeOutCirc
  • easeInOutCirc

阴影效果

默认值为 ShadowEffect.none。在自定义类中返回 shadowView,它是 GeminiCell 的子类。

  • fadeIn
  • nextFadeIn
  • previousFadeIn
  • fadeOut
  • none
class CustomCollectionViewCell: GeminiCell {
    @IBOutlet weak var customShadowView: UIView!
    override var shadowView: UIView? {
        return customShadowView
    }
}

使用方法

  1. 使用 Gemini 类

Gemini 被设计成易于使用。使用 GeminiCollectionViewGeminiCell。这些类是 UICollectionViewUICollectionViewCell 的子类。

  1. 配置动画

使用基于方法链的流畅接口配置动画。您可以用增强可读性的代码来开发有表现力的代码。

  1. 调用动画函数

最后,在scrollViewDidScroll(_:)中调用animateVisibleCells()

注意:如果您想在视图显示后立即适配动画,请曾在collectionView(_:cellForItemAt:)collectionView(_:willDisplay:forItemAt:)中调用animateCell(_:)

// Import Gemini
import Gemini

// Inherite GeminiCell
class CustomCell: GeminiCell {
    ...
}

// Conform to UICollectionViewDelegate and UICollectionViewDataSource
class CustomViewController: UIViewController: UICollectionViewDelegate, UICollectionViewDataSource {

    // Inherite GeminiCollectionView
    @IBOutlet weak var collectionView: GeminiCollectionView!

    ...

    // Configure animation and properties
    func configureAnimation() {
        collectionView.gemini
            .circleRotationAnimation()
            .radius(400)
            .rotateDirection(.clockwise)
    }

    // Call animation function
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        collectionView.animateVisibleCells()
    }

    func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
        if let cell = cell as? GeminiCell {
            self.collectionView.animateCell(cell)
        }
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomCell", for: indexPath) as! CustomCell
        self.collectionView.animateCell(cell)
        return cell
    }

查看示例

要运行示例项目,请克隆存储库,然后从Example目录运行pod install

需求

  • Apple Xcode 10.2.1
  • Swift 5.0

安装

CocoaPods

Gemini可以通过CocoaPods安装。要安装它,只需在Podfile中添加以下行:

pod "Gemini"

Carthage

在您的Cartfile中添加以下行:

github "shoheiyokoyama/Gemini"

作者

Shohei Yokoyama

许可证

“Gemini”可供使用MIT许可证。更多信息请参阅许可证文件