博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[基础]iOS 可视化编程(全系列)
阅读量:6438 次
发布时间:2019-06-23

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

  hot3.png

所有文章目录:

本篇文章地址:

会持续的更新所有历史文章, 所以收藏的话请收藏上面的地址。

1. 背景

    本人比较喜欢用Xib来写项目, 效率高又不存在冲突问题, 很爽很方便(当然纯代码编程很多情况还是很有用的)。本篇文章将可视化编程用到的技术全部进行了统一整理, 相信全部看完时对于可视化编程了如指掌, 那么我们开始吧。

 

2. 他山之石

    这有一位大牛对从原理讲起, 到约束, 到自动布局, 讲的非常精彩。学完记得回来哦!

  1. 自动布局的基本原理: 
  2. Interface Builder的使用: 
  3. NSLayoutConstraint: 
  4. VFL: 
  5. 动态修改约束: 
  6. SizeClass的使用: 

    看完大神的文章, 相信大家对Xib已经非常的熟悉了, 那我再来补充些日常使用的技巧与经验。

 

3. 自定义VIew与Xib关联

    需求: 项目中经常自定义一个控件, 可是父类不是UIViewController的话Xcode不提供Xib支持, 需要自己单独创建Xib, 然后与代码关联起来。本节讲的就是如何与代码关联起来。

    参考的话, 可以看我封装的日历选择器 :   

3.1 代码与View关联

 

3.2 清空File's的关联, 如果不清空, 创建Xib时会崩溃

 

3.3 清空File's的关联

 

3.4 初始化方式

    建议在.h中提供一个类方法, 将初始化封装到内, 我一般命名喜欢用 "+  (instancetype)ViewWithNib"。

WBCellSubBarView *cellBar = [[[NSBundle mainBundle] loadNibNamed:@"WBCellSubBarView" owner:self options:nil] lastObject];    cellBar.frame = CGRectMake(0, 0, kScreenBoundWidth, height);

提示:

  • 一定记得要设置Frame
  • 通过Nib方式创建出来的对象, 不会走 "initWithFrame" 方法, 走的是"awakeFromNib"方法, 如果有初始化应写在这里。

3.5 参考:

  • Xib操作技巧: 
  • VC关联多个Xib: 

 

4. 自定义Interface Builder上的属性

4.1 效果图

    一直很羡慕系统提供的视图可以在Xib上直接修改属性, 并且能立即看到变化的结果。本节就是自己实现的方式, 方框内的是自定义属性。

 

4.2 实现方式

4.2.1 在自定义.h类中设置( IB_DESIGNABLE /  IBInspectable )

4.2.2 在.m中重写set方法, 就能实现对应的功能

 

4.3 内部探索

  • 初始化时的调用顺序:  initWithCoder -> 各个IBInspectable的属性方法 -> layoutSubviews
  • 当在 "面板" 设置完属性后, 在User Defined Runtime Attributes中会出现对应的设置, 再结合调用顺序, 猜测是通过运行时来实现的

 

5. 代码与约束结合的最佳实践

5.1 约束动画

    如何让约束的修改也带动画?

    在动画中, 执行setNeedsLayout, layoutIfNeeded方法, 就可以实现。

例:

[UIView animateWithDuration:0.3 animations:^{        self.ViewWidthLayout.constant = self.bgWidth;                [self setNeedsLayout];        [self layoutIfNeeded];    }];

 

    setNeedsLayout : 设置一个更新标示; layoutIfNeeded : 立即更新约束。如果有更新标示的话, 则在更新约束时会调layoutSubviews方法。 

    理解: "当在动画中设置直接设置约束时, frame并没有变化, 调用IfNeeded后, frame变化了, 所以就有了动画效果。"

    当你对某个约束直接进行赋值时, 系统会自动调setNeedsLayout方法, 所以上面示例没setNeedsLayout时也会调layoutSubviews方法。

 

提醒: 

        1.updateConstraints方法并不太好用, 详情:

ing..

转载于:https://my.oschina.net/ChenTF/blog/683042

你可能感兴趣的文章
【数据库】Sql Server备份还原脚本
查看>>
[RTC]系统时间NTP和RTC同步,Debian的时区配置
查看>>
java中List和Array相互转换
查看>>
目前支持WebGL的浏览器有哪些?
查看>>
ARKit从入门到精通(1)-ARKit初体验
查看>>
debug
查看>>
配置文件git config介绍
查看>>
IIS7的应用程序池详细解析
查看>>
java类路径classpath和包
查看>>
Information Retrieval 倒排索引 学习笔记
查看>>
【Git】Git-add之后-忽略部分文件的方法
查看>>
JQuery使用trigger模拟触发selete的选择change事件
查看>>
Android触摸事件(五)-CropBitmapActivity关于裁剪工具的使用
查看>>
JavaThread等待/通知经典范式
查看>>
Linux内存管理 (9)mmap
查看>>
连表更新数据
查看>>
tensorflow笔记1:基础函数、embedding_lookup
查看>>
如何用phpmyadmin导入大容量.sql文件,直接使用cmd命令进行导入
查看>>
BZOJ4133 : Answer的排队
查看>>
基于Centos搭建 Mono 开发环境
查看>>