Y—Carousel
一个易于使用的轮播图,提供视图和视图控制器两种风格。

该框架允许你用视图数组填充轮播图。页面可以占据轮播图的整个宽度,或者可以稍微内嵌,以显示相邻页面的部分内容。可以通过平移、滑动或点击页面控件来导航轮播图。

Carousel demo animation

许可

Y—Carousel 根据 Apache 2.0 许可证 授权。

文档

文档是从源代码注释自动生成的,并作为静态网站托管在 GitHub Pages 上:https://yml-org.github.io/ycarousel-ios/

使用

CarouselView

简单用例

import YCarousel

final class ViewController: UIViewController {
    private let carouselView: CarouselView = {
        let page1 = UIImageView(image: UIImage(named: "tutorial1"))
        let page2 = UIImageView(image: UIImage(named: "tutorial2"))
        let page3 = UIImageView(image: UIImage(named: "tutorial3"))

        let carouselView = CarouselView(views: [page1, page2, page3])
        return carouselView
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(carouselView)
        carouselView.constrainSize(width: 300, height: 300)
        carouselView.constrainCenter()
    }
}

使用数据源

import YCarousel

final class ViewController: UIViewController {
    private let carouselView = CarouselView()
    private let dataSource = CarouselViewProvider()

    override func viewDidLoad() {
        super.viewDidLoad()
        carouselView.dataSource = dataSource

        view.addSubview(carouselView)
        carouselView.constrainSize(width: 300, height: 300)
        carouselView.constrainCenter()
    }
}

final class CarouselViewProvider {
    private let imageNames = ["tutorial1", "tutorial2", "tutorial3"]
}

extension CarouselViewProvider: CarouselViewDataSource {
    func carouselView(pageAt index: Int) -> UIView {
        UIImageView(image: UIImage(named: imageNames[index]))
    }

    var numberOfPages: Int { imageNames.count }
}

CarouselViewController

用例 1:页面作为视图

import YCarousel

let page1 = UIImageView(image: UIImage(named: "tutorial1"))
let page2 = UIImageView(image: UIImage(named: "tutorial2"))
let page3 = UIImageView(image: UIImage(named: "tutorial3"))

let pages = [page1, page2, page3]

let carouselViewController = CarouselViewController(views: pages)
present(carouselViewController, animated: true, completion: nil)

用例 2:页面作为子视图控制器

import YCarousel

let childVC1 = OnboardingViewController()
let childVC2 = OnboardingViewController()
let childVC3 = OnboardingViewController()

let childVCs = [childVC1, childVC2, childVC3]

let carouselViewController = CarouselViewController(viewControllers: childVCs)
present(carouselViewController, animated: true, completion: nil)

依赖项

Y—Carousel 依赖于我们的 Y—CoreUI 框架(也是开源的并根据 Apache 2.0 许可证授权)。

安装

你可以通过将 Y—Carousel 添加为包依赖项来将其添加到 Xcode 项目中。

  1. File 菜单中,选择 Add Packages...(添加包...)
  2. 在包存储库 URL 文本字段中输入 "https://github.com/yml-org/ycarousel-ios"
  3. 单击 Add Package(添加包)

贡献到 Y—Carousel

要求

SwiftLint(代码检查器)

brew install swiftlint

Jazzy(文档生成器)

sudo gem install jazzy

设置

克隆 repo 并在 Xcode 中打开 Package.swift

版本控制策略

我们采用 语义化版本控制

{major}.{minor}.{patch}

例如

1.0.5

分支策略

我们为我们的框架采用简化的分支策略。

分支命名约定

feature/{ticket-number}-{short-description}
bugfix/{ticket-number}-{short-description}

例如

feature/CM-44-button
bugfix/CM-236-textview-color

Pull Requests (拉取请求)

在提交拉取请求之前,你应该

  1. 编译并确保没有警告和错误。
  2. 运行所有单元测试并确认一切都通过。
  3. 检查单元测试覆盖率并确认所有新/修改的代码都已完全覆盖。
  4. 从命令行运行 swiftlint 并确认没有违规。
  5. 从命令行运行 jazzy 并确认您有 100% 的文档覆盖率。
  6. 考虑使用 git rebase -i HEAD~{commit-count} 将您最近的 {commit-count} 个提交合并成功能块。
  7. 如果父分支(通常是 main)的 HEAD 自你创建分支以来已更新,请使用 git rebase main 来 rebase 你的分支。
    • 切勿 将父分支合并到你的分支中。
    • 始终 基于父分支 rebase 你的分支。

提交拉取请求时

合并拉取请求时

发布新版本

生成文档(通过 Jazzy)

你可以使用以下 Terminal 命令直接从源代码生成自己的本地文档集

jazzy

这将在 /docs 下生成一组文档。 默认配置在默认配置文件 .jazzy.yaml 文件中设置。

要查看其他文档选项,请键入

jazzy --help

每次将提交推送到 main 时,GitHub Action 会自动运行 Jazzy 以生成我们 GitHub 页面上的文档:https://yml-org.github.io/ycarousel-ios/