新浪微博项目---首页技术点四.蒙板及下拉菜单的实现

效果图:蒙板效果及下拉菜单的实现

思路:使用一个透明蒙板的目的就是让用户在点击下拉菜单栏的时候,不至于因为点击不当而影响用户的体验.

具体实现代码:

DrpodownMenu.h文件

#import <UIKit/UIKit.h>

@class DrpodownMenu;

//设置代理,想要实现上下按钮的切换
@protocol DrpodownMenuDelegate <NSObject>

@optional
-(void)dropdownMenuDidDismiss:(DrpodownMenu *)menu;
-(void)dropdownMenuDidShow:(DrpodownMenu *)menu;

@end

@interface DrpodownMenu : UIView

@property(nonatomic,weak)id<DrpodownMenuDelegate>delagate;

+ (instancetype)menu;

/**
 *  显示
 */
- (void)showFrom:(UIView *)from;
/**
 *  销毁
 */
- (void)dismiss;

/**
 *  内容
 */
@property (nonatomic, strong) UIView *content;
/**
 *  内容控制器
 */
@property (nonatomic, strong) UIViewController *contentController;

@end
--------------------------------------------------------------------------------------------------------------------

DrpodownMenu.m文件

#import "DrpodownMenu.h"
#import "UIView+Extension.h"

@interface DrpodownMenu ()

/**
 *  将来用来显示具体内容的容器
 */
@property (nonatomic, weak) UIImageView *containerView;

@end

@implementation DrpodownMenu

//下拉菜单的底色板
- (UIImageView *)containerView
{
    if (!_containerView) {
        // 添加一个灰色图片控件
        UIImageView *containerView = [[UIImageView alloc] init];
        containerView.image = [UIImage imageNamed:@"popover_background"];
        containerView.userInteractionEnabled = YES; // 开启交互
        [self addSubview:containerView];
        self.containerView = containerView;
    }
    return _containerView;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // 清除颜色
        self.backgroundColor = [UIColor clearColor];
    }
    return self;
}

//下拉菜单
+ (instancetype)menu
{
    return [[self alloc] init];
}

//下拉菜单的frame的设置
- (void)setContent:(UIView *)content
{
    _content = content;

    // 调整内容的位置
    content.x = 10;
    content.y = 15;

    // 调整内容的宽度
    //    content.width = self.containerView.width - 2 * content.x;

    // 设置灰色的高度
    self.containerView.height = CGRectGetMaxY(content.frame) + 11;
    // 设置灰色的宽度
    self.containerView.width = CGRectGetMaxX(content.frame) + 8;

    // 添加内容到灰色图片中
    [self.containerView addSubview:content];
}

- (void)setContentController:(UIViewController *)contentController
{
    _contentController = contentController;

    self.content = contentController.view;
}

/**
 *  蒙板的显示
 */
- (void)showFrom:(UIView *)from
{
    // 1.获得最上面的窗口
    UIWindow *window = [[UIApplication sharedApplication].windows lastObject];

    // 2.添加自己到窗口上
    [window addSubview:self];

    // 3.设置尺寸
    self.frame = window.bounds;

    // 4.调整灰色图片的位置
    // 默认情况下,frame是以父控件左上角为坐标原点
    // 转换坐标系
    CGRect newFrame = [from convertRect:from.bounds toView:window];
    //    CGRect newFrame = [from.superview convertRect:from.frame toView:window];
    self.containerView.x = CGRectGetMinX(newFrame);
    self.containerView.y = CGRectGetMaxY(newFrame);

    //通知外界 自己显示了
    if ([self.delagate respondsToSelector:@selector(dropdownMenuDidShow:)]) {
        [self.delagate dropdownMenuDidShow:self];
    }

}

/**
 *  销毁
 */
- (void)dismiss
{
    [self removeFromSuperview];

    //通知外界,自己被销毁
    if ([self.delagate respondsToSelector:@selector(dropdownMenuDidDismiss:)]) {
        [self.delagate dropdownMenuDidDismiss:self];
    }

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self dismiss];
}

@end
时间: 2024-10-29 19:10:35

新浪微博项目---首页技术点四.蒙板及下拉菜单的实现的相关文章

新浪微博项目---首页技术点三.上拉刷新,下拉加载的实现(使用ios自带的小菊花实现)

