【问题标题】:Checking if a bool is true for x seconds - Swift检查布尔值是否为真 x 秒 - Swift
【发布时间】:2019-08-07 04:32:39
【问题描述】:

我正在使用 VNDetectRectanglesRequest,我想检查检测到的矩形的 CGRect 是否在另一个 CGRect 1 秒内。到目前为止,这是我的代码:

let x = self.view.frame.width * detectedRectangle.boundingBox.origin.x
let height = self.view.frame.height * detectedRectangle.boundingBox.height
let y = self.view.frame.height * (1 - detectedRectangle.boundingBox.origin.y) - height
let width = self.view.frame.width * detectedRectangle.boundingBox.width
let rectangleDetected = CGRect(x: x, y: y, width: width, height: height)

self.redView.frame = rectangleDetected

let outsideGuideRect = CGRect(x: self.boardMargin*1/2, y: (self.view.frame.height-self.view.frame.width+1/2*self.boardMargin)/2, width: self.view.frame.width-1/2*self.boardMargin, height: self.view.frame.width-1/2*self.boardMargin)
print(outsideGuideRect.contains(rectangleDetected))
if outsideGuideRect.contains(sudokuBoardRect) {

    // HERE I WANT TO CHECK IF THIS IF STATEMENT IS TRUE FOR 1 second

}

上面的代码在一个每帧运行的函数中。我如何检查 if 语句是否为真一秒钟?谢谢!

【问题讨论】:

    标签: ios swift avcapturesession vision


    【解决方案1】:

    我对你的问题的理解是,“一旦你的矩形 B 进入矩形 A(不离开),你想在 1 秒后执行一个动作”。

    以下可能是我想到的一个可能的解决方案,如果我们多想的话,可能会有更好的解决方案。

    //initialize _insideRect as false globally
    if outsideGuideRect.contains(sudokuBoardRect) {
        // HERE I WANT TO CHECK IF THIS IF STATEMENT IS TRUE FOR 1 second
        if (!_insideRect) {
          _insideRect = true;
          DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(0.1)) {
            if (_insideRect) {
              // your function here
            }
          }
        }
    }else{
        _insideRect = false;
    }
    

    【讨论】:

    • 虽然这确实有效,但它是否比上面提出的解决方案更好?
    • 我相信我对这个问题的理解与他在解决方案中建议的 Rakesha 不同,如果其他事件在第一个事件的 1 秒内发生,则假设触发。我的解决方案是针对 rectB 在 RectA 内停留 1 秒的情况。如您所见,1 秒后,如果您的 rectB 仍在 Rect A 内(尽管有所有移动),事件将顺其自然。如果用户选择多次进出矩​​形,则可以有多个触发。
    猜你喜欢
    • 2012-08-18
    • 2022-07-31
    • 1970-01-01
    • 2021-03-12
    • 2019-05-22
    • 2021-11-07
    • 2021-11-14
    • 2016-09-19
    相关资源
    最近更新 更多