【发布时间】:2019-07-26 04:32:25
【问题描述】:
我正在尝试以延迟 0.1 秒的时间读取字符串一个字符,然后再继续读取下一个字符。
我尝试在 for 循环中实现延迟功能,但它有两个问题。 1.延迟不一致,在角色之间移动时所花费的时间不一样。 2.它破坏了我认为是相机视图冻结的原因的主线程。但是,我认为在相机开启时激活手电筒也可能会冻结信号,从而导致故障。
func delay(_ delay:Double, closure:@escaping ()->()) {
DispatchQueue.main.asyncAfter(
deadline: DispatchTime.now () + Double(Int64(delay *
Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute:
closure)
}
func scriptReader(){
let str = "10101000001111110000110"
for i in 0..<str.count {
delay(Double(i) * 0.5) {
let index = str.index(str.startIndex, offsetBy: i)
self.flash(number: str[index])
}
}
}
func flash(number: Character){
guard let device = AVCaptureDevice.default(for:
AVMediaType.video) else { return }
guard device.hasTorch else { return }
if number == "0" {
print("off")
do {
try device.lockForConfiguration()
if (device.torchMode == AVCaptureDevice.TorchMode.on) {
device.torchMode = AVCaptureDevice.TorchMode.off
}
device.unlockForConfiguration()
} catch {
print(error)
}
}
if number == "1"{
print("on")
do {
try device.lockForConfiguration()
if (device.torchMode == AVCaptureDevice.TorchMode.off) {
do {
try device.setTorchModeOn(level: 1.0)
} catch {
print(error)
}
}
device.unlockForConfiguration()
} catch {
print(error)
}
}
}
【问题讨论】:
标签: swift iphone flashlight