• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift-多个mask的动画效果

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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")
    }
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap