Swift - 多个mask的动画效果

效果

源码

https://github.com/YouXianMing/Swift-Animations

//
//  TranformFadeView.swift
//  Swift-Animations
//
//  Created by YouXianMing on 16/8/20.
//  Copyright © 2016年 YouXianMing. All rights reserved.
//

import UIKit

enum TranformFadeViewAnimatedType : Int {

    case Fade, Show
}

// MARK: TranformFadeView

class TranformFadeView: UIView {

    // MARK: Convenience init.

    convenience init(frame: CGRect, verticalCount : Int, horizontalCount : Int, fadeDuradtion : NSTimeInterval, animationGapDuration : NSTimeInterval) {

        self.init(frame: frame)
        self.verticalCount        = verticalCount
        self.horizontalCount      = horizontalCount
        self.fadeDuradtion        = fadeDuradtion
        self.animationGapDuration = animationGapDuration
        self.makeConfigEffective()
    }

    // MARK: Properies & funcs.

    /// The content imageView‘s image.
    var image : UIImage? {

        get { return imageView.image}
        set(newVal) { imageView.image = newVal}
    }

    /// The content imageView‘s contentMode.
    var imageContentMode: UIViewContentMode {

        get { return imageView.contentMode}
        set(newVal) { imageView.contentMode = newVal}
    }

    /// Vertical direction view‘s count.
    var verticalCount        : Int!

    /// Horizontal direction view‘s count.
    var horizontalCount      : Int!

    /// One of the maskView‘s animation duration, default is 1.0
    var fadeDuradtion        : NSTimeInterval! = 1

    /// The animation duration two subViews from allMaskView, default is 0.2
    var animationGapDuration : NSTimeInterval! = 0.2

    /**
     Make the config effective.
     */
    func makeConfigEffective() {

        if verticalCount < 1 || horizontalCount < 1 {

            return;
        }

        if allMaskView != nil {

            allMaskView.removeFromSuperview()
        }

        countNumArray.removeAll()

        allMaskView = UIView(frame: bounds)
        maskView    = allMaskView

        let height         = bounds.size.height
        let width          = bounds.size.width
        let maskViewHeight = height / CGFloat(verticalCount)
        let maskViewWidth  = width  / CGFloat(horizontalCount)

        var count : Int = 0
        for horizontal in 0 ..< horizontalCount {

            for vertical in 0 ..< verticalCount {

                let frame                = CGRectMake(maskViewWidth * CGFloat(horizontal), maskViewHeight * CGFloat(vertical), maskViewWidth, maskViewHeight)
                let maskView             = UIView(frame: frame)
                maskView.tag             = maskViewTag + count
                maskView.backgroundColor = UIColor.blackColor()
                allMaskView.addSubview(maskView)

                count = count + 1;
            }
        }

        maskViewCount = count

        for i in 0 ..< maskViewCount {

            countNumArray.append(i)
        }
    }

    /**
     Start transform to fade or show state.

     - parameter animated:    Animated or not.
     - parameter transformTo: Show or fade.
     */
    func start(animated animated : Bool, transformTo : TranformFadeViewAnimatedType) {

        if animated == true {

            let tmpFadeDuradtion = fadeDuradtion        < 0 ? 1.0 : fadeDuradtion
            let tmpGapDuration   = animationGapDuration < 0 ? 0.2 : animationGapDuration

            for i in 0 ..< maskViewCount {

                let tmpView = allMaskView.viewWithTag(maskViewTag + i)

                UIView.animateWithDuration(tmpFadeDuradtion, delay: NSTimeInterval(i) * tmpGapDuration, options: .CurveLinear, animations: {

                    switch transformTo {

                    case .Fade :
                        tmpView?.alpha = 0.0

                    case .Show :
                        tmpView?.alpha = 1.0
                    }

                    }, completion: nil)
            }

        } else {

            for i in 0 ..< maskViewCount {

                let tmpView = allMaskView.viewWithTag(maskViewTag + i)

                    switch transformTo {

                    case .Fade :
                        tmpView?.alpha = 0.0

                    case .Show :
                        tmpView?.alpha = 1.0
                    }
            }
        }
    }

    // MARK: System methods & Private properties

    private var imageView     : UIImageView!
    private var allMaskView   : UIView!
    private var maskViewCount : Int!
    private var countNumArray : [Int]!
    private var maskViewTag   : Int = 1000

    override init(frame: CGRect) {

        super.init(frame: frame)

        imageView                     = UIImageView(frame: bounds)
        imageView.layer.masksToBounds = true
        countNumArray                 = [Int]()
        self.addSubview(imageView)
    }

    required init?(coder aDecoder: NSCoder) {

        fatalError("init(coder:) has not been implemented")
    }
}
时间: 2024-11-12 16:41:43

