gpt4 book ai didi

macos - NSPrintOperation 附件 View 中的 NSScrollView 无法正确滚动

转载 作者:行者123 更新时间:2023-12-03 17:09:17 25 4
gpt4 key购买 nike

在我的应用程序开始打印之前,我必须进行一些处理,因此我在线程上执行此操作,一旦全部完成,我就会执行

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];
});

一切正常,除了附属 View 中的 NSScrollView(包装 NSTableView)。

使用连接到 Mac 的普通有线 PC 鼠标可以完美滚动该 View ,但使用 Apple 触控板(MacBook 或外接触控板)和两指滚动时, ScrollView 不会更新,直到您将手指从触控板上移开。触控板。

似乎没有传递某种触摸移动事件。

如果我将 block 中的最后一行从 -runOperation 更改为 -runOperationModalForWindow:delegate:didRunSelector:contextInfo: 滚动又可以了,但我真的不知道有一个窗口可以在我的用例中显示此表。

如果我直接调用 runOperation 方法而不是执行线程,则 ScrollView 可以正常滚动。

最佳答案

所以我有一个解决方法和怀疑:

  • 如果我使用 -performSelectorOnMainThread:withObject: 而不是 dispatch_async(),则 ScrollView 可以正常工作。

  • 我怀疑 -performSelectorOnMainThread:withObject: 并没有在底层使用 dispatch_async() ,而是为滚轮滚动传递触摸移动事件做。因此,当我 -runOperation 时,我会阻塞主调度队列,并且这些事件会堆积在我的模态运行循环“后面”。

不过对这个解决方法不太满意。什么保证 -performSelectorOnMainThread:withObject: 有一天也不会阻塞主队列?

关于macos - NSPrintOperation 附件 View 中的 NSScrollView 无法正确滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49114863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com