博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UIView不可不知的秘密
阅读量:7065 次
发布时间:2019-06-28

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

####前言:

1、在Mac OS中NSWindow的父类是NSResponder,而在iOS中UIWindow的父类是UIView。程序一般只有一个窗口但是会又很多视图。 2、UIView的作用:描画和动画,视图负责对其所属的矩形区域描画、布局和子视图管理、事件处理、可以接收触摸事件、事件信息的载体等等。

我在前面详细介绍了 , 详情请点击。 #####下面介绍的是view添加以及删除时所触发的方法

// 当视图添加子视图时调用 - (void)didAddSubview:(UIView *)subview; // 当子视图从本视图移除时调用 - (void)willRemoveSubview:(UIView *)subview; // 当视图即将加入父视图时 / 当视图即将从父视图移除时调用 - (void)willMoveToSuperview:(nullable UIView *)newSuperview; // 当试图加入父视图时 / 当视图从父视图移除时调用 - (void)didMoveToSuperview; // 当视图即将加入父视图时 / 当视图即将从父视图移除时调用 - (void)willMoveToWindow:(nullable UIWindow *)newWindow; // 当视图加入父视图时 / 当视图从父视图移除时调用 - (void)didMoveToWindow;

#####上面是资料说的,究竟对不对呢?我们用swift版的代码来验证下。 先自定义一个TestView类 TestView代码如下:

override init(frame: CGRect) {    super.init(frame: frame)}required init?(coder aDecoder: NSCoder) {    fatalError("init(coder:) has not been implemented")}// 当试图加入父视图时 / 当视图从父视图移除时调用override func didMoveToSuperview() {    print("\(#function)")}// 当视图即将加入父视图时 / 当视图即将从父视图移除时调用override func willMove(toSuperview newSuperview: UIView?) {    print("\(#function)")}override func didAddSubview(_ subview: UIView) {    print("3秒后\(#function)")}override func willRemoveSubview(_ subview: UIView) {    print("6秒后\(#function)")}复制代码

然后将该TestView创建实例,添加到控制器的view,设背景色为紫色,并将001赋给tag值

override func viewDidLoad() {    super.viewDidLoad()        let testV = TestView()    testV.frame = self.view.bounds    testV.backgroundColor = UIColor.purple    testV.tag = 001    self.view.addSubview(testV)复制代码

上面方法触发了willMove(toSuperview:)didMoveToSuperview(),验证了当视图即将加入父视图时和当试图加入父视图时调用

之后在viewDidLoad添加一个带有延迟的添加红色view代码,值得一提的是,这是最新swift3.1的GCD延时方法 //如果不需要在主线程执行,就去掉main

DispatchQueue.main.asyncAfter(deadline: .now()+3.0) {    let view = UIView.init(frame: CGRect(x: 10, y: 100, width: 100, height: 60))    view.backgroundColor = UIColor.red    testV.addSubview(view)    }复制代码

上面方法触发了didAddSubview,验证了当视图添加子视图时会调用

DispatchQueue.main.asyncAfter(deadline: .now()+6.0, execute: {    let tagView: TestView = self.view .viewWithTag(001) as! TestView    tagView.removeFromSuperview()})复制代码

上面方法触发了willRemoveSubview,验证了当子视图从本视图移除时会被调用,同时,willMove(toSuperview:)didMoveToSuperview()也被调用了,分别验证了当视图即将从父视图移除时 和 当视图从父视图移除时会被调用

经证实,资料所述属实。 人家发现的即便是对,但终归是人家的,只有自己验证才是属于自己的。

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

你可能感兴趣的文章
微软私有云分享(R2)27维护窗口的使用
查看>>
Mac 平台下功能强大的Shimo软件使用指南
查看>>
永远不要对一个外行聊你的专业
查看>>
MySQL学习四部曲
查看>>
SCCM 2012 R2实战系列之一:SQL安装
查看>>
windows下安装memcached
查看>>
08R2-12R2基于访问权限的文件枚举
查看>>
Gartner:网络信息安全投入依然不在中国政企客户优先投入之列
查看>>
恢复误删除的ESXi服务器存储VMFS卷
查看>>
SFB 项目经验-22-如何查看存储的管理IP地址
查看>>
libevent入门教程:Echo Server based on libevent
查看>>
.NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
查看>>
一次服务器CPU占用率高的定位分析
查看>>
安装office2007 1706错误
查看>>
crontab中执行多条命令
查看>>
25 JavaScript的幻灯片用于在Web布局的精彩案例
查看>>
关于使用AJAX获取数据时,由于IE缓存而导致数据不更新,串数据的问题!
查看>>
android开发(14) 可以横向滚动的ListView(固定列头)
查看>>
用C语言写的迅雷看看XV文件提取器及C语言源代码
查看>>
ccpuid:CPUID信息模块 V1.01版,支持GCC(兼容32位或64位的Windows/Linux)
查看>>