美文网首页
iOS13新特性

iOS13新特性

作者: 米开朗骑騾 | 来源:发表于2019-10-12 16:46 被阅读0次

    Dark Mode 暗黑模式 \color{red}{}

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

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

      • 当系统在\color{red}{LightMode}\color{red}{DarkMode}之间相互切换时就会触发此回调

      • 这个block会返回一个\color{red}{UITraitCollection}

      • 我们需要使用其属性\color{red}{userInterfaceStyle},它是一个枚举类型,会告诉我们当前是\color{red}{LightMode}还是\color{red}{DarkMode}

        image.png
      • 颜色适配 示例: image.png
    • 图片也能在两种模式下自由切换
      \color{red}{Assets.xcassets}里新建\color{red}{Image set} 右侧栏的\color{red}{Appearances},选择\color{red}{Any,Dark}

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


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

      image.png
      示例: image.png
      ⚠️\color{red}{注意! ! !}
      • 当强行设置当前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状态才生效 image.png
    • 监听模式切换

      有时需要监听系统模式变化作出响应,通过以下方法 image.png
      示例: image.png
    • CGColor适配
      \color{green}{iOS13 UIColor能表示动态颜色,但CGColor依然只能表示一种颜色,因此对于CALayer等对象需要利用上述监听模式切换方法}
      1.方式一:resolvedColor

      image.png
      示例: image.png
      2.方式二:performAsCurrent image.png
      示例: image.png
      3.方式三:最简单的方式
      直接设置为一个动态UIColor的CGColor即可 image.png
      ⚠️! ! ! 设置layer颜色都是在traitCollectionDidChange中,意味着如果没有发生模式切换,layer将会没有颜色,需要设置一个基本颜色
    • 模式切换时打印log设置
      1.在Xcode菜单栏\color{red}{Product}->\color{red}{Scheme}->\color{red}{Edit Scheme}
      2.选择\color{red}{Run}->\color{red}{Arguments}->\color{red}{Arguments Passed On Launch}
      3.添加以下命令

      image.png
    • NSAttributedString优化
      \color{green}{对于UILabel、UITextField、UITextView,在设置NSAttributedString时也要考虑适配Dark Mode,否则在切换模式时会与背景色融合}

    1. 不推荐做法 image.png
      2.推荐做法 image.png
    • Status Bar设置
      \color{red}{iOS13对Status BarAPI做了修改,之前Status Bar有两种状态}
      1.UIStatusBarStyleDefault 文字黑色
      2.UIStatusBarStyleLightContent 文字白色

      image.png
      \color{red}{iOS13以后有三种状态}
      1.UIStatusBarStyleDefault 自动选择黑色或白色
      2.UIStatusBarStyleDarkContent 文字黑色
      3.UIStatusBarStyleLightContent 文字白色 image.png
    • UIActivityIndicatorView加载视图
      \color{red}{之前有三种样式:}
      1.UIActivityIndicatorViewStyleGray 灰色
      2.UIActivityIndicatorViewStyleWhite 白色
      3.UIActivityIndicatorViewStyleWhiteLarge 白色(大型)
      \color{red}{iOS13废弃了以上三种样式,而用以下两种样式代替:}
      1.UIActivityIndicatorViewStyleLarge (大型)
      2.UIActivityIndicatorViewStyleMedium(中型)
      3.可通过color属性设置其颜色
      示例:

      image.png
      效果:
      iOS13之前三种样式 image.png
      iOS13以后的两种样式 image.png
    • 模态弹出presentViewController
      1.在iOS13中\color{red}{presentVC}样式发生了变化,\color{red}{UIModalPresentionStyle}增加了一个\color{red}{UIModalPresentationAutomatic},并且在iOS13中默认是这个值,而之前默认的是\color{red}{UIModalPresentationFullScreen}\color{red}{UIModalPresentationAutomatic}自带手势下拉dismiss,弹出的vc适配可以在公共父类的init中设置\color{red}{modalPresentationStyle}\color{red}{UIModalPresentationFullScreen}。⚠️!!! VC的高度也发生了变化,在viewdidload中和实际的高度是不一样的。

      image.png image.png
      2.生命周期也有所不同
      \color{red}{UIModalPresentationAutomatic}\color{red}{UIModalPresentationFullScreen}不同,当A弹出B时,如果是\color{red}{UIModalPresentationFullScreen},A是会调用disappear相关生命周期方法的,B dismiss时,A也会调用appear相关方法,而\color{red}{UIModalPresentationAutomatic}不会调用,所以想在A的这四个方法做事情的同学需要另辟蹊径了。 image.png
    • KVC不允许使用私有方法

      比如UITextField设置placeholder image.png
      会直接crash
      可以替换成 image.png
      只需要使用空格占位,之后设置textF.placeholder就行
    • Xcode11新建工程的变化
      iOS13工程结构发生了变化,有两个代理

    1. AppDelegate
    2. SceneDelegate
      \color{red}{iOS13之前的生命周期} image.png
      对应到方法就是一些Appdelegate里的方法以及一些可以注册监听的通知。
      \color{red}{iOS13以后的改动} image.png 原本AppDelegate(UIApplicationDelegate)控制生命周期的行为移交给了SceneDelegate(UIWindowSceneDelegate)

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

    • 新增Menus控件
      Menus可以嵌套UIAction 也可以嵌套UIMenu 如图
      image.png
      UIMenu对象: image.png
      其对应的有一个options参数,声明如下:
      image.png
      这个参数是用于第二层menu的,其对应\color{red}{destructive}\color{red}{displayInline}两个效果
      效果如下 image.png
      UIAction对象: image.png
      前三个参数就不说了,第四个参数 \color{red}{discoverabilityTitle} 这个参数我目前没有研究出来是干嘛用的,如果有知道的小伙伴欢迎在评论区留言。
      第五个参数 \color{red}{attributes},我们先来看下声明和效果图 image.png image.png
      \color{red}{attributes} 也是 \color{red}{OptionSet} 可以多个一起用,但是这几个组合都没用

    第六个参数 \color{red}{state} ,一样先看声明和效果图。

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

      iOS13中 tableview和collectionview都增加了双指滑动编辑的功能 cellLinkage.gif

    首先设置\color{red}{tableview.allowsMultipleSelectionDuringEditing = ture}允许多选,再实现两个代理

    image.png
    当用户选择完,需要做某些操作时,我们可用 获取用户选择的。
    • 编辑手势
      1.复制:三指捏合
      2.剪切:两次三指捏合
      3.粘贴:三指松开
      4.撤销:三指向左滑动(或三指双击)
      5.重做:三指向右滑动
      6.快捷菜单:三指单击
      iOS13增加了一些文本编辑的手势,这些手势系统默认会提供,如果想禁用这些手势,需要重写\color{red}{editingInteractionConfiguration}属性,代码如下:

      image.png
    • search新特性

      iOS13下 UISearchViewController 结构如下: image.png

    \color{red}{UISearchBar}中可以获取到\color{red}{UISearchTextField}了,可以修改field的颜色、字体等。

    image.png

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

    3.可以和普通文本一起被选中 image.png
    Token创建的方式: image.png image.png

    另外系统还提供 \color{red}{textualRange }属性,来获取普通文本的长度。

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

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


    image.png

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

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

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


      image.png

    相关文章

      网友评论

          本文标题:iOS13新特性

          本文链接:https://www.haomeiwen.com/subject/hvvqmctx.html