Swift 数字滚动效果

网上找到一个数字滚动的demo如下请添加图片描述
请添加图片描述
原 demo 地址 地址

是OC版的,我照着人家的样,复制了一套Swift代码,如下:

//
//  IWScrollNumberLabel.swift
//  IWMe
//
//  Created by 磊怀 on 2022/12/27.
//

import UIKit

enum ScrollAnimationDirection : Int {
   
   
    case Up = 0
    case Down = 1
    case Number = 2
}

public class IWScrollNumberLabel: UIView {
   
   
    
    public var displayerNumber : Int32 = 0
    
    /*
     tip:
     * 通用1-4:是动态frame,无需设置frame,动态创建位数;
     * 通用5-7:是限定位数,是以位数限定数值最大值;
     * 通用8-9:是更新数值,设定动画时间等;
     */
    
    /** 以下动态设置位数 **/
    
    /**
     通用1
     
     @param originNumber 数值
     @param size 字体大小
     @return return value description
     */
    public init(originNumber : Int32 , fontSize : CGFloat) {
   
   
        super.init(frame: CGRect.zero)
        self.initData(originNumber, fontSize, .mainColorBlack(), 0)
    }
    
    /**
     通用2
     
     @param originNumber 数值
     @param size 字体大小
     @param color 字体颜色
     @return return value description
     */
    public init(originNumber : Int32 , fontSize : CGFloat , textColor : UIColor) {
   
   
        super.init(frame: CGRect.zero)
        self.initData(originNumber, fontSize, textColor, 0)
    }
    
    /**
     通用3
     
     @param originNumber 数值
     @param font 字体font
     @return return value description
     */
    public init(originNumber : Int32,font : UIFont) {
   
   
        super.init(frame: CGRect.zero)
        self.initData(originNumber, font, .mainColorBlack(), 0)
    }
    
    /**
     通用4
     
     @param originNumber 数值
     @param font 字体font
     @param color 字体颜色
     @return return value description
     */
    public init(originNumber : Int32,font : UIFont,textColor : UIColor) {
   
   
        super.init(frame: CGRect.zero)
        self.initData(originNumber, font, textColor, 0)
    }
    
    /** 以下限定位数 **/
    /**
     通用5
     
     @param originNumber 数值
     @param size 字体大小
     @param rowNumber 位数
     @return return value description
     */
    public init(originNumber : Int32 , fontSize : CGFloat , rowNumber : Int) {
   
   
        super.init(frame: CGRect.zero)
        self.initData(originNumber, fontSize, .mainColorBlack(), rowNumber)
    }
    
    /**
     通用6
     
     @param originNumber 数值
     @param size 字体大小
     @param color 字体颜色
     @param rowNumber 位数
     @return return value description
     */
    public init(originNumber : Int32 , fontSize : CGFloat ,textColor : UIColor , rowNumber : Int) {
   
   
        super.init(frame: CGRect.zero)
        self.initData(originNumber, fontSize, textColor, 0)
    }
    
    /**
     通用7
     
     @param originNumber 数值
     @param font 字体设置
     @param color 字体颜色
     @param rowNumber 位数
     @return return value description
     */
    public init(originNumber : Int32 , font : UIFont ,textColor : UIColor , rowNumber : Int) {
   
   
        super.init(frame: CGRect.zero)
        self.initData(originNumber, font, textColor, rowNumber)
    }
    
    /** 以下是更新数值 **/
    /**
     通用8
     
     @param number 数值+、-量
     @param animated animated description
     */
    public func changeToNumber(number : Int32 , animated : Bool) -> Void {
   
   
        self.changeToNumber(number, 0, animated)
    }
    
    /**
     通用9

     @param number 数值+、-量
     @param interval 动画时间设置
     @param animated animated description
     */
    public func changeToNumber(number : Int32 , interval : CGFloat , animated : Bool) -> Void {
   
   
        self.changeToNumber(number, interval, animated)
    }
    
    // Attribute Key
    private let keyRepeatCount : String = "repeatCount"
    private let keyStartDuration : String = "startDuration"
    private let keyCycleDuration : String = "cycleDuration"
    private let keyEndDuration : String = "endDuration"
    private let keyScrollCell : String = "scrollCell"
    private let keyDisplayNumber : String = "displayNumber"
    private let keyStartDelay : String = "startDelay"

    // Task Key
    private let keyTaskDisplayNumber : String = "displayNumber"
    private let keyTaskChangeNumber : String = "changeNumber"
    private let keyTaskInterval : String = "interval"
    
    private let normalModulus : CGFloat = 0.3
    private let bufferModulus : CGFloat = 0.7
    
    private var cellArray : [UILabel] = Array.init()
    private var fontSize : CGFloat = 0.0
    private var rowNumber : Int = 0
    private var taskArray : [Dictionary<String,CGFloat>] = Array.init()
    private var isAnimation : Bool = true
    private var cellWidth : CGFloat = 0.0
    private var cellHeight : CGFloat = 0.0
    private var finishedAnimationCount : Int = 1
    private var maxRowNumber : Int = 0
    private var textColor : UIColor = UIColor.mainColorBlack()
    private var font : UIFont = UIFont.systemFont(ofSize: 16, weight: .bold)
    
    private func initData(_ originNumber : Int32 , _ fontSize : CGFloat , _ textColor : UIColor , _ rowNumber : Int) -> Void {
   
   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值