一.上拉刷新,下拉加载的实现(使用ios自带的小菊花实现) 1.下拉刷新 #pragma mark ---集成下*拉刷新控件 -(void)setupDownRefresh { //1.添加刷新控件 UIRefreshControl *control = [[UIRefreshControl alloc] init]; //只有用户通过手动下拉刷新,才会触发UIControlEventValueChanged事件 [control addTarget:self action:@selector(

iOS开发——实战技术OC篇&amp;关于蒙板和弹出菜单

关于蒙板和弹出菜单 一:关于蒙板 蒙板的作用一般就是用来实现不能做其他操作还有一些模糊效果提示用户 我们只需要自定义一个View,并且创建两个类方法用来给外界调用实现显示和隐藏 + (void)show; + (void)hide; 显示:直接添加到window上,并且设置和window同样大小,然后设置相应的透明度(alpla) 1 + (void)show 2 3 { 4 5 6 7 8 9 iCocosCover *cover = [[self alloc] init]; 10 11 12

新浪微博客户端(6)-创建首页下拉菜单

创建首页下拉菜单,本节先完成下拉菜单界面的创建,下节再微调其位置. DJDropdownMenu.h #import <UIKit/UIKit.h> @interface DJDropdownMenu : UIView /** 构造方法 */ + (instancetype)menu; /** 显示 */ - (void)show; /** 消失 */ - (void)dismiss; @property (nonatomic,weak) UIView *contentView; @prope

SharePoint 2010 快速隐藏列表项目的下拉菜单

SharePoint 2010 快速隐藏列表项目的下拉菜单 有时候为了不让一些用户编辑列表项,需要隐藏列表项目的下拉菜单.这里提供一个快速的方法,只需要增加一个内容编辑器控件,将css代码写入其HTML源即可. 修改前: 修改后: CSS代码: <style type="text/css"> .s4-ctx{ display:none; } </style> SharePoint 2010 快速隐藏列表项目的下拉菜单,布布扣,bubuko.com

JavaScript---网络编程(11)--DHTML技术演示(4)-单选框/下拉菜单/添加文件

本节讲述单选框/下拉菜单/添加文件,综合css,html和JavaScript. 单选框: 实现的功能是:(类似平时的性格测试) 先隐藏一部分页面,然后通过点击单选框来显示. 再通过选项的选择-(每个选项有不同的积分)积分的多少来给出评语 演示代码: <html> <head> <title>DHTML技术演示---radio的使用</title> <meta http-equiv="content-Type" content=&q

解决phpcms模版设置中不能显示栏目首页模板,栏目列表页模板,内容页模板等下拉菜单选项的问题!

第1步:检查相应的模版文件夹中是否有模版文件 一般地,查看目录phpcms/templates/default[模板风格标识]/content 栏目首页模板:以(category_)开头,category_xxx 栏目列表页模板:以(list_)开头,list_xxx 内容页模板:以(show_)开头,show_xxx 如果模板文件存在,看第二步. 第2步:查看文件夹中的模板文件是否包含了中文 例如:category - 副本.html 注意模板文件名不能有中文,因为在后台模板设置中获取模板文件

2015.3.14(知乎首页仿写及纯CSS兼容IE6实现响应式下拉菜单)

昨晚写了一个知乎的首页练习,只完成了上半部分的练习.下半部分做了一个纯CSS的响应式下拉菜单(可以兼容IE6). 可以看出那个知乎两个大字下面的那行字是截图截下来的,有一点色差……代码如下: js的部分只用到了获取可视区域的宽度这一点. function setIndex() { var commonWidth = $(window).outerWidith; var commonWidth = $(window).outerHeight; $(".backTitle").css(&q

IOS第二天-新浪微博 - 添加搜索框,弹出下拉菜单 ,代理的使用 ,HWTabBar.h(自定义TabBar)

********HWDiscoverViewController.m(发现) - (void)viewDidLoad { [super viewDidLoad]; // 创建搜索框对象 HWSearchBar *searchBar = [HWSearchBar searchBar]; searchBar.width = 300; searchBar.height = 30; self.navigationItem.titleView = searchBar; //设置titleView 是搜索框

Bootstrap&lt;基础十四&gt; 按钮下拉菜单

使用 Bootstrap class 向按钮添加下拉菜单.如需向按钮添加下拉菜单,只需要简单地在在一个 .btn-group 中放置按钮和下拉菜单即可.也可以使用 <span class="caret"></span> 来指示按钮作为下拉菜单. 下面的实例演示了一个基本的简单的按钮下拉菜单: <!DOCTYPE html> <html> <head> <title>Bootstrap 实例 - 基本的按钮下拉菜单&