スクロールイベントを取りたい場合、直接 NSScrollView を使うのではなく、NSScrollView が内包している NSView の通知を利用する。利用方法は公式リファレンスにサンプルのコードが参考になる。
Scroll View Programming Guide for Cocoa: Synchronizing Scroll Views
使う通知は NSViewBoundsDidChangeNotification。これを NSScrollViewの中のビューへ仕掛けておく。こんな感じ。
-(void)awakeFromNib {
:
NSView* contentView = [scrollView contentView];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didScroll:)
name:NSViewBoundsDidChangeNotification
object:contentView];
:
}NSScrollView 内のビューの bounds に変化があった時に通知がくる。- (void)didScroll:(NSNotification*) notification
{
NSClipView* contentView = [notification object];
:
}- - - -
こうやって APIを比較すると一から作り直した UIKit は、従来のCocoa(AppKit)の良い点をうまく取り込み、悪い点を改善しているのがよくわかる。Cocoaも 10.6から Delegateをベースとした形になっているが過渡期で綺麗じゃないといった感じは否めない。


Responses
Leave a Response