自定义封装一个BlurEffectMenu
BlurEffectMenu.h
@class BlurEffectMenu ,BlurEffectMenuItem;@protocol BlurEffectMenuDelegate//点击背景dismiss- (void)blurEffectMenuDidTapOnBackground:(BlurEffectMenu *)menu;//点击item- (void)blurEffectMenu:(BlurEffectMenu *)menu didTapOnItem:(BlurEffectMenuItem *)item;@end@interface BlurEffectMenuItem : NSObject@property (nonatomic,copy) NSString *title;//标题@property (nonatomic,strong) UIImage *icon;//图标@end@interface BlurEffectMenu : UIViewController@property(nonatomic,assign)iddelegate;
@property(nonatomic,copy)NSArray * menuItemArr;
//初始化
- (instancetype)initWithMenus:(NSArray *)menus;
BlurEffectMenu.m
#import "BlurEffectMenu.h"
@implementation BlurEffectMenuItem
@end
@interface BlurEffectMenu ()
@end
@implementation BlurEffectMenu
-(instancetype)initWithMenus:(NSArray *)menus{
self=[super init];
if(self){
self.menuItemArr=menus;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// self.view.backgroundColor=[UIColor lightGrayColor];
[self gesture];
[self setUpView];
}
-(void)gesture{
[self.view addGestureRecognizer:[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(didTapOnBackground)]];
UISwipeGestureRecognizer * swipGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(didTapOnBackground)];
[swipGesture setDirection:UISwipeGestureRecognizerDirectionUp];
[self.view addGestureRecognizer:swipGesture];
}
-(void)setUpView{
//毛玻璃
UIBlurEffect * blurEffect=[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView * visual=[[UIVisualEffectView alloc]initWithEffect:blurEffect];
[visual setFrame:self.view.frame];
[self.view addSubview:visual];
//三列
NSInteger totalloc=3;
CGFloat appvieww=80;
CGFloat appviewh=80;
CGFloat margin=(self.view.frame.size.width-totalloc * appvieww)/(totalloc +1);
for(NSInteger i=0; i
ViewController.m
#import "ViewController.h"#import "BlurEffectMenu.h"@interface ViewController ()@property(nonatomic,strong)UIButton * btn;
@end
#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"关于@3x"]]];
[self.view addSubview:self.btn];
}
- (UIButton *)btn{
if (!_btn) {
_btn=[UIButton buttonWithType:UIButtonTypeCustom];
[_btn setFrame:CGRectMake(kScreenWidth/2-30.0, kScreenHeight-49.0-60.0, 60.0, 60.0)];
[_btn setTitle:@"点击" forState:UIControlStateNormal];
[_btn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[_btn.layer setBorderWidth:0.5];
[_btn.layer setBorderColor:[UIColor darkGrayColor].CGColor];
[_btn.layer setCornerRadius:30.0];
[_btn.layer setMasksToBounds:YES];
[_btn setBackgroundColor:[UIColor lightGrayColor]];
[_btn addTarget:self action:@selector(btnClicked) forControlEvents:UIControlEventTouchUpInside];
}
return _btn;
}
- (void)btnClicked{
BlurEffectMenuItem *addMattersItem=[[BlurEffectMenuItem alloc]init];
[addMattersItem setTitle:@"添加事项"];
[addMattersItem setIcon:[UIImage imageNamed:@"addMatters"]];
BlurEffectMenuItem *addSchedulesItem=[[BlurEffectMenuItem alloc]init];
[addSchedulesItem setTitle:@"添加日程"];
[addSchedulesItem setIcon:[UIImage imageNamed:@"addSchedule"]];
BlurEffectMenuItem *setupChatItem=[[BlurEffectMenuItem alloc]init];
[setupChatItem setTitle:@"发起会话"];
[setupChatItem setIcon:[UIImage imageNamed:@"setupChat"]];
BlurEffectMenuItem *searchContactsItem=[[BlurEffectMenuItem alloc]init];
[searchContactsItem setTitle:@"查找联系人"];
[searchContactsItem setIcon:[UIImage imageNamed:@"searchContacts"]];
BlurEffectMenu *menu=[[BlurEffectMenu alloc]initWithMenus:@[addMattersItem,addSchedulesItem,setupChatItem,searchContactsItem]];
[menu setDelegate:self];
menu.modalPresentationStyle = UIModalPresentationOverFullScreen;
[menu setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self presentViewController:menu animated:YES completion:nil];
}
#pragma mark - BlurEffectMenu Delegate
- (void)blurEffectMenuDidTapOnBackground:(BlurEffectMenu *)menu{
[self dismissViewControllerAnimated:YES completion:nil];
}
- (void)blurEffectMenu:(BlurEffectMenu *)menu didTapOnItem:(BlurEffectMenuItem *)item{
[self dismissViewControllerAnimated:YES completion:nil];
NSLog(@"item.title:%@",item.title);
}