效果图:

功能:GitHub下载

只需要传入菜单箭头点位置、菜单宽度、数据源即可。

1、支持任意点弹出(点是基于整个屏幕位置)
2、会根据点位置自动计算菜单位置
3、背景色、文字等支持自定义设置

导入项目:

  • pods导入:pod 'SwiftPopMenu'

  • 文件导入:下载Demo,导入SwiftPopMenu.swift文件即可

  • 代码现已支持 Swift5 (2.x已支持swift5,1.x支持swift3)

使用介绍:

import SwiftPopMenu

1、初始化

 ///   初始化菜单
///
/// - Parameters:
/// - menuWidth: 菜单宽度
/// - arrow: 箭头位置是popmenu相对整个屏幕的位置
/// - datas: 数据源数组,icon允许传空,若数据源传空,菜单不会显示
/// - configure: 配置信息,可不传,不传采用默认值
init(menuWidth:CGFloat,arrow:CGPoint,datas:[(icon:String,title:String)],configures:[SwiftPopMenuConfigure] = []) {
///
}

2、显示与移除

 popMenu.show()

 popMenu.dismiss()  

3、点击事件,提供两种方式

  • block回调处理
  • 代理处理

4、参数配置(使用时可不传)

public enum SwiftPopMenuConfigure {
case PopMenuTextFont(UIFont) //菜单文字字体,默认systemFont(ofSize: 17)
case PopMenuTextColor(UIColor) //菜单文字颜色,默认black
case PopMenuBackgroudColor(UIColor) //菜单背景色,默认white
case popMenuCornorRadius(CGFloat) //菜单圆角,默认6
case popMenuItemHeight(CGFloat) //菜单行高度(非整个高度),默认44
case popMenuSplitLineColor(UIColor) //菜单分割线颜色,默认(222,222,222)
case popMenuIconLeftMargin(CGFloat) //icon左间距,默认15
case popMenuMargin(CGFloat) //菜单与屏幕边距,默认10
case popMenuAlpha(CGFloat) //菜单背景透明度,默认0.3
}

完整示例代码:

var popMenu:SwiftPopMenu!

 //数据源(icon可不填)
let popData = [(icon:"saoyisao",title:"扫一扫"),
(icon:"SignRule",title:"签到规则"),
(icon:"saoyisao",title:"扫一扫"),
(icon:"SignRule",title:"签到规则")] //设置参数(可不写这个,采用默认值)
let parameters:[SwiftPopMenuConfigure] = [
.PopMenuTextColor(UIColor.black),
.popMenuItemHeight(),
.PopMenuTextFont(UIFont.systemFont(ofSize: ))
] //init (test随机生成点位置,注意:arrow点是基于屏幕的位置)
popMenu = SwiftPopMenu(menuWidth: , arrow: CGPoint(x: CGFloat(arc4random_uniform(UInt32(KSCREEN_WIDTH-)) + ), y: CGFloat(arc4random_uniform(UInt32(KSCREEN_HEIGHT-)) + )), datas: popData,configures: parameters) //click
popMenu.didSelectMenuBlock = { [weak self](index:Int)->Void in
print("block select \(index)")
self?.popMenu = nil
} //show
popMenu.show()

最新源码下载:https://github.com/TangledHusky/SwiftPopMenu

