
Swift
文章平均质量分 68
我为双鱼狂
这个作者很懒,什么都没留下…
展开
-
AppClips&Tips(持续更新 20220706)
事事无绝对,只怕有心人。没有解决不了的问题,不放弃,总是会解决的。记录在开发过程中遇到的问题。原创 2022-06-09 20:06:55 · 458 阅读 · 0 评论 -
iOS-启动项目(一)设置 rootViewController(22年4月22日更新可用)
刚创建一个新的项目,在 `AppDelegate` 中设置 `rootViewController` 来确定应用的首页是一个最基本的处理,因为是不常操作的处理,所以容易忽略其中的某个步骤,导致无法设置成功。所以记录下来,以备快速查找。原创 2021-12-15 21:25:44 · 4280 阅读 · 0 评论 -
iOS-启动项目(二)引入第三方库
项目中很大几率会用到第三方库,通过 Pod 方式引入第三方库是效率很高的方式,这里介绍一个新的项目搭建 Pod 方式的环境,方便项目中引入第三方库文件。原创 2021-12-16 21:32:09 · 979 阅读 · 0 评论 -
Alamofire-5.0.0 以上报错
Alamofire 更新到新版本时,遇到了两个错误❌和一个警告⚠️,所以记录下来它们,以及如何解决它们。给其他出现类似问题的同道一些解决的方向。原创 2021-12-09 18:07:02 · 2740 阅读 · 3 评论 -
Swift-技巧(十一)重写运算符
基础数据的运算可以直接使用四则运算符。在 Swift 中也可以通过重写四则运算符的方式,让 struct 或者 class 创建的结构体或者对象也能像基础数据那样直接使用四则运算符。原创 2021-12-07 20:55:56 · 1731 阅读 · 0 评论 -
Swift-技巧(十) Protocol 的灵活使用
`Protocol` 是 Swift 中实现面向协议编程思想的重要部分。在使用过程中有遇到协议中声明的部分,但是在遵守部分不需要实现的,那么就需要使用 `extension` 参与进来,让 `Protocol` 使用的更加灵活,得心应手。原创 2021-12-03 20:51:09 · 628 阅读 · 0 评论 -
Swift-技巧(九)CGImage To CVPixelBuffer
iOS 中图像的表现形式不只是 Image,还有更加底层的方式,比如 `CVPixelBuffer` 像素缓存形式,那么 CGImage 就可以转换为像素缓存的方式也是需要了解的。原创 2021-11-30 20:59:33 · 1936 阅读 · 1 评论 -
Swift-技巧(八)CVPixelBuffer To CGImage
摘要Swift 中图像的表现形式不只是 Image,还有更加底层的方式,比如 CVPixelBuffer 像素缓存形式,那么像素缓存转换为可以在应用中展示的 CGImage,就要知道有哪些处理了。CGImage 苹果官方解释是一张 bitmap 图像或者图像 mask。它是 UIImage 类中的一个属性,并可以通过 UIImage 的初始化函数称为一个 Image 对象。CVPixelBuffer 是核心缓存像素对象的引用,这里存储着一张图像。在有些应用场景中,需要把 CVPixelBuffe.原创 2021-11-25 20:25:46 · 2274 阅读 · 0 评论 -
Swift-技巧(七)重识 Array
摘要iOS 开发,尤其是从 OC 转换到 Swift,对 Array 需要重新了解,Swift 中保留了什么属性,增加了什么属性,内存存储是什么情况等等,了解了这些,在使用 Array 的时候可以更符合 Swift 的思想,也方便了自己。Array 是应用程序中最常用的数据类型之一,可以使用 Array 来处理应用程序中的数据。使用 Array 类型来保存单一类型的元素。数组可以存储任何类型的元素—— 从 Int 到 String,甚至是 Class,但是数组中元素必须是同一类型。Swift 中可.原创 2021-11-23 19:59:13 · 1515 阅读 · 0 评论 -
Swift-技巧(六)设置按钮状态并更改
摘要按钮是一个宝藏控件,可以在设置的时候就对不同的状态添加图片、文本,甚至更改背景。在不同的展示场景中更改到不同的状态显示就好。恰恰是如何更改状态着实让我懵了一阵,所以记录一下过程。如果没有兴趣了解过程,可以直接滑到底部,截图表格收藏。之前在处理一个按钮控件,按钮有可以点击和禁止点击两个不同的状态,因为这两种状态有不同的图标,所以就想用 setImage(, for: ) 函数处理:let btn = UIButton()btn.setImage(UIImage(named: "pic1"), .原创 2021-11-18 20:41:37 · 1828 阅读 · 0 评论 -
Swift-技巧(五)设置圆角的代码
摘要实现控件圆角的代码时,会不假思索的写 cornerRadius 和 masksToBounds,因为搜索得到的设置圆角的代码就是这样。今天突发奇想,为什么要写 masksToBounds?打个比方,设置一个按钮的圆角是 5,我会立马写这两行代码:btn.layer.cornerRadius = 5btn.layer.masksToBounds = true呈现的效果上,是没有任何问题的。但是为什么要设置 masksToBounds 为 true 呢?能不写吗?带着问题,来看一下 ma.原创 2021-11-16 20:18:49 · 1953 阅读 · 0 评论 -
Swift-Framework Error(一)桥接文件
摘要Xcode 编译工程代码时,出现编译错误时除了红色图标外,还会附送几句英文文本。常规操作拷贝英文文本,放到搜索框中找答案,但是读懂这几句话能事半功倍。项目中如果有 OC 和 Swift 两种语言的代码,那么桥接文件(xx-Bridging.h)必然是要创建的,它作为桥梁,使得项目中的 OC 和 Swift 代码直接自由调用。对桥接文件感兴趣,给我留言,一定详细解答错误但是这种处理方式放到 Framework 中就失效,报错并返回 Error: using bridging headers .原创 2021-11-12 21:26:57 · 2136 阅读 · 0 评论 -
Swift-Framework(一)访问资源文件
摘要Framework 就是在 APP 应用中的一种封装功能的表现形式,虽然不能独立运行,但是也可以在它里面存放和访问图片、语音等资源文件,可算是麻雀虽小,五脏俱全。毕竟不是 APP 工程,所以 Framework 中访问资源文件的方式就略有不同,下面进入正题 - Framework 中访问资源文件本期主要是说明Framework 中访问资源文件,所以就简单的提一下 Framework 中放资源文件的两种方式:(特别指出,这里的 Framework 是动态库)将资源文件直接放在 Framewo.原创 2021-11-09 20:55:11 · 1939 阅读 · 0 评论 -
Swift-技巧(四)设置照片尺寸和格式
摘要平时实现拍照功能时,都是网上一通搜索,整体复制粘贴,自称无脑实现。但是当要求照片是不同的尺寸和格式( JPEG)时,就费力搞照片。其实在设置拍照时,就可以直接设置照片的尺寸和格式,用直接的方法来满足要求,岂不更好?开始拍照前,需要创建 AVCaptureSession 会话对象,如果仅仅是拍照就需要再创建 AVCapturePhotoOutput 对象,预览页面在 AVCaptureVideoPreviewLayer 类的对象中呈现,捕捉照片时调用 AVCapturePhotoOutput 对象.原创 2021-11-05 10:04:42 · 1032 阅读 · 0 评论 -
Swift-技巧(三)使用元组(tuple)
最近看 iOS 的官方功能的 Demo 时,发现代码中使用元组的地方很多,所以兴趣上来,查了下元组的出处。在苹果的文档中就只有简短的两句,使用元组创建一个组合的值,从函数中返回多个值。元组中的可以使用属性值或者索引引用。Apple DocumentationUse a tuple to make a compound value, to return multiple values from a function. The elements of a tuple can be referred to原创 2021-11-04 09:18:34 · 968 阅读 · 0 评论 -
Swift-技巧(二)模糊脸部功能
摘要本文介绍模糊脸部的功能逻辑和实现方式,实现方式会尽可能的使用苹果提供的 API,保证功能高效率和简洁。逻辑模糊脸部的逻辑主要有两个流程,就是先找到脸部,然后模糊脸部,那么就引申出这两个实现问题:如何正确找到脸部区域?如何只模糊脸部区域?依次解决这两个问题,那么这个功能就已经轻松实现了。实现实现功能方式有很多,这里只是分享一下自己的实现方式。主要借鉴 Core Image 中的方法。找脸部区域使用 CIDetector 类来查找图片中的脸部,虽然文档中说明可以找到比如鼻子更具体.原创 2021-11-03 10:56:41 · 224 阅读 · 0 评论 -
Swift-技巧(一)缩放并填充图片
摘要直接操作图片来实现它的缩放或者填充多余空间,首选 UIGraphicsBeginImageContext 函数来实现,它就相当于一个画布,你甚至可以用它来涂鸦。最近有一个需求,就是将图片先等比例缩放到指定大小,然后将空余出来空间填充为黑色,返回指定大小的图片。这种直接操作图片的需求,就要考虑使用 UIGraphicsBeginImageContext 函数实现。它可以理解为一个画布,我们只需要把图片放在画布的对应位置,把画布的多余地方全部涂成黑色就完成。实现先看代码,然后再分析:func.原创 2021-11-02 08:59:01 · 618 阅读 · 0 评论 -
Framework - 性能统计
摘要近期对接客户时,客户方希望提供 SDK 的性能、内存、隐私支持等一些数据,所以就对 SDK 进行了一些性能测试。在用表格统计整理这些数据时,突然发现,经常用统计的方式看 SDK 的相关数据,似乎也是一个发现优化的好方式。所以想记录下来统计表格式、测试工具等,方便后面去优化 SDK。SDK 数据表格首先把 SDK 中性能、内存有关的数据给整理一下,我这边做成如下图的表格,方便统计和查看。接下来,按照表格中的各个项目,去获取。性能数据CPU 消耗和内存消耗,这两个数据可以直接通过 Xc.原创 2021-10-23 15:25:51 · 257 阅读 · 0 评论 -
Swift-Button 的 highlighted(高亮)
摘要在学习小程序时,看到小程序中的一个样式属性 hover-class,通过设置这个属性,就可以给点击的控件添加一个高亮效果。所以也就萌生了在 Swift 也实现一个类似的功能的想法,开干。下面代码是给 view 控件添加一个高亮效果,高亮时,页面的背景颜色会 0.8 的透明度显示// html 页面<view class="tool-bar my-class" hover-class="hover" hover-stay-time="50"><image src.原创 2021-09-04 14:38:51 · 1443 阅读 · 0 评论 -
Swift- 设置 UILabel 内边距
摘要拿来即用短时间效率虽然挺高的,但是拿来的东西没有消化一次,就无法得心应手的使用它。这次的探索思路就是,查询官方文档,设置不同的值测试单个方法中参数的变化,之后测试两个方法的执行顺序,处理的思路,最后思考总结。在总结方法的处理逻辑时,使用伪代码的方式梳理方法的执行思路。避免解释文本太多,增加理解的成本。最近在学习小程序开发,接触到 flex 方式布局,很喜欢这种快速和方便的方式。所以当遇到一个页面上居中显示文本的需求的时候,就想直接在 UIlabel 上处理,然后在UIlabel上设置它的内边.原创 2021-08-31 21:19:20 · 2044 阅读 · 0 评论 -
Swift-为什么String转换Int的结果是nil
摘要知其然,更要知其所以然。前段时间用 String 转换 Int 处理时,发现一种情况返回 nil,就换成 String 转换 Double 的方式处理。今天就要来看看这种返回 nil 的情况是怎么造成的。当有小数的 String 文本转换为 Int 类型时,返回的值并不是咱们想要的向下取整后的整数,而是 nil。// Int 转换为 Stringlet intStr = "2.78"let int = Int(intStr) // nil为什么是nil?今天就来解解这个疑惑。Stri.原创 2021-07-22 21:04:47 · 272 阅读 · 3 评论 -
Swift-使用transform实现重复平移动画
摘要要实现一组重复的动画,本质上就是找到动画开始点、结束点。在动画结束的时候,触发开始点,持续这样的动作。这里面要梳理的逻辑就是1.触发开始点和2.监听动画结束点。这两个逻辑是实现重复动画的基础。应用场景将 imageView 等 UI 控件,设置成平移的动画,并且一直动画中。transform 可以实现控件的平移,但是无法连续动画。API 及语言核心逻辑/代码transform 可以将控件平移,为了达到连续动画,可使用递归方式实现。动画实现设置动画并开始使用 UIView.ani.原创 2021-07-20 21:13:47 · 710 阅读 · 0 评论 -
Swift-多线程
摘要本文不探讨子线程、主线程、同步和异步的常规操作。只是使用DispatchWorkItem 属性来处理1.子线程切换到主线程和2.主动停止正在进行的线程这两种场景,提供一些不同的实现思路。DispatchWorkItem还可以有其他的场景的应用,这次仅仅做个抛砖引玉。应用场景多线程主要的应用场景是:子线程加载耗时操作,比如网络请求延时操作加锁处理API 及语言DispatchObjectSwift核心逻辑/代码swift 中的多线程处理主要用DispatchQueue的函数.原创 2021-07-15 21:03:21 · 730 阅读 · 0 评论 -
Swift-主线程处理 UI 事件
应用场景iOS 机制规定,当处理 UI 事件时,需要在主线程中进行,比如刷新页面,添加控件等。若把一些计算等耗时操作在子线程处理完成后,再回到主线程处理 UI 事件时,需要先切换到主线程。核心逻辑/代码保证 UI 事件在主线程中执行,可以直接使用 DispatchQueue.main.async{}处理。这里在使用这个代码之前先用Thread.current.isMainThread判断当前线程是否已经是主线程,如果不是,再调用DispatchQueue.main.async{}执行 UI 事件。原创 2021-07-13 21:05:20 · 972 阅读 · 0 评论 -
Swift:获取 Window 视图
应用场景在 APP 的生命周期中,可以显示提示页面或者自定义弹框时。或者想要获取到视图的根控制器做其他处理时。就需要先获取 Window 视图,在这个视图上做显示提示页面或者自定义弹框。核心逻辑/代码使用获取 Window 的函数代码。需要注意的是,在 iOS 11 之前和之后,获取 Window 的函数方法是不同的。所以在使用时,需要兼容 iOS 11 之前和之后版本。示例代码显示提示页面或者弹框等// 提示页面let alterView = UIView()// 显示 提示页原创 2021-07-11 16:56:57 · 787 阅读 · 0 评论