IOS UI 设计 技术
AutoLayout
- AutoLayout是一种基于约束的,描述性的布局系统。
程序员—-(cgrect)—>frame(center+bounds) =====> 程序员—(NSLayoutConstraint)—>AutoLayout—(cgrect)—>center+bounds - Autolayout 基本使用方法
- interfaceBuilder
- Alignment Constraints

- custom Constraints

- Spacing to nearest neighbor 这个是系统自己选定的 依据是 interfacebuilder 现有的状态 多层布局时会有很多麻烦(目前不知道 解决办法)
- Constraint to margins iOS8 添加的新特性(左右16) .苹果UI引导方向
- Layout Guide

用于适配 iOS7 以前的版本 和以后版本的差异 ,主要原因 是 iOS7以后navigationController 的controller.view 的大小与navigation.view的大小相同 layout Guide 用于辅助布局 - Align

对齐方式 主要针对文字的对齐 - 编码NSlayoutContrainst
- 模型: item1.attribute = multiplier ⨉ item2.attribute + constant
- 代码: [NSLayoutConstraint constraintWithItem:item1
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:item2
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:-padding]; - 添加:约束要添加到View 上才能生效.View 官方推荐的View选定规则:同时包含两item的最小子树的根节点(树模型)
- 优先级: @property UILayoutPriority priority; 取值范围0--1000
typedef float UILayoutPriority;
static const UILayoutPriority UILayoutPriorityRequired NS_AVAILABLE_IOS(6_0) = 1000;
static const UILayoutPriority UILayoutPriorityDefaultHigh NS_AVAILABLE_IOS(6_0) = 750;
static const UILayoutPriority UILayoutPriorityDefaultLow NS_AVAILABLE_IOS(6_0) = 250;
static const UILayoutPriority UILayoutPriorityFittingSizeLevel NS_AVAILABLE_IOS(6_0) = 50; - 刷新:setNeedsUpdateConstraints和-layoutIfNeeded两个方法来刷新约束的改变.
- 内置大小(受view内容的影响view必须有多大空间才可以) 例如:UILabel(文字)
UILabel NSTextfield 有一个preferredMaxLayoutWidth 属性用来处理内置大小
代码:@implementation MyLabel - (void)layoutSubviews{ self.preferredMaxLayoutWidth = self.frame.size.width; [super layoutSubviews];} @end - (void)layoutSubviews{
[self invalidateIntrinsicContentSize];
[super layoutSubviews]; } - (CGSize)intrinsicContentSize{
return (...); } - (void)viewDidLayoutSubviews{ [super viewDidLayoutSubviews]; myLabel.preferredMaxLayoutWidth = myLabel.frame.size.width; [self.view layoutIfNeeded]; } - Visual Format Language 可视化格式语言

