SwiftyWalkthrough 0.0.3

SwiftyWalkthrough 0.0.3

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布最新发布2015 年 11 月
SPM支持 SPM

Rui Costa 维护。



  • Rui Costa

SwiftyWalkthrough

SwiftyWalkthrough 是一个用于在您的应用中创建出色的引导体验的库,它用 Swift 编写。您可以使用此库允许用户以由您控制的预定方式逐步导航和探索您的应用程序。

SwiftyWalkthrough 在Insane Logic 开发。

功能

  • [x] 用很少的努力添加引导:你不需要改变你的视图层次结构中的任何内容。
  • [x] SwiftyWalkthrough 对于入门、引导、教程等非常好。
  • [x] 精确控制在特定时间用户可以访问哪些视图。
  • [x] 带用户通过一系列步骤,甚至跨越多个屏幕。
  • [x] 简单!

预览

SwiftyWalkthrough demo

要求

  • iOS 8.0+
  • Xcode 7.0+

安装

使用方法

SwiftyWalkthrough 通过在屏幕顶部添加覆盖层,阻止对您的视图的访问来实现。然后您可以控制哪些视图应该被允许访问以及何时访问。

初始化引导或附加到现有的引导

import SwiftyWalkthrough

if let _ = walkthroughView {
    // Attached to existing walkthrough
} else {
   let myCustomWalkthrough = CustomWalkthroughView()
   startWalkthrough(myCustomWalkthrough)
   // Walkthrough initialized
}

检查是否存在进行中的引导

有时判断是否存在正在进行的引导非常有用(即调整视图控制器上的逻辑)。在这种情况下,您可以使用属性 ongoingWalkthrough

@IBAction func switchValueChanged(sender: UISwitch) {
    customWalkthroughView?.removeAllHoles()
    customWalkthroughView?.helpLabel.hidden = true

    NSUserDefaults.standardUserDefaults().setBool(true, forKey: "settingsWalkthroughComplete")

    if ongoingWalkthrough {
        navigationController?.popToRootViewControllerAnimated(true)
    }
}

在覆盖层上为要暴露的视图挖洞

@IBOutlet weak var nameField: UITextField!
@IBOutlet weak var surnameField: UITextField!
@IBOutlet weak var addressField: UITextField!

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    walkthroughView?.cutHolesForViews([nameField]) // start by only allowing the interaction with nameField
}

cutHolesForViews 只会在您的视图的框架中查看,以在覆盖层中挖洞。如果您想添加一些额外的填充或定义圆角半径,可以使用 cutHolesForViewDescriptors 如下所示

let descriptors = [
    ViewDescriptor(view: showProfileButton, extraPaddingX: 20, extraPaddingY: 10, cornerRadius: 10)
]

walkthroughView?.cutHolesForViewDescriptors(descriptors)

移除洞孔

walkthroughView?.removeAllHoles()

完成时关闭引导

finishWalkthrough()

自定义

默认情况下,SwiftyWalkthrough仅提供阻止访问你的视图并切开口以访问它们的机制,如何自定义以满足您的需求就取决于您了。您可以通过继承WalkthroughView来操作,并使用您自定义的引导视图启动引导。您可以在随库提供的示例中了解更多信息。

import UIKit
import SwiftyWalkthrough

class CustomWalkthroughView: WalkthroughView {
    // customize it
}

let myCustomWalkthrough = CustomWalkthroughView()
startWalkthrough(myCustomWalkthrough)

在任意时间指定覆盖层的暗色色调,只需设置属性dimColor

walkthroughView?.dimColor = UIColor.redColor().colorWithAlphaComponent(0.7).CGColor

WalkthroughViewDelegate

如果您需要通知您在立即要与暴露视图交互之前的情况,可以为willInteractWithView方法提供实现。

// MARK: - WalkthroughViewDelegate

func willInteractWithView(view: UIView) {
    print("Will interact with view \(view)")
}

注意:请记住,willInteractWithView可能会被多次调用,因为它依赖于UIView的hitTest方法。请参考UIView类参考

该方法通过调用每个子视图的点Inside:withEvent:方法遍历视图层次结构,以确定哪个子视图应该接收触摸事件。如果点Inside:withEvent:返回true,则类似地遍历子视图的层次结构,直到找到包含指定点的最前面视图。如果一个视图不包含该点,其视图层次结构的这个分支将被忽略。您很少需要自己调用此方法,但您可能需要重写它以隐藏子视图的触摸事件。

此方法忽略隐藏的视图对象,没有启用用户交互的视图对象,或其alpha小于0.01的视图对象。在确定命中时,此方法不考虑视图的内容。因此,即使指定的点在该视图内容的透明部分内,该视图仍然可以返回。

如果点位于接收器的边界之外,则永远不会报告为命中,即使它们实际上位于接收器的某个子视图内。如果当前视图的clipsToBounds属性设置为false并且受影响的子视图超出视图的界限,则可能会发生这种情况。

在您的应用中使用SwiftyWalkthrough?

告诉我,我会在这里提到!

致谢

由Rui Costa (@ruipfcosta) 拥有和维护。

感谢Andrew Jackman (@andrew_jackman)。

贡献

欢迎提交错误报告和拉取请求。

许可

SwiftyWalkthrough 根据 MIT 许可证发布。请参见 LICENSE 以获取详细信息。