ios - 检查布尔值是否为真 x 秒 - Swift
问题描述
我正在使用 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 语句是否为真一秒钟?谢谢!
解决方案
我对你的问题的理解是,“一旦你的矩形 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;
}
推荐阅读
- google-apps-script - 选中复选框不会打开侧边栏窗口
- node.js - TypeError:无法读取 null 的属性“密码”
- events - 在 Kartik datepicker for Yii2 上更改日期时如何提交表单
- react-native - 将 flatlist 组件键作为参数传递
- laravel-5 - Why running composer install --no-dev I got error with Barryvdh\Debugbar\ServiceProvider?
- c# - 为什么 BsonDocument.Parse 反序列化错误的十进制128
- css - 为什么`@font-face` url 默认不能跨域?
- java - java中的初始化顺序,静态块内的构造函数
- postgresql - PostgreSQL:删除用户还是删除角色?
- java - 递归生成字符数组中所有字符组合(长度为k)的字符串数组