Swift - 多个mask的动画效果的相关文章

Swift - 用UIScrollView实现视差动画效果

效果 源码 https://github.com/YouXianMing/Swift-Animations // // MoreInfoView.swift // Swift-Animations // // Created by YouXianMing on 16/8/18. // Copyright © 2016年 YouXianMing. All rights reserved. // import UIKit class MoreInfoView: UIView { var imageV

Swift - 使用atlas图集实现动画效果(SpriteKit游戏开发)

我们通常继承SKSpriteNode来实现游戏中的元素,除了可以使用图片作为纹理皮肤外.我们还可以使用动画纹理集来实现动画播放. 动画纹理集的制作也很简单,首先要有一套动画序列图,然后把它们放到一个文件夹下,最后把文件夹改名为*.atlas后缀就行了. 下面通过一个“神经猫”动画元件来演示: --- 神经猫类 Cat.swift --- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

iOS开发——动画篇Swift篇&amp;动画效果的实现

Swift - 动画效果的实现 在iOS中,实现动画有两种方法.一个是统一的animateWithDuration,另一个是组合出现的beginAnimations和commitAnimations.这三个方法都是类方法. 一,使用animateWithDuration来实现动画 (1)此方法共有5个参数: duration:动画从开始到结束的持续时间,单位是秒 delay:动画开始前等待的时间 options:动画执行的选项.里面可以设置动画的效果.可以使用UIViewAnimationOpt

Swift - 使用CABasicAnimation实现动画效果

1,CABasicAnimation类只有三个属性: fromValue:开始值 toValue:结束值 Duration:动画的时间 2,通过animationWithKeyPath键值对的方式设置不同的动画效果 transform.scale transform.scale.x transform.scale.y transform.rotation.z opacity margin zPosition backgroundColor cornerRadius borderWidth bou

Swift版本仿网易云音乐播放音乐动画效果

个人技术博客站欢迎您 创建一个继承于UIView的视图我们叫他XTActivityView /// 立方柱的个数 var numberOfRect = 0; /// 立方柱的颜色 var rectBackgroundColor: UIColor? /// 立方柱初始化大小 var defaultSize: CGSize? /// 立方柱之间的间距 var space: CGFloat = 0.0 进行初始化 override init(frame: CGRect) { super.init(fr

Swift-贝赛尔曲线画扇形、弧线、圆形、多边形——UIBezierPath实现App下载时的动画效果

上篇文章提到了使用贝赛尔曲线实现画图板(传送门),顿时就对贝赛尔曲线兴趣大增有木有. 之所以接触贝赛尔曲线,多亏了师父.周五下班前师父给我留了个任务,让我周末回家研究研究 iPhone 手机下载 App 时的效果是怎么实现的(不知道效果的童鞋请看下图) 如果所示,下载 App 的过程效果,就是 App 图标中间有一个顺时针旋转的圆圈.当一圈走完时 App 就下载完成了. 刚给我交代这个任务的时候,顿时感觉好难有木有...(主要是因为那个时候我还不知道贝赛尔曲线) 抛开一切复杂内容不谈,我们今天只

Swift - 动画效果的实现方法总结(附样例)

在iOS中,实现动画有两种方法.一个是统一的animateWithDuration,另一个是组合出现的beginAnimations和commitAnimations.这三个方法都是类方法. 一,使用animateWithDuration来实现动画 (1)此方法共有5个参数: duration:动画从开始到结束的持续时间,单位是秒 delay:动画开始前等待的时间 options:动画执行的选项.里面可以设置动画的效果.可以使用UIViewAnimationOptions类提供的各种预置效果 a

Swift: 打造滑动解锁文字动画

最近木事,找出来玩了玩facebook的paper.到处都是那个"slide to unlock your phone"的效果啊.忽闪忽闪的小有点炫酷的感觉.于是准备研究一下.木有想到的是居然可以用CAGradientLayer和一个小小的动画就可以实现这个效果."滑动解锁"的效果: 当然啦,首先你需要显示出这个"滑动解锁"的文本.这里咱们就用一个简单的UILabel来解决这个问题. var textExampleLabel: UILabel!

iOS的GIF动画效果实现

引言:GIF图像格式是常见的一种动态图片格式,无论是在Web端还是在移动端都经常遇到,但是考虑目前iOS还无法原生展现GIF图片,而对于GIF的原生支持暂时也没有像JPG.PNG等图像格式支持得这么全面,因此本文从图片的合成与分解角度来为大家讲解GIF的知识,结合ImageIO框架可以更方便地实现GIF图片的合成与分解. 本文选自<iOS动画--核心技术与案例实战>. GIF在iOS中的使用场景 GIF在iOS中的使用场景有以下三个方面. (1)GIF图片分解为单帧图片. (2)一系列单帧图片