设为首页 加入收藏

TOP

Swift - 多个mask的动画效果(一)
2017-10-13 09:53:04 】 浏览:1187
Tags:Swift 多个 mask 动画 效果

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 {
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇ios -- 教你如何轻松学习Swift语.. 下一篇UITabBarController 基本定制

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目