0
我需要兩個與我的Mac OS X應用程序中的Pages應用程序類似的東西。請查看附帶的屏幕截圖。Mac OS X中的NSScrollView中的陰影應用程序
- 我需要NSScrollView上的陰影,如Mac OS X Pages應用中所示。
- 我想讓我的滾動條像Mac OS X Pages應用中的那個一樣。
我需要兩個與我的Mac OS X應用程序中的Pages應用程序類似的東西。請查看附帶的屏幕截圖。Mac OS X中的NSScrollView中的陰影應用程序
CALayer
取得的視圖的陰影。只需從IB檢查View Effects Inspector
(或者您也可以通過編程的方式執行此操作 - read this)Scroller Knobs
樣式選爲「默認樣式」(第二行)。獲取頂部陰影的快速簡便的方法是覆蓋封閉的剪輯視圖。然而,這並不理想,因爲它會在控件後面繪製陰影(實際上是漸變)。我覺得很好。
#import <Cocoa/Cocoa.h>
// DFInvertedClipView.h
IB_DESIGNABLE
@interface DFInvertedClipView : NSClipView
@property IBInspectable BOOL shouldDrawTopShadow;
@end
// DFInvertedClipView.m
#import "DFInvertedClipView.h"
@interface DFInvertedClipView()
@property CGFloat startAlpha;
@end
@implementation DFInvertedClipView
- (BOOL) isFlipped {
return true;
}
-(void) drawRect:(NSRect)dirtyRect
{
[super drawRect:dirtyRect];
if (_shouldDrawTopShadow) {
NSGradient * gradient = [[NSGradient alloc] initWithStartingColor:[NSColor colorWithCalibratedWhite:0.6 alpha:self.startAlpha]
endingColor:[NSColor colorWithCalibratedWhite:0.6 alpha:0.0]];
NSRect b = [self bounds];
NSRect topFade = NSMakeRect(NSMinX(b), NSMinY(b), NSWidth(b), 5.0);
[gradient drawInRect:topFade angle:90];
NSBezierPath *topLine = [NSBezierPath bezierPath];
[topLine moveToPoint:NSMakePoint(NSMinX(self.bounds), NSMinY(self.bounds))];
[topLine lineToPoint:NSMakePoint(NSMaxX(self.bounds), NSMinY(self.bounds))];
CGFloat lineWidth = [[NSScreen mainScreen] backingScaleFactor];
[topLine setLineWidth:lineWidth];
[[NSColor colorWithCalibratedWhite:0.5 alpha:self.startAlpha] setStroke];
[topLine stroke];
}
}
-(void) scrollToPoint:(NSPoint)newOrigin
{
[super scrollToPoint:newOrigin];
// Grade the shadow darkness based on the displacement from a flush fit
CGFloat displacementForFullShadow = 40.0; // pixels
if (newOrigin.y > 0) {
CGFloat alpha = 1.0/displacementForFullShadow * newOrigin.y; // e.g. linear grade function y = m*x + c (m = 1/displacementForFullShadow, c = 0.0)
if (alpha > 1.0) {
alpha = 1.0;
}
self.startAlpha = alpha;
} else {
self.startAlpha = 0.0;
}
}
您爲該圖層設置了哪些選項?設置一個陰影並不會覆蓋其他控件。 – Lupurus