NSScrollView
がユーザー入力によってスクロールされ、ユーザー入力のみによってスクロールされたことを検出する方法を知っている人はいますか)?
私がこれをしたい理由は、NSScrollView
幅contentView
を継続的に増やしている があるからです。NSScrollView
ユーザーが contentView の右端までスクロールした場合に contentView の右端に「ロック」(つまり追跡) したいのですが、ユーザーがスクロールしたときに「ロック」を解除したい (スクロールのみ) ) 右端から離れてスクロールします。
NSViewBoundsDidChangeNotification
これを機能させるために最も近かったのは、次のように「ロック」変数を観察して変更することでした。
- (void)drawRect:(NSRect)dirtyRect
{
(...)
if (lockToEnd) {
NSLog(@"xAxisView at end");
NSPoint newScrollOrigin;
newScrollOrigin.y = 0;
newScrollOrigin.x = [self frame].size.width - [[self enclosingScrollView] bounds].size.width;
[self scrollPoint:newScrollOrigin];
}
}
-(void)SWXAxisViewDidScroll:(NSNotification *)note{
NSLog(@"XAxisDidScroll: %@",note);
if ([[[self enclosingScrollView] horizontalScroller] floatValue] > 0.97){
lockToEnd = YES;
} else {
lockToEnd = NO;
}
}
NSViewBoundsDidChangeNotification
ただし、境界が変更されるたびに が送信されるため、これは適切ではありませんでした。したがって、境界がcontentView
増加すると、それがNSScroller
減少しfloatValue
、私の観測メソッドが呼び出されます。を 1.0に設定しても、最初NSScroller
のが を超えるとfloatValue
0.0 にリセットされます。したがって、ユーザーがスクロールしたために送信されたのか、それとも幅が広がったために送信されたのかはわかりません。bounds.size.width
contentView
bounds.size.width
NSScrollView
NSViewBoundsDidChangeNotification
contentView
ユーザー入力を追跡し、ロック変数を更新するために、 andメソッドをサブクラスNSScroller
化して使用することを検討しました。ただし、ユーザーがトラックパッドをスワイプしてスクロールすると、これらのメソッドが呼び出されないことが懸念されます。おそらく根拠がないと思われるもう 1 つの小さな懸念は、<->関係が壊れる可能性があり、多くのスクロール機能を再実装する必要があるということです。mouseDown:
mouseDragged:
NSScrollView
NSScroller
これを行う簡単な方法を見逃しましたか?ドキュメントは常にそれを行うので、私はこれを行うことができるはずですか?サブクラス化に関する私の懸念はNSScroller
有効ですか?