简述 本文将讲述在iOS开发中如何根据某个UIView来获取所属的UIViewController UIResponder 在iOS中UIResponder类是专门用来响应用户的操作处理各种事件的,包括触摸事件...我们知道UIApplication、UIView、UIViewController这几个类是直接继承自UIResponder,所以这些类都可以响应事件。...当然我们自定义的继承自UIView的View以及自定义的继承自UIViewController的控制器都可以响应事件。...通过响应链查找视图控制器,nextResponder获取下一个响应者,响应者顺序为: ?...20170512174229676.png 代码 - (UIViewController *)getControllerFromView:(UIView *)view { // 遍历响应者链。
动效 ps:本文属于新手向的动画入门文章 从登录动画说起 ---- 很长一段时间以来,我都在基于CALayer层进行动画实现,却忽略了UIKit提供给我们的动画接口。...在我们了解这些强大的接口前,我们先来看看第一个效果:在用户打开app要进行登录的时候,账户和密码输入框从屏幕的左边进入,接着登录按钮出现。 ?...在viewDidAppear:中运行这段代码,你会看到文本框从左侧滑动,按钮也渐变显示出来的,但是跟我们要的结果不太一样 —— 三个动画没有错开,效果并不那么的好看。...比如我尝试着让某个UICollectionView的分类按钮从屏幕下方弹入视图的时候;又或者我让这个小球弹到右下角,以提示用户该如何操作: ?...本文作为动画篇的第一篇博客,目的是为了从最简单的UIView动画讲起,慢慢的拓展其它的动画,也希望能起到抛砖引玉的作用。
要注意的是, Core Animation是直接作用在CALayer上的.并非UIView。...CAAnimation继承结构 ---- 一、 CAAnimation CAAnimation类是所有动画对象的父类,负责控制动画的持续时间和速度等,是个抽象类,不能直接使用,应该使用它具体的子类...*)anim;核心动画开始时执行 (2)- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;核心动画执行结束后调用 --...相应属性的初始值 toValue : keyPath相应属性的结束值,到某个固定的值(类似transform的make含义) 注意:随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue...的类方法实现转场动画 单视图: + (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(
如下图: 5.5帧率变化探索 所有的帧提交操作最终都是在 Render Server 触发的,也就是只有从 Render Server 统计FPS才是最终的实际 FPS,那我们要怎么统计呢?...com.apple.CoreAnimation.CAWindowServer.DisplayChanged 的通知,QuartCore 会在启动时注册这个通知,并收到通知后通过 mach port 通信获取当前注册的帧速率值...但是在我们直播场景中,一共有如下几种场景的动画提交: 1)UIView block 动画; 2)UIScrollView scroll 动画; 3)NSTimer 动画; 4)CAAnimation。...如下: 8、问题扩展 我们通过一些奇怪的绕过方式间接的实现了对所有基于 UIView block animation api 调用的动画以及 CAAnimation api 调用的动画都实现了动态降帧,...方案如下: 最终也一样取得了GPU 同比下降28%甚至更高的效果,有效减轻了过热时的系统负载和功耗,并且从肉眼上基本无法分辨出差异。
好在呢,苹果已经想到程序员也是要撩妹的这个需求,所以为我们提供了CAAnimation这个好东西,当然还贴心的帮我们又进行了一层封装,那就是UIView得animate相关的方法了。...CALayer与UIView CAAnimation与UIView animate ---- CALayer 为什么会先说CALayer呢?以为CAAimation实际上操作的都是Layer层。...数值就是从锚点到layer的左上角(类比UIView的origin)的 横向/纵向 距离占layer得 width/height 的比例。 锚点 contents,寄宿图。...convertTime是获取本地时间。该方法有两个参数,第一个是时间,第二个是时间所对应的图层。当第二个参数为nil时,则返回的就是第一个参数的值。 这样我们就能得到一个绝对时间。...图层树就是想UIView中的subview、superview一样的图层的树状逻辑。 他在CAAnimation中的各属性值是不随着动画而实时变化的。
时间属性的综合应用.png 三、CAAnimation基类 CAAnimation作为所有动画类型父类,是一个抽象类;我们不能直接使用CAAnimation类,而是使用它的子类;关于它的定义如下: @interface...kCAFillModeForwards; animation.delegate = self; UIColor *randomColor = [UIColor randomColor]; //自定义获取随机色的方法...kCAFillModeForwards; animation1.delegate = self; UIColor *randomColor = [UIColor randomColor]; //自定义获取随机色的方法...animation_opacity"]){ } } 注意:使用唯一key参数这种方法,必须设置removeOnCompletion为NO,否则通过animaitonForKey:获取的...CAAnimation对象为空对象无法进行比较。
1. iOS动画 总的来说,从涉及类的形式来看,iOS动画有:基于UIView的仿射形变动画,基于CAAnimation及其子类的动画,基于CG的动画。这篇文章着重总结前两种动画。 2....UIView动画 设置UIView形变动画有两种常见用到的属性,.frame,.transform,所以有的人也可以分别称之为: ① frame动画 ② transform动画 这两种动画只需要在动画语法中适当的位置...,基于UIView和CALayer的属性设置变化值即可。...这种动画,不需要 调用核心动画CAAnimation里面的专用类和API。...CAAnimation核心动画 CAAnimation——所有动画对象的父类 3.1 设置动画的一种语法形式 addAnimation /** * 抖动效果 */ -(void)shakeAnimation
1、CALayer 1)、在ios中,能看得见摸得着的东西基本上都是UIView, 比如按钮、文本标签、文本输入框、图标等,这些都是UIView 2)、UIView之所以能显示在屏幕上,完全是因为它内部的一个图层...3)、在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层:@property (nonatomic,readonly,...UIView的显示。...4)、CAAnimation继承结构,紫色虚线表示继承自某类,红色虚线表示遵守某个协议 : ?...fromValue : keyPath相应属性的初始值 toValue: keyPath相应属性的结束值 动画过程说明: 随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue
Animatable. */ @property CATransform3D transform; 如果一个属性被标记为Animatable,那么它具有以下两个特点: 1、直接对它赋值可能产生隐式动画; 2、我们的CAAnimation...它会让它的delegate(没错CALayer拥有一个属性叫做delegate)调用actionForLayer:forKey:来获取一个返回值,这个返回值在声明的时候是一个id对象,当然在运行时它可能是任何对象...如果返回的对象是一个nil,则进行默认的隐式动画; 如果返回的对象是一个NSNull null ,则CALayer不会做任何动画; 如果是一个正确的实现了CAAction协议的对象,则CALayer用这个对象来生成一个CAAnimation...有趣的是,如果这个CALayer被一个UIView所持有,那么这个CALayer的delegate就是持有它的那个UIView。...实际上结果大家都应该能想得到:在UIView的动画block外面,UIView的这个方法将返回NSNull,而在block里面,UIView将返回一个正确的CAAction对象(这里将不深究UIView
核心动画和UIView动画的对比:UIView动画可以看成是对核心动画的封装,和UIView动画不同的是,通过核心动画改变layer的状态(比如position),动画执行完毕后实际上是没有改变的(表面上看起来已改变...CAPropertyAnimation :是CAAnimation的子类,它支持动画地显示图层的keyPath,一般不直接使用。...那么你会疑惑为什么这不是默认的选择,实际上当使用UIView的动画方法时,他的确是默认的,但当创建CAAnimation的时候,就需要手动设置它了。...cameraIrisHollowClose",//摄像头关闭效果,动画方向不可控 subtype:设置转场方向 //转场方向,系统一共提供四个方向: //kCATransitionFromRight//从右开始...//kCATransitionFromLeft//从左开始 //kCATransitionFromTop//从上开始 //kCATransitionFromBottom//从下开始 startProgress
kCATransitionFromRight 从右侧进入 kCATransitionFromLeft 从左侧进入 kCATransitionFromTop 从顶部进入 kCATransitionFromBottom...从底部进入 动画的使用 动画使用步骤: 初始化一个动画对象(CAAnimation)并设置一些动画相关属性....CALayer中很多属性都可以通过CAAnimation实现动画效果, 包括opacity, position, transform, bounds, contents等,具体可以在API文档中查找 通过调用...UIView _demoView.frame = CGRectMake(0, SCREEN_HEIGHT/2-50, 50, 50); [UIView animateWithDuration:1.0f...kCATransitionFromRight 从右侧进入 kCATransitionFromLeft 从左侧进入 kCATransitionFromTop 从顶部进入 kCATransitionFromBottom
可以给用户增加一些独特的体验感,估计也有许多的和我一样的,看着那些觉得不错的动画,也就只能流口水的孩子,毕竟可能不知道从哪里下手去写!...(1) CALayer 实际上UIView是对CALayer封装,在CALayer的基础上再添加交互功能。UIView的显示必须依赖于CALayer。...具体讲CAlayer的属性 (2) UIBezierPath (贝塞尔曲线) (3) CAAnimation (重点) 首先 CAAnimation 可以分为以下几类:...也是本系列的接下来的内容 CAAnimationGroup 组动画,支持多个CABasicAnimation或者CAKeyframeAnimation动画同时执行 下面链接的文章能帮助大家很好的学习 CAAnimation...和CAlayer: 总接来说就是如下几点: 每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提供。
每一个UIView视图内部都封装了一个CALayer图层,我们通过UIView的layer属性访问这个图层。...其实对于UIView来说负责内容展示的就是它内部的CALayer,UIView只不过是将自身的展示任务交给了内部的CALayer完成,而它还肩负着一些其它的任务,比如说用户的交互响应,提供一些Core...从开始延迟几秒的话,设置为【CACurrentMediaTime() + 秒数】 的方式 duration 动画的时长 speed 动画运行速度(如果把动画的duration设置为3秒,而speed设置为...可使用下面示例来获取图层的当前本地时间。CACurrentMediaTime函数返回计算机的当前时钟时间,该方法将本机时间并转换为图层的本地时间。...获取图层的当前本地时间 CFTimeInterval localLayerTime = [myLayer convertTime:CACurrentMediaTime()fromLayer:nil];
@interface NSObject (CAAnimationDelegate) - (void)animationDidStart:(CAAnimation *)anim; - (void)animationDidStop...:(CAAnimation *)anim finished:(BOOL)flag; @end path:关键帧动画中的执行路径 type : 过渡动画的动画类型,系统提供了四种过渡动画。...kCATransitionFromLeft 从左侧进入 kCATransitionFromTop 从顶部进入 kCATransitionFromBottom 从底部进入 三、IOS动画的调用方式 第一种...:UIView 代码块调用 _demoView.frame = CGRectMake(0, SCREEN_HEIGHT/2-50, 50, 50); [UIView animateWithDuration...subtype:动画过渡方向 kCATransitionFromRight 从右侧进入 kCATransitionFromLeft 从左侧进入 kCATransitionFromTop 从顶部进入 kCATransitionFromBottom
iOS开发CoreAnimation解读之四——Layer层动画内容 一、引言 通过前几篇博客的介绍,我们可以了解到layer层可以设置许多与控件UI相关的属性,并且对于iOS开发,UIView...二、CAAnimation动画体系的介绍 CAAnimation是CoreAnimation框架中执行动画对象的基类,下面有一张图,是我手画的,不太美观,但是可以将与CAAnimation...从上图中可以看到,从CAAnimation中继承出三个子类,分别是用于创建属性动画的CAPropertyAnimation,创建转场动画的CATransition和创建组合动画的CAAnimationGroup...1.CAAnimation属性和方法 CAAnimation作为动画对象的基类,其中封装了动画的基础属性,如下: //通过类方法创建一个CAAnimation对象 + (instancetype)animation...阻尼系数 默认为10 必须大于0 这个值越大 回弹的幅度越小 @property CGFloat damping; //初始速度 @property CGFloat initialVelocity; //获取动画停下来需要的时间
dispatch_get_main_queue(), ^{ [weakSelf reStartDevice]; }); I、demo下载 从CSDN...:(UIView*)inView; .m #import "JoinCartAnimationTool.h" @interface JoinCartAnimationTool () /**...:(UIView*)inView { self.endView = boxImgV; CGRect rect = [imageView.superview convertRect...layerAnimation removeFromSuperlayer]; } #pragma mark - CAAnimationDelegate - (void)animationDidStart:(CAAnimation...*)anim{ } - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { // 完成可以使用比例动画
或者修改 rootViewController参数 2、弹出框: import UIKit class ViewController:UIViewCont...
之前做的性能监控 获取后台数据大概有100ms的延迟。 故而想用从redis获取数据替换现有的mysql获取数据方式,看是否能有提升。...ret_dic['add_in']), 'add_out': json.dumps(ret_dic['add_out'])}) net_io() 2.前台页面展示从之前的数据库查询...,转为从redis获取: #!
YES;// 默认隐藏 } return _sectorView; } 与下载进度配合使用,定义进度属性 @interface ICSectorProgressView : UIView...bezierPathWithArcCenter:origin radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; // 从弧线结束为止绘制一条线段到圆心...这样系统会自动闭合图形,绘制一条从圆心到弧线起点的线段。...UIColor blackColor] set]; // 设置扇形的填充模式 [sectorPath fill]; } 2、数据下载完成后外围灰边框动画 画出默认的边框,并加载到uiview...kCAFillModeForwards; return animation; } 动画代理中该结束后,把该控件removeFromSuperview - (void)animationDidStop:(CAAnimation
领取专属 10元无门槛券
手把手带您无忧上云