【问题标题】:macOS High Sierra and CAShapeLayers, NSImageView, NSTableView confilctsmacOS High Sierra 和 CAShapeLayers、NSImageView、NSTableView 冲突
【发布时间】:2018-03-07 11:47:33
【问题描述】:

我已更新到 macOS High Sierra,但现在我的项目中出现了意想不到的问题,这些问题以前在 macOS Sierra 中没有出现过。 我有自定义 NSImageView 并且在此NSImageView 中拖放图像后,我可以使用CAShapeLayersmouseDownmouseDragged 函数在图像顶部绘制矩形。然后,我可以计算矩形内图像部分的强度。强度数据在数组中,该数组用于NSTableViewNSImageViewNSTableView 在同一个 NSView 中。强度计算在@IBAction 函数中。更新后,当我按下计算强度的按钮时,矩形移动到图像下方(在它们停留在顶部之前)。我发现,造成这种效果的原因是表的reloadData() 函数。当此功能关闭时,矩形将停留在图像的顶部。

有人能解释一下这个奇怪的事情吗?我能做些什么来解决它?按下计算按钮后,我需要将矩形保留在图像顶部。

更新 我已经更新了 High Sierra,但 NSTableView 的 reloadData() 与以前一样对 CAShapeLayers 的消失具有相同的效果。

【问题讨论】:

  • 我不确定我对相关问题的回答是否会对您有所帮助:stackoverflow.com/a/46452867/2148757
  • 我有一个相关的问题,我也在使用 nstableview 并且我的所有单元格在 highsierra 更新后在 reloadData() 上变得不可见...
  • @user2403221 我发现(根据一个人的建议设置 Z 轴的值)当我为矩形(CAShapeLayers)显式设置 Z 轴的值时,而不是依赖于默认值(就像在 Sierra 中一样),然后 CAShapeLayers 保持在顶部。我猜在 reloadData() 图层沿 Z 轴以不同顺序重绘之后,在 Sierra 和 High Sierra 中。

标签: macos cashapelayer nsimageview macos-high-sierra


【解决方案1】:

升级到 High Sierra 后我遇到了类似的问题,我添加到 NSImageView 的子视图不再显示。

为了解决这个问题,我按照this link 的建议在我的代码中添加了以下行(NSImageView 是通过编程方式添加的):

    imageView.wantsLayer = true

【讨论】:

  • 我再次查看了代码,测试了您的建议,发现现在在 High Sierra 10.13.4 中,一切都像以前一样在 Sierra 中工作,即没有 imageView.wantsLayer = true 或没有编写层的 Z 位置的值。与早期版本的 High Sierra 相比,High Sierra 10.13.4 中可能进行了一些更改。
猜你喜欢
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 2018-12-05
  • 2018-03-07
  • 2018-03-29
相关资源
最近更新 更多