zoukankan      html  css  js  c++  java
  • 新浪微博客户端(6)-创建首页下拉菜单

    创建首页下拉菜单,本节先完成下拉菜单界面的创建,下节再微调其位置。

    DJDropdownMenu.h

    #import <UIKit/UIKit.h>
    
    @interface DJDropdownMenu : UIView
    
    
    /** 构造方法 */
    + (instancetype)menu;
    
    /** 显示 */
    - (void)show;
    
    /** 消失 */
    - (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.width = 217;
            imageView.height = 217;
            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. 设置contentView宽度(防止宽度过长导致图片拉伸变形)
        contentView.width = self.containerView.width - 2* contentView.x;
        
        
        // 3. 设置containerView高度(随contentView高度的变化而变化)
        self.containerView.height = CGRectGetMaxY(contentView.frame)+12;
        
        // 4.添加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)show {
    
        // 1. 获取顶层窗口
        UIWindow *window = [[UIApplication sharedApplication].windows lastObject];
        
        // 2. 设置当前View大小
        self.frame = window.bounds;
        
        // 3. 添加当前View到顶层窗口
        [window addSubview:self];
        
    
    }
    
    
    /** dismiss即是将当前View从顶层窗口移除 */
    - (void)dismiss {
    
        [self removeFromSuperview];
    
    }
    
    
    
    @end

    最终效果:

  • 相关阅读:
    leetcode 763. Partition Labels
    JS字符串格式化~欢迎来搂~~
    手把手教你在pycharm上上传项目至GitHub
    手把手教你用原始方式上传项目至GitHub
    python3.7环境下创建app、运行Django1.11版本项目报错Generator expression must be parenthesized
    在学习python的DjangoFlaskTornado前你需要知道的,what is web?
    python手撸桌面计算器
    jQuery之克隆事件--clone()与clone(true)区别
    前端之jQuery基础
    通过案例来剖析JQuery与原生JS
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/5974791.html
Copyright © 2011-2022 走看看