Skip to content

Commit 85ba08a

Browse files
author
natai
committed
write README
1 parent 2fe5939 commit 85ba08a

File tree

2 files changed

+91
-2
lines changed

2 files changed

+91
-2
lines changed

README.md

Lines changed: 87 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,87 @@
1-
# FloatingViewProtocol
1+
# 特性
2+
3+
1. 支持拖动、自动吸附、吸附后部分隐藏
4+
2. 支持自定义可吸附的 edges
5+
3. 支持自定义水平和纵向吸附的优先级
6+
4. 支持自定义悬浮视图可到达区域
7+
5. 支持自定义添加到`UIView`子类或者本库提供的`keyWindow`
8+
9+
# 环境要求
10+
11+
- iOS 8.0+
12+
- Swift 4.1
13+
14+
# 安装
15+
16+
## Cocoapods
17+
18+
`Podfile`添加:
19+
20+
```
21+
pod 'FloatingViewProtocol'
22+
```
23+
24+
# 使用
25+
26+
## 简单运用
27+
28+
1. 遵守`FloatingViewProtocol`协议
29+
30+
2. 实现`component`属性
31+
32+
3. 调用`addFloatingPanGestureRecognir()`方法添加拖动手势
33+
34+
此时悬浮视图已经支持拖动和自动吸附。水平默认超过屏幕中点,纵向默认距离屏幕边缘小于 100 时即可吸附。
35+
36+
## 自定义
37+
38+
在简单运用的基础上,可在悬浮视图中重写各种属性:
39+
40+
```swift
41+
class FloatingView: UIView, FloatingViewProtocol {
42+
/// 是否可以拖拽
43+
var isDraggable = true
44+
/// 是否自动吸附
45+
var isAutoAdsorb = true
46+
/// 可自动吸附的方向
47+
var adsorbableEdges: FloatingAdsorbableEdges = [.left, .right]
48+
/// 水平方向吸附和垂直方向吸附的优先级
49+
var adsorbPriority: FloatingAdsorbPriority = .equal
50+
/// 吸附动画时间
51+
var adsorbAnimationDuration: TimeInterval = 0.35
52+
/// 停止拖拽后,最小距离 floatingEdge 边缘多少可以自动吸附
53+
var minAdsorbableSpacings: UIEdgeInsets = UIEdgeInsets(top: 100, left: 50, bottom: 100, right: 50)
54+
/// 吸附在边缘后是否自动地部分隐藏
55+
var isAutoPartiallyHide = true
56+
/// 隐藏的百分比
57+
var partiallyHidePercent: CGFloat = 0.3
58+
/// 部分隐藏动画时长
59+
var partiallyHideAnimationDuration: TimeInterval = 0.35
60+
/// 悬浮视图可到达区域,距离父视图各边的缩进
61+
var floatingEdgeInsets: UIEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
62+
}
63+
```
64+
65+
此外当悬浮视图已经添加到父视图后,还可以对悬浮视图对象的属性直接赋值修改以上特性。
66+
67+
## 父视图
68+
69+
悬浮视图可以直接添加到普通的`UIView`子类中,也可以添加到新建的`keyWindow`中。
70+
71+
添加到普通`UIView`子类:
72+
73+
```swift
74+
navigationController?.view.addSubview(floatingView)
75+
```
76+
77+
添加到新建的`keyWindow`
78+
79+
```swift
80+
floatingView.makeFloatingWindowKeyAndVisible()
81+
```
82+
83+
对于直接添加到`keyWindow`中的悬浮视图,可以动态更改`keyWindow`根视图的状态栏样式:
84+
85+
```swift
86+
floatingView.updateFloatingWindowStatusBarStyle(to: default)
87+
```

Source/FloatingViewProtocol.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,11 @@ public extension FloatingViewProtocol where Self: UIView {
102102
// MARK: - FloatingWindow
103103
public extension FloatingViewProtocol where Self: UIView {
104104
func makeFloatingWindowKeyAndVisible(statusBarStyle: UIStatusBarStyle = .default) {
105+
defer {
106+
FloatingWindowManager.shared.floatingWindow?.makeKeyAndVisible()
107+
}
108+
guard FloatingWindowManager.shared.floatingWindow == nil else { return }
105109
let floatingWindow = FloatingWindow(frame: UIScreen.main.bounds, statusBarStyle: statusBarStyle)
106-
floatingWindow.makeKeyAndVisible()
107110
floatingWindow.addSubview(self)
108111
// floatingWindow must be referenced, otherwise it cannot be displayed
109112
FloatingWindowManager.shared.floatingWindow = floatingWindow

0 commit comments

Comments
 (0)