我有一个UIView子类绘制一个半径变化的圆(具有漂亮的弹性动画).视图决定了圆的大小.
我希望这个UIView子类更改其帧大小以匹配圆半径的动画更改,并且我希望这些更改可以修改连接到视图的任何NSLayoutConstraints(以便限制到圆的边缘的视图将移动为圈调整大小).
我理解半径更改时实现-(CGSize)intrinsicContentSize和调用invalidateIntrinsicContentSize将告诉约束更新,但我无法弄清楚如何动画更改intrinsicContentSize.
invalidateIntrinsicContentSize从[UIView animateWith ...块]中调用只是立即更新布局.
这是否可能,是否有解决方法/更好的方法?
我曾经多次在项目中使用过NSWindowController,感觉我对这个重要课程背后的概念有了非常粗略的把握.我想对这篇文章做的是澄清/纠正我自己的理解,并希望帮助其他学习者迈出理解的第一步.这是我发现最有用的一目了然的概念,概述和最佳实践,并且通常缺少文档.这是我对NSWindowController的看法(问题以粗体点缀):
window属性应始终链接到InterfaceBuilder中的NSWindow.[super initWithWindowNibName:]这样当你引用[mycontroller window]它时会加载nib.对于MainMenu.xib窗口的NSWC,情况也是如此,即使这是在启动时打开的吗?使用[mycontroller showWindow:nil]以显示前面的相关窗口.如果您希望窗口显示为工作表,请使用以下内容:
NSWindowController* mycontroller = [[MyController alloc] init];
[NSApp beginSheet: [mycontroller window]
modalForWindow: [self window]
modalDelegate: self
didEndSelector: @selector(didEndMySheet:returnCode:contextInfo:)
contextInfo: nil];
Run Code Online (Sandbox Code Playgroud)的didEndSelector:应该是父窗口的NSWC的方法,并且可以访问和释放"myController的"带[sheet windowController].- 要关闭窗口,请调用performClose:NSWC窗口的方法.
一些问题:
请纠正我,如果这是不好的做法,或者是完全错误的.我希望澄清我对NSWindowController的理解,所以任何添加(以最佳实践,经验,陷阱的形式)都将受到高度赞赏.
谢谢,劳里
我对可可的绑定世界相当新,我遇到了一些麻烦(可能/可能是由于误解).
我有一个包含一个名为plugins的NSMutableArray的单例,它包含类Plugin的对象.它有一个名为loadPlugins的方法,它将对象添加到插件数组中.这可以在任何时候调用.它已作为Interface Builder中的实例添加.
IB中还有一个NSObjectController,其内容出口连接到单例.还有一个NSArrayController,其contentArray绑定到NSObjectController(控制器键是'选择',模型键路径是'插件',对象类名称是'插件').
最后我有一个包含2列的表视图,其值使用Plugin类中的属性键绑定到NSArrayController的arrangeObjects.
到目前为止如此标准(至少从教程中可以看出).我的麻烦是,当在单例中调用loadPlugins方法,并且对象被添加到plugins数组时,表不会更新以显示对象(除非在加载nib之前调用loadPlugins).在tableView上调用的-reloadData不执行任何操作.
有没有办法告诉NSArrayController引用的数组是否已更新?我知道NSArrayController有-add:方法,可以在loadPlugins中使用,但这是不可取的,因为我想让单例与显示方面完全分开.
这似乎与: Refresh Cocoa-Binding - NSArrayController - ComboBox有关
这条线:"编辑控制器后面的阵列"似乎也可能找出问题所在,但我希望有可能让单身人士不知道控制器.
提前致谢.
\编辑...
根据TechZen的建议,这是绑定:
TableColumn --('arrangedObjects', 'pluginName', Value)--> NSArrayController
NSArrayController --('selection', 'plugins', ContentArray)--> NSObjectController
NSObjectController --(content)--> PluginsManager
Run Code Online (Sandbox Code Playgroud)