iOS开发iOS进阶iOS

卡片动画初体験

2015-07-17  本文已影响2352人  伯恩的遗产

这次的示例是我看过了 这篇Blog 后自己实现的。那篇 blog 里只写了个开头,后边的内容好像没时间写,但是我实现后感觉有很多问题。所以贴到这里,希望有人能指导一下。

ps: 题目没有别的意思,只是单纯觉得这3个字放在这里特别和谐,真的,我反正是信了。

效果图

分析

  1. 包含若干个子视图,每层子视图越往后,宽度越小,y值越小,不透明度越小,逐层递减。

  2. 需要创建 2 个手势,一点单击手势 Tap,一个滑动手势 Pan。

  3. 滑动的时候,每层卡片都要往某个方向移动,并且每层卡片移动的距离也要递减。

  4. 滑动的时候,还需要旋转,并且也是逐层递减的。

  5. 滑动超过一个距离后,第一张卡片移除屏幕,其他的卡片依次先前移动。

  6. 单击的时候,需要翻转第一张视图。

激动人心的代码部分

创建卡片

这些卡片,我采用 UIImageView 代替,也就是说首先创建若干个 imageView

为了重构方便,我将创建卡片分为 3 个方法,依次是:

滑动手势

手势中,有两个地方很重要,一个是滑动中,一个是滑动结束。在滑动中需要实时改变每个卡片的位置,还好监测是否超过规定距离,如果超过距离需要移除最上层的卡片,并让其他卡片复位,再然后让每层卡片向前移动,最后创建一个新的卡片添加到最后。在滑动结束后需要让每个卡片复位。

滑动中

滑动结束

存在的问题

  1. 效果感觉不是很流畅,大家可以下载源码感受一下,估计是移动过程中的代码有些麻烦,太过复杂。

  2. 这里的重用数组其实就装了一个卡片,因为移除一个添加一个,所以感觉没必要这么重用。谁有好点的想法希望告诉我一下。

  3. 最重要的一点,点击翻转效果,我在点击监听方法中是这么写的:

    UIView.animateWithDuration(0.5, animations: { () -> Void in
        imageView.layer.transform = CATransform3DRotate(imageView.layer.transform, CGFloat(M_PI), 0, 1, 0)
    })
    

    运行之后却是下面这个叼样子!目前还不知道为什么会这样,所以谁知道为什么或者有什么好的方法实现点击翻转效果,请一定要告诉我。

    点击后的效果

更新

上一篇 下一篇

猜你喜欢

热点阅读