BWWalkthrough 4.0.0

BWWalkthrough 4.0.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2019年4月
SPM支持SPM

Yari维护。




CocoaPods Carthage Compatible Platform Twitter

什么是BWWalkthrough?

BWWalkthrough(BWWT)是一个类,帮助您为iOS应用程序创建引导页。与其他类似类不同的是,它没有严格的模板;BWWT只是一个覆盖在您的控制器之上的一层,给您在视图设计上完全的自由。

Preview

视频预览在此处 一个专门的教程在ThinkAndBuild可用

该类附带一套预先构建的动画,这些动画会自动应用于每页的子视图。这个集合可以轻松替换为您的自定义动画。

BWWT主要由两个类定义:BWWalkthroughViewController是主控制器。它显示引导页,并包含所有页面共享的UI元素(如UIButtons和UIPageControl)。

BWWalkthroughPageViewController定义了主控制器内部的每个要显示的单个页面。

它不是什么?

BWWT不是一个可以复制粘贴并且直接运行的类,也不是一个固定的引导模板。如果您需要一个简单的无需配置的引导页,BWWT不是合适的选择。

安装

注意:IBOutlets和Carthage存在一个已知的问题,这会导致Outlets无法正确工作。我也在其他项目的报告中看到了类似的情况。我的建议是遵循手动安装说明,因为这只需要将2个文件拖放到项目中即可。我知道您不能通过这种方式自动更新库... 但是,对于BWWalkthrough这样的项目,IBOutlets是必需的。

使用CocoaPods

BWWalkthrough可以通过CocoaPods使用。要安装它,只需将以下行添加到你的Podfile中

pod "BWWalkthrough"

使用Carthage

将此行添加到你的Cartfile

github "ariok/BWWalkthrough"

运行carthage update以构建框架,并将构建的BWWalkthrough.framework拖入你的Xcode项目中。

手动

BWWalkthrough/BWWalkthroughViewController.swiftBWWalkthrough/BWWalkthroughPageViewController.swift文件添加到你的项目中。

如何使用它?

定义主视图

在Storyboard中添加一个新的控制器,并将其类设置为BWWalkthroughViewController。这是每个页面都会附加到的主控制器。

在这里您可以添加所有需要在所有页面中可见的元素。

有4个预建的IBOutlets可以连接到您的元素以获得一些标准行为:UIPageControl(pageControl)、用于关闭/跳过浏览的UIButton(closeButton)以及用于跳转到下一个和上一个页面的UIButtons(nextButtonprevButton)。您只需创建UI元素并将它们与主控制器的outlets连接起来即可利用这些IBOutlets。

定义页面

将一个新的控制器添加到Storyboard中,并设置它为BWWalkthroughPageViewController。按您喜欢的定义视图。

将页面附加到主控制器

以下是一个如何从专属Storyboard读取数据创建引导的示例。

// Get view controllers and build the walkthrough
let stb = UIStoryboard(name: "Walkthrough", bundle: nil)
let walkthrough = stb.instantiateViewControllerWithIdentifier(“Master”) as BWWalkthroughViewController
let page_one = stb.instantiateViewControllerWithIdentifier(“page1”) as UIViewController
let page_two = stb.instantiateViewControllerWithIdentifier(“page2”) as UIViewController
let page_three = stb.instantiateViewControllerWithIdentifier(“page3”) as UIViewController

// Attach the pages to the master
walkthrough.delegate = self
walkthrough.add(viewController:page_one)
walkthrough.add(viewController:page_two)
walkthrough.add(viewController:page_three)

预建动画

您无需编写代码即可添加动画。您只需创建一个包含子视图的新页面,并使用IB通过运行时参数{Key: animationType, type: String}设置动画样式。BWWalkthrough将根据所选的动画样式对您的视图进行动画处理。

目前(WIP!)动画类型可能的值有:Linear(线性)、Curve(曲线)、Zoom(缩放)和InOut(进出)。X和Y轴上的动画速度必须使用运行时参数{key: speed type:CGPoint}修改,而运行时参数{key: speedVariance type: CGPoint}会根据子视图在页面中的层次结构位置添加速度变化。

示例 假设我们为一页定义了以下运行时参数

  • animationType: "Linear"
  • speed: {0,1}
  • speedVariance: {0,2}

页面的子视图将执行线性动画,根据speedVariance向前端元素添加速度。所以如果我们有3个子视图,每个视图的速度将是

  • 视图 0 {0,1+2}
  • 视图 1 {0,1+2+2}
  • 视图 2 {0,1+2+2+2}

创建著名的视差效果。

从自动动画中排除视图

您可能需要避免某些特定子视图的动画效果。要停止这些视图参与自动的BWWalkthrough动画,您可以指定一个视图标签的列表,您不想对其动画化。可检查属性staticTags(从版本 ~> 0.6 可用)接受一个String,您可以在这里以逗号分隔列表这些标签(例如“1,3,9”)。带有这些标签的视图现在已被排除在自动动画之外。

自定义动画

每个页面在实施BWWalkthroughPage协议后都会接收到其标准化偏移位置的信息,因此您可以在使用此值的基础上扩展预建动画,添加您独一无二且闪耀的动画效果(这里是一个简单的示例)。

func walkthroughDidScroll(position: CGFloat, offset: CGFloat) {
    var tr = CATransform3DIdentity
    tr.m34 = -1/500.0
    titleLabel?.layer.transform = CATransform3DRotate(tr, CGFloat(M_PI)*2 * (1.0 - offset), 1, 1, 1)
}

代理

BWWalkthroughViewControllerDelegate 协议定义了一些有用的方法,您可以通过实现这些方法来获取更多对行走流程的控制。

@objc protocol BWWalkthroughViewControllerDelegate {
        @objc optional func walkthroughCloseButtonPressed()
        @objc optional func walkthroughNextButtonPressed()
        @objc optional func walkthroughPrevButtonPressed()
        @objc optional func walkthroughPageDidChange(pageNumber:Int)
}