首页 > 解决方案 > Swift - Scheduled Timer 未按预期触发

问题描述

我定义并触发了一个时间间隔为 0.1 秒(这意味着每秒 10 次)的预定计时器,并将选择器设置为调用 VNDetectFaceLandmarksRequest 的完成处理程序的函数。

这在 iPhone 6s 和 iPhone 7 上可以正常工作。但是,当我在 iPad mini 2 上进行测试时,每秒只会调用 1 次请求。

是因为 iPad mini 2 太旧,没有足够的系统资源来频繁调用它还是其他原因?

下面是相关代码:

var handler: VNImageRequestHandler?
var request: VNDetectFaceLandmarksRequest?    

faceTrackingTimer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.callHandler), userInfo: nil, repeats: true)   
faceTrackingTimer.fire()

// This is called about 30 times per second (frame capturing rate)
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
    guard let pixelBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }
    handler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, orientation: .right, options: [:])
    request = VNDetectFaceLandmarksRequest { (request, error) in
    guard let results = request.results as? [VNFaceObservation] else { return }
        // process results here
    }
}

// Problem: this is called ONLY ONCE PER SECOND    
@objc func callHandler() {
    print("Will call handler ", Date()) 
    do {
    guard let handler = handler, let request = request else { return }
        try handler.perform([request])
    } catch let requestError {
        print(requestError.localizedDescription)
    }
}

标签: iosswifttimerevent-handling

解决方案


推荐阅读