OSX Mavericks中的PDFKit(10.9)

时间:2013-10-28 16:55:54

标签: macos pdf osx-mavericks

我正在为OSX创建一个PDF应用程序。我正在使用Apple的PDFKit框架来做到这一点。

但是,在Mavericks(OSX 10.9)上运行应用程序时,PDF视图总是在前面绘制!这意味着现在在pdf视图前面显示的10.8上的视图就是在它后面绘制的!对于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查看
  4. 但在OSX 10.9中,绘制了:

    1. 查看1
    2. PDF查看
    3. 查看2
    4. 有什么想法吗?

      以下是来自[parentView _subtreeDescription]的10.8的视图结构:

      $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
      

      这是(错误的)Mavericks视图结构:

      $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
      

      这似乎不是对顺序的任何重新定位,但是小牛队的新标志设置为某些可能导致问题的PDFKit视图。

      W,w,l和#在这里是新的。这是“wantLayer”,“祖先想要的人”,“孩子需要布局”和“有表面”。

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

1 个答案:

答案 0 :(得分:2)

看起来Mavericks中的PDFKit视图正在使用Layer-backed。将我的重叠视图设置为相同可以解决问题。

[self.nextButton setWantsLayer:YES];
[self.prevButton setWantsLayer:YES];
[self.overlayViewController.view setWantsLayer:YES];