BJDraggable
一个简单的协议(无需子类化,无需自己实现方法和属性。只需将 BJDraggable 文件放入您的项目中即可)利用强大的 UIKitDynamics
API,使任何 UIView
只通过一个方法调用的方式在边界视图中可拖动,边界视图作为碰撞体。
安装
使用 pod 'BJDraggable'
或
将源文件夹中的 BJDraggable.swift 文件(位于仓库的源文件夹中)拖放到您的 Xcode 项目中。
使用方法
- 只需在您的视图中调用
addDraggability
方法,并传递一个边界视图,这样就完成了
override func viewDidLoad() {
super.viewDidLoad()
self.loginView.addDraggability(withinView: self.view)
self.omegaView.addDraggability(withinView: self.omegaContainerView)
self.omegaContainerView.addDraggability(withinView: self.view)
self.signupButton.addDraggability(withinView: self.view)
}
- 您也可以通过传递一个
UIEdgeInsets
参数为边界视图添加边距
self.loginView.addDraggability(withinView: self.view, withMargin: UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10))
- 要禁用拖动能力,只需调用
removeDraggability
方法
@IBAction func removeDraggabilityButtonTouched(_ sender: UIButton) {
self.loginView.removeDraggability()
self.omegaView.removeDraggability()
self.omegaContainerView.removeDraggability()
self.signupButton.removeDraggability()
}
注意:如果您认为与 UIViewController
或 UIView
完成,在 deinit
中调用 removeDraggability()
。这将清理使用过的内存和其他变量。
可选使用
-
如果您想在移除可拖动性后(如上面的示例 GIF 所示)使视图回到其原始位置(尊重其自动布局约束),请将
shouldResetViewPositionAfterRemovingDraggability
属性设置为true
。默认值是false
。 -
为了在视觉上突出显示拖动将发生的边界线,您可以设置
isDraggableDebugModeEnabled
属性为true
。有效边界(应用了边距后)将以红色突出显示。在下一个或后续提交中指定自己的颜色。
限制
- 目前,由于实现方式的特点,可拖动性与圆角视图的组合不佳,因为用于模拟边界条件的 invisible walls 以类似
left
、right
、top
、bottom
的方式分别绘制在父视图周围。 - 可以通过消除使用想象中的特殊视图,改用路径的实际边界来克服这一点。但是,这种方法有一个小小的缺点,那就是您正在拖动的视图不会与墙壁滑动,而是会粘附在墙壁上。
许可证
此代码分发受 MIT 许可证的条款和条件约束。