FloatingButton

使用 SwiftUI 创建的易于自定义的浮动按钮菜单

SPM Compatible Cocoapods Compatible Carthage Compatible License: MIT

用法

  1. 创建主按钮视图和一些子菜单按钮 — 它们都应转换为 AnyView 类型。

  2. 将两者传递给 FloatingButton 构造函数

    FloatingButton(mainButtonView: mainButton, buttons: buttons)
  3. 您还可以传递一个 binding,它将确定菜单当前是否打开。 例如,您可以使用它在任何子菜单按钮点击时关闭菜单。

FloatingButton(mainButtonView: mainButton, buttons: buttons, isOpen: $isOpen)
  1. 链接 .straight().circle() 以指定所需的菜单类型。
  2. 之后可以链接任何您喜欢的内容。 例如
    FloatingButton(mainButtonView: mainButton, buttons: textButtons)
        .straight()
        .direction(.top)
        .alignment(.left)
        .spacing(10)
        .initialOffset(x: -1000)
        .animation(.spring())
    
    FloatingButton(mainButtonView: mainButton2, buttons: buttonsImage.dropLast())
        .circle()
        .startAngle(3/2 * .pi)
        .endAngle(2 * .pi)
        .radius(70)
        .layoutDirection(.counterClockwise)

通用选项

spacing - 子菜单按钮之间的间距
initialScaling - 菜单关闭时子菜单按钮的尺寸倍数
initialOffset - 菜单关闭时子菜单按钮的偏移量
initialOpacity - 菜单关闭时子菜单按钮的不透明度
animation - 自定义 SwiftUI 动画,例如 Animation.easeInOut()Animation.spring()
delays - 每个子菜单按钮的动画启动延迟 - 您可以传递延迟数组(每个元素一个),或者您可以传递 delayDelta - 然后每个元素将使用相同的延迟mainZStackAlignment - 主按钮和子菜单按钮包含在一个 ZStack 中(而不是覆盖层,因此菜单具有正确的大小),您可以使用此参数更改此 ZStack 的对齐方式 inverseZIndex - 主按钮和子元素的反向 zIndex。 例如,如果您有负间距并想要更改顺序,请使用此选项 wholeMenuSize - 传递 CGSize binding 以获取菜单大小的更新。 菜单大小包括主按钮框架和所有元素框架 menuButtonsSize - 传递 CGSize binding 以获取组合菜单元素大小的更新

仅直线菜单选项

direction - 子菜单按钮相对于主菜单按钮的位置
alignment - 子菜单按钮相对于主菜单按钮的对齐方式

仅圆形选项

startAngle
endAngle
radius - 主按钮中心和子菜单按钮中心之间的距离
layoutDirection - 从 startAngle 到 endAngle 更改按钮布局方向

示例

要试用 FloatingButton 示例

  1. 克隆存储库 git clone git@github.com:exyte/FloatingButton.git
  2. 打开 <FloatingButtonRepo>/Example
  3. 运行 Example.xcodeproj - 框架作为本地 SPM 包导入。
  4. 试试看!

安装

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/exyte/FloatingButton.git")
]

CocoaPods

pod 'FloatingButton'

Carthage

github "Exyte/FloatingButton"

要求

我们其他的开源 SwiftUI 库

PopupView - Toast 和弹出窗口库
Grid - 最强大的 Grid 容器
ScalingHeaderScrollView - 带有粘性标题的滚动视图,该标题在您滚动时缩小
AnimatedTabBar - 带有多个预设动画的选项卡栏
MediaPicker - 可自定义的媒体选择器
Chat - 具有完全可自定义的消息单元格、输入视图和内置媒体选择器的聊天 UI 框架
OpenAI OpenAI REST API 的包装器库
AnimatedGradient - 动画线性渐变
ConcentricOnboarding - 动画引导流程
ActivityIndicatorView - 许多动画加载指示器
ProgressIndicatorView - 许多动画进度指示器
FlagAndCountryCode - 每个国家/地区的电话代码和标志
SVGView - SVG 解析器
LiquidSwipe - 流体导航动画