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

    最终效果:

  • 相关阅读:
    CentOS7和Ubuntu18.10下运行Qt Creator出现cannot find -lGL的问题的解决方案
    C++中使用CMake编译管理项目
    C++ std::isnan等函数的使用
    七个开源的 Spring Boot 前后端分离项目,一定要收藏!
    基于Select模型的Windows TCP服务端和客户端程序示例
    简单的C++11线程池实现
    Windows下FFMEPG编译
    MIMO431学习笔记目录
    golang调用海康sdk
    GRPC-go版本
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/5974791.html
Copyright © 2011-2022 走看看