Swift实现封装PopMenu菜单,可在屏幕任意位置弹出的更多相关文章

  1. Delphi XE7实现的任意位置弹出菜单

    Delphi XE7中目前还没有弹出菜单组件,这个弹出菜单应用很普遍,在JAVA开发的安卓程序中很简单就可以用上了,应该说是一个标准控件.看了一些例子,但是都不能满足我想在任意位置弹出菜单需求,于是自 ...

  2. div样式position:fixed,不随屏幕滚动而滚动,导致屏幕太小时弹出层被遮挡,无法滚动查看的解决办法

    window.onscroll = function () { var sl = -Math.max(document.body.scrollTop, document.documentElement ...

  3. Swift 3 点击屏幕任意位置隐藏键盘

    func hideKeyboardWhenTappedAround() { let tap: UITapGestureRecognizer = UITapGestureRecognizer(targe ...

  4. 有序无序Ul->Li Ol->Li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单(变形2 ---修饰)

    从上面可以看出,两个问题,第一:下拉出现的太快太突然,第二:再点击下一个下拉菜单的时候,上一个不会闭合,针对这两个问题,接下来会一 一解决. 解决下拉太快: js中有个jquery效果,有一个效果是j ...

  5. 有序无序ul->li ol->li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单

    实现这一效果利用css和js技术结合 以ul->li为例子 <!DOCTYPE html><html lang="en"><head> & ...

  6. iOS_21团购_顶部菜单和弹出菜单联动

    最后效果图: 各控件关系图1: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize ...

  7. 关于MFC主菜单和右键弹出菜单

    一.主菜单.弹出菜单和右键菜单的概念: 主菜单是窗口顶部的菜单,一个窗口或对话框只能有一个主菜单,但是主菜单可以被更改(SetMenu()更改): 创建方式:CMenu::CreateMenu(voi ...

  8. 【C#】分享一个弹出容器层,像右键菜单那样召即来挥则去

    适用于:.net2.0+ Winform项目 ------------------201508261813更新(源码有更新.Demo未更新)------------------ 重新绘制调整大小手柄( ...

  9. 如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题

    如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 在android中有时候可能要实现一个底部弹 ...

随机推荐

  1. Android学习笔记之ListView复用机制

    PS:满打满算,差不多三个月没写博客了...前一阵忙的不可开交...总算是可以抽出时间研究研究其他事情了... 学习内容: 1.ListView的复用机制 2.ViewHolder的概念 1.List ...

  2. jQuery-1.9.1源码分析系列(三) Sizzle选择器引擎——词法解析

    jQuery源码9600多行,而Sizzle引擎就独占近2000行,占了1/5.Sizzle引擎.jQuery事件机制.ajax是整个jQuery的核心,也是jQuery技术精华的体现.里面的有些策略 ...

  3. 数据结构(c语言第2版)-----了解链表,栈,队列,串

    关于链表我觉得这都是最基本的东西,但是不常见,在实际的应用中很少的使用,了解它会用就OK,不需要研究的那么深,除非做那种内存压缩,存储方面工作. C语言中动态申请空间 malloc() q=(dlin ...

  4. MySQL数据迁移到MSSQL-以小米数据库为例-测试828W最快可达到2分11秒

    这里采用.NET Framework 4.0以上版本中新出现的 ConcurrentQueue<T> 类 MSDN是这样描述的: ConcurrentQueue<T> 类是一个 ...

  5. 三分钟集成elmah xml 格式日志到mvc站点

    1.通过nuget安装Elmah ELMAH on XML Log 会自动在web.config 文件中添加配置内容,默认不允许远程访问,日志访问路径是 Elmah.axd,不记录500错误 2.修改 ...

  6. jquery完整弹窗代码

    </html> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...

  7. 安卓模拟器genymotion连接eclipse成功但是不显示其中项目

    安卓模拟器困了我两三天了,原装模拟器比较慢,忍受不了,查到安卓模拟器的神器——genymotion 按照网上的步骤一步步都安装完毕,最后打开后发现,genymotion界面里面没有找到新建的工程, 这 ...

  8. ahjesus web动态icon

    刚刚逛插件无意间发现的,记录下,里面有demo可以直接run了看效果 http://nicolasbize.com/faviconx/ http://www.miaofree.com/

  9. linux下tomcat自启动设置

    1.进入/etc/init.d 2.新建文件tomcat,内容如下: #!/bin/sh # chkconfig: 345 99 10 # description: Auto-starts tomca ...

  10. (原)3.1 Zookeeper应用 - Master选举

    本文为原创文章,转载请注明出处,谢谢 Master 选举 1.原理 服务器争抢创建标志为Master的临时节点 服务器监听标志为Master的临时节点,当监测到节点删除事件后展开新的一轮争抢 某个服务 ...