cocoa – 另一个NSScrollView里面的NSScrollView

cocoa – 另一个NSScrollView里面的NSScrollView,第1张

概述我有一个NSScrollview嵌套在另一个NSScrollview中.如何使内部视图仅处理水平滚动?垂直滚动应移动外部视图. 目前我将scrollWheel:事件从内部视图传递到外部视图,但它非常慢. 我也有嵌套滚动视图的问题.内部滚动视图应水平滚动,外部应垂直滚动. 当处理来自魔术鼠标/触控板的滚动事件时,重要的是只为每个手势选择一个滚动视图,否则当手指不能完全笔直移动时,您会看到奇怪的抖动. 我有一个NSScrollvIEw嵌套在另一个NSScrollvIEw中.如何使内部视图仅处理水平滚动?垂直滚动应移动外部视图.

目前我将scrollWheel:事件从内部视图传递到外部视图,但它非常慢.

解决方法 我也有嵌套滚动视图的问题.内部滚动视图应水平滚动,外部应垂直滚动.

当处理来自魔术鼠标/触控板的滚动事件时,重要的是只为每个手势选择一个滚动视图,否则当手指不能完全笔直移动时,您会看到奇怪的抖动.您还应该确保用两个手指点击触控板显示两个滚动条.

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

这是我的内部滚动视图的子类,仅在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全部内容,希望文章能够帮你解决cocoa – 另一个NSScrollView里面的NSScrollView所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1002153.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存