zoukankan      html  css  js  c++  java
  • 【2021】IOS技术:属性观察器(Property Observers)倒计时实现

    IOS技术 属性观察器(Property Observers) 倒计时实现

    开发工具 : Xcode 14.2
    编程语言 : Swift 5
    语法特性 : 属性观测器 (Property Observers)

    1. 属性观测器(Property Observers)简述

    属性观察器概念
    用来监控和响应属性值得变化,每次属性被设置值的时候都会调用属性观察器,即使新的值和现有值相同也不例外。

    属性观察器有两类:
    willSet :在新的值被设置之前调用
    didSet :在新的值被设置之后调用

    Code实例

       var variableI : Int = 0
       {
           willSet{
               if newValue > 0 {
                   #逻辑code#
               }
           }
           didSet
           {
               if oldValue < 10 {
                   #逻辑code#
               }
           }
       }
    

    2.倒计时实现

    实现后效果

    思路分析

    一般倒计时思路

    1、定义计时器
    2、设置倒计时总时间及计时间隔
    3、编写定时器定时执行方法,方法内处理计时业务逻辑

    属性观测器倒计时思路

    1、定义是否倒计时属性观察器
    2、定义计时时间属性观察器
    3、两个属性观察器间逻辑关联

    1、定义是否倒计时属性观察器

    通过此观察器,控制是否开启计时器

        /// 计时器
        var theTimer:Timer?
        /// 是否计时状态
        var isTiming : Bool = false
        {
            willSet
            {
                if newValue
                {
                    theTimer  = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTime(timer:)), userInfo: nil, repeats: true)
                }else
                {
                    theTimer?.invalidate()
                    theTimer = nil
                }
            }
        }
        /// 倒计时更新计时时间
        /// - Parameter timer: 计时器
        @objc func updateTime(timer:Timer)
        {
             //对计时时间秒,进行控制,一般情况是逐秒减一
        }
    
    2、定义计时时间属性观察器

    通过此观察器内,处理计时和显示的业务逻辑

        /// 剩余时间(秒)
        var remainder : Int = 0 {
            willSet
            {
                self.lblTime.text = "(newValue)"
                if newValue <= 0
                {
                    self.lblTime.text =  "计时结束"
                    isTiming = false
                }
            }
        }
    
    3、两个属性观察器间逻辑关联,完整Code

    计时时间属性观察器添加计时为0,停止计时器逻辑
    是否计时属性观察器,添加计时时间值初始化
    定义显示时间信息的UILabel

    
        /// 用作显示信息的标签
        var lblTime = UILabel.init()
        /// 当前页面使用的计时器
        var theTimer:Timer?
        /// 剩余时间(秒)
        var remainder : Int = 0 {
            willSet
            {
                self.lblTime.text = "倒计时(newValue)秒"
                if newValue <= 0
                {
                    self.lblTime.text =  "计时结束"
                    isTiming = false
                }
            }
        }
        
        /// 是否计时状态
        var isTiming : Bool = false
        {
            willSet
            {
                if newValue
                {
                    theTimer  = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTime(timer:)), userInfo: nil, repeats: true)
                    remainder = 5 //计时变量属性观察器
                    self.lblTime.text = "倒计时(remainder)秒"
                }else
                {
                    theTimer?.invalidate()
                    theTimer = nil
                }
            }
        }
        
        /// 倒计时更新计时时间
        /// - Parameter timer: 计时器
        @objc func updateTime(timer:Timer)
        {
            remainder -= 1
        }
        
        // MARK: --页面载入方法
        /// 页面载入方法
        override func viewDidLoad() {
            super.viewDidLoad()
            self.view.backgroundColor = UIColor.white
            // Do any additional setup after loading the view.
            lblTime=UILabel.init(frame: CGRect.init(x: 75, y: 7,  150, height: 15))
            lblTime.text = "倒计时5秒"
            lblTime.textColor = UIColor.gray
            lblTime.font = UIFont.systemFont(ofSize: 14)
            self.view.addSubview(lblTime)
            isTiming = true //启动计时属性观察器
        }
    
    
    自由、人生、意义、执着、残缺美 一个人认真的学习者 --------2015年3月19日
  • 相关阅读:
    Delphi XE4 FireMonkey 开发 IOS APP 发布到 AppStore 最后一步.
    Native iOS Control Delphi XE4
    Delphi XE4 iAD Framework 支持.
    using IOS API with Delphi XE4
    GoF23种设计模式之行为型模式之命令模式
    Android青翼蝠王之ContentProvider
    Android白眉鹰王之BroadcastReceiver
    Android倚天剑之Notification之亮剑IOS
    Android紫衫龙王之Activity
    GoF23种设计模式之行为型模式之访问者模式
  • 原文地址:https://www.cnblogs.com/littlemo/p/14421351.html
Copyright © 2011-2022 走看看