2012-05-02 8 views
1

NSScrollViewのdocumentViewとしてNSViewがあります。私はNSViewのサブビューとしてNSImageViewも持っています。イメージは動的にサイズを変更し、スクロールバーがさまざまな時点でアクティブ/非アクティブになります。画像が変更されたら、画像上のある点にスクロールしたいと思います。 NSViewのdrawRect:メソッド内から、 [[myScrollView contentView] scrollToPoint:myPoint];を呼び出します。NSImageのNSScrollViewとScrollToPoint

スクロールバーが更新され、画像が表示されますが、画像がスクロールされるとすぐに二重画像が表示されるか、画像の一部が途切れることがあります。どんな助けもありがとう。ありがとうございました。

+1

なぜ '-drawRect:'内をスクロールしていますか?あなたは '-setNeedsDisplay ...'メソッドを呼び出すものを描画してはいけません。 –

+0

この問題を解決する次の試みは、imageおよびdocumentViewフレームを-drawRectメソッドの外に設定することでした。私はそれを試してみます –

+0

あなたは正しいです。 setFrame、setOrigin、scrollToPointなどのメソッドを-drawRectから移動すると、すべてが完璧に機能しました。どうもありがとうございます! –

答えて

3

NSScrollViewの "Copy On Scroll"ビヘイビアオプションをInterface Builderまたはプログラムでオフにしたい場合があります。

Scroll View Programming Guide for Mac OS X: How Scrolling Worksより:

NSClipViewクラスが scrollToPoint:法により低レベルのスクロールサポートを提供します。このメソッドは、 コンテンツビューの境界矩形の原点を変換し、 レンダリングされたドキュメントビューの大部分を可視のままコピーすることによって再表示を最適化します。 ドキュメントビューに新たに公開された領域を描画するよう求めます。これにより通常、スクロールのパフォーマンスは向上しますが、必ずしも適切ではない場合があります。 NSClipViewメソッドsetCopiesOnScroll: をパラメータとして使用して この動作をオフにすることができます。コピーオンスクロールを有効にしたままにする場合は、translateOriginToPoint:ではなくNSView のメソッドメソッドを使用して、文書ビューをプログラムでスクロールしてください。

+0

これをIBで設定しようとしましたが、ちょっと働きました。これのコンボを試して、-drawRectメソッドの外でdocumentViewフレームを設定します。ありがとうございました! –