【问题标题】:Why is "print into console" much faster than ".text into label "为什么“打印到控制台”比“.text into label”快得多
【发布时间】:2016-11-10 20:52:30
【问题描述】:

我正在尝试显示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

【问题讨论】:

  • “多转”是什么意思?
  • 它在我的控制台上打印多个数据输出,例如:Pace = 0.2812560419071308 Cadence = 2.879265785217285 Pace = 0.2812560419071308 Cadence = 2.879265785217285 大约一分钟后它显示在标签上

标签: ios console uilabel swift3


【解决方案1】:

更新块在后台线程上调用,您需要在主线程上更新您的 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)")
        }
    }
}

【讨论】:

  • 谢谢丹。嗯,看来我需要在 Grand Central Dispatch 上做功课。
  • 找到了这个有用的链接:raywenderlich.com/79149/…
猜你喜欢
  • 2018-04-15
  • 2014-03-23
  • 2020-06-05
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 2014-09-17
相关资源
最近更新 更多