美文网首页iOS移动开发社区iOS分享的demoiOS地图
炫酷简单易实现的UITableViewCell&UICo

炫酷简单易实现的UITableViewCell&UICo

作者: NSL_zerom | 来源:发表于2016-11-21 20:33 被阅读724次

一成不变的基本UITableView Cell & UICollectionView Cell 滚动方式是不是已经看得不耐烦了,看的有视觉疲劳了呢?今天就让我来给大家带来一种最最简单的动画来让你们的UITableView Cell & UICollectionView Cell 看起来有点不一样吧!

首先,我们来看看UITableView

在UITableView Delegate<代理方法中有这样的一个方法>

1.jpeg

我们只需要在此方法中对即将要显示的cell做动画即可:

1.先来解释下 indexPathsForVisibleRows 代表的什么意思
返回屏幕中可见cell的数组

 @property(nonatomic, readonly) NSArray <NSIndexPath *> *indexPathsForVisibleRows

2.再来简单理解下 anchorPoint

从一个例子开始入手吧,想象一下,把一张A4白纸用图钉订在书桌上,如果订得不是很紧的话,白纸就可以沿顺时针或逆时针方向围绕图钉旋转,这时候图钉就起着支点的作用。我们要解释的anchorPoint就相当于白纸上的图钉,它主要的作用就是用来作为变换的支点,旋转就是一种变换,类似的还有平移、缩放。

继续扩展,很明显,白纸的旋转形态随图钉的位置不同而不同,图钉订在白纸的正中间与左上角时分别造就了两种旋转形态,这是由图钉(anchorPoint)的位置决定的。如何衡量图钉(anchorPoint)在白纸中的位置呢?在iOS中,anchorPoint点的值是用一种相对bounds的比例值来确定的,在白纸的左上角、右下角,anchorPoint分为为(0,0), (1, 1),也就是说anchorPoint是在单元坐标空间(同时也是左手坐标系)中定义的。类似地,可以得出在白纸的中心点、左下角和右上角的anchorPoint为(0.5,0.5), (0,1), (1,0)。

然后再来看下面两张图,注意图中分iOS与MacOS,因为两者的坐标系不相同,iOS使用左手坐标系,坐标原点在左上角,MacOS使用右手坐标系,原点在左下角,我们看iOS部分即可。

1.png 2.jpeg

像UIView有superView与subView的概念一样,CALayer也有superLayer与layer的概念,前面说到的白纸和图中的矩形可以理解为layer,书桌和图中矩形以外的坐标系可以理解成superLayer。如果各自以左上角为原点,则在图中有相对的两个坐标空间。

3.最后简单理解下position

position是layer中的anchorPoint点在superLayer中的位置坐标。因此可以说, position点是相对suerLayer的,anchorPoint点是相对layer的,两者是相对不同的坐标空间的一个重合点。
再来看看position的原始定义: The layer’s position in its superlayer’s coordinate space。 中文可以理解成为position是layer相对superLayer坐标空间的位置,很显然,这里的位置是根据anchorPoint来确定的.

代码SHOW

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSArray *array =  tableView.indexPathsForVisibleRows;
    NSIndexPath *firstIndexPath = array[0];
    
    
    //设置anchorPoint
    cell.layer.anchorPoint = CGPointMake(0, 0.5);
    //为了防止cell视图移动,重新把cell放回原来的位置
    cell.layer.position = CGPointMake(0, cell.layer.position.y);
    
    
    //设置cell 按照z轴旋转90度,注意是弧度
    if (firstIndexPath.row < indexPath.row) {
        cell.layer.transform = CATransform3DMakeRotation(M_PI_2, 0, 0, 1.0);
    }else{
        cell.layer.transform = CATransform3DMakeRotation(- M_PI_2, 0, 0, 1.0);
    }
    
    
    cell.alpha = 0.5;
    
    
    [UIView animateWithDuration:1 animations:^{
        cell.layer.transform = CATransform3DIdentity;
        cell.alpha = 1.0;
    }];

}

效果图如下:

8.01.gif

我们再来看看UICollectionView

既然我们的UITableView有这样神奇的代理方法,那么不用说,我们神奇的UICollectionView也一样有这样的方法,那么下面就让我们再一次见证神奇吧!

2.jpeg

废话不多说

代码SHOW

这里只有一点需要补充
SCREEN_W = ([UIScreen mainScreen].bounds.size.width)

-(void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row % 2 != 0) {
        cell.transform = CGAffineTransformTranslate(cell.transform, SCREEN_W/2, 0);
    }else{
        cell.transform = CGAffineTransformTranslate(cell.transform, -SCREEN_W/2, 0);
    }
    cell.alpha = 0.5;
    
    [UIView animateWithDuration:0.7 animations:^{
        cell.transform = CGAffineTransformIdentity;
        cell.alpha = 1.0;
    } completion:^(BOOL finished) {
        
        
    }];
}

效果图如下

8.02.gif

相关文章

  • 炫酷简单易实现的UITableViewCell&UICo

    一成不变的基本UITableView Cell & UICollectionView Cell 滚动方式是不是已经...

  • android splash动画效果

    本项目是实现 第一次进入项目后,开启旋转酷炫效果,分散,水波纹等球体酷炫效果,接着进入下一页面。 由于实现起来简单...

  • iOS UICollectionView之基本用法

    本篇会实现一个简单的UICollectionView,对UICollectionView做一个简单的介绍。UICo...

  • 【iOS UI篇】Label描边+发光字

    本文介绍如何给Label实现酷炫的描边+外发光效果,虽然实现简单,但是网上资料却是很少。 绘制实现描边 继承Lab...

  • Button

    Android 一行代码实现炫酷Button

  • 动画UI总结

    1.Android 从 json 文件到炫酷动画 - Lottie 实现思路和源码分析2.Android酷炫动画是...

  • AVFoundation--文字转语音

    iOS自带文字转语音功能,实现很简单,接下来我们就一起来学习这个简单酷炫的功能。 要实现文字转语音,我们只需要简单...

  • iOS开发简单实现炫酷动画

    目前移动端开发,现在的动画库差不多都需要手动去编写动画代码。这样的话,iOS 和 Android 开发者就需要分别...

  • 实现炫酷的CheckBox,就这么简单

    博文出处:实现炫酷的CheckBox,就这么简单,欢迎大家关注我的博客,谢谢! 今天给大家带来的是一款全新的Che...

  • 简单实现炫酷的滑动返回效果

    博文出处:简单实现炫酷的滑动返回效果,欢迎大家关注我的博客,谢谢!前言======在如今 app 泛滥的年代里,越...

网友评论

  • Charlie_Brown:之前项目想加写滑动动画,但是数据一多就体验很差,滑动起来卡顿
    Charlie_Brown:@NSL_zerom 模拟器卡,之前没试真机,刚试了下,真机没问题,还算流畅
    NSL_zerom:@Charlie_Brown 卡
    NSL_zerom:@Charlie_Brown 真机辣还是模拟器
  • 669f4f27f444:cell的动画,好多人都写有的,我来想看collectionCell的动画,来个Demo学习一下吧!!
    NSL_zerom:@tonylegend 迟点,给出github
  • Rickie_Lambert:没有 上传到 github 上吗?
    NSL_zerom:迟点上传,这2天比较忙
  • NSL_zerom:也许我还钻研的不够透彻

本文标题:炫酷简单易实现的UITableViewCell&UICo

本文链接:https://www.haomeiwen.com/subject/vhnupttx.html