我真的很喜欢我的Mac,我正在考虑将来的某个时候开发软件.你制作Mac软件的原因是什么?因为你认为Mac太酷了?或者市场如此有趣?我想我们很多人都想知道,对吧?
对我来说,正如我所说,这是Mac的酷.我对市场一无所知.
我NSProgressIndicator在层支持视图的子视图中有条形.它的行为有点复杂,但在某些点上,它显示为条形不确定的进度指示器.问题是,在这种状态下,它没有动画(即转动理发杆).关闭图层支持可以解决问题,但这使得其他动画窗口不太顺畅,所以我希望能有更好的东西.
这是完整的行为:当设置了脏标志的数量时,它应该作为不确定的动画进度指示器可见; 然后在短暂的延迟之后(为了确保用户已完成输入),它会转换为确定的进度指示器并在执行各种操作时填充; 最后,在整个过程结束时,它再次隐藏起来.
为实现这一点,我设置了以下绑定:
loading属性与NSNegateBoolean值变换器.waitingForInput属性.currentProgress属性(当waitingForInput为真时为0 ).maximumProgress属性(当waitingForInput为true 时为0 ).这主要工作,但有一个例外:当waitingForInput为YES,因而进度指示器是不确定的,进度指示器没有动画.
进度指示器不更新的通常原因是程序员使用长时间运行的操作来阻止运行循环,但我不这样做:在有问题的时间段内,运行循环是完全打开的,只有一个计时器等待开火.据我所知,它也不是一些奇怪的模式.该应用程序在此期间接受击键和其他事件,没有任何问题.(后期阶段,确定的进度指示器填满,由异步驱动NSURLConnection,所以它也不会阻塞.)
我已经采取了几个步骤来尝试解决此问题:
waitingForInput属性,如Is Indeterminate.这会导致动画在更改通知触发时急剧更新waitingForInput(waitingForInput每次输入延迟重新启动时都会发送KVO通知),但我希望动画更平滑.loading和waitingForInput.当观察到变化时,它会根据需要调用进度指示器-startAnimation:和-stopAnimation:方法.这些没有明显的效果.usesThreadedAnimation进度指示器设置为NO.(Google上的一篇文章表明,这可能有助于更新图层支持的进度指标上的问题.)这没有明显的效果.我也试过YES,只是为了踢,这被证明同样徒劳无功.最后,我也尝试过关闭图层背衬.当与Animate绑定结合使用时,这确实解决了问题.但是,它会让其他动画的性能降低到令人无法接受的程度,所以我宁愿避免这样做.
那么,任何想法,任何人?我真的很感激这个问题的一些帮助!
我有一个NSView,NSView上有一个NSImageView
在NSView的源代码中
我写:
NSImage *image = [[[NSImage alloc] initWithContentsOfURL:url] autorelease];
NSImageView *newImageView = nil;
newImageView = [[NSImageView alloc] initWithFrame:[self bounds]];
[newImageView setImage:image];
[newImageView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
Run Code Online (Sandbox Code Playgroud)
有没有办法读取NSView和NSImageView的宽度和高度?
当我得到用户输入的罚款时,我正在制作一个登录页面。凭据将存储在文件中。存储在文件中的值设置为的字符串NSTextField。如果我使用NSSecureTextField该密码,则从文件中读取值时用户将永远不会看到该密码。我搜索了,但无法在用户界面中查看密码。我想知道是否有任何方法可以使密码在我的帐户中可见NSSecureTextField。我刚刚尝试过,NSTextField但是用户可以看到输入的密码。
我在AppKit API Reference中看到该insertText方法在OS X v10.11中已弃用.我应该用什么作为替代品呢?
我有一个自定义NSView子类(例如)以下方法:
override func mouseDown(with event: NSEvent) { Swift.print("mouseDown") }
override func mouseDragged(with event: NSEvent) { Swift.print("mouseDragged") }
override func mouseUp(with event: NSEvent) { Swift.print("mouseUp") }
Run Code Online (Sandbox Code Playgroud)
只要按下鼠标(按钮),拖动并释放所有视图内部,这都可以正常工作.但是,当在视图内按下鼠标时,移动到视图外,然后才释放,我从未收到过该mouseUp事件.
PS:调用super实现没有帮助.
在AppKit上,菜单项和工具栏项分别具有validateMenuItem(_:)和validateToolbarItem(_:).但是,通过新的触摸条项目,没有这种方便的方法来在适当的时刻验证适当的项目.
我现在每次更改相关值并调用验证方法时都会验证触摸条项didSet(请参阅下面的示例代码).但我觉得这不是一个好方法,因为相关的值必须知道有一个触摸栏项目取决于它.
var foo: Foo? {
didSet {
if #available(macOS 10.12.1, *), NSClassFromString("NSTouchBar") != nil {
self.validateTouchBarItem(identifier: .foo)
}
}
}
@available(macOS 10.12.1, *)
func validateTouchBarItem(identifier: NSTouchBarItemIdentifier) {
guard
let item = self.touchBar?.item(forIdentifier: identifier),
let button = item.view as? NSButton
else { return }
switch identifier {
case NSTouchBarItemIdentifier.foo:
button.isEnabled = (self.foo != nil)
default: break
}
}
Run Code Online (Sandbox Code Playgroud)
我使用的另一种方式是Cocoa绑定和KVO,但是,它并不总是很好用.
所以,我很好奇是否有任何推荐或事实标准的方式来验证触摸条项目,特别是包含NSButton和NSSegmentedControl.我不仅要改变物品的可用性,还要根据情况改变它们的图像或颜色.你们如何验证触控条项目?
我想使用自定义NSSplitView与我NSSplitViewController。
该文件说:
要提供自定义的拆分视图,请在继承的viewDidLoad()方法中调用super之前随时设置此属性。也就是说,在拆分视图控制器的isViewLoaded属性为true之前。
我的NSSplitViewController子类称为MainVC。
我尝试-viewDidLoad在调用之前设置我的自定义拆分视图[super viewDidLoad]:
- (void)viewDidLoad {
self.splitView = [MySplitView new];
[super viewDidLoad];
// Rest of viewDidLoad...
}
Run Code Online (Sandbox Code Playgroud)
但这没用。我收到以下错误:
2017-09-02 10:35:43.527312-0700 Zee [6497:632581] ** *-[MainVC setSplitView:],/ BuildRoot / Library / Caches / com.apple.xbs / Sources / AppKit / AppKit-中的声明失败1561 / Controllers / NSSplitViewController.m:220
2017-09-02 10:35:43.527558-0700 Zee [6497:632581] MainVC:-splitView只能在加载视图之前分配
我也尝试覆盖loadView:
- (void)loadView {
self.splitView = [MySplitView new];
[super loadView];
}
Run Code Online (Sandbox Code Playgroud)
但是我得到:
2017-09-02 10:39:39.377345-0700 …
我想要一个带有附加的下拉菜单的工具栏按钮,例如Mail.app工具栏中的“标记”按钮:
我希望可以像这样正常制作NSMenuItem并添加菜单menuFormRepresentation,但是该菜单仅在按钮进入溢出模式时才会出现。
我还希望添加一个NSPopupButton作为自定义视图的视图可以起作用,但这会使整个视图成为菜单,而我希望组件的左侧部分像普通按钮一样工作,而右侧的下拉部分可以调出菜单。
是否有一些技巧可以使NSToolbarItem显示这样的组件,或者这两个自定义视图粘在一起?
在大多数 Mac 应用程序中,可以使用cmd ~快捷键在应用程序的打开窗口之间切换。我也想在我的应用程序中使用它,但我真的不知道如何实现。
大多数快捷键都是通过向菜单项之一添加快捷方式来实现的。但是对于这个菜单项不适用。
appkit ×10
cocoa ×8
macos ×6
nsview ×2
swift ×2
macos-sierra ×1
mouseup ×1
nssplitview ×1
nstextfield ×1
nstextview ×1
nstoolbar ×1
nstouchbar ×1
objective-c ×1
xcode ×1