iOS13新特性

Dark Mode 暗黑模式

  • Dark Mode样式
    iOS13新特性_第1张图片
    image.png
  • UIColor拥有了动态属性
  1. iOS13之前只能表示一种颜色
    iOS13新特性_第2张图片
    image.png
  2. iOS13以后能表示两种模式下不同颜色
    iOS13新特性_第3张图片
    image.png
  3. 初始化动态UIColor方法
    \color{blue}{iOS13 UIColor增加了两个初始化方法,使用以下方法可以创建动态UIColor(一个是类方法,一个是实例方法)}

    iOS13新特性_第4张图片
    image.png

    • 这两个方法要求传一个block进去

    • 当系统在和之间相互切换时就会触发此回调

    • 这个block会返回一个类

    • 我们需要使用其属性,它是一个枚举类型,会告诉我们当前是还是

      iOS13新特性_第5张图片
      image.png

    • 颜色适配 示例:
      iOS13新特性_第6张图片
      image.png
  • 图片也能在两种模式下自由切换
    在里新建 右侧栏的,选择

    iOS13新特性_第7张图片
    image.png

  • 图片适配 示例:
    iOS13新特性_第8张图片
    image.png
  • 获取当前模式(Light or Dark)
    iOS13新特性_第9张图片
    image.png
  • 设置App依旧保持原来样式 可通过设置plist完成


    image.png
  • 强行设置App模式
    \color{green}{当系统设置为Light Mode 时,App某些VC或view需要一直显示Dark Mode样式时,可以强行设置当前的VC为指定模式通过以下方式}

    image.png

    示例:
    image.png

    ⚠️

    • 当强行设置当前VC为Dark Mode后,这个VC下的子视图都是Dark Mode模式
    • 由这个VC Present/Push出的VC不会受到影响,依然跟随系统模式
    • 要想一键设置App下所有的VC都是Dark Mode,可以直接设置window的UIUserInterfaceStyle(不推荐 推荐plist设置)
    • 对window.rootViewController强行设置Dark Mode 也不会影响后续present除的VC的模式
    • 根VC设置某个模式,继承的VC也会收到影响
    • 要是先不适配暗黑模式的话,要么低版本Xcode出包,要么Xcode11里的plist设置Light模式
  • 模拟器动态修改模式需要通过Xcode设置且debug状态才生效
    iOS13新特性_第10张图片
    image.png
  • 监听模式切换

    有时需要监听系统模式变化作出响应,通过以下方法
    iOS13新特性_第11张图片
    image.png

    示例:
    iOS13新特性_第12张图片
    image.png
  • CGColor适配
    \color{green}{iOS13 UIColor能表示动态颜色,但CGColor依然只能表示一种颜色,因此对于CALayer等对象需要利用上述监听模式切换方法}
    1.方式一:resolvedColor

    image.png

    示例:
    iOS13新特性_第13张图片
    image.png

    2.方式二:performAsCurrent
    image.png

    示例:
    iOS13新特性_第14张图片
    image.png

    3.方式三:最简单的方式
    直接设置为一个动态UIColor的CGColor即可
    iOS13新特性_第15张图片
    image.png

    ⚠️! ! ! 设置layer颜色都是在traitCollectionDidChange中,意味着如果没有发生模式切换,layer将会没有颜色,需要设置一个基本颜色

  • 模式切换时打印log设置
    1.在Xcode菜单栏->->
    2.选择->->
    3.添加以下命令

    iOS13新特性_第16张图片
    image.png

  • NSAttributedString优化

  1. 不推荐做法
    image.png

    2.推荐做法
    iOS13新特性_第17张图片
    image.png
  • Status Bar设置

    1.UIStatusBarStyleDefault 文字黑色
    2.UIStatusBarStyleLightContent 文字白色

    iOS13新特性_第18张图片
    image.png


    1.UIStatusBarStyleDefault 自动选择黑色或白色
    2.UIStatusBarStyleDarkContent 文字黑色
    3.UIStatusBarStyleLightContent 文字白色
    iOS13新特性_第19张图片
    image.png

  • UIActivityIndicatorView加载视图

    1.UIActivityIndicatorViewStyleGray 灰色
    2.UIActivityIndicatorViewStyleWhite 白色
    3.UIActivityIndicatorViewStyleWhiteLarge 白色(大型)

    1.UIActivityIndicatorViewStyleLarge (大型)
    2.UIActivityIndicatorViewStyleMedium(中型)
    3.可通过color属性设置其颜色
    示例:

    iOS13新特性_第20张图片
    image.png

    效果:
    iOS13之前三种样式
    iOS13新特性_第21张图片
    image.png

    iOS13以后的两种样式
    iOS13新特性_第22张图片
    image.png

  • 模态弹出presentViewController
    1.在iOS13中样式发生了变化,增加了一个,并且在iOS13中默认是这个值,而之前默认的是。自带手势下拉dismiss,弹出的vc适配可以在公共父类的init中设置为。⚠️!!! VC的高度也发生了变化,在viewdidload中和实际的高度是不一样的。

    iOS13新特性_第23张图片
    image.png
    image.png

    2.生命周期也有所不同
    和不同,当A弹出B时,如果是,A是会调用disappear相关生命周期方法的,B dismiss时,A也会调用appear相关方法,而不会调用,所以想在A的这四个方法做事情的同学需要另辟蹊径了。
    iOS13新特性_第24张图片
    image.png

  • KVC不允许使用私有方法

    比如UITextField设置placeholder
    image.png

    会直接crash

    可以替换成
    image.png

    只需要使用空格占位,之后设置textF.placeholder就行
  • Xcode11新建工程的变化
    iOS13工程结构发生了变化,有两个代理

  1. AppDelegate
  2. SceneDelegate
    iOS13新特性_第25张图片
    image.png

    对应到方法就是一些Appdelegate里的方法以及一些可以注册监听的通知。
    iOS13新特性_第26张图片
    image.png
    原本AppDelegate(UIApplicationDelegate)控制生命周期的行为移交给了SceneDelegate(UIWindowSceneDelegate)

