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 ...
随机推荐
- 什么是slug URL 中的 slug
How would you reference this object with a URL, with a meaningful name? You could use Article.id so ...
- jenkins 提示No emails were triggered
发送邮件 Jenkins->系统管理->系统设置,在“邮件通知”里设置smtp服务器地址,以及发送者邮箱地址,在具体的任务构建完成以后,可以设置发送邮件,在某一个任务的"Add ...
- 一个监控oracle数据库某个字段值变化并发送邮件报警的脚本
talk is cheap,here is the code: #!/bin/sh export ORACLE_HOME=/u01/app/oracle/product//client_1/ expo ...
- Oracle中有关字符串操作的语法
Oracle中有关字符串操作的语法 Oracle提供了丰富的字符串函数 lpad()函数 lpad()函数用于左补全字符串.在某些情况下,预期的字符串为固定长度,而且格式统一,此时可以考虑使用lpad ...
- Leetcode 229.求众数II
求众数II 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1). 示例 1: 输入: [3,2,3] 输出: ...
- 短视频 SDK 架构设计实践
作者简介 孔维乐,七牛云客户端团队 Android 平台高级开发工程师,专注音视频,图形图像领域.OpenGL 专家,先后参与直播推流及连麦 SDK 的开发,主导短视频 SDK 的架构设计与实现, 对 ...
- 【Floyd最短路】第七届福建省赛 FZU Problem 2271 X
http://acm.fzu.edu.cn/problem.php?pid=2271 [题意] 给定一个n个点和m条边的无向连通图,问最多可以删去多少条边,使得每两个点之间的距离(最短路长度)不变. ...
- hihoCoder #1055 : 刷油漆 [ 树形dp ]
传送门 结果:Accepted 提交时间:2015-05-11 10:36:08 #1055 : 刷油漆 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到 ...
- python(4)- 字符编码
一 什么是编码? 基本概念很简单.首先,我们从一段信息即消息说起,消息以人类可以理解.易懂的表示存在.我打算将这种表示称为“明文”(plain text).对于说英语的人,纸张上打印的或屏幕上显示的英 ...
- HDU 1074 Doing Homework【状态压缩DP】
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题意: 给定作业截止时间和完成作业所需时间,比截止时间晚一天扣一分,问如何安排作业的顺序使得最 ...