iOS 带箭头菜单选项弹窗LFPopupMenu
一、效果图
由于是模拟器缩得比较小,一些细线可能显示不出来,不是bug哈。
二、用法
LFPopupMenuItem *item1 = [LFPopupMenuItem createWithTitle:@"小视频" image:[UIImage imageNamed:@"icon_menu_record_normal"]];
LFPopupMenuItem *item2 = [LFPopupMenuItem createWithTitle:@"拍照" image:[UIImage imageNamed:@"icon_menu_shoot_normal"]];
LFPopupMenuItem *item3 = [LFPopupMenuItem createWithTitle:@"相册" image:[UIImage imageNamed:@"icon_menu_album_normal"]];
self.items = @[item1, item2, item3]; LFPopupMenu *menu = [[LFPopupMenu alloc] init];
[menu configWithItems:self.items
action:^(NSInteger index) {
NSLog(@"点击了第%zi个",index);
}]; [menu showArrowToView:sender];
更多方法见.h文件,有详细注释
//
// LFPopupMenu.h
// LFPopupMenu
//
// Created by 张林峰 on 2017/8/20.
// Copyright © 2017年 张林峰. All rights reserved.
// #import <UIKit/UIKit.h> typedef NS_ENUM(NSInteger, PopupMenuDirection) {
PopupMenuDirection_Auto, //箭头自动确定朝上还是下
PopupMenuDirection_Up, //箭头朝上
PopupMenuDirection_Down //箭头朝下
}; @interface LFPopupMenuItem : NSObject @property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) UIImage *image; /** 生成选项对象,标题和图片至少要传一个参数*/
+ (LFPopupMenuItem *)createWithTitle:(NSString *)title image:(UIImage *)image; @end @interface LFPopupMenuConfig : NSObject <NSCopying> @property (nonatomic, assign) CGFloat rowHeight;//行高,默认60
@property (nonatomic, assign) CGFloat arrowH;//箭头形高,默认9
@property (nonatomic, assign) CGFloat arrowW;//箭头形宽,默认9
@property (nonatomic, assign) CGFloat minWidth;//弹窗最小宽度,默认0
@property (nonatomic, assign) CGFloat popupMargin;//窗口距屏幕边缘最小距离,默认5
@property (nonatomic, assign) CGFloat leftEdgeMargin;//左边距窗口的距离,默认16
@property (nonatomic, assign) CGFloat rightEdgeMargin;//右边距窗口的距离,默认16
@property (nonatomic, assign) CGFloat textMargin;//文字距图标的距离,默认8
@property (nonatomic, assign) CGFloat lineMargin;//分割线左边距,默认0
@property (nonatomic, assign) CGFloat cornerRadius;//弹窗圆角,默认6
@property (nonatomic, assign) CGFloat arrowCornerRadius;//箭头的圆角,默认0
@property (nonatomic, strong) UIColor *lineColor;//分割线颜色、边框色,默认系统灰色
@property (nonatomic, strong) UIFont *textFont;//默认15
@property (nonatomic, strong) UIColor *textColor;//默认黑色
@property (nonatomic, strong) UIColor *fillColor;//带箭头框的填充色,默认白色
@property (nonatomic, assign) BOOL needBorder;//是否要边框 @end /**
(可选)配置LFPopupMenu默认样式的单例,只需应用启动时配置一次即可
作用:如果多处使用LFPopupMenu,配置默认样式,就不用繁琐的设置那些属性
*/
@interface LFPopupMenuDefaultConfig : NSObject @property (nonatomic, strong) LFPopupMenuConfig *config; + (instancetype)sharedInstance; @end @interface LFPopupMenu : UIView @property (nonatomic, strong) LFPopupMenuConfig *config;
@property (nonatomic, strong) UIView *maskView;//半透明遮罩层,默认透明,可自行设置
@property (nonatomic, strong) UIImage *imgBG;//背景图,设置了这个就不用画带箭头的框了。
@property (nonatomic, assign) CGPoint anchorPoint;//设置背景图的情况使用,背景图的三角在背景图的位置比例,如左上角(0,0),右下角(1,1),下边中间(0.5,1)以此类推
@property (nonatomic, strong) UIView *menuSuperView;//本菜单弹窗的父视图,默认在Window上
@property (nonatomic, assign) PopupMenuDirection direction; @property (nonatomic, copy) void(^dismissComplete)(void);//消失的回调 /**
配置选项,注意:设置上面属性之后调用 @param items 含文字和标题的对象数组
@param action 点击回调,根据index判断点击的第几个
*/
- (void)configWithItems:(NSArray<LFPopupMenuItem *>*)items action:(void(^)(NSInteger index))action; /**完全自定义菜单弹窗*/
- (void)configWithCustomView:(UIView *)customView; /**
显示菜单窗,有imgBG的情况下调用
@param point 本控件“左上角”位置,相对window
*/
- (void)showInPoint:(CGPoint)point; /**
显示菜单窗,无imgBG的情况下调用
@param point 箭头顶点位置,相对window
*/
- (void)showArrowInPoint:(CGPoint)point; /**
显示菜单窗,无imgBG的情况下调用(推荐) @param view 箭头对准的view
*/
- (void)showArrowToView:(UIView*)view; - (void)dismiss; @end
这只是LFKit的一个子库,LFKit地址https://github.com/zhanglinfeng/LFKit
只需LFPopupMenu的 pod 'LFKit/Component/LFPopupMenu'
需要LFKit中所有自定义控件的pod 'LFKit/Component'
需要总库的 pod 'LFKit'
iOS 带箭头菜单选项弹窗LFPopupMenu的更多相关文章
- iOS 新浪微博-2.0 搜索框/标题带箭头/下拉菜单
不管是搜索框还是下拉菜单,我们都需要对背景的图片进行拉伸.定义一个Category分类对图片进行操作. UIImage+Effect.h #import <UIKit/UIKit.h> @ ...
- 不得不吐槽的Android PopupWindow的几个痛点(实现带箭头的上下文菜单遇到的坑)
说到PopupWindow,我个人感觉是又爱又恨,没有深入使用之前总觉得这个东西应该很简单,很好用,但是真正使用PopupWindow实现一些效果的时候总会遇到一些问题,但是即便是人家的api有问题, ...
- iOS重写drawRect方法实现带箭头的View
创建一个UIView的子类,重写drawRect方法可以实现不规则形状的View,这里提供一个带箭头View的实现代码: ArrowView.h #import <UIKit/UIKit.h&g ...
- 如何在webapp中做出原生的ios下拉菜单效果
github:https://github.com/zhoushengmufc/iosselect webapp模仿ios下拉菜单 html下拉菜单select在安卓和IOS下表现不一样,iossel ...
- popover带箭头弹框
我们先来看一下效果吧: 分析:这个带箭头的弹框其实是一个控制器,通过Modal方式展现,但跟传统模态方式效果不一样,我们一眼就能看出. Xib方式实现popover: 1.segue的时候选择Pres ...
- 使用纯CSS实现带箭头的提示框
爱编程爱分享,原创文章,转载请注明出处,谢谢!http://www.cnblogs.com/fozero/p/6187323.html 1.全部代码 <!DOCTYPE html> < ...
- EXT.NET 使用总结(2) ---TreePanel(带右键菜单,节点自定义属性)
TreePanel(带右键菜单,节点自定义属性) 其实这个树控件也挺好用的.http://www.ztree.me/v3/main.php#_zTreeInfo html <ext:Panel ...
- 用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示。
用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示. 原因:在为一个元素绑定hover事件之后,用户把光标移入元素 ...
- css实现带箭头选项卡
这阵子在做一个web端项目中遇到一个问题,需要实现带箭头的选项卡点击可切换.起初没想太多,直接切一个向上的小箭头图片,外层div设置相同颜色的边框,再用相对定位和绝对定位.这种方法是可行的,但是因为手 ...
随机推荐
- centos rar 文件打开办法
http://hi.baidu.com/nmxiaoxin/item/7642a139918a95677d034b6a Centos下解压rar.zip文件的方法 ============zip文件的 ...
- 从LFS官方文档构建完整Linux系统
从LFS官方文档构建完整Linux系统 http://www.cnblogs.com/sonofdark/p/4962609.html 这不是新手教程!!! Parallels Desktop (为防 ...
- delphi2006语言新特性:Record类型高级用法
delphi语言在传统的Records类型的基础上增加了许多像类一样的高级功能,如:Records可以有属性和方法(包括构造constructors),类属性,类方法,类静态字段和内嵌类型.下面这个示 ...
- abp 调试
概要 研究Abp(ASP.NET Boilerplate)框架有几个月了,从一遍遍的看官方文档,到现在看源码,一路走来学习了很多知识. 很多新手都很关心源码如何调试,我也是如此,在反复看Debuggi ...
- Oracle 集合
--合并(UNION.UNION ALL) select * from empwhere ename like '%A%'unionselect * from empwhere ename like ...
- AspxGridView 表中的ASPxHyperLink不导出到excel
在软件中 因为要连接到其他的页面所以类型转成了ASPxHyperLink,但是用官方的导出控件导出到excel之后,连接依旧保留着, 目的:去除导出来的连接 方法:把之前的ASPxHyperLink转 ...
- FineReport——巧妙实现类tab布局
在FR中,表达form支持局部刷新和tab布局,在报表中,不能做到这样,只能舍弃一些功能来做到类似的tab布局. 首先,在参数面板放一个文本控件temp,用作一个临时值,需要设置一个默认值,而切换是通 ...
- 让IE6支持css3,让 IE7、IE8 都支持CSS3
但凡是前端工程师,都知道IE6,IE7,IE8不支持.或者不完全支持CSS3的属性. CSS3 有很多很强大.绚丽的效果,比如,圆角,阴影,渐变透明,渐变背景,等等. 因为IE6时代,没有什么标准,而 ...
- Leetcode 之Add Binary(29)
比较简单,细节:先将字符串翻转,注意进位. string addBinary(string a, string b) { string result; int len = a.size() > ...
- golang-指针,函数,map
指针 普通类型变量存的就是值,也叫值类型.指针类型存的是地址,即指针的值是一个变量的地址.一个指针只是值所保存的位置,不是所有的值都有地址,但是所有的变量都有.使用指针可以在无需知道变量名字的情况下, ...