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设置相同颜色的边框,再用相对定位和绝对定位.这种方法是可行的,但是因为手 ...
随机推荐
- vue路由-动态路由和嵌套路由
一.动态路由 我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件.例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染.那么,我们可以在 vue-route ...
- TCP的3次握手/4次握手
三次握手: 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图下所示: (1) 第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SE ...
- C++中STL容器的比较
基本参考 https://blog.csdn.net/qq_14898543/article/details/51381642 容器特性: vector:典型的序列容器,C++标准严格要求次容器的实现 ...
- 一个gulp用于开发与生产的示例
gulp是一款流行的前端构建工具,可以帮我们完成许多工作:监听文件修改.刷新浏览器.编译Less/Scss.压缩代码.添加md5.合并文件等.gulp的配置和使用特别简单,学习gulp过程中顺便写了一 ...
- MySQL数据库分表分区(一)(转)
面对当今大数据存储,设想当mysql中一个表的总记录超过1000W,会出现性能的大幅度下降吗? 答案是肯定的,一个表的总记录超过1000W,在操作系统层面检索也是效率非常低的 解决方案: 目前针对 ...
- php文件上传错误信息
错误信息说明 UPLOAD_ERR_OK:其值为0,没有错误发生,文件上传成功 UPLOAD_ERR_INI_SIZE:其值为1,上传的文件超过了php.ini和upload_max_filesize ...
- Highcharts创建一个简单的柱状图
新建一个html文件,将highcharts引入到你的页面后,通过两个步骤我们就可以创建一个简单的图表了. 1.创建div容器 在页面的 body部分创建一个div,并指定div 的 id,高度和宽度 ...
- QQ分享 QQ空间分享 API链接:
QZone: "http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url={{URL}}&title={{TITL ...
- 如何在SQL Server中的SELECT TOP 中使用变量
语法 [ TOP (expression) [PERCENT] [ WITH TIES ] ] 注意:expression 是在一对圆括号内的,而之后又有如下的例子 在 TOP 中使用变量 以下示 ...
- 201. Non Absorbing DFA
题意好难看懂的说... 有限状态自动机DFA是这么一个有序组<Σ, U, s, T, phi>:Σ代表输入字符集,表示此自动机的工作范围:U代表所有的状态集合:s是初始状态:T是最终状态: ...