Swift实现封装PopMenu菜单,可在屏幕任意位置弹出
效果图:


功能: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菜单,可在屏幕任意位置弹出的更多相关文章
- Delphi XE7实现的任意位置弹出菜单
Delphi XE7中目前还没有弹出菜单组件,这个弹出菜单应用很普遍,在JAVA开发的安卓程序中很简单就可以用上了,应该说是一个标准控件.看了一些例子,但是都不能满足我想在任意位置弹出菜单需求,于是自 ...
- div样式position:fixed,不随屏幕滚动而滚动,导致屏幕太小时弹出层被遮挡,无法滚动查看的解决办法
window.onscroll = function () { var sl = -Math.max(document.body.scrollTop, document.documentElement ...
- Swift 3 点击屏幕任意位置隐藏键盘
func hideKeyboardWhenTappedAround() { let tap: UITapGestureRecognizer = UITapGestureRecognizer(targe ...
- 有序无序Ul->Li Ol->Li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单(变形2 ---修饰)
从上面可以看出,两个问题,第一:下拉出现的太快太突然,第二:再点击下一个下拉菜单的时候,上一个不会闭合,针对这两个问题,接下来会一 一解决. 解决下拉太快: js中有个jquery效果,有一个效果是j ...
- 有序无序ul->li ol->li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单
实现这一效果利用css和js技术结合 以ul->li为例子 <!DOCTYPE html><html lang="en"><head> & ...
- iOS_21团购_顶部菜单和弹出菜单联动
最后效果图: 各控件关系图1: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize ...
- 关于MFC主菜单和右键弹出菜单
一.主菜单.弹出菜单和右键菜单的概念: 主菜单是窗口顶部的菜单,一个窗口或对话框只能有一个主菜单,但是主菜单可以被更改(SetMenu()更改): 创建方式:CMenu::CreateMenu(voi ...
- 【C#】分享一个弹出容器层,像右键菜单那样召即来挥则去
适用于:.net2.0+ Winform项目 ------------------201508261813更新(源码有更新.Demo未更新)------------------ 重新绘制调整大小手柄( ...
- 如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题
如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 在android中有时候可能要实现一个底部弹 ...
随机推荐
- Eclipse与Android源码中ProGuard工具的使用
由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...
- 在Visual Studio 2012中使用VMSDK开发领域特定语言(二)
本文为<在Visual Studio 2012中使用VMSDK开发领域特定语言>专题文章的第二部分,在这部分内容中,将以实际应用为例,介绍开发DSL的主要步骤,包括设计.定制.调试.发布以 ...
- 使用fiddler的autoResponder及设置手机端代理实现远程调试,出现的问题及解决办法
这是开通博客的第一篇随笔,好鸡冻哈哈o_O 首先是下载安装,我安装的是最新的v4.6.2.0版本,大家在百度上搜fidddler4在百度软件中心普通下载就可以了.或者直接用这个连接:http://dl ...
- [无聊的事-连载之连开100个VS] 折腾你的骚机吧,骚年们!!!
[无聊的事-连载之连开100个VS] 折腾你的骚机吧,骚年们!!! 只有8G内存的,用这个:打开你的CMD命令提示符如果只装了Visual Studio 2010,用这条命令,打开50个VSfor / ...
- 使用nuget打包类库并发布
前言 NuGet 是免费.开源的包管理开发工具,专注于在 .NET 应用开发过程中,简单地合并第三方的组件库.今天的目的就是记录一下如何打包一个类库,并发布到官网.在开始之前需要在www.nuget. ...
- JavaScript一词被《牛津大词典》收录了
早上看VS Team的推特发了这个图片,以前总爱问Java怎么读,现在好了,有标准发音了. 确定是 扎瓦·死磕瑞普特 ,哈哈,以后不要再念加瓦了. …… Last month JavaScript r ...
- php实现设计模式之 职责链模式
<?php /** * 职责链模式 * * 为解除请求的发送者和接收者之间的耦合,而使用多个对象都用机会处理这个请求,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它 * 抽象 ...
- VB6.0 和VB.NET 函数对比
VB6.0和VB.Net的对照表 VB6.0 VB.NET AddItem Object名.AddItem Object名.Items.Add ListBox1.Items.Add ComboBox1 ...
- html5 video
先简要概述一下video标签: video:嵌入视频到页面中 1. 声明video标签 单个视频的时候使用src: <video src="http://v2v.cc/~j/theor ...
- 基本排序算法——插入排序java实现
插入排序过程: 在初始状态下,第一个元素是排序的,在最终状态下,作为一组数据时排序的. 代码如下;eclipse4.3实现 package sort.basic; import java.util.A ...