Swift,swiftcode

來源:互聯網
上載者:User

Swift,swiftcode

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 UIKitenum TranformFadeViewAnimatedType : Int {        case Fade, Show}// MARK: TranformFadeViewclass 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")    }}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.