- 博客(91)
- 资源 (11)
- 收藏
- 关注
原创 iOS -- 设置状态栏为单独的浅色模式
今天设置状态栏,发现之前使用的方法无效了,就查了不少资料才解决问题,发现在iOS9 之后。如果你的页面有导航栏的话,需要下面的几个方法配合使用,才会生效。这样三步设置下来,你会发现状态栏设置已生效。单独的设置下面的方法也无效。
2022-12-28 09:55:15
402
1
原创 Swift--多条件排序
多条件排序的判断方式是先比较第一个条件的排序,只有当第一个条件相等时候,才转到下一个条件去判断,直到找到一个不相等的条件。这个函数只能对单条件进行排序,那如果我们遇到多条件和多属性的时候怎么进行排序呢?然后我们对这个数组进行排序,规则是先按照姓排序,再按照名排序,最后是出生年份。三个条件的排序我们知道了,但是如果是N个条件呢,这时候我们会在里面写很多。包含名、姓、和生日,我们下面会对这三个属性进行联合排序。结果跟上面的方法打印的结果一样,完美!这样我们就是三个条件联合排序了。...
2022-07-28 17:12:54
1060
1
原创 Swift -- 数组高阶函数
一旦不为真,返回其余的元素(和prefix类似,不过返回相反的集合)。返回一个数组,其中包含调用给定转换并调用此序列的每个元素的非’nil'结果。如果要删除的元素数量超过集合中的元素数量,则结果是一个空子序列。``返回子序列,除给定数量的初始元素外,其余元素全部包含。返回包含集合初始元素的子序列,长度不超过指定的最大长度。返回序列中的最小元素,使用给定谓词作为元素之间的比较。判断当前序列的初始元素是否与另一个序列中的元素相同。的输出值的类型不必和元素的类型相同。找到所有元素中的最小或最大值。......
2022-07-27 15:29:23
859
原创 Swift -- 保存打印日志到沙盒
最近项目测试的时候经常遇到卡死的问题,集成的bug收集器又收集不到问题所在,导致没有办法定位问题,就自己写个打印日志收集的方法,将之保存在沙盒里面,以便测试人员发现卡死的时候,我们能根据打印的日志定位问题所在,代码如下:调用很简单,直接在调用就行:......
2022-06-20 09:56:54
914
原创 iOS 性能优化 -- APP启动时间
一、 APP 启动类型APP启动分为 冷启动、热启动两种冷启动:APP的icon从点击启动前,它的进程不在系统里,需要新创建一个进程分配给它的启动的情况。热启动:APP在启动后用户将APP退到后台,在APP的进程还在系统里的情况下,用户重新启动进入APP的过程。(这个过程做的事情比较少)二、APP启动的三个阶段、pre-main ( main()函数启动之前)main() 函数之后启动之后首屏渲染完成1、pre-main: ( main()函数启动之前)此步骤是启动第一步,
2022-03-18 15:22:23
3509
原创 Flutter探索(六) -- 路由学习
今天学习下Flutter的界面跳转,也就是路由的运用,首先我们需要创建两个界面LoginPage、MenuPage,然后把登录界面设为主界面,菜单界面设置为二级界面,我们有登录界面跳转到菜单界面:// 登录界面class LoginPage extends StatelessWidget { const LoginPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { re
2021-12-12 11:49:34
1922
原创 iOS -离屏渲染
我们在分析离屏渲染之前,我们先来了解下图片的渲染流程。一、图片的渲染流程首先我们先来看张流程图:我们来解读下这张流程图:1、我们点击屏幕触发事件,提交图片显示任务Commit Transaction2、把图片提交到Render Server(渲染服务),进行图片解码Decode,然后等待下一次Runloop进行Draw Calls3、把解码拿到的位图交给GPU进行渲染,GPU经过一系列操作把图片放到渲染缓冲区4、然后帧缓存区从渲染缓冲区拿到数据,接着显示控制器从帧缓存区中读取显示到屏幕上
2021-11-28 16:22:15
495
原创 Swift--弹框动画组件
在工作中我们经常会用到自定义的弹框,弹出的方向有时也不只一个,为了开发方便,写了一个比较能适应各个方向弹框的动画组件。记录下来以便后续使用:import UIKitpublic class DialogPresentationController: UIPresentationController, UIViewControllerTransitioningDelegate, PresentationControllerDeleate { enum DialogType {
2021-07-07 11:30:20
600
原创 解决IQKeyboardManagerSwift和tableView结合使用不弹框的问题
在使用IQKeyboardManagerSwift时候,发现如果textField的父视图是ScrollView的情况下,IQKeyboardManagerSwift就会失去效果。经过查找资料找到了解决方法:通常情况下,在父视图调用以下两个方法能解决: self.tableView.shouldIgnoreScrollingAdjustment = true self.tableView.shouldRestoreScrollViewContentOffset = true方法来自IQKeyboa
2021-06-07 15:43:10
1577
原创 React-Native 调用iOS原生组件
今天我们来研究下RN如何去调用iOS的原生组件:OC版主要步骤1、创建一个CropperMapViewBridge.m桥接文件2、在CropperMapViewBridge里面创建一个RCTViewManager的子类,来管理原生组件3、创建原生组件4、在RN中调用原生组件创建RCTViewManager的子类文件#import <React/RCTBridgeModule.h>#import <React/RCTViewManager.h>#import
2021-02-22 15:41:35
1232
1
原创 iOS Zlib 解压(OC版和Swift版)
本篇文章记录下zlib的DEFLATE格式的解压缩技术,在项目开发中用到了此项技术,进过不短时间的查资料才完成解压需求,记录下来已被后续只需:OC 版本@interface NSData (STUnzipArchive)- (NSData *)zlibDeflate;@end#import "NSData+STUnzipArchive.h"#import <zlib.h>@implementation NSData (STUnzipArchive)- (NSData *)z
2021-02-20 16:41:25
2100
原创 Flutter探索(五)--- Flutter基础组件API
Flutter 探索学习目录今天我们总结下Flutter 常用的基础组件,方便以后随时查阅TextText用于显示简单样式文本,它包含一些控制文本显示样式的一些属性. Text("预览", style: TextStyle ( color: Colors.black87 ), ),const Text( final String data;//要显示的文本。 final InlineSpan textSpan; // 文本内容 Text.rich() fina.
2021-01-21 14:06:26
953
原创 Flutter探索(四)--- 集成Flutter到iOS工程
Flutter 探索学习目录今天我们探索下如何把Flutter工程集成到我们现有的iOS工程中:关于官网上有三种集成方法,我们先尝试下官网推荐的抑郁症方法使用 CocoaPods 和 Flutter SDK 集成:首先我们得有一个含有Podfile文件的iOS工程,如果你的工程还没有Podfile文件,那就自己创建一个,这个创建方法想必每个iOS 开发者都会吧。在你现有的工程的同级目录下创建Flutter`工程:flutter create --template module my_flut.
2021-01-15 17:20:59
290
原创 Flutter探索(三)--- StatelessWidget 和 StatefulWidget
Flutter 探索学习目录我们在介绍StatelessWidget和StatefulWidget之前我们在深入分析下Widget,在一篇文章我们知道了在Flutter里面我们一般用Widget 去构建UI的布局,但实际上Widget并不是最终绘制在屏幕上的显示元素,真正的显示元素是Element,Widget只是描述Element的配置数据。官网有对Widget和Element的关系有以下说明Widget实际上就是Element的配置数据,Widget树实际上是一个配置树,而真正的UI..
2021-01-14 11:17:03
625
原创 Flutter 探索学习目录
Flutter探索(一)— Flutter 在macOS系统的配置安装Flutter探索(二)— Flutter的布局Flutter探索(三)— StatelessWidget 和 StatefulWidget
2021-01-13 13:55:31
178
原创 Flutter探索(二)--- Flutter的布局
将布局 widget 添加到页面>- Flutter探索(一)— Flutter 在macOS系统的配置安装Flutter探索(二)— Flutter的布局Flutter 中的WidgetsWidgets 是用于构建 UI 的类。Widgets 可以用于布局和展示 UI 元素。通过组合简单的widgets 来构建复杂的widgets。1、创建一个简单的Widget创建一个Text Widget,Text('Hello world')创建一个IconButton W
2021-01-08 15:36:42
457
原创 Flutter探索(一)--- Flutter 在macOS系统的配置安装
Flutter 配置1、获取Flutter SDK下载Flutter SDK,可以去官网下载,也可以去Git下载flutter_macos_1.22.5-stableSDK 下载列表将文件解压到目标文件,这个文件你可以自定义到你想放的地方cd ~/developmentunzip ~/Downloads/flutter_macos_1.22.5-stable.zip也可以把SDK文件直接到目标文件夹里面2、配置 flutter 的 PATH 环境变量终端输入open ~/.b
2021-01-06 15:53:24
295
原创 RxSwift学习(三)— Observer、Binder、Subjects、BehaviorRelay
RxSwift学习(一)— RxSwift介绍RxSwift学习(二)— Observable 常见的序列创建方法RxSwift学习(三)— Observer、Binder、Subjects、BehaviorRelayRxSwift学习(四)— RxSwift 高阶函数RxSwift学习(五)— RxSwift 操作符observer(观察者)观察者(Observer)的作用就是监听事件,然后对这个事件做出响应。或者说任何响应事件的行为都是观察者观察者的创建有以下几种在subs..
2021-01-04 17:13:24
2156
1
原创 RxSwift学习(五)--- RxSwift 操作符
RxSwift学习(一)— RxSwift介绍RxSwift学习(二)— Observable 常见的序列创建方法RxSwift学习(三)— RxSwift 高阶函数RxSwift学习(四)— RxSwift 操作符
2020-12-30 17:09:24
623
原创 RxSwift学习(四)--- RxSwift 高阶函数
RxSwift学习(一)— RxSwift介绍RxSwift学习(二)— Observable 常见的序列创建方法RxSwift学习(三)— RxSwift 高阶函数RxSwift 高阶函数今天我们来探索下RxSwift高阶函数,和一些组合函数的用法组合操作符startWith()在开始从可观察源发出元素之前,发出指定的元素序列elements:要附加到指定序列的元素returns: 返回以指定值开头的源序列public func startWith(_ elements:..
2020-12-29 14:02:26
754
原创 RxSwift学习(二)---- Observable 常见的序列创建方法
RxSwift学习(一)— RxSwift介绍RxSwift学习(二)— Observable 常见的序列创建方法RxSwift学习(三)— RxSwift 高阶函数RxSwift 常见序列今天我们就来梳理下RxSwift比较常见的序列create() 序列此序列我们在前面一章已经讲过了,这里就书写个使用例子:// 1、创建序列 _ = Observable<String>.create({ (observable) -> Disposable in..
2020-12-28 16:17:10
369
原创 RxSwift学习(一) --- RxSwift介绍
RxSwift学习(一) — RxSwift介绍RxSwift学习(二)— Observable 常见的序列创建方法函数响应式式编程(FRP)函数式编程(FP)函数式编程就是一种抽象程度很高的编程范式,它将计算机运算看做是数学中函数的计算,而纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用简单来说: 将函数作为一个单元来处理逻辑,给定一个输入值,就会有对应的一个输出值。函数还可以作为参数和返回值。这就是函数编程。..
2020-12-28 15:17:54
3041
1
原创 React-Native关于色盘的探索
最近因在学习RN的混合开发,项目中有个色盘的需求,难为了好几天才搞出来,现在记录下色盘实现,话不多说,开始敲代码:在研究色盘的绘制之前 我们先来看下RN中我们使用到的几个手势和参数RN手势// 返回值为布尔值, 如果返回值为 true,则表示这个 View 能够响应滑动手势, 两者有一个为true即可响应onMoveShouldSetPanResponder: (e, gestureState) => {...}onMoveShouldSetPanResponderCapture: (e,
2020-12-25 17:26:10
513
原创 OC--底层原理之类结构的分析
今天我们经过源码的探索来分析下类的结构,我们从isa 和 类的继承两方面来分析:我们先看一个经典的走位图:我们来验证下isa的走位:首先我们先创建一个LGPerson类然后用lldb打印一验证:@interface LGPerson : NSObject@endint main(int argc, const char * argv[]) { @autoreleasepool { LGPerson *person = [LGPerson alloc]; N
2020-09-20 19:01:05
225
原创 iOS-类和isa的面试题分析
看面试题前面,我们首先来了解几个概念:属性&成员变量&实例变量第一个面试题:方法的归属问题实例方法存在 类里面类方法存在元类里面类方法在元类中是实例方法我们现在来验证下这个两个说法:首先我们创建一个类LGPerson,为这个类定义两个方法。实例方法- (void)sayHello 和 类方法+ (void)sayHappy@interface LGPerson : NSObject- (void)sayHello;+ (void)sayHappy;@end@i
2020-09-20 12:25:18
232
原创 OC ---- isa 结构的分析
今天我们主要是探索 isa 的结构,还有就是验证下 isa 是怎么和类关联起来的。在验证之前我们首先了解下 对象的本质 是啥?对象的本质我们都知道对象的本质是结构体指针,但是我们如何去验证呢?那就要用到一个clang工具。clang是什么Clang是⼀个由Apple主导,用 C++编写,基于LLVM的C/C++/Objective-C编译器。源代码发布于BSD协议下。Clang将⽀持其普通lambda表达式、返回类型的简化处理以及更好的处理constexpr关键字。他的主要作用就是把目标文件编
2020-09-13 18:32:07
283
原创 OC -- alloc流程的探索
iOS的开发人员都知道,我们创建一个新的对象的时候,都会用到alloc、init等方法,但是具体alloc是如何创建对象的,它的流程是如何的,我们一般都没做过深入的了解,现在我们就一起探索一下:一、 如何查看alloc底层代码运行代码第一种方法:通过摁住control - step into![在这里插入图片描述](https://img-blog.csdnimg.cn/2020090618465156.png?x-oss-process=image/watermark,type_ZmFuZ3po
2020-09-06 20:53:13
256
原创 Swift UIImagePickerController 有时点击取消按钮不灵敏问题
在我们获取系统相册选取照片的时候,发现取消按钮点击不灵敏,有的时候甚至会卡顿,而点击选取按钮的时候则没有这个问题,进过对层级的查看,发现这是因为iOS 11 之后,进入图片编辑界面之后,会多出一个View, 且这个View在最上层,因此遮挡了点击事件:所以为了解决这个问题,,我们需要把这个View的层级改变一下,添加以下方法: func navigationController(_ navigationController: UINavigationController, didShow
2020-06-17 11:10:49
615
原创 UIImageView和UILabel 因为缩放产生的模糊问题
1、UIImageView 缩放产生图片模糊的解决方法:uiimageView.layer.magnificationFilter = "nearest"2、UILabel因为缩放导致的字体模糊的解决方法:func scrollViewDidZoom(_ scrollView: UIScrollView) { //缩放结果 label?.font = lab...
2020-05-08 15:39:37
1040
转载 Swift 关于Data的gzip解压缩
gzip的解压缩需要导入lizb 库,然后对Data进行一个扩展:宏定义: /**解压缩流大小**/ private let GZIP_STREAM_SIZE: Int32 = Int32(MemoryLayout<z_stream>.size) /**解压缩缓冲区大小**/ private let GZIP_BUF_LENGTH:Int = 512 /**默认空数据**/...
2019-05-31 17:08:04
1155
原创 Swift 通过扩展将UIView转化为高清的不失真的UIimageView
ios 截屏的时候出现图片模糊情况,尝试了很多方法都没解决,无意中看到一个博客有提到这个问题,在其中找到了解决的办法,通过一个扩展区实现:extension UIView { /** Get the view's screen shot, this function may be called from any thread of your app. ...
2019-05-31 09:21:40
980
原创 UIButton 中图片和文字的排列方式(Swift)
对UIbutton做一个扩展:enum ButtonEdgeInsetsStyle { // 图片相对于label的位置 case Top case Left case Right case Bottom}extension UIButton { func layoutButton(style: ButtonEdgeInsetsSt...
2019-04-04 16:29:44
966
原创 判断触摸点在一条直线上(Swift 方法)
最近在做扫地机项目,其中有个虚拟墙的功能,我们需要绘制并移动虚拟墙,这牵涉到一个知识点:判断我们的手指触摸点在虚拟墙(直线)上,研究了很久,找到一个方法,记录下来,以备后续之用: /* 判断触摸点在虚拟墙(直线)上*/ func pointIsinLine(point:CGPoint,startpoint p0:CGPoint,endpoint p1:CGPoint) -> ...
2019-04-04 10:41:54
655
1
原创 swift UIimage剪切指定大小图片的方法
extension UIImage { // 截取部分图片 func imageAtRect(rect: CGRect) -> UIImage{ var rect = rect rect.origin.x *= self.scale rect.origin.y *= self.scale ...
2019-04-01 17:44:32
2223
原创 ios 使用脚本打包
step1:新建一个文件夹“distribute”,然后在文件夹里面创建一个脚本“distribute.sh”,内容为(里面的appName替换为你的APP的名字):rm -rf appNamemkdir appNamemkdir appName/Payloadcp -r appName.app appName/Payload/appName.appcp Icon.png appName...
2019-02-13 09:38:15
247
原创 解决iOS ImageView图片放大模糊的问题
我们对图片放大的时候,会发现图片变得非常模糊,为了解决这个问题我试了很多方法都不行,直到发现了一个属性,才彻底解决这个模糊问题,我们值需要修改ImageView中的一个属性就可以了:这个属性是magnificationFilter // 设置属性 magnificationFilter mapView?.layer.magnificationFilter = "neare...
2019-01-29 16:54:27
1634
原创 Swift 设置部分圆角 功能
使用扩展为UIView 添加部分圆角功能:extension UIView { //设置部分圆角 func setRoundCorners(corners:UIRectCorner,with radii:CGFloat){ let bezierpath:UIBezierPath = UIBezierPath.init(roundedRect: (self.boun...
2018-12-06 11:07:48
1718
原创 Swift 把视图转化为UIImage
开发的时候我们会遇到截屏的功能,这里介绍一个简单的把UIView转化为UIImage的功能以此实现简单的截屏功能:我们为UIIView做一个扩展:Swift://将当前视图转为UIImage func asImage() -> UIImage { if #available(iOS 10.0, *) { let renderer = UI...
2018-12-06 11:03:30
1175
原创 iOS 视频播放横竖屏的转化
我们在做视频播放开发的时候,常常会用到横屏的播放,今天就记录下我做项目时候做横屏的方法,主要是使用注册通知,然后识别手机是否旋转方向去旋转横屏。思路:获取到手机已经旋转的通知以后,先改变播放器的transform进行旋转,然后改变frame 去改变播放器的大小。核心代码如下:/** 非全屏状态下播放器 superview */@property (nonatomic, strong) U...
2018-10-24 10:54:45
734
原创 swift 设置view的部分圆角
设置圆角 给UIView添加一个扩展:extension UIView { //设置部分圆角 func setRoundCorners(corners:UIRectCorner,with radii:CGFloat){ let bezierpath:UIBezierPath = UIBezierPath.init(roundedRect: self.bounds...
2018-10-18 13:55:44
1594
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人