- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在处理非常大的数据集(数百万个项目)时,我的 macOS 应用程序有时可能需要相当长的时间才能完成操作,在某些情况下甚至超过一分钟。为了让用户知道应用程序正在运行,我在工具栏的特殊 View 中像温度计一样显示进度。它最初是几年前在 Yosemite 上开发的,在 10.9 和 10.10 上运行时仍然运行良好。但是,它在 Sierra 上不起作用(不确定 10.11,没有可以测试它的系统)。
这是运行时的样子,显示了 30% 的进度。效果很像 Xcode 中工具栏中显示的构建进度(与 Xcode 一样,其他信息显示在横幅中,这就是我不使用 NSProgressIndicator 的原因)。
进度条使用一个名为 InfoBannerView 的类来显示,该类是 NSButton 的子类。这是该类的drawRect:方法(为了清楚起见,省略了绘制背景和文本的非进度代码)。 progressValue 是一个介于 0 和 1 之间的属性,该方法只是绘制一个圆角矩形,填充 View 宽度的一定百分比,就像温度计一样。
- (void)drawRect:(NSRect)dirtyRect
{
[super drawRect:dirtyRect];
NSRect bannerRectangle = [self bounds];
{
NSColor* progressColor = [NSColor colorFromHexRGBString:@"85ade1"];
... draw outline and background of banner
if (progressValue > 0.0f && progressValue < 1.0f) {
[progressColor setFill];
NSRect progressRect = NSInsetRect(bannerRectangle, 1.0, 1.0);
CGFloat progressWidth = progressRect.size.width * progressValue;
progressRect.size.width = progressWidth;
NSBezierPath* roundedProgressPath = [NSBezierPath bezierPathWithRoundedRect:progressRect xRadius:4 yRadius:4];
[roundedProgressPath fill];
}
... draw text on banner
}
}
需要很长时间运行的代码如下所示:
for {
... do stuff that takes a long time
InfoBannerView * ibv = [windowController recordCountView];
[ibv setProgress:value];
[ibv display];
}
行[ibv display]
应该立即更新进度横幅显示,而无需等待运行循环。 (注意:出于性能原因,我并没有每次循环时都调用 -display ,但为了清楚起见,我删除了该代码。)
如果此代码在 Mac OS X 10.10 上运行,则它可以完美运行。随着工作的执行,进度条逐渐填充横幅 View 。
但是,如果此代码在 macOS 10.12 Sierra 上运行,则看不到任何内容。我已经确定,drawRect:代码被重复调用,正如它应该的那样。正在为正确的对象调用它。所有尺寸和值均正确。唯一的问题是——没有绘制任何东西。 (但是,当在正常 View 更新过程中调用 drawRect: 时,绘制确实会正确进行。通过将 progressValue 强制为 0.3,我确定该代码在 View 更新期间也可以正确绘制,事实上,这就是我的方式制作了上面的插图。)
我尝试运行与 10.10 SDK 链接的旧版本应用程序。通过 -display 调用时仍然没有绘图。它仅在 10.10 或更早版本上运行时有效。
我非常希望在写下这篇文章时乌云会散去,答案会变得显而易见,但没有这样的运气。我在 10.11 或 10.12 发行说明中没有看到任何相关内容。也许我正在做一些愚蠢的事情,一直以来都是错误的,而我很幸运它曾经奏效过?此时,我已经没有主意了。
最佳答案
Daniel Jalkut 在 Slack 上的建议带来了解决方案。替换这一行:
[ibv display];
这样:
[ibv setNeedsDisplay:YES];
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0]];
导致正确显示,如下所示。
我认为最初的问题可能是 Sierra 中的一个错误 - 如果 -display
方法没有立即绘制(以前是这样),那么它是做什么用的?
关于cocoa - NSView 显示代码在 Yosemite 中有效,但在 macOS Sierra 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43840016/
我今天升级到 MacOS Sierra 并像往常一样去了我的仓库,但没有任何 git 命令工作,实际上我的机器无法识别我安装了 git。帮助? 我找到了 this article但似乎有点复杂。 最佳
我正在尝试通过 sshfs 永久安装卷在 mac .我已尝试按照 how-to-get-automount-and-sshfs-osxfuse-working-with-yosemite 中的说明进行
将我的开发环境从 El Capitan 迁移到 Sierra 并将 Tizen Studio 从 1.0.1 更新到 1.1.1 后,SDB CLI 在我的新机器上不再工作。我已经安装了 JDK 1.
下面的问题已经得到部分解答,请参阅下面的解决方案部分。所以我发布这个部分是为了帮助其他人,也是因为我的解决方案还没有真正解决问题。 问题 所以,问题是为什么以下技术(使用 python 的平台和套接字
我有一台运行MacOS high sierra 10.13.6的Mac,2011年初。 我的Mac无法升级到更高的MacOS版本。 我需要安装XCode 11才能利用SwiftUI。 此answer适
我正在尝试 root 一个 android 设备,为此我需要运行 ADB 和 Fastboot 命令。 问题是,fastboot 命令给出了一个错误,对我来说没有任何意义。谷歌搜索后,我发现的唯一建议
我刚刚从 Yosemite 升级到 El Capitan(并复制了从 El Capitan 升级到 Sierra 的问题),当我尝试在终端内输入例如 git status 时,出现以下错误: xcru
我刚刚从 Yosemite 升级到 El Capitan(并复制了从 El Capitan 升级到 Sierra 的问题),当我尝试在终端中输入例如 git status 时,我收到以下错误: xcr
将 macOS 从 Sierra 升级到 High Sierra 会破坏正常的 Valet 安装。 Ping 工作正常,只是浏览器上的 *.dev 给出无法连接、站点无法连接的错误。 我已经尝试了常见
我最近将 iPhone 设备中的 iOS 升级到 12.2(为我的应用程序“Match4app”提供对最新版本的支持),这似乎与 Xcode 10.1 不兼容。我应该将 Xcode 更新到 10.2
所以它看起来像新的“系统完整性保护”lockdown/usr(在其他目录中)使 pear 和 pecl 无法启动。有没有人找到禁用它的解决方法? 最佳答案 有一个更简单的方法 - 无需禁用 SIP 或
所以它看起来像新的“系统完整性保护”lockdown/usr(在其他目录中)使 pear 和 pecl 无法启动。有没有人找到禁用它的解决方法? 最佳答案 有一个更简单的方法 - 无需禁用 SIP 或
我在手机上使用Siri,并看着它随时随地创建提醒。当我在办公室时,我不想使用Siri干扰安静,因此我通常使用与Reminders应用程序集成的Alfred工作流程,或直接使用Reminders应用程序
我刚刚将 MacBook 更新为 macOS Sierra。我在 Eclipse 中遇到了这个奇怪的问题,每次我尝试使用自动完成功能(Cmd+鼠标悬停)打开任何内容时,或者即使我只是将鼠标悬停在附加了
我最近将我的工作机器更新为 macOS Sierra,现在我的虚拟主机配置都不起作用。我需要重新配置所有这些,这是一个巨大的痛苦。 我想知道 - 发生这种情况是否正常?当我更新操作系统时,有没有办法防
在 Mac 上使用 sshfs 后,我无法再看到我的用户目录。 当我打开终端窗口时,我看到以下内容: Last login: Mon May 22 10:54:30 on ttys003 mkdir:
当我将我的 mac 更新到 macOS Sierra 10.12.1 时,在真实设备上运行应用程序的时间显着增加。 “运行自定义脚本 'Embed Pods Frameworks'”和“复制 Swif
在我在 OS X 或 macOS 上的所有终端 session 中,如果我输入 who ,除了预期的用户(所有我在各种窗口中)我也总是看到 _mbsetupuser console ... 那是谁,
不幸的是,我在网上找不到有关此主题的任何最新信息。类似于这里提出的问题: OS X Yosemite Spotlight extensions ,现在可以在 macOS Sierra 上扩展 Sp
我遵循本指南: valgrind installation guide 下载软件包后,我运行了 sh 脚本,但是当我启动 make install 命令时,它无法创建该文件夹,因为它没有权限(即使我使
我是一名优秀的程序员,十分优秀!