240 发简信
IP属地:浙江
  • iOS 编译 OpenCV Xcframework

    背景 OpenCV 官方提供 Framework 下载:https://opencv.org/releases/[https://opencv.org/releases/]。...

  • 老项目添加 gitignore

    在给老项目添加 .gitignore 文件时,如果你已经有文件被跟踪并提交到了仓库,那么这些文件将不会被 .gitignore 文件自动忽略。为了从 Git 中移除这些文件并...

  • 可以使用文中提到的 preferredContentSize,设置被弹出控制器的view size。修改 frameOfPresentedViewInContainerView,类似下面这样:
    override var frameOfPresentedViewInContainerView: CGRect {
    let size = presentedViewController.preferredContentSize
    return CGRect(x: (UIScreen.main.bounds.width - size.width) / 2, y: (UIScreen.main.bounds.height - size.height) / 2, width: size.width, height: size.height)
    }
    但是这种实现,跟我设计的初衷是不同的,特别是在push这种操作中需要自己特殊处理。
    另外一种建议就是封装一个适合项目使用的Popup ViewController 的基类,用于处理点击空白关闭弹窗的交互,业务弹框控制器继承这个基类即可,注意合理使用基类。

    Swift实现一个交互友好&灵活自定义的弹框

    前言 在我们平时日常开发中,经常会遇到各种样式的弹框。你是否也经常遇到呢?你是如何实现的?本文介绍使用UIPresentationController,结合自定义转场动效,实...

  • 使用 Firebase Hosting 托管 app-ads.txt

    准备工作 首先,你需要注册Firebase账号。 然后,创建Firebase项目。 生成app-ads.txt文件。 安装 Firebase CLI 1.安装 2.登录并测试...

  • Swift高阶函数

    Swift高阶函数是指可以接受函数作为参数或返回函数的函数。高阶函数强调了函数的参数和返回值都可以是函数类型,这使得函数能够被视为可传递和可组合的值和运算。 Swift中有多...

  • @达道者 是的,我们布局都是纯代码,我们对代码规范要求比较高,严格按照规范执行会是一件非常好的事情。nib我用的也挺熟练的,在公司有过一些分享,有很多技巧。UIStackView 技巧也很多的,能灵活运用的话,真的能省很多事。

    iOS直播间重构优化记录

    背景 历史原因加上功能的不断迭代,造成直播间代码越来越难以维护,前期架构也没有很好设计,造成各种耦合,不管是业务上的耦合,还是UI上的耦合。加上遗留了很多适配上的问题,以及交...

  • @达道者 感谢提问,你的这几个问题都非常好,我的总结里面没有详细的介绍实现细节,下面针对你的问题做下解答:

    1.SizeClass 确实无法区分iPad的横竖屏,如果一定要区分横竖屏,自行判断下即可。另外,SizeClass 并不是只能在 nib 中使用,我们一直纯手写布局,你可以通 traitCollection 属性来获取当前 SizeClass 的相关信息,也可以通过过重写 func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) 来获取更新前/后的 traitCollection 进而获取相关信息,然后做相应调整。

    2.文章中提到的控件自己管理自己的尺寸,仅仅是避免布局的耦合性,本身业务自己知道自己该显示多大,以及不同状态怎么显示。至于控件的坐标这个是交给容器来管理的,UIStackView 会自动管理子视图的布局,定义好容器的位置,设置好子视图的对齐方式,以及填充方式等参数,那么子视图即可按照对应的方式进行展示。正常来说,一个好的设计不存在不同的对齐方式,如果有也可以解决,添加一些辅助即可。那这里存在一个问题 UIStackView 是流式布局,如何控制控件的排列顺序呢,对于这种对排列顺序有严格要求的,我的做法是制定一个协议,让所有能添加到该容器的子视图遵守该协议,实现一个用于返回视图排序的序号,添加到容器时处理下排序即可。

    3.协议是为了更好的解耦,很多时候你只需要遵守协议即可,至于要不要实现对应的内容,就看对应的需求。实际使用中并不会增加多少工作量。

    4.关于你提到的使用 UIScrollview 代替 UIStackView 做插拔布局,我相信是可以做到的,但是至少你需要管理 UIScrollview 子视图的布局(插拔后的位置调整、内容尺寸变化后的调整、显示隐藏的调整等等,想到要处理这些就觉得很可怕),这显然没有 UIStackView 来的方便,UIStackView 自动帮我们管理好。UIScrollview 嵌套 UIStackView 的用法在苹果官方也随处可见,比如我们熟知的 UIAlertViewController。可以仔细研究下 UIStackView 的用法,有很多黑魔法的效果,UIStackView 也是我在我们公司极力推荐的一个布局神器,非常值得一试。

    如果有其他问题,也欢迎交流。

    iOS直播间重构优化记录

    背景 历史原因加上功能的不断迭代,造成直播间代码越来越难以维护,前期架构也没有很好设计,造成各种耦合,不管是业务上的耦合,还是UI上的耦合。加上遗留了很多适配上的问题,以及交...

  • Apple M2 macOS Flutter环境搭建记录

    1.安装 Rosetta 2 环境 2.下载Flutter SDK flutter_macos_arm64_3.7.7-stable.zip[https://storage....

  • iOS模块化中的通用图片访问器优化

    本文主要针对之前写的文章《iOS模块化中的通用图片访问器》[https://www.jianshu.com/p/c30728d3c147]的方案改进。 痛点 项目组件化,壳工...

  • 120
    iOS基于Vision框架的人体关键点检测

    从iOS 14和macOS 11开始,Vision增加了识别人体姿势的强大功能。他可以识别人体的19个关键点。如图所示: 实现 1.发起一个请求 使用Vision框架,通过V...

  • 120
    iOS直播间重构优化记录

    背景 历史原因加上功能的不断迭代,造成直播间代码越来越难以维护,前期架构也没有很好设计,造成各种耦合,不管是业务上的耦合,还是UI上的耦合。加上遗留了很多适配上的问题,以及交...

  • Swift实现一个交互友好&灵活自定义的弹框

    前言 在我们平时日常开发中,经常会遇到各种样式的弹框。你是否也经常遇到呢?你是如何实现的?本文介绍使用UIPresentationController,结合自定义转场动效,实...

  • iOS模块化中的通用图片访问器

    前言 本文旨在解决,多模块、多 bundle 的图片资源的统一访问方法。 目前,我们开发的项目实现了模块化,不同模块使用的图片资源也都抽到了相应的模块内部,可以共用的图片资源...

  • 120
    iOS 如何更好的适配异形屏(刘海屏)

    通常我们在适配异形屏的时候,我们可能会使用 safeAreaInsets。使用时机不对的话,safeAreaInsets 的值还会存在问题。或许你可以使用 key windo...

  • 120
    Swift Combine 入门导读

    在具体介绍 Combine 之前,有两个重要的概念需要简要介绍一下: 观察者模式 响应式编程 观察者模式 观察者模式(Observer Pattern)是一种设计模式,用来描...

  • 120
    Xcode 8 Instruments 学习(一)

    更新于:20170814更新于:20171222再次更新于:20180823 最近的几天在看一些 Instruments 相关的知识,总结分享一下希望对大家有所帮助: 本文章...