WWDC2017 笔记 - Cocoa Touch 中的新特性

这篇文章是 What’s New in Cocoa Touch / UIKit Session 201 的一些整理。【基于OC】
转自我的 Blog: Danny's Dream

Drag Drop 新的交互方式 拖拽

Drag

需要 Drag 的对象要 add 一个 UIDragInteraction ,用法类似于 UIGestureRecognizer 。
UIDragInteraction 有一个 UIDragInteractionDelegate 的代理,可以提供数据,浮起的动画,和自定义的拖动时的动画。

Drop

接收 Drag 的对象的容器,容器要实现一个 UIDropInteractionDelegate 的代理,可以来根据拖入的对象调整当前的界面。

TableView, CollectionView, TextView, TextField, WebView 原生控件都支持

配合剪切板 UIPasteConfiguration 食用会更加。

这个功能手机上可以在 文件 这个系统 app 中体验,里面的 tableview 和 collectionview 的 item 都是支持拖拽的。

File Manager

UIDocumentBrowserViewController

多了一个文件管理的 VC,默认里面会显示当前 app 权限以内的文件,包括本地的和存在 iCloud 的【如果三方 app 在 info.plist 中声明了 UISupportsDocumentBrowser 或者 UIFileSharingEnabled 和 LSSupportsOpeningDocumentsInPlace 的话,可以获得第三方 app 的文件】。


构造方法如下【该构造还提供了文件筛选的能力】:
UIDocumentBrowserViewController* view  = [[UIDocumentBrowserViewController alloc]initForOpeningFilesWithContentTypes:@[@".txt",@".pages",@".pdf"]];复制代码

值得注意的是官方文档中提到,在使用该 VC 时。

    1. 务必把文件管理里的 VC 作为应用的 根 VC,不要把它放在 navigation,tab 或者 split 视图中,也不要通过模态的样式展现出来。
      有上述需求的话用 UIDocumentPickerViewController 来替代。
    1. 由于文件可能被任何 app 中的 UIDocumentBrowserViewController 修改,所以对文件的操作尽量通过 UIDocument 子类 或者 NSFilePresenter 和 NSFileCoordinator 对象来操作。

新的 UINavigationBar

增加了大的标题栏【觉得并不好看啊】,新增的 api,控制后面的 vc 层级是否需要继续展示大的 title,或者全部使用大的 title。可以在 Mail 的系统 app 中体验这个特性。

   //声明大标题self.navigationController.navigationBar.prefersLargeTitles = YES;//包含三种模式 aoto / always / never (后续 present 的view 是否需要大标题)self.navigationController.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAutomatic;复制代码

增加了统一的 navigation 搜索栏,不用再加在 tableview 的 header 中了。

 self.navigationController.navigationItem.searchController复制代码

现在 navigation bar 是独立的,和你的 content vie 无关,为了更好的处理这些系统 view 的布局的变化,提供了

  self.view.safeAreaLayoutGuide // auto layoutself.view.safeAreaInsets // 代码布局- (void)viewSafeAreaInsetsDidChange{//当布局变化的时候的回调
}复制代码

UIScrollView

解决了 navigation vc 和 scrollview 的 contentInset 的冲突的问题,现在 navigation vc 不在修改 contentInset 了。
增加了 contentInsetAdjustmentBehavior 这个属性,默认为 UIScrollViewContentInsetAdjustmentAutomatic ,可以用来自定义滑动时候的便宜效果。
通过 adjustedContentInset 可以获取当前的偏移量。

TableView 的修改

  • 滑动操作
    Row 增加了 UISwipeActionsConfiguration ,用来处理滑动操作。
    UISwipeActionsConfiguration 通过 UIContextualAction 数组来初始化,可以配置不同的动作,左滑右滑等,还能配置 UISwipeActionsConfiguration 的 performsFirstActionWithFullSwipe 【Bool】属性 来决定第一个事件是否响应完整的滑动。

  • 新的分界线
    可以配置相对值和绝对值的 Inset

    self.tableView.separatorInsetReference = UITableViewSeparatorInsetFromAutomaticInsets;复制代码

Swift 4 和 Foundation 的更新

这里是 OC 版的,我就不展开了,KeyPath 的新类型,还增加了 block 的 KVO 【然鹅 OC 并没有】。

系统级别的手势事件控制

AutoLayout 和 Scroll View

class UIScrollView { var contentLayoutGuide: UILayoutGuide { get } var frameLayoutGuide: UILayoutGuide { get }}

动态类型

用于系统级别的调整大小,获取动态的字体的大小。设计到 Auto Layout 的相关更新。

