zoukankan      html  css  js  c++  java
  • 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'

  • 相关阅读:
    LightOJ 1132 Summing up Powers(矩阵快速幂)
    hdu 3804 Query on a tree (树链剖分+线段树)
    LightOJ 1052 String Growth && uva 12045 Fun with Strings (矩阵快速幂)
    uva 12304 2D Geometry 110 in 1! (Geometry)
    LA 3263 That Nice Euler Circuit (2D Geometry)
    2013 SCAUCPC Summary
    poj 3321 Apple Tree (Binary Index Tree)
    uva 11796 Dog Distance (几何+模拟)
    uva 11178 Morley's Theorem (2D Geometry)
    动手动脑
  • 原文地址:https://www.cnblogs.com/zhanglinfeng/p/8252798.html
Copyright © 2011-2022 走看看