Apple 为减少程序员的工作量 推出的约束快速生成 技术 - 代码:
UIButton *cancelButton = ...;
UIButton *acceptButton = ...;
viewsDictionary = NSDictionaryOfVariableBindings(cancelButton,acceptButton);
[NSLayoutConstraint constraintsWithVisualFormat:@"[cancelButton]-[acceptButton]"
options:0
metrics:nil
views:viewsDictionary]; - 多种方式:
- [cancelButton(72)]-12-[acceptButton(50)]
- 所有出现数字的地方 多可以添加关系比如 [cancelButton(>=72)]-(12)-[acceptButton(50)]
- 可以添加优先级 用关键字符@ 比如 [cancelButton(>=72@1000)]-(12)-[acceptButton(50)]
- 可以用名称标示相等 比如 [cancelButton(>=72@1000)]-(12)-[acceptButton(==cancelButton)]
- 用V: H: 标示 后面语句定义的方向 用 | 标示 Constraints挂载View的边界
- 缺陷:
- 不能标示倍数
- 不能表示对齐
- Masonry: 野区推出的简化框架
例子: [label makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self).offset(@(left));
make.top.equalTo(rtLabel0.bottom).offset(@0);
make.width.equalTo(@(size.width+3 ));
make.height.equalTo(@(size.height));
}]; - relationship: .equalTo equivalent to NSLayoutRelationEqual
.lessThanOrEqualTo equivalent to NSLayoutRelationLessThanOrEqual
.greaterThanOrEqualTo equivalent to NSLayoutRelationGreaterThanOrEqual
- Attribute : MASViewAttribute NSLayoutAttribute
view.mas_left NSLayoutAttributeLeft
view.mas_right NSLayoutAttributeRight
view.mas_top NSLayoutAttributeTop
view.mas_bottomNSLayoutAttributeBottom
view.mas_leadingNSLayoutAttributeLeading
view.mas_trailingNSLayoutAttributeTrailing
view.mas_widthNSLayoutAttributeWidth
view.mas_heightNSLayoutAttributeHeight
view.mas_centerXNSLayoutAttributeCenterX
view.mas_centerYNSLayoutAttributeCenterY
view.mas_baselineNSLayoutAttributeBaseline - 内部简化 : //these two constraints are exactly the same
make.left.greaterThanOrEqualTo(label);
make.left.greaterThanOrEqualTo(label.mas_left); - NSNumber : make.top.equalTo(rtLabel0.bottom).offset(@0);
- NSArray : make.height.equalTo(@[label.mas_height, rtLabel.mas_height]);
make.height.equalTo(@[label, rtLabel]);
make.left.equalTo(@[label, @100, rtLabel.right]); - 优先级 : make.left.greaterThanOrEqualTo(label.mas_left).with.priorityLow();
make.top.equalTo(label.mas_top).with.priority(600); - MASCompositeConstraints : 扩展了对 edge size center 的支持
- 总之masonry 使得约束实现 简单直观
- autoLayout性能

图中为性能对不图 横轴 View的个数 纵轴 ms

平行view结构 和深度view结构 对比


在平行View结构 和 深度 View结构 添加 与移动对比 - size class iOS 8 为了适配多尺寸的iOS设备推出的技术
形成9种选择 最简单的理解就是 storyboard 以前就是一个 现在9个了 几乎所有多屏尺寸相关的 设置 都与size class 相关
- 开关 :

苹果技术再牛 我们可以不用 - 合并与分离关系 我们之前说过 storyboard 有9个 都编辑很累的
- 在 any Width|Any Height 下的操作是同时编辑9个 storyboard
- 在任一个 为Any 时 同时编辑 三个
- 只有四种情况 特定编辑一个
- 约束编辑界面 属性前面出现了+号

- font 属性前面出现了+号

