iOS
锐意无限
这个作者很懒,什么都没留下…
展开
-
iOS -- 设置状态栏为单独的浅色模式
今天设置状态栏,发现之前使用的方法无效了,就查了不少资料才解决问题,发现在iOS9 之后。如果你的页面有导航栏的话,需要下面的几个方法配合使用,才会生效。这样三步设置下来,你会发现状态栏设置已生效。单独的设置下面的方法也无效。原创 2022-12-28 09:55:15 · 430 阅读 · 1 评论 -
Swift--多条件排序
多条件排序的判断方式是先比较第一个条件的排序,只有当第一个条件相等时候,才转到下一个条件去判断,直到找到一个不相等的条件。这个函数只能对单条件进行排序,那如果我们遇到多条件和多属性的时候怎么进行排序呢?然后我们对这个数组进行排序,规则是先按照姓排序,再按照名排序,最后是出生年份。三个条件的排序我们知道了,但是如果是N个条件呢,这时候我们会在里面写很多。包含名、姓、和生日,我们下面会对这三个属性进行联合排序。结果跟上面的方法打印的结果一样,完美!这样我们就是三个条件联合排序了。...原创 2022-07-28 17:12:54 · 1100 阅读 · 1 评论 -
Swift -- 数组高阶函数
一旦不为真,返回其余的元素(和prefix类似,不过返回相反的集合)。返回一个数组,其中包含调用给定转换并调用此序列的每个元素的非’nil'结果。如果要删除的元素数量超过集合中的元素数量,则结果是一个空子序列。``返回子序列,除给定数量的初始元素外,其余元素全部包含。返回包含集合初始元素的子序列,长度不超过指定的最大长度。返回序列中的最小元素,使用给定谓词作为元素之间的比较。判断当前序列的初始元素是否与另一个序列中的元素相同。的输出值的类型不必和元素的类型相同。找到所有元素中的最小或最大值。......原创 2022-07-27 15:29:23 · 913 阅读 · 0 评论 -
Swift -- 保存打印日志到沙盒
最近项目测试的时候经常遇到卡死的问题,集成的bug收集器又收集不到问题所在,导致没有办法定位问题,就自己写个打印日志收集的方法,将之保存在沙盒里面,以便测试人员发现卡死的时候,我们能根据打印的日志定位问题所在,代码如下:调用很简单,直接在调用就行:......原创 2022-06-20 09:56:54 · 950 阅读 · 0 评论 -
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 · 3566 阅读 · 0 评论 -
iOS -离屏渲染
我们在分析离屏渲染之前,我们先来了解下图片的渲染流程。一、图片的渲染流程首先我们先来看张流程图:我们来解读下这张流程图:1、我们点击屏幕触发事件,提交图片显示任务Commit Transaction2、把图片提交到Render Server(渲染服务),进行图片解码Decode,然后等待下一次Runloop进行Draw Calls3、把解码拿到的位图交给GPU进行渲染,GPU经过一系列操作把图片放到渲染缓冲区4、然后帧缓存区从渲染缓冲区拿到数据,接着显示控制器从帧缓存区中读取显示到屏幕上原创 2021-11-28 16:22:15 · 513 阅读 · 0 评论 -
Swift--弹框动画组件
在工作中我们经常会用到自定义的弹框,弹出的方向有时也不只一个,为了开发方便,写了一个比较能适应各个方向弹框的动画组件。记录下来以便后续使用:import UIKitpublic class DialogPresentationController: UIPresentationController, UIViewControllerTransitioningDelegate, PresentationControllerDeleate { enum DialogType {原创 2021-07-07 11:30:20 · 624 阅读 · 0 评论 -
解决IQKeyboardManagerSwift和tableView结合使用不弹框的问题
在使用IQKeyboardManagerSwift时候,发现如果textField的父视图是ScrollView的情况下,IQKeyboardManagerSwift就会失去效果。经过查找资料找到了解决方法:通常情况下,在父视图调用以下两个方法能解决: self.tableView.shouldIgnoreScrollingAdjustment = true self.tableView.shouldRestoreScrollViewContentOffset = true方法来自IQKeyboa原创 2021-06-07 15:43:10 · 1648 阅读 · 0 评论 -
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 · 2186 阅读 · 0 评论 -
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 · 234 阅读 · 0 评论 -
iOS-类和isa的面试题分析
看面试题前面,我们首先来了解几个概念:属性&成员变量&实例变量第一个面试题:方法的归属问题实例方法存在 类里面类方法存在元类里面类方法在元类中是实例方法我们现在来验证下这个两个说法:首先我们创建一个类LGPerson,为这个类定义两个方法。实例方法- (void)sayHello 和 类方法+ (void)sayHappy@interface LGPerson : NSObject- (void)sayHello;+ (void)sayHappy;@end@i原创 2020-09-20 12:25:18 · 250 阅读 · 0 评论 -
OC ---- isa 结构的分析
今天我们主要是探索 isa 的结构,还有就是验证下 isa 是怎么和类关联起来的。在验证之前我们首先了解下 对象的本质 是啥?对象的本质我们都知道对象的本质是结构体指针,但是我们如何去验证呢?那就要用到一个clang工具。clang是什么Clang是⼀个由Apple主导,用 C++编写,基于LLVM的C/C++/Objective-C编译器。源代码发布于BSD协议下。Clang将⽀持其普通lambda表达式、返回类型的简化处理以及更好的处理constexpr关键字。他的主要作用就是把目标文件编原创 2020-09-13 18:32:07 · 313 阅读 · 0 评论 -
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 · 285 阅读 · 0 评论 -
Swift UIImagePickerController 有时点击取消按钮不灵敏问题
在我们获取系统相册选取照片的时候,发现取消按钮点击不灵敏,有的时候甚至会卡顿,而点击选取按钮的时候则没有这个问题,进过对层级的查看,发现这是因为iOS 11 之后,进入图片编辑界面之后,会多出一个View, 且这个View在最上层,因此遮挡了点击事件:所以为了解决这个问题,,我们需要把这个View的层级改变一下,添加以下方法: func navigationController(_ navigationController: UINavigationController, didShow原创 2020-06-17 11:10:49 · 644 阅读 · 0 评论 -
UIImageView和UILabel 因为缩放产生的模糊问题
1、UIImageView 缩放产生图片模糊的解决方法:uiimageView.layer.magnificationFilter = "nearest"2、UILabel因为缩放导致的字体模糊的解决方法:func scrollViewDidZoom(_ scrollView: UIScrollView) { //缩放结果 label?.font = lab...原创 2020-05-08 15:39:37 · 1089 阅读 · 0 评论 -
点击图片放大查看
当我们查看一些小图片时,我们有时会看不清,我们就想把图片放大来看,下面的这些代码就简单实现了此功能//视图控制器#import "RootViewController.h"#import "ClickZoomImageView.h"//图片类@interface RootViewController ()@end@implementation RootViewController- (void)原创 2016-01-07 16:55:00 · 623 阅读 · 0 评论 -
ios 子视图获取父视图的视图控制器的方法(oc 和 swift)
oc 获取父视图控制器的方法:- (UIViewController *)viewController{ for (UIView* next = [self superview]; next; next = next.superview) { UIResponder *nextResponder = [next nextResponder]; i...原创 2018-10-08 14:15:44 · 4360 阅读 · 0 评论 -
swift4.0 textfield 的placeholder 占位符的字体大小和颜色的设置方法
记录一下 swift4.1 textfield 的placeholder 占位符的字体大小和颜色的设置方法let placeholserAttributes = [NSAttributedStringKey.foregroundColor : UIColor.blue,NSAttributedStringKey.font : UIFont.systemFont(ofSize: 16)]...原创 2018-08-01 09:10:02 · 1397 阅读 · 0 评论 -
关于在iOS11上UIBarButtonItem的图标移动的解决方法
在iOS11上我们设置左右UIBarButtonItem的时候,会发现图标会向里面偏移,如果想回到iOS10 上的效果只需要添加两句代码就行: // 感觉可有可无 // let spacer = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil) ...原创 2018-07-10 13:42:08 · 775 阅读 · 0 评论 -
ijkplayer的集成和运用
最近因项目需要了解和学习了关于直播的播放器集成,首先了解了ijkplayer的集成,ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明下面我记录一下我是如何在 iOS 中集成ijkplayer的,以便以后保存学习:一、 下载ijkplayer ijkplayer的下载地址:https://github.com/Bi...原创 2018-06-27 15:14:44 · 822 阅读 · 0 评论 -
关于在ImageView上添加Button,但是点击没反应
今天有个需求,就是在imageView 上添加一个Button, 但是发现添加以后,button的点击事件无论怎么触发都不会响应,经过查找资料,发现ImageView默认是不响应事件的 ,所以即使在上边加上个button也不会响应 解决办法是:将这个imageview.userInterfaceEnabled = YES; 手动设成YES,再次运行!就可以了强调内容原创 2017-11-22 13:30:36 · 1585 阅读 · 0 评论 -
关于iOS 11 tableView跟导航栏之间有空白和tableview的头视图问题
我最近在适配iPhone X时候,发现tableView的头视图在不使用但是只需要设置高度的时候,设置的高度却没有产生作用。并且还会在于导航栏之间产生一段空白,这种情况时有时无的,我经过查看发现,没有出现这种情况的tableView都是有头视图并且在头视图上面进行了一些布局的情况。最后发现导致这种情况的原因是tableview的代理,以前我们用不到头视图的时候 ,关于头视图的代理会默认为空,但是在原创 2017-09-22 16:07:33 · 1678 阅读 · 0 评论 -
3D Touch的基本使用
3D Touch主要的使用场景为两个,一个静态这设置,一个动态添加,还有包括修改UIApplicationShortcutItem,peek(预览)和pop(跳转)的实现。 应用最多添加4个快捷选项标签,iOS给我们提供了2种方式开发。 一、静态的标签实现 打开项目的plist文件,添加如下项(需要我们手工添加) 或者代码编写plist<key>UIApplicationSh原创 2017-09-04 15:17:26 · 1181 阅读 · 1 评论 -
Swift 使用 NSClassFromString 遇到的大坑
swift 中NSClassFromString的使用: 在swift中使用NSClassFromString时候 会常遇到这样的一个报错:unexpectedly found nil while unwrapping an Optional value 这是你的参数写错了的原因。 首先 NSClassFromString 在swift中 的参数不只是一个单独的类字符串,而是一个完整的包名加类原创 2017-07-28 11:33:07 · 2212 阅读 · 0 评论 -
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 · 1625 阅读 · 0 评论 -
iOS 视频播放横竖屏的转化
我们在做视频播放开发的时候,常常会用到横屏的播放,今天就记录下我做项目时候做横屏的方法,主要是使用注册通知,然后识别手机是否旋转方向去旋转横屏。思路:获取到手机已经旋转的通知以后,先改变播放器的transform进行旋转,然后改变frame 去改变播放器的大小。核心代码如下:/** 非全屏状态下播放器 superview */@property (nonatomic, strong) U...原创 2018-10-24 10:54:45 · 747 阅读 · 0 评论 -
Swift 把视图转化为UIImage
开发的时候我们会遇到截屏的功能,这里介绍一个简单的把UIView转化为UIImage的功能以此实现简单的截屏功能:我们为UIIView做一个扩展:Swift://将当前视图转为UIImage func asImage() -> UIImage { if #available(iOS 10.0, *) { let renderer = UI...原创 2018-12-06 11:03:30 · 1213 阅读 · 0 评论 -
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 · 1198 阅读 · 0 评论 -
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 · 1005 阅读 · 0 评论 -
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 · 2282 阅读 · 0 评论 -
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 · 988 阅读 · 0 评论 -
判断触摸点在一条直线上(Swift 方法)
最近在做扫地机项目,其中有个虚拟墙的功能,我们需要绘制并移动虚拟墙,这牵涉到一个知识点:判断我们的手指触摸点在虚拟墙(直线)上,研究了很久,找到一个方法,记录下来,以备后续之用: /* 判断触摸点在虚拟墙(直线)上*/ func pointIsinLine(point:CGPoint,startpoint p0:CGPoint,endpoint p1:CGPoint) -> ...原创 2019-04-04 10:41:54 · 685 阅读 · 1 评论 -
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 · 257 阅读 · 0 评论 -
解决iOS ImageView图片放大模糊的问题
我们对图片放大的时候,会发现图片变得非常模糊,为了解决这个问题我试了很多方法都不行,直到发现了一个属性,才彻底解决这个模糊问题,我们值需要修改ImageView中的一个属性就可以了:这个属性是magnificationFilter // 设置属性 magnificationFilter mapView?.layer.magnificationFilter = "neare...原创 2019-01-29 16:54:27 · 1668 阅读 · 0 评论 -
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 · 1743 阅读 · 0 评论 -
swift 使用Kingfisher进行网络图片的下载
Kingfisher的下载地址:https://github.com/onevcat/Kingfisher 简单的使用方法:let url = URL(string: "url_of_your_image")imageView.kf.setImage(with: url)带有缓存图片的_imageView.kf.setImage(with: "url_of_your_image", plac原创 2017-07-31 17:24:00 · 4352 阅读 · 0 评论 -
使用终端上传代码到github
对于IOS开发者来说,Github的使用是必须要掌握的一种技能,而把项目由本地上传到Github有多种方式 今天我在这里介绍一种使用 终端上传代码到github的方法: 1:建立本地Git仓库cd到你的本地项目根目录(就是你的项目所在的文件夹)下,执行git命令git init2:将本地项目工作区的所有文件添加到暂存区git add .如果想添加项目中的指定文件,那就把.改为指定文件名即可3:原创 2016-10-25 10:31:42 · 850 阅读 · 0 评论 -
自定义TabBarItem的字体颜色和大小
自定义TabBarItem的字体颜色和大小,以达到自己所想要的结果[[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:13.0]} forState:UIControlStateNormal];//TabBarItem未选中时的字体大小 [[原创 2016-01-08 14:43:28 · 1803 阅读 · 0 评论 -
清除缓存数据的方法
我们在做项目的时候,常常需要一个清除数据缓存的功能,下面的一些代码是我平常用的清除缓存的方法#import "UIImageView+WebCache.h"#import "SDImageCache.h"//包含头文件 借助于SDWebImage库//创建一个buttonUIButton *DelButton=[UIButton buttonWithType:UIButtonTypeCus原创 2016-01-08 15:38:53 · 1049 阅读 · 0 评论 -
iOS 通知的基本用法
一、首先要注册通知#import "RootViewController.h"@interface RootViewController (){ NSTimer *_timer;//添加定时器}@end@implementation RootViewController- (void)viewDidLoad { [super viewDidLoad]; //注册通知原创 2015-12-28 16:56:39 · 388 阅读 · 0 评论