新浪微博客户端(7)-通过转换坐标系来调整首页下拉菜单的位置

DJDropdownMenu.h

#import <UIKit/UIKit.h>

@interface DJDropdownMenu : UIView

/** 构造方法 */
+ (instancetype)menu;

/** 显示 */
- (void)showFromView:(UIView *)view;

/** 消失 */
- (void)dismiss;

@property (nonatomic,weak) UIView *contentView;

@property (nonatomic,strong) UIViewController *contentController;

@end

DJDropdownMenu.m

#import "DJDropdownMenu.h"

@interface DJDropdownMenu()

/** 灰色背景 */
@property (nonatomic,weak) UIImageView *containerView;

@end

@implementation DJDropdownMenu

- (UIImageView *)containerView {

    if (!_containerView) {
        UIImageView *imageView = [[UIImageView alloc] init];
        imageView.image = [UIImage imageNamed:@"popover_background"];
        [self addSubview:imageView];
        _containerView = imageView;
    }
    return _containerView;

}

- (void)setContentView:(UIView *)contentView {

    _contentView = contentView;

    // 1. 设置contentView位置
    contentView.x = 10;
    contentView.y = 15;

    // 2. 设置containerView高度(随contentView高度的变化而变化)和宽度
    self.containerView.height = CGRectGetMaxY(contentView.frame)+12;
    self.containerView.width = CGRectGetMaxX(contentView.frame) + contentView.x;

    // 3.添加contentView至containerView;
    [self.containerView addSubview:contentView];

}

- (void)setContentController:(UIViewController *)contentController {

    _contentController = contentController;
    [self setContentView:contentController.view];

}

- (instancetype)initWithFrame:(CGRect)frame {

    if (self = [super initWithFrame:frame]) {
        // 1.设置背景颜色透明
        self.backgroundColor = [UIColor clearColor];
        // 2.设置containerView可以与用户交互
        self.containerView.userInteractionEnabled = YES;
    }
    return self;
}

+ (instancetype)menu {
    return [[self alloc] init];
}

/** show即是将当前View添加到顶层窗口上 */
- (void)showFromView:(UIView *)view {

    // 1. 获取顶层窗口
    UIWindow *window = [[UIApplication sharedApplication].windows lastObject];

    // 2. 设置当前View大小
    self.frame = window.bounds;

    // 3. 设置当前containerView位置
    CGRect newFrame = [view.superview convertRect:view.frame toView:nil]; // 转换当前传入View的坐标系
    self.containerView.centerX = CGRectGetMidX(newFrame);
    self.containerView.y = CGRectGetMaxY(newFrame);

    // 4. 添加当前View到顶层窗口
    [window addSubview:self];

}

/** dismiss即是将当前View从顶层窗口移除 */
- (void)dismiss {

    [self removeFromSuperview];

}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    [self dismiss];

}

@end

最终效果:

时间: 2024-12-19 07:57:52

新浪微博客户端(7)-通过转换坐标系来调整首页下拉菜单的位置的相关文章

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

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

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

效果图:蒙板效果及下拉菜单的实现 思路:使用一个透明蒙板的目的就是让用户在点击下拉菜单栏的时候,不至于因为点击不当而影响用户的体验. 具体实现代码: DrpodownMenu.h文件 #import <UIKit/UIKit.h> @class DrpodownMenu; //设置代理,想要实现上下按钮的切换 @protocol DrpodownMenuDelegate <NSObject> @optional -(void)dropdownMenuDidDismiss:(Drpo

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 是搜索框

响应式WEB设计:将导航菜单转换成下拉菜单以适应小屏幕设备

移动互联网时代的到来,使得我们在进行页面设计与开发时,应当根据用户行为以及设备环境(系统平台.屏幕尺寸)进行相应的响应和调整,这个理念也叫响应式WEB设计.今天我将给大家讲解当屏幕尺寸变小时,将横向菜单转换成下拉菜单的效果. 本文使用了HTML5标签以及CSS3技术,您在查看demo时需要您的浏览器支持HTML5和CSS3,建议使用Chrome,Firefox或者IE9等现代浏览器. HTML <nav> <ul> <li><a href="/"

JS 按钮下一步 下拉菜单内容转换

下一步按钮 用到的知识点 点击事件  onclick 移除属性  removeAttribute 创建属性  setAttribute 源代码 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <input id="aaa&qu

仿新浪微博IOS客户端(v5.2.8)——下拉菜单栏的实现

转载请标明出处:http://blog.csdn.net/android_ls/article/details/45877983 声明:仿新浪微博项目,所用所有图片资源都来源于官方新浪微博IOS客户端,编写本应用的目的在于学习交流,如涉及侵权请告知,我会及时换掉用到的相关图片. 接着上一篇博文,这篇我们来聊聊新浪微博导航栏上,点击中间部分的标题(titleView)弹出的下拉菜单是如何实现. 1.自定义导航栏中间的titleView,代码如下: // 设置导航栏中间的titleView _tit

仿新浪微博客户端

由于微博开放平台的限制,如果希望在本地运行时能正常获取数据,可以参考新浪微博官方SDK文档的说明修改AppKey等信息. https://github.com/debolee/WeiboForSina 使用的第三方库 - SDWebImage 实现的主要功能 1. 首页 首页微博列表 详细微博 评论列表 推荐好友列表 好友分组下拉菜单 2. 消息 搭建消息界面 3. 发布微博 自定义TabBar 发布/转发微博 4. 发现 搜索,可以设置搜索范围(用户.学校.公司) 附近的微博和人,两种显示方式

Android新浪微博客户端(六)——Home界面的ListView

原文出自:方杰|http://fangjie.sinaapp.com/?p=184转载请注明出处 最终效果演示:http://fangjie.sinaapp.com/?page_id=54该项目代码已经放到github:https://github.com/JayFang1993/SinaWeibo 一.首先是ListView的adapter. 因为微博列表的Item不是规则的,比如说有些微博有转发子微博,有些没有,有些有图片,有些没有图片,所以说很不固定.这里就采用BaseAdapter,要自

新浪微博客户端项目之项目主体结构详解

程序的运行流程: IWeiboActivity接口: 1.  init()方法 完成初始化 2,  refresh(Objet ...args)方法 完成窗体刷新 Task任务类: 定义程序中的任务 如:登录,发表新微博,获取用户微博,获取用户详细信息等各种任务 int taskId//当前任务的ID Map params //当前任务的参数 MainService(核心控制类) 1. MainService的主要功能 完成程序调度 接收UI层数据(任务),完成业务逻辑,返回信息,更新UI 在后