1

NSScrollViewで使用するカスタムNSScrollerを作成しています。しかし、NSScrollerのスーパービューのいずれかがCoreAnimationを有効にしたとき。私はこの描画の問題を非常に厄介に受けます。スクロールビューの隅にスクロールするたびに、スクローラークリップが表示されます。ただし、スクローラーがコーナーで描画を開始した場合、スクローラー部分はそのコーナーに留まります。この問題の原因は何ですか?ここに表示するにはコードが多すぎます。しかし、ここに私の描画コードがあります:

NSRect knobRect = [self rectForPart:NSScrollerKnob];

NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:knobRect 
                                                     xRadius:CornerRadius 
                                                     yRadius:CornerRadius];

[path setLineWidth:2];
[[NSColor colorWithDeviceRed:0.114 green:0.114 blue:0.114 alpha:0.3] set];
[path fill];
[[NSColor colorWithDeviceWhite:1.0 
                         alpha:0.100] set];

    // Clip drawing to this path; draw nothing outwith the path. 
[path addClip];
[path stroke];

私はすでに塗りつぶし以外のすべてを取り除こうとしましたが、うまくいきませんでした。setFloatValueが呼​​び出されたときにスーパービューでsetNeedsDisplay:YESを呼び出すと、この問題は解消されます。

クリッピングの問題http://idkz.org/b814ee5c875c9f44cc2d1345e4489420

4

2 に答える 2

1

問題への答えは呼び出すことであるように思われます:
[self setArrowsPosition:NSScrollerArrowsNone]; そしてそれは魔法のように機能します:D

編集しますが、スクロールバーをドラッグすると同様の効果が得られます。:'(スクロールビュー自体を再描画せずにグラフィックをクリアする方法はありますか?:(

于 2010-07-18T09:03:58.617 に答える
1

あなたはおそらくこれを知っていることで見つけましたが、あなたの場合、次の部分があなたの描画の問題を解決するはずです:

-(BOOL)isOpaque {
   return NO;
}
于 2011-03-10T19:55:59.980 に答える