标签: nsview

更改NSView背景颜色的最佳方法

我在寻找改变的最佳途径backgroundColorNSView.我也希望能够设置适当的alpha面具NSView.就像是:

myView.backgroundColor = [NSColor colorWithCalibratedRed:0.227f 
                                                   green:0.251f 
                                                    blue:0.337 
                                                   alpha:0.8];
Run Code Online (Sandbox Code Playgroud)

我注意到NSWindow有这种方法,我不是这个NSColorWheelNSImage背景选项的忠实粉丝,但如果他们是最好的,愿意使用.

macos objective-c background-color nsview

142
推荐指数
13
解决办法
11万
查看次数

图层支持的NSView旋转和倾斜的兄弟姐妹

我有一个奇怪的问题,支持图层的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被添加到已经旋转的对象时 - 它会出现错误并给出这种模糊的外观.

在我的应用程序中,当用户点击项目时,会出现特殊子视图,即"兄弟姐妹被添加到超级视图中的那一刻".

看起来后端层有一些用于子视图的缓存缓冲区,其中一些在旋转根视图时使用错误的大小进行计算.

它是如何实现的以及我尝试了什么

  1. 这些视图非常简单和标准,我试图推动[view setWantsLayer:YES]层次结构的根视图:滚动视图,剪辑视图,文档视图,每个结果都是相同的.没有手工制作的层,没有层主机.
  2. 内容视图,兄弟节点和实际上整个视图树(上面提到的视图除外)没有图层.虽然,我试图为各种项目打开层而没有任何成功.
  3. 我试图强制更新(setNeedsDisplay)后端层没有运气
  4. 完全重新设置图层似乎是有效的,但是很难.

解决方案?

实际上,这就是问题所在.有人遇到过这样的问题吗?也许有人知道强制图层放弃所有缓存并完全更新的方法?到目前为止,我只有两个解决方案:要么完全放下图层(工作,也要转动所有的眼睛糖果),或者重新设置图层调用setWantsLayer:NO后跟setWantsLayer:YES.这个表现糟糕.

macos cocoa calayer nsview

56
推荐指数
1
解决办法
1155
查看次数

NSView的边界与帧

边界和边框之间有什么区别?事实上,为什么"界限"甚至存在?'bounds'的大小等于帧的大小,bound的起源应始终为0,0.

cocoa objective-c nsview

43
推荐指数
3
解决办法
2万
查看次数

在mac包中嵌入字体

我有一个我写的程序.我想用一种花哨的字体.我可以将我的字体嵌入到我的包中并从那里使用它.

我的代码......

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)

xcode fonts cocoa objective-c nsview

38
推荐指数
2
解决办法
8674
查看次数

在不同的屏幕上绘制可可会失去性能

我有一个基于文档的应用程序,其中每个文档都有一个带有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)

cocoa screen nsview core-video cadisplaylink

34
推荐指数
1
解决办法
1383
查看次数

选择在NSCollectionView中突出显示

我有NSCollectionView一个小问题但很关键的例外.获取并突出显示集合中的所选项目.

在Snow Leopard之前我已经完成了所有这些工作,但是有些东西似乎发生了变化,我无法完全按照它进行操作,所以我把我的NSCollectionView右手放回基本测试并按照Apple的文档创建了一个NSCollectionView:

http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/CollectionViews/Introduction/Introduction.html

根据快速入门指南,集合视图可以正常工作.但是,本指南不讨论除了以外的选择"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视图不同,似乎没有默认的选定突出显示.

所以我的问题实际上归结为一个相关的问题,但有两个截然不同的问题.

  1. 如何捕获项目的选择?
  2. 如何显示项目的突出显示?

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

32
推荐指数
4
解决办法
2万
查看次数

如何使NSView移动到所有NSView的前面

我有一个超级视图,它有2个子视图.这些子视图是重叠的.

每当我从菜单中选择一个视图时,相应的视图应该成为前视图并处理动作.也就是说,它应该是最前面的子视图.

acceptsFirstResponder辞去所有工作.但是鼠标按下事件被发送到已设置的最顶层子视图.

此致,Dhana

cocoa nsview

32
推荐指数
3
解决办法
2万
查看次数

如何创建具有半透明/模糊背景的优胜美地风格的视图?

在约塞米蒂,侧边栏具有半透明的"活力"背景.如何在10.10/Xcode 6中创建类似的视图?

我可以给出任何观点这样的背景吗?我发现NSOutlineView当你给它"源列表"突出显示样式时会默认为这样的背景,但Calendar.app中的侧边栏似乎不是NSOutlineView,所以我想知道是否有一个通用的解决方案.

在此输入图像描述

macos interface-builder nsview osx-yosemite

32
推荐指数
2
解决办法
2万
查看次数

28
推荐指数
2
解决办法
8904
查看次数

使NSView NOT剪辑子视图超出其范围

是否有可能NSView 剪辑其超出边界的子视图?在iOS上,我只想设置clipsToBounds我的UIView号码NO.但是NSView没有这样的财产.我试图用试验wantsLayer,masksToBounds,wantsDefaultClipping,但所有这些似乎只改变的裁剪drawRect方法,而不是子视图.

cocoa objective-c calayer nsview clip

23
推荐指数
4
解决办法
9721
查看次数