• 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'

  • 相关阅读:
    MVC 控制器返回匿名对象集合(一般是用Linq 查出来的数据 或者其他) View 页面展示的解决方法 ........
    C#中base关键字的几种用法
    Aspose.cellls 的基本使用方法使用
    Web API 入门指南
    基于EF的外键的查询 使用【ForeignKey(“ SupplierId”】特性
    GET和POST两种基本请求方法的区别
    Replication的犄角旮旯(五)关于复制identity列
    Replication的犄角旮旯(二)寻找订阅端丢失的记录
    SQL优化(1)
    Replication的犄角旮旯(三)聊聊@bitmap
  • 原文地址:https://www.cnblogs.com/zhanglinfeng/p/8252798.html
Copyright © 2020-2023  润新知