在我的应用程序开始打印之前,我必须做一些处理,所以我在一个帖子上做了,一旦完成,我就
dispatch_async(dispatch_get_main_queue(),^(){
ULIPrintableView *viewForPrinting = [[ULIPrintableView alloc] initWithData:data];
NSPrintOperation *operation = [NSPrintOperation printOperationWithView:viewForPrinting];
NSPrintPanel *panel = operation.printPanel;
ULIPrintAccessoryViewController *settingsVC = [ULIPrintAccessoryViewController new];
viewForPrinting.printOperation = operation;
settingsVC.printView = viewForPrinting;
[panel addAccessoryController:settingsVC];
[operation runOperation];
});
一切正常,但配件视图中的NSScrollView(包装NSTableView)除外。
该视图与连接到Mac的常规有线PC鼠标滚动完美,但是使用Apple触控板(MacBook或外接一体机)和双指滚动,滚动视图不会更新,直到您将手指从触控板。
好像某些触摸移动的事件没有交付。
如果我将块中的最后一行从-runOperation
更改为-runOperationModalForWindow:delegate:didRunSelector:contextInfo:
,则可以再次滚动,但我没有真正有一个窗口我可以在我的用例中显示此表
如果我直接调用runOperation方法而不是执行我的线程,滚动视图会滚动得很好。
答案 0 :(得分:1)
所以我有一个解决方法和怀疑:
如果我使用-performSelectorOnMainThread:withObject:
代替dispatch_async()
,则滚动视图有效。
我怀疑-performSelectorOnMainThread:withObject:
并没有使用dispatch_async()
,但滚轮滚动的触摸移动事件的传递确实如此。因此,当我-runOperation
时,我会阻止主调度队列,并且那些事件堆积在后面"后面"我的模态运行循环。
虽然不太满意这种解决方法。什么保证-performSelectorOnMainThread:withObject:
有一天也会阻止主队列?