IOS 弹出式 POPMenuView
//MenuView.h
//
// MenuView.h
// RockPopMenu
//
// Created by zhuang chaoxiao on 14-6-26.
// Copyright (c) 2014年 zhuang chaoxiao. All rights reserved.
//
#import <UIKit/UIKit.h>
@protocol MenuViewDelegate
@optional
@end
@interface MenuView : UIView
{
NSArray * _itemArray;
UIView * _itemBackView;
}
@property(nonatomic,weak) id<MenuViewDelegate> delegate;
+(id)shareMenuView;
+(void)showPopView:(UIView *)parentView withRect:(CGRect)rect withMenuItem:(NSArray*)array;
@end
/////////////////////////////////////////////////////////////////////////////////////////////////
@interface MyMenuItem : NSObject
{
//NSString * _strTitle;
//UIImage * _iconImg;
}
-(void)performAction;
+(id)initMenuItemWithTitle:(NSString*)title withIcon:(UIImage*)img withTarget:(id)target withSelector:(SEL)selector;
@property(nonatomic,strong) NSString * strTitle;
@property(nonatomic,strong) UIImage * iconImg;
@property(nonatomic,weak) id target;
@property(nonatomic) SEL action;
@end
//
// MenuView.m
// RockPopMenu
//
// Created by zhuang chaoxiao on 14-6-26.
// Copyright (c) 2014年 zhuang chaoxiao. All rights reserved.
//
#import "MenuView.h"
#define ITEM_MARGIN_X 5.0f
#define ITEM_MARGIN_Y 5.0f
#define ITEM_IMAGE_WIDTH 28.0f
#define ITEM_IMAGE_HEIGHT 28.0f
#define ITEM_TEXT_WIDHT 100.0f
#define ITEM_TEXT_HEIGHT 25.0f
#define ITEM_WIDTH 145.0f
#define ITEM_HEIGHT 40.0f
@implementation MyMenuItem
+(id)initMenuItemWithTitle:(NSString*)title withIcon:(UIImage*)img withTarget:(id)target withSelector:(SEL)selector
{
return [[MyMenuItem alloc]initWithTitle:title withIcon:img withTarget:target withSelector:selector];
}
-(void)performAction
{
if( _target && [_target respondsToSelector:_action] )
{
[_target performSelectorOnMainThread:_action withObject:self waitUntilDone:YES];
}
}
-(id)initWithTitle:(NSString*)title withIcon:(UIImage*)img withTarget:(id)target withSelector:(SEL)selector
{
self = [super init];
if(self)
{
_strTitle = title;
_iconImg = img;
_target = target;
_action = selector;
}
return self;
}
@end
////////////////////////////////////////////////////////////////////////////////////////////////////////
@implementation MenuView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.frame = [[UIScreen mainScreen] bounds];
}
return self;
}
-(CGRect)layoutMenuItem:(UIView * )parentView
{
CGRect rect;
CGFloat yPos = 0;
int btnTag = 0;
UIView * contentView = [[UIView alloc]initWithFrame:CGRectZero];
for( MyMenuItem * item in _itemArray )
{
UIButton * btnView = [[UIButton alloc]initWithFrame:CGRectZero];
btnView.frame = CGRectMake(0, yPos, ITEM_WIDTH, ITEM_HEIGHT);
[contentView addSubview:btnView];
if( item.iconImg )
{
UIImageView * imgView = [[UIImageView alloc]initWithImage:item.iconImg];
imgView.frame = CGRectMake(ITEM_MARGIN_X, ITEM_MARGIN_Y, ITEM_IMAGE_WIDTH, ITEM_IMAGE_HEIGHT);
[btnView addSubview:imgView];
}
UILabel * lab = [[UILabel alloc]initWithFrame:CGRectMake(ITEM_MARGIN_X*2+ITEM_IMAGE_WIDTH, ITEM_MARGIN_Y, ITEM_TEXT_WIDHT, ITEM_TEXT_HEIGHT)];
lab.text = item.strTitle;
lab.textColor = [UIColor greenColor];
[btnView addSubview:lab];
btnView.tag = btnTag;
[btnView addTarget:self action:@selector(performAction:) forControlEvents:UIControlEventTouchUpInside];
++ btnTag;
yPos += ITEM_HEIGHT;
}
rect = CGRectMake(0, 0, ITEM_WIDTH, yPos);
contentView.frame = rect;
[parentView addSubview:contentView];
return rect;
}
-(void)performAction:(id)sender
{
UIButton *btn = (UIButton*)sender;
MyMenuItem * item = _itemArray[btn.tag];
[item performAction];
[self dismissPopView];
}
-(void)dismissPopView
{
[UIView animateWithDuration:0.5f animations:^(void){
self.alpha = 0.0f;
}completion:^(BOOL finished){
self.alpha = 1.0f;
[self removeFromSuperview];
}];
}
-(void)showPopView:(UIView *)parentView withRect:(CGRect)rect withMenuItem:(NSArray*)array
{
self.backgroundColor = [UIColor clearColor];
[parentView addSubview:self];
_itemArray = array;
_itemBackView = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
_itemBackView.backgroundColor = [UIColor grayColor];
[self addSubview:_itemBackView];
CGRect frame = [self layoutMenuItem:_itemBackView];
_itemBackView.frame = CGRectMake(_itemBackView.frame.origin.x, _itemBackView.frame.origin.y, frame.size.width, frame.size.height);
_itemBackView.layer.cornerRadius = 10;
}
+(void)showPopView:(UIView *)parentView withRect:(CGRect)rect withMenuItem:(NSArray*)array
{
[[self shareMenuView] showPopView:parentView withRect:rect withMenuItem:array];
}
+(id)shareMenuView
{
static MenuView * menu;
static dispatch_once_t once;
dispatch_once(&once,^{
menu = [[MenuView alloc]init];
});
return menu;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end
////////////////////////////////////////////////////////////////////////////////////////////
//调用
-(void)click
{
NSLog(@"click");
NSArray * arr= @[
[MyMenuItem initMenuItemWithTitle:@"点击查看详情" withIcon:[UIImage imageNamed:@"home_icon"] withTarget:self withSelector:(@selector(action1))],
[MyMenuItem initMenuItemWithTitle:@"明日天气预报" withIcon:[UIImage imageNamed:@"home_icon"] withTarget:self withSelector:(@selector(action2))],
[MyMenuItem initMenuItemWithTitle:@"中国人民银行" withIcon:[UIImage imageNamed:@"home_icon"] withTarget:self withSelector:(@selector(action1))],
];
[MenuView showPopView:self.view withRect:CGRectZero withMenuItem:arr];
}
-(void)action1
{
NSLog(@"action1");
}
-(void)action2
{
NSLog(@"action2");
}
本文转自 张江论坛 http://www.999dh.net/home.php?mod=space&uid=1&do=blog&id=205 转自请标注,谢谢~~~
IOS 弹出式 POPMenuView的更多相关文章
- web全栈开发之网站开发二(弹出式登录注册框前端实现-类腾讯)
这次给大家分享的是目前很多网站中流行的弹出式登录框,如下面的腾讯网登录界面,采用弹出式登录的好处是大大提升了网站的用户体验和交互性,用户不用重新跳转到指定的页面就能登录,非常方便 先来个演示地址 要实 ...
- web开发实战--弹出式富文本编辑器的实现思路和踩过的坑
前言: 和弟弟合作, 一起整了个智慧屋的小web站点, 里面包含了很多经典的智力和推理题. 其实该站点从技术层面来分析的话, 也算一个信息发布站点. 因此在该网站的后台运营中, 富文本的编辑器显得尤为 ...
- IOS弹出视图 LewPopupViewController
LewPopupViewController是一款IOS弹出视图软件.iOS 下的弹出视图.支持iPhone/iPad. 软件截图 使用方法 弹出视图 1 2 3 4 5 PopupView *vie ...
- asp.net 弹出式日历控件 选择日期 Calendar控件
原文地址:asp.net 弹出式日历控件 选择日期 Calendar控件 作者:逸苡 html代码: <%@ Page Language="C#" CodeFile=&quo ...
- PropertyGrid—为复杂属性提供下拉式编辑框和弹出式编辑框
零.引言 PropertyGrid中我们经常看到一些下拉式的编辑方式(Color属性)和弹出式编辑框(字体),这些都是为一些复杂的属性提供的编辑方式,本文主要说明如何实现这样的编辑方式. 一.为属性提 ...
- ZH奶酪:Ionic中(弹出式窗口)的$ionicModal使用方法
Ionic中[弹出式窗口]有两种(如下图所示),$ionicModal和$ionicPopup; $ionicModal是完整的页面: $ionicPopup是(Dialog)对话框样式的,直接用Ja ...
- php弹出式登录窗口并获得登录后返回值
一款bootstrap样式结合php制作的弹出式登录窗口,输入用户名和密码后,ajax传参给后台,并获得登录后返回值. hwLayer+ajax弹出登录框 $(function() { $('#for ...
- 让小区运营再智能一点,EasyRadius正式向WayOs用户提供到期弹出式提示充值页面
其实一直没向用户提供到期弹出式页面,主要是给VIP群的用户一点优越感,随着这次EasyRadius的更新,海哥就免费向普通easyRadius用户提供这两个模板下载. 有些人会问,什么样的模板.有什么 ...
- Operating System-Thread(5)弹出式线程&&使单线程代码多线程化会产生那些问题
本文主要内容 弹出式线程(Pop-up threads) 使单线程代码多线程化会产生那些问题 一.弹出式线程(Pop-up threads) 以在一个http到达之后一个Service的处理为例子来介 ...
随机推荐
- U盘文件夹被病毒隐藏,且不能取消解决办法
在cmd下进入到U盘,运行attrib -r -a -s -h *.* /s /d
- excel公式应用大全
excel公式应用大全 1.ABS函数 函数名称:ABS 主要功能:求出相应数字的绝对值. 使用格式:ABS(number) 参数说明:number代表需要求绝对值的数值或引用的单元格. 应用举例:如 ...
- Android中使用HTTP和HttpClient进行通信
/** * 使用HTTP的Get方式进行数据请求 */ protected void httpGet() { /** * 进行异步请求 */ new AsyncTask<String, Void ...
- lintcode 中等题:partition array 数组划分
题目 数组划分 给出一个整数数组nums和一个整数k.划分数组(即移动数组nums中的元素),使得: 所有小于k的元素移到左边 所有大于等于k的元素移到右边 返回数组划分的位置,即数组中第一个位置i, ...
- jdbc事务
买书的例子 程序应该将图书数量的操作和更新account用户余额的操作作为一个事务来处理,只有这两个操作都完成的情况下,才能提交事务,否则就回滚事务. 本文转自http://blog.chinauni ...
- UNIX相关知识
UNIX UNIX的设计目标是小而美:希望能在任何小系统上执行,而核心只提供必不可少的一些功能,其他的则根据需要加上去.这已经成为操作系统的一种设计哲学. The Open Group持有UNIX商标 ...
- Android title和actionbar的区别
我想在一个页面的顶端放入两个按钮,应该用title还是actionbar.他们两个什么区别?分别该什么时候用? 答: android title 是UI上的一小部分,它支持Text和Color,你可以 ...
- Android Intent个人介绍
在Android中要打开一个新的Activity, 不用说,肯定会用到Intent,Intent作为Android的四大组件之一,个人理解,Intent的作用就是用来在(其它三个不同组件)间进行通讯, ...
- 今天晚上 中国互联网被Struts2漏洞血洗
Apache官方今天晚上发布安全公告(官方编号S2-032/CVE编号CVE-2016-3081),Apache Struts2服务在开启动态方法调用(DMI)的情况下,可以被远程执行任意命令,安全威 ...
- Burnside引理和polay计数学习小记
在组合数学中有这样一类问题,比如用红蓝两种颜色对2*2的格子染色,旋转后相同的算作一种.有多少种不同的染色方案?我们列举出,那么一共有16种.但是我们发现,3,4,5,6是同一种,7,8,9,10是用 ...