ios - 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)
}
}
解决方案
推荐阅读
- angular - Does Material Angular's side bar supports "lock in" once opening?
- reactjs - Reset React contexts after use
- python - Inaccurate classification predictions by KNN algorithm
- sql-server - SQL 中未绑定多部分标识符列
- javascript - Update all the users specific property with http trigger
- json - 如何停止 JSON 响应打印 NIL?- 斯威夫特
- sql-server - 在 SQL 联合中为一个表提供 Case 语句
- sql - postgresql:尝试创建表时关系“table_name”不存在
- ios - 带有桥头的 obj-c 未调用 Swift 代码
- django - Django admin 忽略动态生成的表单字段