我正在为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及以下版本中绘制的:
但在OSX 10.9中,绘制了:
有什么想法吗?
以下是来自[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”,“祖先想要的人”,“孩子需要布局”和“有表面”。
知道如何修改这些或任何有关如何解决这个问题的线索?
答案 0 :(得分:2)
看起来Mavericks中的PDFKit视图正在使用Layer-backed。将我的重叠视图设置为相同可以解决问题。
[self.nextButton setWantsLayer:YES];
[self.prevButton setWantsLayer:YES];
[self.overlayViewController.view setWantsLayer:YES];