国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

Swift實現iOS應用中短信驗證碼倒計時功能的實例分享

2020-07-26 03:22:14
字體:
來源:轉載
供稿:網友

在開始之前,我們先來了解一個概念 屬性觀測器(Property Observers):

屬性觀察器監控和響應屬性值的變化,每次屬性被設置值的時候都會調用屬性觀察器,甚至新的值和現在的值相同的時候也不例外。

可以為屬性添加如下的一個或全部觀察器:

  • willSet在新的值被設置之前調用
  • didSet在新的值被設置之后立即調用

接下來開始我們的教程,先展示一下最終效果:

2016418144945893.gif (372×180)

首先聲明一個發送按鈕:

復制代碼 代碼如下:

var sendButton: UIButton!

在viewDidLoad方法中給發送按鈕添加屬性:
復制代碼 代碼如下:

override func viewDidLoad() {
    super.viewDidLoad()

    sendButton = UIButton()
    sendButton.frame = CGRect(x: 40, y: 100, width: view.bounds.width - 80, height: 40)
    sendButton.backgroundColor = UIColor.redColor()
    sendButton.setTitleColor(UIColor.whiteColor(), forState: .Normal)
    sendButton.setTitle("獲取驗證碼", forState: .Normal)
    sendButton.addTarget(self, action: "sendButtonClick:", forControlEvents: .TouchUpInside)

    self.view.addSubview(sendButton)
}


接下來聲明一個變量remainingSeconds代表當前倒計時剩余的秒數:
復制代碼 代碼如下:

var remainingSeconds = 0

我們給remainingSeconds添加一個willSet方法,這個方法會在remainingSeconds的值將要變化的時候調用,并把值傳遞給參數newValue:
復制代碼 代碼如下:

var remainingSeconds: Int = 0 {
    willSet {
        sendButton.setTitle("驗證碼已發送(/(newValue)秒后重新獲取)", forState: .Normal)

        if newValue <= 0 {
            sendButton.setTitle("重新獲取驗證碼", forState: .Normal)
            isCounting = false
        }
    }
}


當remainingSeconds變化時更新sendButton的顯示文本。

倒計時的功能我們用NSTimer實現,先聲明一個NSTimer實例:

復制代碼 代碼如下:

var countdownTimer: NSTimer?

然后我們聲明一個變量來開啟和關閉倒計時:
復制代碼 代碼如下:

var isCounting = false {
    willSet {
        if newValue {
            countdownTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "updateTime", userInfo: nil, repeats: true)

            remainingSeconds = 10
            sendButton.backgroundColor = UIColor.grayColor()
        } else {
            countdownTimer?.invalidate()
            countdownTimer = nil

            sendButton.backgroundColor = UIColor.redColor()
        }

        sendButton.enabled = !newValue
    }
}


同樣,我們給isCounting添加一個willSet方法,當isCounting的newValue為true時,我們通過調用NSTimer的類方法
scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:創建并啟動剛才聲明的countdownTimer實例,這個實例每一秒鐘調用一次updateTime:方法:
復制代碼 代碼如下:

func updateTime(timer: NSTimer) {
     // 計時開始時,逐秒減少remainingSeconds的值
    remainingSeconds -= 1
}

當isCounting的newValue為false時,我們停止countdownTimer并將countdownTimer設置為nil。

此外我們還設置了倒計時的時間(這里為了演示時間設置為5秒)和發送按鈕在不同isCounting狀態下的樣式(這里調整了背景色)和是否可點擊。

最后實現sendButtonClick:方法,這個方法在點擊sendButton時調用:

復制代碼 代碼如下:

 func sendButtonClick(sender: UIButton) {
    // 啟動倒計時
    isCounting = true
}

完成!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 遂川县| 武威市| 金阳县| 乐平市| 德令哈市| 泸溪县| 瓦房店市| 廉江市| 道孚县| 柳州市| 永登县| 富锦市| 瓦房店市| 崇州市| 肥西县| 台中县| 保亭| 汉阴县| 凤冈县| 洮南市| 察雅县| 资溪县| 罗平县| 抚州市| 正阳县| 建阳市| 淄博市| 吉林省| 富裕县| 梅州市| 桂林市| 三门县| 河池市| 济宁市| 民县| 千阳县| 巴彦淖尔市| 北辰区| 绍兴市| 洞口县| 灵川县|