博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
新浪微博客户端(7)-通过转换坐标系来调整首页下拉菜单的位置
阅读量:6482 次
发布时间:2019-06-23

本文共 2394 字,大约阅读时间需要 7 分钟。

 

DJDropdownMenu.h

#import 
@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
*)touches withEvent:(UIEvent *)event { [self dismiss];}@end

 

最终效果:

 

转载地址:http://jwbuo.baihongyu.com/

你可能感兴趣的文章
Cglib动态代理基础使用
查看>>
技术人员,为什么会苦逼
查看>>
使用126邮箱发送邮件的python脚本
查看>>
Maven
查看>>
缓存系统在游戏业务中的特异性
查看>>
redis的基本数据类型
查看>>
.NET 同步与异步之锁(Lock、Monitor)(七)
查看>>
前端大牛们都学过哪些?
查看>>
在iOS当中发送电子邮件和短信
查看>>
13~1003的和
查看>>
pycharm如何新项目如何不默认创建虚拟环境(吐槽)
查看>>
Loadrunner检查点小结(很经典)
查看>>
MySQL字段类型详解
查看>>
ORACLE 的游标
查看>>
虚拟机安装的UBUNTU全屏的方法:
查看>>
java虚拟机类加载器
查看>>
ASP.NET状态管理之八(会话Session)
查看>>
background
查看>>
转载:大型网站架构演变和知识体系
查看>>
set集合
查看>>