window放到里管理了,这是为ipad os做准备
如果想使用以前的场景,需要删除并且删除info.plist中Manifest,这样就走之前AppDelegate的那些方法了,并且别忘了在AppDelegate.h中添加属性

  • 新增Menus控件
    Menus可以嵌套UIAction 也可以嵌套UIMenu 如图
    iOS13新特性_第27张图片
    image.png

    UIMenu对象:
    iOS13新特性_第28张图片
    image.png

    其对应的有一个options参数,声明如下:
    iOS13新特性_第29张图片
    image.png

    这个参数是用于第二层menu的,其对应和两个效果
    效果如下
    iOS13新特性_第30张图片
    image.png

    UIAction对象:
    iOS13新特性_第31张图片
    image.png

    前三个参数就不说了,第四个参数 这个参数我目前没有研究出来是干嘛用的,如果有知道的小伙伴欢迎在评论区留言。
    第五个参数 ,我们先来看下声明和效果图
    iOS13新特性_第32张图片
    image.png
    iOS13新特性_第33张图片
    image.png

    也是 可以多个一起用,但是这几个组合都没用

第六个参数 ,一样先看声明和效果图。

iOS13新特性_第34张图片
image.png
iOS13新特性_第35张图片
image.png

可以和 搭配使用,如果 UIAction 设置了图片同时设置了 state = .on 则会把图片覆盖掉,只留下一个勾。
第七个参数是个闭包,当用户点击后会进入回调,处理相应的逻辑即可。
最后我们把 UIAction 和 editMenu 一起放到一个新的 UIMenu 中就可以达到动图中的效果了

  • Gestures 新特性

    iOS13中 tableview和collectionview都增加了双指滑动编辑的功能
    iOS13新特性_第36张图片
    cellLinkage.gif

首先设置允许多选,再实现两个代理

iOS13新特性_第37张图片
image.png

当用户选择完,需要做某些操作时,我们可用 获取用户选择的。

  • 编辑手势
    1.复制:三指捏合
    2.剪切:两次三指捏合
    3.粘贴:三指松开
    4.撤销:三指向左滑动(或三指双击)
    5.重做:三指向右滑动
    6.快捷菜单:三指单击
    iOS13增加了一些文本编辑的手势,这些手势系统默认会提供,如果想禁用这些手势,需要重写属性,代码如下:

    image.png

  • search新特性

    iOS13下 UISearchViewController 结构如下:
    iOS13新特性_第38张图片
    image.png

在中可以获取到了,可以修改field的颜色、字体等。

image.png

而且增加了Token功能,Token可以被复制、粘贴和拖拽,Token还有以下特点:
1.始终在普通文本面前
2.可以被选中和删除

3.可以和普通文本一起被选中
iOS13新特性_第39张图片
image.png

Token创建的方式:
iOS13新特性_第40张图片
image.png
iOS13新特性_第41张图片
image.png

另外系统还提供 属性,来获取普通文本的长度。

iOS13新特性_第42张图片
image.png

还有 属性,该属性可以控制是否展示搜索结果控制器

-PDF(长图)
iOS13中可以把 scrollview 转成 image 再把 image 转成 PDF (类似Safari截图后 把整页HTML转成PDF存储)
实现:
在控制器中实现UIScreenshotServiceDelegate代理


iOS13新特性_第43张图片
image.png

⚠️! ! ! 如果是无限列表,不要使用此功能。

  • textView 光标移动交互变化
    iOS13 输入框光标移动不再是摁住出现气泡移动 而是可以变成直接拖动光标的操作

  • navigationBar的frame变化
    纵坐标变成了0 所以需要处理一下
    self.navigationController.navigationBar.hidden = YES;隐藏后 低版本纵坐标为电池条高度


    image.png

你可能感兴趣的:(iOS13新特性)