效果图:

功能: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. Eclipse与Android源码中ProGuard工具的使用

    由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...

  2. 在Visual Studio 2012中使用VMSDK开发领域特定语言(二)

    本文为<在Visual Studio 2012中使用VMSDK开发领域特定语言>专题文章的第二部分,在这部分内容中,将以实际应用为例,介绍开发DSL的主要步骤,包括设计.定制.调试.发布以 ...

  3. 使用fiddler的autoResponder及设置手机端代理实现远程调试,出现的问题及解决办法

    这是开通博客的第一篇随笔,好鸡冻哈哈o_O 首先是下载安装,我安装的是最新的v4.6.2.0版本,大家在百度上搜fidddler4在百度软件中心普通下载就可以了.或者直接用这个连接:http://dl ...

  4. [无聊的事-连载之连开100个VS] 折腾你的骚机吧,骚年们!!!

    [无聊的事-连载之连开100个VS] 折腾你的骚机吧,骚年们!!! 只有8G内存的,用这个:打开你的CMD命令提示符如果只装了Visual Studio 2010,用这条命令,打开50个VSfor / ...

  5. 使用nuget打包类库并发布

    前言 NuGet 是免费.开源的包管理开发工具,专注于在 .NET 应用开发过程中,简单地合并第三方的组件库.今天的目的就是记录一下如何打包一个类库,并发布到官网.在开始之前需要在www.nuget. ...

  6. JavaScript一词被《牛津大词典》收录了

    早上看VS Team的推特发了这个图片,以前总爱问Java怎么读,现在好了,有标准发音了. 确定是 扎瓦·死磕瑞普特 ,哈哈,以后不要再念加瓦了. …… Last month JavaScript r ...

  7. php实现设计模式之 职责链模式

    <?php /** * 职责链模式 * * 为解除请求的发送者和接收者之间的耦合,而使用多个对象都用机会处理这个请求,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它 * 抽象 ...

  8. VB6.0 和VB.NET 函数对比

    VB6.0和VB.Net的对照表 VB6.0 VB.NET AddItem Object名.AddItem Object名.Items.Add ListBox1.Items.Add ComboBox1 ...

  9. html5 video

    先简要概述一下video标签: video:嵌入视频到页面中 1. 声明video标签 单个视频的时候使用src: <video src="http://v2v.cc/~j/theor ...

  10. 基本排序算法——插入排序java实现

    插入排序过程: 在初始状态下,第一个元素是排序的,在最终状态下,作为一组数据时排序的. 代码如下;eclipse4.3实现 package sort.basic; import java.util.A ...