2012-03-08 19 views
4

documentViewをシャドウする方法NSScrollViewに?NSScrollViewでdocumentViewをシャドーする方法は?

効果の外観は、iBookの著者が好き:

Screenshotあなたは、その後、表示される影のためのスペースを許可するようにドキュメントビュー内のコンテンツをはめ込むビューをバック層とに影を設定する必要が

答えて

0

それ。例:

view.wantsLayer = YES; 
NSShadow *shadow = [NSShadow new]; 
shadow.shadowColor = [NSColor blackColor] 
shadow.shadowBlurRadius = 4.f; 
shadow.shadowOffset = NSMakeSize(0.f, -5.f); 
view.shadow = shadow; 
0

NSScrollView contentViewあなたは影のオブジェクトを作成し、このフィールドに割り当てた場合

NSShadow* shadow = [[NSShadow alloc] init]; 
    shadow.shadowBlurRadius = 2; //set how many pixels the shadow has 
    shadow.shadowOffset = NSMakeSize(2, -2); //the distance from the view the shadow is dropped 
    shadow.shadowColor = [NSColor blackColor]; 
    self.scrollView.contentView.shadow = shadow; 
を引かれたときに、ビューは自動的にドロップシャドウが表示されます、影のフィールドを持っているNSViewのサブクラスであり、

これは、drawRectで描かれるすべてのビューが[シャドウセット]を使用してこのシャドウプロパティを使用するため機能します。描画操作中に[シャドウ・セット]をやって

+0

このコードがなぜ機能するのかを説明するためにナラティブを追加することを検討してください。また、その質問に対する答えは何ですか?これは、質問をしている人や、一緒に来る人には非常に役立ちます。 –

0

の下に複製することの後に描かれているものになり、私は、スタックオーバーフローのポストに入る新しいですが、私は同じ問題を持っていたと私は思ったので、それを解決しました解決策を見つけるために数時間ネットを検索した後、それに答えるのが良いでしょう。

私のソリューションは、あなたはその後、サブクラスのインスタンスを作成し、setContentViewセレクタでそれを設定する必要があります...のdrawRectための次のコードでNSClipViewためのサブクラスを作成する

- (void)drawRect:(NSRect)dirtyRect 
{ 
    [super drawRect:dirtyRect]; 

    NSRect childRect = [[self documentView] frame]; 

    [NSGraphicsContext saveGraphicsState]; 

    // Create the shadow below and to the right of the shape. 
    NSShadow* theShadow = [[NSShadow alloc] init]; 
    [theShadow setShadowOffset:NSMakeSize(4.0, -4.0)]; 
    [theShadow setShadowBlurRadius:3.0]; 

    // Use a partially transparent color for shapes that overlap. 
    [theShadow setShadowColor:[[NSColor grayColor] 
          colorWithAlphaComponent:0.95f]]; 

    [theShadow set]; 

    [[self backgroundColor] setFill]; 

    NSRectFill(childRect); 

    // Draw your custom content here. Anything you draw 
    // automatically has the shadow effect applied to it. 

    [NSGraphicsContext restoreGraphicsState]; 
} 

です。

また、コンテンツビューのサイズが変更されるたびにクリップビューを再描画する必要があります。ユーザーが望むときにキャンバスのサイズを変更するようにコンテンツビューを設定した場合、クリップビューを再描画しないと、厄介な影のマークが残されます。

他の人が示唆しているように、クリップをつぶす必要はありません。

希望すると助かります!

関連する問題