密码自动填写功能

场景是在 web 上登录账户之后,点击下线 app ,然后调整 appstore,打开 app ,输入密码,这时候可以自动填写。【应该需要网页 / app 端的支持】
这里没有具体展开,有个专门介绍这个 session 【Introducing Password AutoFil】

Asset Catalogs 的调整

现在颜色也能放在 Asset Catalogs 中了,更方便的使用广色域的颜色。代码里可以通过下面的方法获取。【swift 下面可以直接看到颜色,心酸的 OC 啥都没】

UIColor *color = [UIColor colorNamed:@"purple"];复制代码

可缩放大小的图片

  • 图片用于不同尺寸的场合
  • 系统基本的 Dynamic type 缩放
  • tab bar 的图片


tabbar image 大的 size ,障碍人士。【使用这个的话,会默认启用】

提升

通过 UIScreen 的 maximumFramesPerSecond 可以获取当前屏幕的刷新率
获取屏幕的刷新率,增强滑动和动画效果。

Metal apps 可以更好的得到提升。

本地化

针对某些国家从右到左的阅读习惯的改变,举得例子是 设置界面的反转。

That’s all,当然这些是简单的介绍,具体的还有见各个子 session,详细的在官方的文档中均已更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Hadoop] - 自定义Mapreduce InputFormatOutputFormat

在MR程序的开发过程中,经常会遇到输入数据不是HDFS或者数据输出目的地不是HDFS的,MapReduce的设计已经考虑到这种情况,它为我们提供了两个组建,只需要我们自定义适合的InputFormat和OutputFormat,就可以完成这个需求&a…

PS 色调——老照片效果

