我在寻找改变的最佳途径backgroundColor
的NSView
.我也希望能够设置适当的alpha
面具NSView
.就像是:
myView.backgroundColor = [NSColor colorWithCalibratedRed:0.227f
green:0.251f
blue:0.337
alpha:0.8];
Run Code Online (Sandbox Code Playgroud)
我注意到NSWindow
有这种方法,我不是这个NSColorWheel
或NSImage
背景选项的忠实粉丝,但如果他们是最好的,愿意使用.
我有一个奇怪的问题,支持图层的NSView和它的兄弟姐妹,当添加到附加到旋转的超视图的现有视图层次结构中时,其中一些不能正确呈现.以下是详细信息.
- NSScrollView (layer can be here)
- NSClipView (or here)
- Document View (or even here)
- Some *rotated* subview
- { Problematic sublings }
Run Code Online (Sandbox Code Playgroud)
因此,层次结构本身相当简单和常见:带有一些文档的滚动视图,文档子视图代表一些内容.就我而言,它是图形内容,可以旋转.旋转视图可以有一些额外的子视图 - 各种标记,控制点等等,一旦我使用CALayer作为后端,我就会遇到偏斜图形的奇怪问题:
相机图片是单独渲染的,它们不是此视图树的一部分,请注意标记和按钮.
正如您在图像上看到的,我有一些带有子视图的测试视图(只是随机按钮).始终正确呈现右侧的对象.根据我的测试,每个NSView与frameRotation之间[0, pi/2]
呈现OK.左侧的对象呈现模糊,看起来此项的缓存缓冲区太小.它发生在frameRotation在[pi/2, pi]
范围内时.
在"实时轮换"中不会发生此问题.即如果我只是更改设置层次结构的frameRoation,每个子视图就在它的位置,一切正常.但是,当subling被添加到已经旋转的对象时 - 它会出现错误并给出这种模糊的外观.
在我的应用程序中,当用户点击项目时,会出现特殊子视图,即"兄弟姐妹被添加到超级视图中的那一刻".
看起来后端层有一些用于子视图的缓存缓冲区,其中一些在旋转根视图时使用错误的大小进行计算.
[view
setWantsLayer:YES]
层次结构的根视图:滚动视图,剪辑视图,文档视图,每个结果都是相同的.没有手工制作的层,没有层主机.实际上,这就是问题所在.有人遇到过这样的问题吗?也许有人知道强制图层放弃所有缓存并完全更新的方法?到目前为止,我只有两个解决方案:要么完全放下图层(工作,也要转动所有的眼睛糖果),或者重新设置图层调用setWantsLayer:NO
后跟setWantsLayer:YES
.这个表现糟糕.
边界和边框之间有什么区别?事实上,为什么"界限"甚至存在?'bounds'的大小等于帧的大小,bound的起源应始终为0,0.
我有一个我写的程序.我想用一种花哨的字体.我可以将我的字体嵌入到我的包中并从那里使用它.
我的代码......
NSMutableAttributedString *recOf;
recOf = [[NSMutableAttributedString alloc] initWithString:@"In Recognition of"];
length = [recOf length];
[recOf addAttribute:NSFontAttributeName value:[NSFont fontWithName:@"Edwardian Script ITC" size:50] range:NSMakeRange(0, length)];
[[NSColor blackColor] set];
p.x = (bounds.size.width/2)- (([recOf size].width)/2);
p.y = (bounds.size.height/1.7);
[recOf drawAtPoint:p];
[recOf release];
Run Code Online (Sandbox Code Playgroud) 我有一个基于文档的应用程序,其中每个文档都有一个带有NSScrollView的窗口,它只使用Cocoa进行一些(相当连续的)绘图.
要调用绘图,我使用的是CVDisplayLink,如下面的代码所示:
- (void)windowControllerDidLoadNib:(NSWindowController *) aController {
//other stuff...
[self prepareDisplayLink]; //For some reason putting this in awakeFromNib crashes
}
//Prep the display link.
- (void)prepareDisplayLink {
CVDisplayLinkCreateWithActiveCGDisplays(&displayLink);
CVDisplayLinkSetCurrentCGDisplay(displayLink, ((CGDirectDisplayID)[[[[[self windowForSheet]screen]deviceDescription]objectForKey:@"NSScreenNumber"]intValue]));
CVDisplayLinkSetOutputCallback(displayLink, &MyDisplayLinkCallback, self);
}
//Callback to draw frame
static CVReturn MyDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp* now, const CVTimeStamp* outputTime, CVOptionFlags flagsIn, CVOptionFlags* flagsOut, void* displayLinkContext)
{
NSAutoreleasePool *pool =[[NSAutoreleasePool alloc]init];
CVReturn result = [(ScrollView*)displayLinkContext getFrameForTime:outputTime];
[pool drain];
return result;
}
//Drawing function:
- (CVReturn)getFrameForTime:(const CVTimeStamp*)outputTime
{
[scrollView lockFocusIfCanDraw];
[self addToCurrentPostion:(dist/time)*CVDisplayLinkGetActualOutputVideoRefreshPeriod(displayLink)]; …
Run Code Online (Sandbox Code Playgroud) 我有NSCollectionView
一个小问题但很关键的例外.获取并突出显示集合中的所选项目.
在Snow Leopard之前我已经完成了所有这些工作,但是有些东西似乎发生了变化,我无法完全按照它进行操作,所以我把我的NSCollectionView
右手放回基本测试并按照Apple的文档创建了一个NSCollectionView:
根据快速入门指南,集合视图可以正常工作.但是,本指南不讨论除了以外的选择"There are such features as incorporating image views, setting objects as selectable or not selectable and changing colors if they are selected"
.
以此为例,我进入了将Array Controller NSCollectionView
与控制器键绑定的下一步selectionIndexes
,认为这将绑定我NSCollectionView
在阵列控制器之间做出的任何选择,从而触发KVO通知.我还设置了NSCollectionView
在IB中可选择.
似乎没有选择委托,NSCollectionView
并且与大多数Cocoa UI视图不同,似乎没有默认的选定突出显示.
所以我的问题实际上归结为一个相关的问题,但有两个截然不同的问题.
NSCollectionView
编程指南似乎很少,而且大多数通过Google搜索似乎都会提升Snow Leopard之前的实现,或者在单独的XIB文件中使用该视图.
对于后者(视图的单独XIB文件),我不明白为什么这应该是先决条件,否则我会怀疑Apple不会将视图包含在与集合视图项相同的包中.
我知道这将是一个"无法看到木头为树"的问题 - 所以我已经为"doh!"做好了准备.时刻.
像往常一样,任何和所有帮助非常感谢.
更新1
好的,所以我想找到所选的项目,但尚未确定突出显示.有兴趣计算所选项目(假设您正在关注Apple指南):
在控制器中(在我的测试用例中,App Delegate)我添加了以下内容:
在awakeFromNib中
[personArrayController addObserver:self
forKeyPath:@"selectionIndexes"
options:NSKeyValueObservingOptionNew
context:nil];
Run Code Online (Sandbox Code Playgroud)
新方法
-(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if([keyPath isEqualTo:@"selectionIndexes"])
{
if([[personArrayController …
Run Code Online (Sandbox Code Playgroud) cocoa objective-c nsview nscollectionview nscollectionviewitem
我有一个超级视图,它有2个子视图.这些子视图是重叠的.
每当我从菜单中选择一个视图时,相应的视图应该成为前视图并处理动作.也就是说,它应该是最前面的子视图.
acceptsFirstResponder
辞去所有工作.但是鼠标按下事件被发送到已设置的最顶层子视图.
此致,Dhana
在约塞米蒂,侧边栏具有半透明的"活力"背景.如何在10.10/Xcode 6中创建类似的视图?
我可以给出任何观点这样的背景吗?我发现NSOutlineView
当你给它"源列表"突出显示样式时会默认为这样的背景,但Calendar.app中的侧边栏似乎不是NSOutlineView,所以我想知道是否有一个通用的解决方案.
我把这些东西放进显示方法吗?还是有类似的东西?
是否有可能NSView
不剪辑其超出边界的子视图?在iOS上,我只想设置clipsToBounds
我的UIView
号码NO
.但是NSView
没有这样的财产.我试图用试验wantsLayer
,masksToBounds
,wantsDefaultClipping
,但所有这些似乎只改变的裁剪drawRect
方法,而不是子视图.
nsview ×10
cocoa ×8
objective-c ×5
macos ×4
calayer ×2
clip ×1
core-video ×1
fonts ×1
layout ×1
osx-yosemite ×1
screen ×1
xcode ×1