gpt4 book ai didi

cocoa - NSScrollView 位于另一个 NSScrollView 中

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

我有一个 NSScrollview 嵌套在另一个 NSScrollview 中。如何使内部 View 仅处理水平滚动?垂直滚动应该移动外部 View 。

目前我将 scrollWheel: 事件从内部 View 传递到外部 View ,但速度非常慢。

最佳答案

我也遇到了嵌套 ScrollView 的问题。内部 ScrollView 应水平滚动,外部 ScrollView 应垂直滚动。

处理来自魔术鼠标/触控板的滚动事件时,为每个手势仅选择一个 ScrollView 非常重要,否则当手指没有完全笔直移动时,您会看到奇怪的抖动。您还应该确保用两根手指点击触控板会显示两个滚动条。

当处理来自强大鼠标或带有老式滚轮的鼠标的传统滚动事件时,您必须为每个事件选择正确的 ScrollView ,因为事件中没有手势阶段信息。

这是我的内部 ScrollView 的子类,仅在 Mountain Lion 中进行了测试:

@interface PGEHorizontalScrollView : NSScrollView {
BOOL currentScrollIsHorizontal;
}
@end

@implementation PGEHorizontalScrollView
-(void)scrollWheel:(NSEvent *)theEvent {
/* Ensure that both scrollbars are flashed when the user taps trackpad with two fingers */
if (theEvent.phase==NSEventPhaseMayBegin) {
[super scrollWheel:theEvent];
[[self nextResponder] scrollWheel:theEvent];
return;
}
/* Check the scroll direction only at the beginning of a gesture for modern scrolling devices */
/* Check every event for legacy scrolling devices */
if (theEvent.phase == NSEventPhaseBegan || (theEvent.phase==NSEventPhaseNone && theEvent.momentumPhase==NSEventPhaseNone)) {
currentScrollIsHorizontal = fabs(theEvent.scrollingDeltaX) > fabs(theEvent.scrollingDeltaY);
}
if ( currentScrollIsHorizontal ) {
[super scrollWheel:theEvent];
} else {
[[self nextResponder] scrollWheel:theEvent];
}
}
@end

我的实现并不总是正确转发手势取消事件,但至少在 10.8 中这不会导致问题。

关于cocoa - NSScrollView 位于另一个 NSScrollView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8623785/

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