这就是通过调色使照片显得发黄。 R_new0.393*R0.769*G0.189*B; G_new0.349*R0.686*G0.168*B; B_new0.272*R0.534*G0.131*B; clc; clear all; Imageimread(9.jpg); Imagedouble(Image); Image_newImage; Image_new(:,:,1)0.393*Image(:,:,1)0.769*Image(:,:,2)0.189*Image(:,:,3…

jsp出现错误

昨天在调试页面时发生了如图显示的异常&#xff0c;它出现的原因是当<jsp:forward>或<jsp:include>标签没有参数时&#xff0c;开始标签和结束标签</jsp:forward>或</jsp:include>之间不能有空格&#xff0c;不能换行。解决办法&#xff1a;删除标签之…

门限回归模型的思想_Stata+R:门槛回归教程

来源 | 数量经济学综合整理转载请联系进行回归分析&#xff0c;一般需要研究系数的估计值是否稳定。很多经济变量都存在结构突变问题&#xff0c;使用普通回归的做法就是确定结构突变点&#xff0c;进行分段回归。这就像我们高中学习的分段函数。但是对于大样本、面板数据如何寻…

【数论】[CF258C]Little elephant and LCM

题目 分析&#xff1a;枚举最大数&#xff0c;然后找出它所有因数p1…….pk&#xff0c; 从中任意选取一些数&#xff0c;这些数的LCM|这个数且&#xff0c;这些数的最大LCM就是枚举的这个数&#xff0c;且若pi<aj<pi1则前i个数可以放在j这个位置&#xff0c;即j这个位置…

为普通Object添加类似AttachedProperty的属性

为普通Object添加类似AttachedProperty的属性 周银辉 我们知道&#xff0c;在WPF中对应一个DependencyObject&#xff0c;我们很容易通过AttachedProperty来为类型附加一个属性。但对于普通的Object而言&#xff0c;这就不可行了。 我现在遇到这样一个问题&#xff0c;下面有一…

python 操作RabbitMQ

pip install pika使用API操作RabbitMQ基于Queue实现生产者消费者模型View Code 对于RabbitMQ来说&#xff0c;生产和消费不再针对内存里的一个Queue对象&#xff0c;而是某台服务器上的RabbitMQ Server实现的消息队列。#!/usr/bin/env python import pika# ###################…

python和嵌入式哪个容易_嵌入式与python选哪个

从概念上来说&#xff0c;嵌入式和Python的区别还是比较明显的&#xff0c;嵌入式是一个开发领域&#xff0c;而Python则是一门编程语言。嵌入式开发是开发领域的一个重要分支&#xff0c;是物联网领域技术的重要组成部分&#xff0c;可以说有物联网的地方就离不开嵌入式开发。…

二阶传递函数的推导及几种求解方法的比较

二阶系统是指那些可用二阶微分方程描述的系统&#xff0c;其电路形式是由两个独立动态元器件组成的电路。 二阶系统电路包括二阶低通电路、二阶高通电路、二阶带通电路和二阶带阻电路。 下面分别给出以上二阶系统传递函数的推导过程&#xff0c;并以二阶低通电路的冲激响应为例…

前端技术-调试工具(上)

页面制作之调试工具 常用的调试工具有Chrome浏览器的调试工具&#xff0c;火狐浏览器的Firebug插件调试工具&#xff0c;IE的开发人员工具等。它们的功能与使用方法大致相似。Chrome浏览器简洁快速&#xff0c;功能强大这里主要介绍Chrome浏览器的调试工具。 打开 Google Chrom…

新版Microsoft Edge支持跨平台跨设备浏览

之前一直使用Google Chrome浏览器&#xff0c;可以随意安装插件扩展程序&#xff0c;无广告&#xff0c;这是我钟爱她的原因。但是之后不能登录Google账号&#xff0c;不能实现跨设备应用&#xff0c;就想找一款好用的替代品&#xff0c;近期发现了新版的Microsoft Edge&#x…

BZOJ1050 [HAOI2006]旅行

Description 给你一个无向图&#xff0c;N(N<500)个顶点, M(M<5000)条边&#xff0c;每条边有一个权值Vi(Vi<30000)。给你两个顶点S和T &#xff0c;求一条路径&#xff0c;使得路径上最大边和最小边的比值最小。如果S和T之间没有路径&#xff0c;输出”IMPOSSIBLE”&…

biosrecovery什么意思_BIOS中的每个中文是什么意思

BIOS中的每个中文是什么意思&#xff0c;请对照的翻译一下Time/System Time时间/系统时间Date/System Date日期/系统日期Level 2 Cache二级缓存System Memory系统内存Video Controller视频控制器Panel Type液晶屏型号Audio Controller音频控制器Modem Controller调制解调器(Mod…

百度网盘7.3.1.10版本增加工作空间功能,可实现百度网盘与电脑文件夹同步

百度网盘新增的工作空间是一款文件同步的产品&#xff0c;支持电脑本地与云端之间的文件同步&#xff0c;多设备间文件自动保持同步、支持查看文件每次都修改的历史版本。功能类似于onedrive。如果有同步需求的小伙伴可以尝试下载最新版的百度网盘试用该功能哦。下载网址&#…

ubuntu+idea intellij配置android开发环境

最近对移动开发产生兴趣&#xff0c;决定在未来几年内利用空余时间开发一些app或游戏什么的&#xff0c;鉴于ios开发成本较高&#xff0c;且自身对java相对熟悉&#xff0c;因此选择了学习android。都说android市场不很很好&#xff0c;收益较难&#xff0c;但是仍觉得只要功夫…

typeof的用法

typeof可以返回变量的类型&#xff0c;返回值为字符串&#xff0c;其值有 "undefined" "boolean" "string" "number" "object" "function" 而 typeof(null)会返回object 转载于:https://www.cnblogs.com/lhyhappy…

opencv 最大连通域_opencv 查找连通区域 最大面积实例

今天在弄一个查找连通的最大面积的问题。要把图像弄成黑底&#xff0c;白字&#xff0c;这样才可以正确找到。然后调用下边的方法&#xff1a;RETR_CCOMP:提取所有轮廓&#xff0c;并将轮廓组织成双层结构(two-level hierarchy),顶层为连通域的外围边界&#xff0c;次层位内层边…

JS 函数柯里化

在计算机科学中&#xff0c;柯里化是把接受多个参数的函数变换成接受一个单一参数&#xff08;最初函数的第一个参数&#xff09;的函数&#xff0c;并且返回接受余下的参数而且返回结果的新函数的技术。——详见 维基百科柯里化就是预先将某些参数传入&#xff0c;得到一个简单…

LTI系统的物理可实现性与希尔伯特变换

产品的设计一般为线性时不变系统&#xff0c;要求系统具有物理可实现性&#xff0c;从时域上看&#xff0c;h(t)具有因果性&#xff1b;从频域上看&#xff0c;|H(jw)|符合佩利—维纳准则。任何具有因果性的系统&#xff0c;|H(jw)|的实部R(w)满足希尔伯特变换&#xff0c;|H(j…

垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想

Delphi 是一个基本上被我遗忘的工具&#xff0c; 要不是在使用RapidSql , 我是收不到Embarcadero 公司发出的邀请来參加Delphi XE5的公布会的。 有人可能要问为什么是Embarcadero &#xff08;名称很拗口&#xff09;而不是Borland 开Delphi 公布会&#xff0c; 这是由于Borla…