ios - 为什么 "print into console"比 ".text into label "快得多

标签 ios console uilabel swift3

我正在尝试显示 CMPedometer 的节奏和配速数据。当我在连接手机的情况下运行该应用程序时,它会立即通过 print("...") 函数将数据输出写入控制台,但需要多次轮流才能将数据显示在UILabel。 我怎样才能尽快获取数据以便使用它们?

最好的,扎克

import UIKit
import CoreMotion

class ViewController: UIViewController {
    let pedometer = CMPedometer()
    @IBOutlet weak var paceLabel: UILabel!
    @IBOutlet weak var cadenceLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        guard CMPedometer.isCadenceAvailable() && CMPedometer.isPaceAvailable() else{
            print("Pace and cadence data are not available")
            return
        }         
        let oneWeekAgo = NSDate(timeIntervalSinceNow: -(7 * 24 * 60 * 60))
        pedometer.startUpdates(from: oneWeekAgo as Date) {data, error in
            guard let pData = data , error == nil else{
                return
            }
            //The current pace of the user, measured in seconds per meter. (1 step = 83cm?)
            if let pace = pData.currentPace{
                print("Pace = \(pace)")
                self.paceLabel.text = "Pace = \(round(Double(pace))*10/10)"
            }
            //The rate at which steps are taken, measured in steps per second.
            if let cadence = pData.currentCadence{
                self.cadenceLabel.text = "Cadence = \(cadence))"
                print("Cadence = \(cadence)")
            }
        }// -----------------oneWeekAgo        
    }// -----------------ViewDidLoad

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}//-------------------- UIViewController

最佳答案

更新 block 在后台线程上调用,您需要在主线程上更新您的 UI。将 UI 更新调用打包回主线程:

Dispatch.main.async {
    //The current pace of the user, measured in seconds per meter. (1 step = 83cm?)
    if let pace = pData.currentPace{
        print("Pace = \(pace)")
        self.paceLabel.text = "Pace = \(round(Double(pace))*10/10)"
    }

    //The rate at which steps are taken, measured in steps per second.
    if let cadence = pData.currentCadence{
        self.cadenceLabel.text = "Cadence = \(cadence))"
            print("Cadence = \(cadence)")
        }
    }
}

关于ios - 为什么 "print into console"比 ".text into label "快得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40536788/

相关文章:

ios - 不兼容的指针类型从NSString分配给“UITextField”

Swift 标签不适合文本

ios - 围绕 UILabel 的每个单词添加边框

iOS:确定另一个应用程序是否处于事件状态

ios - 身份检查器中的模块字段用于什么?

windows - Tor 控制台输出问题 : running tor --hash-password gives no result

linux - shell 脚本中的闪烁文本 (Putty;Linux)

php - 如何从 web 在 yii2 中运行控制台命令

ios - 当有足够的空间时,UILabel 自动换行会在下一行添加额外的单词

ios - 如何在不加载 UIImage 的情况下获取图像方向?