- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Mac OS X (10.9) 应用程序,其主 NSWindow 的 contentView
属性具有自定义 NSView。自定义 View 唯一要做的就是重写drawRect:
,使其透明。需要透明度,以便我的 NSOpenGLView 可见(见下文):
/* Transparent NSView Subclass */
- (void)drawRect:(NSRect)dirtyRect
{
NSLog(@"Drawing Rect");
[[NSColor clearColor] set];
NSRectFillUsingOperation(dirtyRect, NSCompositeClear);
}
contentView
有一个 NSOpenGLView 作为 subview ,其表面顺序设置为 -1(它位于主 NSWindow 的“下方”,也是透明的):
/* NSOpenGLView subclass: */
GLint order = -1;
[self.openGLContext setValues:&order forParameter:NSOpenGLCPSurfaceOrder];
然后我实例化一个 WebView 并将其放置为该自定义 View 的 subview :
_webview = [[WebView alloc] initWithFrame:frame];
[_webview setMaintainsBackForwardList:NO];
[_webview setTranslatesAutoresizingMaskIntoConstraints:NO];
[_webview setDrawsBackground:NO];
[_window.contentView addSubview:_webview];
WebView 是窗口中的一个小框(位于 NSOpenGLView 的顶部),用于登录服务。一旦登录发生,它就会消失,只显示 NSOpenGLView。
问题是:当我调用 [_webview removeFromSuperview];
时,contentView
不会重绘;因此,WebView 仍然绘制在屏幕上(尽管不响应鼠标或键盘)。如果我使用鼠标调整所有内容所在的窗口大小,则 contentView
会重新绘制(我在日志中看到该消息)并且 WebView 的内容会消失。另外,如果我不将 NSOpenGLView 添加为 subview ,WebView 就会消失。
subview 被删除后,contentView
不应该触发 drawRect
吗?即使我在删除 WebView 后使用 setNeedsDisplay:
或 setNeedsLayout:
,contentView
仍然没有重绘。
最佳答案
Apple 最近的建议是使用核心动画层将普通 View 置于 OpenGL View 之上。
我怀疑内容 View 已自行重绘。它很清楚。您所看到的是其背后的 OpenGL 表面。 OpenGL 表面的近乎原始 VRAM 性质可能意味着在其之上绘制的 Web View 实际上修改了表面的内容。因此,我建议您强制 OpenGL View 自行重绘。如果它在其 -drawRect:
中绘制,那么发送它 -setNeedsDisplay:
就足够了。如果您通过手动将上下文设置为当前上下文、发出渲染命令,然后调用 -flushBuffer
在 -drawRect:
之外进行渲染,那么您需要执行此操作。
关于objective-c - 删除 subview 后,包含 NSOpenGLView 的 NSView 不会重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23945002/
我正在使用 Cocoa 窗口和 NSOpenGLView 尝试 OpenGL 3.2。但是我无法让 NSOpenGLView 绘制红色。我只得到一个白色的窗口。这是我的代码(在 NSOpenGLVie
我一直在尝试让 NSOpenGLView 在调整窗口大小时正确调整大小,但我不断收到无法解释的奇怪行为。看起来像这样: 原始(一开始的样子): 调整大小后: 这是我的调整大小代码: - (void)r
我已经重写了 NSOpenGLView 来处理键盘事件。事件检测工作正常,但每次我按下一个键时,我都会听到恼人的碰撞声。我怎样才能让我的观点冷静下来? 这是我的 keyUp: 方法的样子: -(voi
我有一个 NSWindow 子类 (GameWindow),其中包含一个 NSOpenGLView 子类 (GameView)。 应用程序是窗口化的(不会全屏显示)。 GameView 中的 Open
我目前正在尝试以编程方式创建一个简单的 cocoa NSWindow,而不是使用界面生成器(我有这样做的理由)。这是一个快速测试: int main(int argc, char** argv)
我需要在现有应用程序中的 NSOpenGLView 之上显示一些 Cocoa 小部件。我按照 Apple 的 LayerBackedOpenGLView 示例代码中的示例进行操作。 NSOpenGLV
我正在尝试使用 Cocoa API 创建一个 OpenGL 应用程序,现在一切正常,除了一件事。当调整主窗口大小时,GL 上下文似乎没有正确更新。 这是用于设置窗口和渲染上下文的代码。 主窗口: m_
我创建了一个带有 NSOpenGLView 的窗口,我正在将 openGL 内容渲染到其中。 我想向 View 添加一些按钮和文本字段:我可以使用界面生成器(或代码)添加 NSTextFields 和
我有一个旧的基于 AGL 的 OpenGL 窗口系统,我正在更新它以使用 NSOpenGLView。使用它的引擎需要在单独的线程中以自己的循环运行,我无法让它工作。使用 AGL,我在循环线程中创建了上
我有一个名为 ModelView 的类,它继承自 NSOpenGLView。当我的程序运行时,我按如下方式将 ModelView 附加到主窗口。 - (void)applicationDidFinis
我正在尝试创建一种在全屏和窗口之间切换的方法。我试图在继承自 NSOpenGLView 的类中执行此操作, 基本上遵循 this blogpost 。从窗口到全屏,这一次有效;尝试返回以各种方式失败:
我想在纹理大小更改时更新我的 NSOpenGLView 窗口。没关系。发生这种情况时我注册了事件,但无法调整 OpenGLView 的大小。正在更改的值是 w 和 h。 -(void)initOp
我有一个 480x320 NSOpenGLView,我想将其放大到 960x640,但像素显示为尺寸的两倍(并且清晰)。 如果我打电话 [myglview setFrame:CGRectMake(0,
我有一个 NSOpenGLView 和 OpenGL 代码,可与在主循环中运行的 NSTimer 一起使用(调用 setNeedsDisplay 和 drawRect)。我想使用 CVDisplayL
我已将 NSOpenGLView 添加到我的 MainMenu.xib 文件中,并实现了 drawRect 来绘制它,这效果很好,所以到目前为止一切顺利。 如何检测屏幕上的触摸?我想我也许可以在 In
这就是我想用我的 NSOpenGLView 做的事情。目前 NSOpenGLView 覆盖了窗口的整个区域,我想在 NSOpenGLView 顶部添加按钮、nsviews 和图像。我浏览了网页,发现
我正在尝试修改 Apple MultiGPUIOSurface 示例(特别是文件 http://developer.apple.com/library/mac/#samplecode/MultiGPU
当我将 NSOpenglView 放入 NSSplitView 时,拖动拆分器时出现问题。openGLView 和 SplitView 正在异步调整大小。我在苹果邮件列表线程中找到了解决方案 http
我有一个在 Mac OS X 上渲染 OpenGL 内容的应用程序。最初它是渲染到 NSOpenGLView,然后我将它更改为渲染到 CAOpenGLLayer 子类。 当我这样做时,我看到了巨大的性
我正在尝试检查我的 NSOpenGLView 是否具有有效的上下文,但似乎对 openGLContext 的调用无法帮助我解决这个问题。 openGLContext 似乎总是返回一个 NsOpenGl
我是一名优秀的程序员,十分优秀!