【问题标题】:SCNText getBoundingBoxMin:max: always zeroSCNText getBoundingBoxMin:max: 始终为零
【发布时间】:2016-08-18 01:25:00
【问题描述】:

我正在尝试确定 SCNText 的边界框,但 getBoundingBoxMin:max: 总是给我零。

这是在SCNText 类扩展中运行的代码,所以self[textNode geometry]

  [self setString:newText];
  SCNVector3 min = SCNVector3Zero;
  SCNVector3 max = SCNVector3Zero;

  SCNNode *textNode = [SCNNode nodeWithGeometry:self];
  [textNode getBoundingBoxMin:&min max:&max];

  CGSize sizeMax = CGSizeMake( max.x - min.x,
                               max.y - min.y);

我也试过了

  [self setString:newText];
  SCNVector3 min = SCNVector3Zero;
  SCNVector3 max = SCNVector3Zero;

  [self getBoundingBoxMin:&min max:&max];

  CGSize sizeMax = CGSizeMake( max.x - min.x,
                               max.y - min.y);

sizeMax 始终为零。

注意:我发现了问题发生的原因。

在这样的块内调用此调整时会出现问题:

  dispatch_async(dispatch_get_main_queue(),
                 ^{                  });

所以,如果我从主线程调用此代码,它工作

[self setString:newText];
SCNVector3 min = SCNVector3Zero;
SCNVector3 max = SCNVector3Zero;

SCNNode *textNode = [SCNNode nodeWithGeometry:self];
[textNode getBoundingBoxMin:&min max:&max];

CGSize sizeMax = CGSizeMake( max.x - min.x,
                             max.y - min.y);

但如果我从另一个线程调用它,它将不起作用

dispatch_async(dispatch_get_main_queue(),
             ^{                
[self setString:newText];
SCNVector3 min = SCNVector3Zero;
SCNVector3 max = SCNVector3Zero;

SCNNode *textNode = [SCNNode nodeWithGeometry:self];
[textNode getBoundingBoxMin:&min max:&max];

CGSize sizeMax = CGSizeMake( max.x - min.x,
                             max.y - min.y);

});

问题是这个块是从一个调度块调用的,所以我需要将它重新调度到主队列,但是这样做会阻止代码工作。理论上,将一个块分派到主队列应该相当于从主线程运行它,但显然不是。

你们知道任何解决方法吗?

【问题讨论】:

  • 是否将其包装在 SCNTransaction 帮助中? (将持续时间设置为 0,开始,提交)

标签: ios iphone scenekit scnnode scntext


【解决方案1】:

来自评论

您可以尝试将其包装在事务中:

[SCNTransaction begin];
[SCNTransaction setAnimationDuration:0];
...
[SCNTransaction commit];

【讨论】:

    猜你喜欢
    • 2015-02-19
    • 1970-01-01
    • 2016-05-02
    • 2012-01-16
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多