代码拉取完成,页面将自动刷新
iOS自带的手势返回因为不是系统级别,也没有强制App使用,而且仅左侧可用,还有很多App不支持,导致了iOS App返回乱象。该库正是为了解决该问题而制作的,支持全局返回,无论你是present出来的VC,还是各种各样的弹窗,都能返回,让您的App一路顺滑返回到底。
To run the example project, clone the repo, and run pod install
from the Example directory first.
Flashback is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'Flashback'
import Flashback
// 禁用系统提供的手势返回
navigationController?.interactivePopGestureRecognizer?.isEnabled = false
// 启用闪回(必要)
FlashbackManager.shared.isEnable = true
// 以上功能仅在普通页面可返回,present出来UIViewController或在window上增加视图,都会导致手势返回无法使用,如果想获取更完整的返回体验,有两种方式。
// 1. 在AppDelegate中使用FlashbackWindow辅助将返回视图提到最上层
self.window = FlashbackWindow(frame: UIScreen.main.bounds.size)
// 2. 使用RxSwift扩展UIWindow的addSubview方法
FlashbackManager.shared.targetWindow?.rx.methodInvoked(#selector(UIWindow.addSubview(_:))).subscribe (onNext: { _ in
FlashbackManager.shared.makeFlashbackToTop()
}).disposed(by: UIApplication.shared.rx.disposeBag)
let config = FlashbackConfig.default
// 左右侧启用
config.enablePositions = [.left, .right]
// 触发范围
config.triggerRange = 20
// 震动启用
config.vibrateEnable = true
// 震动强度
config.vibrateStyle = .light
// 指示器样式
config.style = .custom
// 指示器背景颜色
config.backgroundColor = .black
// 指示器图片颜色
config.indicatorColor = .yellow
// 上下滚动开启
config.scrollEnable = true
// 震动启用
config.vibrateEnable = true
// 震动强度
config.vibrateStyle = .light
// 忽略顶部高度(顶部不可侧滑返回)
config.ignoreTopHeight = 150
// ...
FlashbackManager.shared.config = config
// 扩展普通VC
class TestViewController {
// 省略不重要代码...
/// 重写返回
override func onFlashback() {
// super.onFlashback()
self.view.endEditing(true)
}
}
// 扩展VC弹窗手势返回
extension AlertViewController {
/// 弹窗闪回扩展
open func onFlashback() {
self.dismiss()
}
}
FlashbackManager.shared.enable = {
if let currentVC = FlashbackManager.shared.currentVC(FlashbackManager.shared.targetWindow) {
if currentVC is RwaTestViewController {
return false
}
}
return true
}
// 举例:判断VC上的视图是否满足某个协议,若满足,则执行其返回方法
// 不是一定要满足FlashbackProtocol协议,你可以选择自己的协议,更好的减少代码侵入
FlashbackManager.shared.preFlashback = { targetWindow, currentVC in
// 返回true继续向下执行正常逻辑,返回false终止
if let alertList = currentVC?.view.subviews.filter({ $0 is FlashbackProtocol }),
let lastAlert = alertList.last as? FlashbackProtocol {
lastAlert.onFlashback()
// 返回false不再继续往下执行
return false
}
// ...
// 返回true继续正常执行
return true
}
// 扩展View弹窗
extension AlertView: FlashbackProtocol {
/// 弹窗闪回扩展
open func onFlashback() {
self.dismiss()
}
}
// 设置返回模式为通知
FlashbackManager.shared.config.backMode = .notify
// 通知回调
NotificationCenter.default.addObserver(forName: FlashbackManager.FlashbackNotificationName, object: nil, queue: nil) { [weak self] _ in
guard let `self` = self else { return }
// 执行返回逻辑
// self.navigationController?.popViewController(animated: true)
}
注意说明:
backMode
为normal
时,执行顺序为:键盘收回
-> preFlashback
-> onFlashback
pod 'FDFullscreenPopGesture' # https://github.com/forkingdog/FDFullscreenPopGesture
pod 'TZScrollViewPopGesture' # https://github.com/banchichen/TZScrollViewPopGesture
参考文章: https://www.jianshu.com/p/0c698f71c49a?ivk_sa=1024320u
可通过邮件的方式联系我: 664454335@qq.com
Flashback is available under the MIT license. See the LICENSE file for more info.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。