UICollectionView的隐式动画的问题

UICollectionView在reloadItems或者更新子控件布局的时候,默认会附加一个隐式的动画

有时候我们并不需要这个动画,如何解决呢?

下面两种方法都可以帮你去除这些动画:

//方法一
[UIView performWithoutAnimation:^{
    在内部相关操作
}];

 //方法二
 [UIView setAnimationsEnabled:NO];
    在内部相关操作
 [UIView setAnimationsEnabled:YES];

问题还没有结束 上面介绍的方法只能解决UIView的Animation 如果你的cell中或者你的collectionview的子控件中还包含有CALayer的话,这个问题依然无法解决。

比如这样:

  - (void)layoutSubviews
    {
        [super layoutSubviews];

        self.frameLayer.frame = self.frameView.bounds;
    }

上述情况多用于自定义控件使用了layer.mask的情况 如果有这种情况 上面提到的方法是无法取消CALayer的动画的 但是解决办法也很简单

  - (void)layoutSubviews
    {
        [super layoutSubviews];

        [CATransaction begin];
        [CATransaction setDisableActions:YES];

        self.frameLayer.frame = self.frameView.bounds;

        [CATransaction commit];

    }
时间: 2024-10-14 10:48:38

UICollectionView的隐式动画的问题的相关文章

iOS边练边学--CALayer,非根层隐式动画,钟表练习

一.CALayer UIView之所以能显示在屏幕上,完全是因为他内部的一个图层 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层 当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘制,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示 UIView本身不具备显示的功能,是他内部的层才有显示功能 二.CALayer的基本使用 三.关于CALa

UICollectionViewFlowLayout的隐式动画

前几天在gitHub看到个不错的效果,就是DaiExpandCollectionView,效果如图: 所以赶紧下下来源码看看他怎么实现的,打开源码看了半天,发现他没写什么关于动画的代码啊... 经高人指点,才明白原来他是利用了UICollectionViewFlowLayout的隐式动画! 所谓隐式动画,就是系统自带的动画了,其实也不是什么高大上的东西,关键是我怎么就没想到可以这么用! 研究了半天人家的源码,基本了解了他实现的思路,然后发现他的这个库用起来比较不方便,需要继承他的collecti

CALayer创建和和如何隐藏隐式动画

//修改CALay属性会产生隐式动画 - (void)viewDidLoad { [super viewDidLoad]; // 创建图层 CALayer *layer = [CALayer layer]; layer.backgroundColor = [UIColor blueColor].CGColor; // 设置frame layer.frame = CGRectMake(100, 100, 100, 100); // 添加到控制器view的图层上面 [self.view.layer

iOS开发——图形编程OC篇&(三)CALayer隐式动画

CALayer隐式动画 在前面几讲中已经提到,每一个UIView内部都默认关联着一个CALayer,我们可用称这个Layer为Root Layer(根层).所有的非Root Layer,也就是手动创建的CALayer对象,都存在着隐式动画. * 当对非Root Layer的部分属性进行相应的修改时,默认会自动产生一些动画效果,这些属性称为Animatable Properties(可动画属性). * 列举几个常见的Animatable Properties: ? bounds:用于设置CALay

UI进阶--隐式动画

隐式动画:直接改变属性就会有动画效果,非根层才有隐式动画,根层是没有隐式动画的.根层与非根层:控件的layer属性是根层控件的layer属性的子层就是非根层隐藏动画的禁止: 1 [CATransaction begin]; 2 [CATransaction setDisableActions:YES]; 3 //设置隐式动画动画时间 4 self.myview.layer.position = CGPointMake(10, 10); 5 [CATransaction commit]; 6 布局

ios隐式动画

1. 每一个UIView内部都默认关联着一个CALayer,我们可以称这个Layer为Root Layer 2. 所有的非Root Layer,也就是手动创建的CALayer对象都存在着隐式动画 什么是隐式动画 1 当对非Root Layer的部分属性进行修改时,默认会自动产生一些动画效果 2 而这些属性称为Animatable Properties(可动画属性) 列举几个常见的Animatable Properties(可动画属性) bounds:用于设置CALayer的宽度和高度.修改这个属

隐式动画和核心动画

1. 隐式动画,只有非根层的CALayer才有隐式动画,即改变图层的属性的时候,比如大小,颜色等,会自动添加一个颜色效果, 根层:控件里面的CALayer 非根层:自己创建的CALayer,不依附控件存在的CALayer 隐式动画的使用场景不多 2. 核心动画: Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能.Core Animation可以用在Mac OS X和iOS平台.Core

iOS Core Animation Advanced Techniques(四):隐式动画和显式动画

隐式动画 按照我的意思去做,而不是我说的. -- 埃德娜,辛普森 我们在第一部分讨论了Core Animation除了动画之外可以做到的任何事情.但是动画师Core Animation库一个非常显著的特性.这一章我们来看看它是怎么做到的.具体来说,我们先来讨论框架自动完成的隐式动画(除非你明确禁用了这个功能). 事务 Core Animation基于一个假设,说屏幕上的任何东西都可以(或者可能)做动画.动画并不需要你在Core Animation中手动打开,相反需要明确地关闭,否则他会一直存在.

显示动画,隐式动画、关键帧动画

概要 一些简单的动画代理学习例子,包括显示.隐式.关键帧.关键帧路径四类动画.(感觉这个动画太复杂,学习简单的例子没继续了) 结果展示 流程概要 见代码 主要代码 // // ViewController.m // Animation // // Created by arbboter on 14/12/20. // Copyright (c) 2014年 arbboter. All rights reserved. // #import "ViewController.h" @int