![](https://img-blog.csdnimg.cn/20190923141028954.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
iOS高级
runtime, runloop,layer及子类,贝塞尔曲线,mask,高斯模糊,NSTimer,核心动画,线程等相关
三好夫人
仰望星空,脚踏实地
展开
-
CAShapeLayer
CAShapeLayer属于QuartzCore框架,继承与CALayer,所以本质上CAShapeLayer是一个layer,layer有的属性他都有。CAShapeLayer是通过矢量图形而不是bitmap来绘制图层子类,指定诸如颜色和线宽等属性,用CGPath来绘制图形。CAShapeLayer主要作用是根据路径来绘制图形。只要给定一个路径然后他进行绘制,常用来和BezierPath配合使用...原创 2019-09-26 11:45:30 · 2411 阅读 · 0 评论 -
iOS 14系统下 UIDatePicker 出现问题及解决方案
如果你的项目中使用了 UIDatePicker 控件并在 14 系统下出现问题出现的原因苹果在 14 系统中修改了 datePicker 的preferredDatePickerStyle属性增加了UIDatePickerStyleInline并且将默认样式调整到新增的 style 上,如果你的项目中和我一样没有设置 style类型并且需要轮播那么就会出现问题解决方案:主动设置 datePicker的 style if (@available(iOS 13.4, *)) {原创 2020-10-23 14:39:51 · 2870 阅读 · 0 评论 -
iOS14 系统 YBImageBrowser显示图片黑屏问题
今天运营反馈项目中有些用户打开图片黑屏问题全部是14 系统,经过排查是 YBImageBrowser库的问题没有适配 14 系统出现原因:iOS 14系统调用方法- (void)displayLayer:(CALayer *)layer,YYAnimatedImageView没有正确处理。解决:重写YYAnimatedImageView.m 的中的displayLayer方法大概在529 行-(void)displayLayer:(CALayer *)layer {UIImage *current原创 2020-09-26 10:39:36 · 2946 阅读 · 0 评论 -
performSelector总结
performSelector: withObject:是在iOS中的一种方法调用方式。他可以向一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以这也是runtime的一种应用方式。performSelector和直接调用方法的区别就在与runtime。直接调用编译是会自动校验。如果方法不存在,那么直接调用 在编译时候就能够发现,编译器会直接报错。 但是使用performSelec...原创 2018-02-22 11:31:01 · 308 阅读 · 0 评论 -
runtime
一理论 Runtime:运行时,它是由c语言和汇编实现一个api是我们oc的基石,oc是一门高级编程语言,也是c的延伸,我们编写的代码在程序运行时会通过runtime汇编成c语言。其中最主要的基石消息机制。c语言,函数的调用在编译时就会决定调用哪个函数,我们oc的函数调用叫消息发送,属于动态调用,在编译的时候可以调用任意函数即使这个函数么有实现,只要声明就不会报错,只有在真正运行时才会确定调用哪...原创 2018-02-20 09:01:04 · 235 阅读 · 0 评论 -
runloop
一.理论 Runloop:字面意思:跑圈,实际他上是一个对象,这个对象管理了其需要处理的事件和消息,并提供了一个入口函数来执行do{}while{}逻辑,线程执行这个函数后,就会一直处于接受消息->等待->处理的循环中,直到这个循环结束,函数返回. RunLoop就是线程中的一个循环,RunLoop在循环中会不断检测,通过Input sources(输入源)和Timer sourc...原创 2018-02-20 22:56:40 · 136 阅读 · 0 评论 -
多线程-NSOperation
NSOperation是对GCD的封装,面向对象,比gcd更易于使用优点:可添加完成的代码块,添加操作之间的依赖,方便控制之下顺序,可以设定优先级,可使用kvo观察操作执行状态。NSOperation是一个抽象类,不能直接使用,有2个抽象类NSInvocationOperation,NSBlockOperationNSOperatiaon引进了操作(任务)和操作队列(队列)的概念2.常用方法...原创 2019-09-23 18:14:48 · 125 阅读 · 0 评论 -
多线程-GCD
CGD:是4.0新增的,c语言写的,他是苹果公司为多核cpu的并行运算提高效率出现的,能够自动管理线程的生命周期,不需要我们对线程的管理。1.任务和队列CGD的核心是任务和队列的概念任务:分为同步任务syan顺序执行,异步任务async开启线成。队列:串行队列 顺序执行, 并发队列 开启线程。2.相关API1).队列全局主队列系统提供(串行)dispatch_queue_t q...原创 2019-09-23 17:42:19 · 184 阅读 · 0 评论 -
多线程一NSThread
NSThread Objective-C的线程类1)、创建线程创建线程,并自动执行[NSThread detachNewThreadSelector:@selector(doSomeThing) toTarget:self withObject:nil];创建线程,不自动执行[[NSThread alloc] initWithTarget:self selector:@selector...原创 2019-09-23 18:14:06 · 86 阅读 · 0 评论 -
多线程一 概念篇
一.相关概念1.进程进程是指在系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内。2.线程线程是进程的基本单元,一个进程(程序)的所有任务都在线程中执行。1个线程中任务的执行是串行的。如果要在这个线程中执行多个任务,那么智能一个一个地按顺序执行这些任务,也就是说,在同一时间内,一个线程只能执行一个任务3.同步不开启新的线程,...原创 2016-12-18 16:20:19 · 197 阅读 · 0 评论 -
CAEmitterLayer 粒子效果
CAEmitterLayer 粒子发射器类,父类CALayer。CALayer有很多子类。比如CAShapeLayer,CAGradientLayer等等。CAEmitterLayer管理着CAEmitterCell,类似于tableView与cell的关系相关API1.属性CAEmitterLayer的属性NSArray<CAEmitterCell *>emitterCel...原创 2019-09-26 12:10:10 · 197 阅读 · 0 评论 -
CAGradientLayer渐变
CAGradientLayer可以用来处理渐变色的图层结构,也可以用来做隐式动画,大部分时间和CAShapeLayer配和使用相关属性 常用属性 NSArray colors 颜色分配 至少要2种颜色 NSArray<NSNumber *>locations 颜色分割线,颜色之间的界限 CGPoint startPoint 颜色起点 CGPoint endPoint ...原创 2019-09-26 11:51:08 · 303 阅读 · 0 评论 -
UIBezierPath
UIBezierPath贝塞尔路径1.BezierPath可以根据路径在视图中进行渲染,经常用来进行曲线绘制,所以又称贝塞尔曲线。BezierPath和CAShapeLayer组合使用可以做一些比较炫酷的动画效果。2.相关API1).常用方法 +(instancetype)bezierPath; +(instancetype)bezierPathWithRect:(CGRect)rect...原创 2019-09-26 11:28:39 · 1033 阅读 · 0 评论 -
CALayer
CALayer1.介绍2.与view的关系3.layer能做什么4.layer图层结构5.相关api6.子类7.隐式动画1.介绍CALayer图层,如果把View比作销售方的话 那么CALaye就是生产方。layer负责绘制图层,view负责显示并接受事件。其实view能做的事layer也能做,但是唯独事件接受无法做。2.与view的关系view的内部有一个layer,当vi...原创 2019-09-25 16:28:23 · 262 阅读 · 0 评论 -
毛玻璃效果
iOS端毛玻璃效果大致有以下四种方式1.UIToolbar 7.0之前2.UIBlurEffect 8.0开发的接口3.CoreImage框架下CIFilter滤镜来做4. 通过Accelerate.framework框架计算RGB色滴值的方式1.UIToolbar UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGR...原创 2019-09-25 15:49:22 · 252 阅读 · 0 评论 -
CADisPlayLink
1.CADisPlayLink系统级定时器 ,父类NSObject.他的调用频率和设备屏幕刷新频率相同。和NSTimer一样也需要RunLoop支持。2.相关API 创建 +(CADisPlayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel将计时器加入到runloop中,必须加入到runloop中才有作用 -(vo...原创 2019-09-25 15:10:52 · 1257 阅读 · 0 评论 -
定时器的几种实现方式
**一. ios端实现定时器的方式有以下三种方式1).NSTimer优点:使用方便,满足大多数需求,应用广泛缺点:不太精准,受制于RunLoop,使用可能会造成内存泄露使用:引导页,滑动页等等2).GCD-Dispatch_source_t优点:精度较高,系统自动触发,系统级别的源,不受制于RunLoop缺点:时间事件可能被堵塞使用:验证消息等待3).CADisPlayLink...原创 2019-09-25 12:32:52 · 362 阅读 · 0 评论 -
从给定的大图中切出指定矩形区域的小图
UIImage *image1 = [UIImage imageNamed:@"1.png"];CGRect. rect = CGRectMake(0, 0,100,100); CGImageRef imageRef = CGImageCreateWithImageInRect(image1.CGImage, rect); UIImage *image = [UIImageimageWi...原创 2019-09-25 12:16:20 · 188 阅读 · 0 评论 -
CGContext
CGContext 图形上下文 通俗讲就是一块画板,栈形式存放。iOS又分多种图形上下文,其中UIView自带提供的在drawRect方法中通过 UIGraphicsGetCurrentContext获取,还有专门为图片处理的context,还有pdf的context等等均有特定的获取方法常用方法 CGContext常用方法 //获取当前上下文 CGContextRef context =...原创 2019-09-26 12:15:36 · 754 阅读 · 0 评论 -
6种手势
1.手势UIGestureRecognizerUIGestureRecognizer是一个抽象类我们不能直接使用,他有6个子类(tap,pan,swip,long,scale,raition)。他的父类NSObject。2.常用属性和函数//函数创建 -(instancetype)initWithTarget:target action(SEL)action 单独添加targe...原创 2016-12-18 16:06:18 · 305 阅读 · 0 评论 -
Socket
1.相关理论socket:顾名思义接口,套接字,他不是协议是而是一个抽象层,位置在服务层下与传输层之上的中间。socket主要解决计算机系统多个程序占用同一个端口问题。当多个程序公用一个80端口时,当有数据传输是不知道具体哪个程序接受数据的难题。如果说tcp/udp定义了数据怎么传输,那么socket就是具体执行者。socekt定义了点到点双向传输机制。他是成对出现 点a一个socket 点b一...原创 2019-09-25 11:44:13 · 191 阅读 · 0 评论