2

Twitter アプリと同様に、角が切り取られた NSScrollView を作成しようとしています。

ここに画像の説明を入力

NSScrollView次のコードを追加したサブクラスがあります。

- (void)drawRect:(NSRect)dirtyRect {
    NSBezierPath *pcath = [NSBezierPath bezierPathWithRoundedRect:[self bounds] xRadius:kDefaultCornerRadius yRadius:kDefaultCornerRadius];
    [path setClip];

    [super drawRect:dirtyRect];
}

NSScrollViewのコンテンツの角が丸くなっていることを期待していましたが、クリッピングされたパスを尊重していません。これどうやってするの?




更新と明確
化 カスタムの作成NSScroller方法、透明なオーバーレイの作成方法を知っています。私が求めているのは、NSSCrollViewクリップに含まれるすべてのものを含めて、クリップをコーナーにする方法だけです。は、変化する可能性のある背景を持つのNSScrollView中にNSViewあります。つまり、丸みを帯びたコーナーを偽造するためのビュー オーバーレイはオプションではありません。

4

3 に答える 3

6

何度もいじった後NSScrollView、バッキングレイヤーを指定し、そのレイヤーのコーナー半径を設定するだけで、コーナーを丸くすることができることを発見しました。ただし、内部にも同じことを行う必要がありますNSClipViewNSScrollView両方が必要です。これは、実際に表示可能なウィンドウをドキュメントビューに提供するのはクリップビューであるため、今では理にかなっています。

NSScrollView * scrollView = ...;

// Give the NSScrollView a backing layer and set it's corner radius.
[scrollView setWantsLayer:YES];
[scrollView.layer setCornerRadius:10.0f];

// Give the NSScrollView's internal clip view a backing layer and set it's corner radius.
[scrollView.contentView setWantsLayer:YES];
[scrollView.contentView.layer setCornerRadius:10.0f];
于 2012-04-03T08:45:12.753 に答える
5

ビューのレイヤーにマスクを適用できます。

[myScrollView setWantsLayer: YES];
[myScrollView layer].mask = ...;

マスクは別CALayerです。したがって、この場合は、を作成しCALayer、背景色を不透明に設定し、境界をスクロールビューに一致するように設定してcornerRadius、たとえば、を指定し8.0ます。

その結果、スクロールビューとそのすべてのコンテンツが、コーナー半径が8pxのラウンドレクトにマスクされているように見えます。

于 2011-03-14T18:19:56.173 に答える
3

オーバーライドしてみましたか

- (BOOL)isOpaque {
  return NO;
}

そして、スクロールビューを設定して、-setDrawsBackground:クリッピングNOせずにビューを離れ、コーナーを描画するだけで[NSColor clearColor]、下にある色もクリアされ、丸い効果がシミュレートされます。

于 2011-03-18T10:00:56.580 に答える