- 总结 UI设计 发展是越来越专业 而且 apple 追求智能化 多样化 UI 独立
IOS UI 设计 技术的更多相关文章
- UI设计技术分享:教你几个设计技巧让老板对你的设计赞不绝口
我们做任何设计都离不开大小与重复的运用,这样能使我们的设计更加理性和科学,经得起推敲,那么我们一起来探讨下如何在产品设计中运用这一方法. 为什么大的物体更吸引眼球 ▲如上图所示,a球会比右边b球 ...
- [iOS UI设计笔记整理汇总]
8.UIsearchbar放到Navigationbar 上(意思是建个View作为titleview) //此处调用的是第三方封装的SearchBar,也可以自定义. self.searchBarW ...
- iOS UI 设计
优设 http://www.uisdc.com Sketch http://www.sketchcn.com
- 最意想不到的5个APP UI 设计范例
现如今,智能手机已成为人们生活中不可或缺的一个物件,琳琅满目的手机APP充斥着各大应用市场.对于普通人来说,他们的衣食住行因此而变得简单方便:对设计师们来说,他们则面临更多的机遇和挑战.每位设计师都梦 ...
- [读书笔记]iOS 7 UI设计 对比度
好久没写随笔了,最近在读<iOS 7 byTutorials>,很不错,推荐给大家. 每一个好的程序员也都是一个设计师,不懂设计的程序员不是好的CTO.哈哈,开个小玩笑. iOS 7设计的 ...
- iOS 11 APP 设计中的几个 UI 设计细节
Apple 官网看了 iOS 11 的介绍,发现有不少的更新哦,比如控制中心.Siri.Live Photo 等等,总体来说都有很多不错的体验,不过本文不介绍功能,只说视觉界面. 在 iOS 11 的 ...
- 缩放因子和UI设计
一.PPI 1.像素密度PPI:PPI(Pixel Per Inch by diagonal):表示沿着对角线,每英寸所拥有的像素(Pixel)数目. 根据勾股定理(直角三角形两边为a和b,斜边为c, ...
- 分享20个最新的免费 UI 设计素材给设计师
用户界面设计涉及到很多的创意,灵感以及需要与客户进行有效沟通的技能.良好的用户界面是一致的,可以使网站更容易理解和使用.UI设计的重点在于用户体验和互动,同时易于使用对于一个成功的移动应用程序来说非常 ...
- 设计人员应该看的15个很酷的 iOS 8 设计
苹果新一代智能手机 iPhone 6 发布已经有一段时间了,一些创意设计师已经开始在设计中采用 iOS 8 设计理念.当然,其中有些是对于未来的展望和大胆的设计.我在这里收集了15个很酷的 iOS 8 ...
随机推荐
- 利用Bitvise SSH Client设置二级代理
浏览器设置代理 chrome: 插件:SwitchyOmega 二级代理 软件:Bitvise SSH Client 友情连接:链接: https://pan.baidu.com/s/1fdth_TZ ...
- 大数据学习——hive安装部署
1上传压缩包 2 解压 tar -zxvf apache-hive-1.2.1-bin.tar.gz -C apps 3 重命名 mv apache-hive-1.2.1-bin hive 4 设置环 ...
- zoj 2947 Abbreviation
Abbreviation Time Limit: 2 Seconds Memory Limit: 65536 KB When a Little White meets another Lit ...
- Linux Notes:Linux下的远程登录协议及软件
常见的远程登录协议 1.RDP(remote desktopp protocol)协议,windows远程桌面协议 2.telnet CLI 界面下远程管理,几乎所有的操作系统都有,数据明文传输,不安 ...
- NYOJ301-递推求值
递推求值 nyoj上矩阵专题里的10道题水了AC率最高的5道,惭愧,还不是完全自己写的,用了几乎两周的时间.模板题我是有自信写出来的,但对于高级一点的矩阵构造,我还是菜的抠脚. 这题感谢MQL大哥和她 ...
- BZOJ1733: [Usaco2005 feb]Secret Milking Machine 神秘的挤奶机
n<=200个点m<=40000条边无向图,求 t次走不经过同条边的路径从1到n的经过的边的最大值 的最小值. 最大值最小--二分,t次不重边路径--边权1的最大流. #inclu ...
- HDU 4436 (后缀自动机)
HDU 4436 str2int Problem : 给若干个数字串,询问这些串的所有本质不同的子串转换成数字之后的和. Solution : 首先将所有串丢进一个后缀自动机.由于这道题询问的是不同的 ...
- linux命令1——基础
Rm 删除命令 Rm [选项][文件] 删除一个文件或者目录 选项:r 递归的删除文件夹及其子文件,f 忽略不存在的文件(不提示) (2)rm删除目录下所有文件,但不删除目录 >>rm - ...
- 转 蓝桥杯 历届试题 大臣的旅费 [ dfs 树的直径 ]
题解: 求树的直径. 转一篇博客:http://www.cnblogs.com/hanyulcf/archive/2010/10/23/tree_radius.html 树的直径是指树的最长简单路.求 ...
- Gearman 初窥【转载】
Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相 比,Gearman更偏向于任务分发功能.它的任务分布非常简单,简单得可以只需要用脚本即可完成.Gearman最初用于Live ...