今日、私の同僚の 1 人が、 の をロードまたはビュー スワップして、ロードされたビューが左下隅ではなく左上隅に固定されているように見えるようにするにはどうすればよいかという問題を抱えて私のところに来ましdocumentView
たNSScrollView
。
彼はしばらく Web を検索し、もがき苦しんでいましたが、Apple、StackOverflow、およびその他のさまざまな場所でドキュメントを読んだにもかかわらず、解決策がありませんでした。
問題は次のとおりです。
Interface Builder でNSScrollView
、 をプロジェクトにドラッグします。また、Interface Builder で 2 つのカスタム ビューをプロジェクトにドラッグし、いくつかのテキスト フィールド、ボタンなどを追加します。
IBOutlet
次の sを使用してコントローラー クラス (myController など) を作成します。
IBOutlet NSScrollView * myScrollView
IBOutlet NSView * myCustomView1
IBOutlet NSView * myCustomView2
アウトレットを Interface Builder のコントロールに接続します。
NSView
を反転するサブクラスを作成しますdocumentView
。
@implementation myFlippedView
-(id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}
return self;
}
-(void)drawRect:(NSRect)dirtyRect {
// Drawing code here.
}
-(BOOL)isFlipped {
return YES;
}
Interface Builder でdocumentView
の を選択し、のサブクラスにします。Interface Builder で NSScrollView を選択し、もう一度クリックして にアクセスするか、IB ライブラリを変更してツリー ビューを表示し、 の子カスタム ビューを選択します。NSScrollView
myFlippedView
documentView
NSScrollView
クラスではmyController
、次のメソッドを使用してビューを交換します。
-(void)awakeFromNib {
[myScrollView setDocumentView:myCustomView1];
}
-(IBAction)swapViews:(id)sender {
if ([myScrollView documentView] == myCustomView1) {
[myScrollView setDocumentView:myCustomView2];
} else {
[myScrollView setDocumentView:myCustomView1];
}
}
最後に、プロジェクトのボタンを action に接続しswapViews
、ビルドして実行します。
問題は、isFlipped で期待されていたように座標が解決されていないことです。