2

我正在为 OSX 创建一个 PDF 应用程序。我正在使用 Apple 的 PDFKit 框架来执行此操作。

但是,在 Mavericks (OSX 10.9) 上运行应用程序时,PDF 视图总是在前面绘制!这意味着在 10.8 上显示在 pdf 视图前面的视图现在被绘制在它后面!OSX 10.8 或更低版本并非如此。

我曾尝试使用 XCode 5 中的 10.9 sdk 针对 10.9 进行构建,但没有任何运气。应用程序最好支持 10.7,我之前在 XCode 4 中使用过 10.8 sdk。

这就是我构建观点的方式:

- PDF View
  - View 1
- View 2

首先渲染第一个视图(在其他视图下方)。

它们在 OSX 10.8 及以下版本中以这种方式绘制:

  1. 查看 2
  2. 查看 1
  3. PDF 查看

但在 OSX 10.9 中绘制的是:

  1. 查看 1
  2. PDF 查看
  3. 查看 2

有任何想法吗?

这是来自 10.8 的视图结构[parentView _subtreeDescription]

$0 = 0x000000010e918740 [   A      LU ] h=--- v=--- NSView 0x1025de1e0 f=(0,1,809,755) b=(-) TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
  [   AF     LU ] h=-&- v=&-- PSMTabBarControl 0x11963b330 f=(0,733,809,22) b=(-) TIME drawRect: min/mean/max 0.41/0.54/0.71 ms
    [  HAF     LU ] h=&-- v=--- PSMOverflowPopUpButton 0x119427640 f=(781,0,14,22) b=(-) TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
    [  HAF     LU ] h=--- v=--- PSMRolloverButton 0x11943db20 f=(0,0,0,0) b=(-) TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
  [    F O   LU ] h=-&- v=-&- NSTabView 0x1025ec850 f=(0,0,809,718) b=(-) TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
    [      O   LU ] h=-&- v=-&- IBEditPDFView 0x1051233f0 f=(0,0,809,718) b=(-) TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
      [   AF O   LU ] h=--- v=--- PDFViewScrollView 0x105124230 f=(0,0,809,718) b=(-) TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
        [   AF OGP LU ] h=--- v=--- NSClipView 0x105124530 f=(0,0,809,718) b=(-) TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
          [   AF O   LU ] h=--- v=--- PDFMatteView 0x105123670 f=(0,0,809,718) b=(-) TIME drawRect: min/mean/max 0.23/0.28/0.39 ms
            [   A      LU ] h=--- v=--- PDFDisplayView 0x105103c50 f=(148,0,513,718) b=(-) TIME drawRect: min/mean/max 0.27/1.98/9.80 ms
            //...
        [  HAF     LU ] h=--- v=--- NSScroller 0x1004a09f0 f=(-100,-100,15,755) b=(-) TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
  [   AF     LU ] h=--& v=&-& NSButton 0x10258dc70 f=(20,328,40,60) b=(-) TIME drawRect: min/mean/max 0.15/0.71/2.33 ms
  [   AF     LU ] h=&-- v=&-& NSButton 0x11945ab10 f=(749,328,40,60) b=(-) TIME drawRect: min/mean/max 0.10/9.84/56.55 ms

A=autoresizesSubviews, C=canDrawConcurrently, D=needsDisplay, F=flipped, G=gstate, H=hidden (h=by ancestor), L=needsLayout (l=child needsLayout), U=needsUpdateConstraints (u=child needsUpdateConstraints), O=opaque, P=preservesContentDuringLiveResize, S=scaled/rotated, W=wantsLayer (w=ancestor wantsLayer), #=has surface

这是(错误的)小牛队视图结构:

$0 = 0x000000010044c7d0 [   A      LU ] h=--- v=--- NSView 0x114d37760 f=(0,1,2119,1172) b=(-) TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
  [   AF     LU ] h=-&- v=&-- PSMTabBarControl 0x114d2d8a0 f=(0,1150,2119,22) b=(-) TIME drawRect: min/mean/max 0.44/0.70/1.11 ms
    [  HAF     LU ] h=&-- v=--- PSMOverflowPopUpButton 0x114d187c0 f=(2091,0,14,22) b=(-) TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
    [  HAF     LU ] h=--- v=--- PSMRolloverButton 0x114d15770 f=(0,0,0,0) b=(-) TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
  [    F O   LU ] h=-&- v=-&- NSTabView 0x105224c10 f=(0,0,2119,1135) b=(-) TIME drawRect: min/mean/max 0.02/1.00/14.27 ms
    [      O  WlU#] h=-&- v=-&- IBEditPDFView 0x1051226e0 f=(0,0,2119,1135) b=(-) => <_NSViewBackingLayer: 0x10513d330> TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
      [   AF O  wlU ] h=--- v=--- PDFViewScrollView 0x10511ba90 f=(0,0,2119,1135) b=(-) => <_NSViewBackingLayer: 0x1051471d0> TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
        [   AFSO  wlU ] h=--- v=--- PDFCenteringClipView 0x105126540 f=(0,0,2119,1135) b=(-388.943,1.35222e-13,1260.2,675) => <_NSClipViewBackingLayer: 0x1051478f0> TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
          [   AFSO  WLU ] h=--- v=--- PDFMatteView 0x10511a910 f=(0,0,482,675) b=(-) => <_NSViewBackingLayer: 0x10512a970> TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
            [   A S    LU ] h=--- v=--- PDFDisplayView 0x1051240c0 f=(0,0,482,675) b=(-) TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
              //...
        [  HAF    wlU ] h=--- v=--- NSScroller 0x1051f8d00 f=(-100,-100,15,755) b=(-) => <_NSViewBackingLayer: 0x1051f8cd0> TIME drawRect: min/mean/max 0.00/0.00/0.00 ms
  [   AF     LU ] h=--& v=&-& NSButton 0x105224840 f=(20,524,40,60) b=(-) TIME drawRect: min/mean/max 0.12/0.34/11.62 ms
  [   AF     LU ] h=&-- v=&-& NSButton 0x105224470 f=(2059,524,40,60) b=(-) TIME drawRect: min/mean/max 0.09/0.11/0.41 ms

A=autoresizesSubviews, C=canDrawConcurrently, D=needsDisplay, F=flipped, G=gstate, H=hidden (h=by ancestor), L=needsLayout (l=child needsLayout), U=needsUpdateConstraints (u=child needsUpdateConstraints), O=opaque, P=preservesContentDuringLiveResize, S=scaled/rotated, W=wantsLayer (w=ancestor wantsLayer), #=has surface

这似乎不是订单的任何重新定位,但 Mavericks 的一些 PDFKit 视图设置了新标志,这可能会导致问题。

W、w、l 和 # 在这里是新的。即“wantsLayer”、“祖先wantsLayer”、“child needsLayout”和“has surface”。

知道如何修改这些或有关如何解决此问题的任何线索吗?

4

1 回答 1

2

Mavericks 中的 PDFKit 视图似乎正在使用 Layer-backed。将我的叠加视图设置为相同解决了这个问题。

[self.nextButton setWantsLayer:YES];
[self.prevButton setWantsLayer:YES];
[self.overlayViewController.view setWantsLayer:YES];
于 2013-10-29T15:23:00.357 回答