2013-05-09 5 views
1

내가 여기 NSTextView하고 정상적인 스크롤러의 크기의이 :
enter image description here
그리고 나는 텍스트 뷰의 스크롤 마우스를 가져 가면 여기 무슨 일이야 :
enter image description here
그러나, 나는 이것을하고 싶지 않아요 '를 확장 효과. 어떻게 제거 할 수 있습니까? 이 작업을 수행하는 방법을 검색하려고 시도했지만 아무 것도 찾을 수 없습니다. 난 그냥 사용자가 그것을 공중 경우에도 일반 scroller 크기 (얇은 하나) 모든 시간을 갖고 싶어. 이것이 가능한가?
감사합니다.NSTextView의 NSScrollView 스크롤러에서 마우스를 가리키면 펼치기 효과를 사용 중지하는 방법은 무엇입니까?

+0

왜 당신은 마우스 포인터를 칠 어렵다 끊임없이 너무 얇은 아이폰 OS 스타일의 스크롤바와 바이올린 사용자를 강제 : 여기 UPDATE

샘플 코드입니다 ?! 나는 그것이 "aethetics"을위한 것이 아니라고 진정으로 희망한다 !! –

답변

2

나는 NSScroller를 서브 클래 싱하고 안정적인 스크롤 모양이되도록 – drawArrow:highlight:/– drawKnobSlotInRect:highlight:/– drawKnob 메소드를 오버라이드 (override)하는 것이 좋습니다.

P. 스크롤러에 대해 XIB 파일에 새 스크롤러 클래스를 설정하는 것을 잊지 마십시오.

- (void)drawKnob 
{ 
    // call the default implementation for Overlay Scrollers 
    if (self.scrollerStyle == NSScrollerStyleOverlay) 
    { 
     [super drawKnob]; 
     return; 
    } 

    if (_style == NSScrollerKnobStyleLight || _style == NSScrollerKnobStyleDefault) 
      [[NSColor colorWithCalibratedWhite:1.0 alpha:0.8] setFill]; 
    else [[NSColor colorWithCalibratedWhite:0 alpha:0.4] setFill]; 

    // Note: you can specify the rect with fixed width here 
    NSRect knobRect = [self rectForPart:NSScrollerKnob]; 

    // VERTICAL SCROLLER 
    NSInteger fullWidth = knobRect.size.width; 
    knobRect.size.width = round(knobRect.size.width/2); 
    knobRect.origin.x += (NSInteger)((fullWidth - knobRect.size.width)/2); 

    // draw... 
    NSBezierPath * thePath = [NSBezierPath bezierPath]; 

    [thePath appendBezierPathWithRoundedRect:knobRect xRadius:4 yRadius:4]; 
    [thePath fill]; 
} 

//--------------------------------------------------------------- 

- (void)drawKnobSlotInRect:(NSRect)slotRect highlight:(BOOL)flag 
{ 
    // call the default implementation for Overlay Scrollers 
    // draw nothing for usual 
    if (self.scrollerStyle == NSScrollerStyleOverlay) 
    { 
     [super drawKnobSlotInRect:slotRect highlight:flag]; 
    } 
} 

//--------------------------------------------------------------- 

- (void)drawArrow:(NSScrollerArrow)whichArrow highlight:(BOOL)flag 
{ 
    // call the default implementation for Overlay Scrollers 
    // draw nothing for usual 
    if (self.scrollerStyle == NSScrollerStyleOverlay) 
    { 
     [super drawArrow:whichArrow highlight:flag]; 
    } 
} 
+0

그 방법 내에서 무엇을 할 수 있는지 구체적으로 설명해 주시겠습니까? 내가 그 방법으로 놀았어요 그리고 좀있어,하지만 스크롤러는 스크롤러 (마우스) 떠난 후 숨기지 않을거야 스크롤러 –

+1

샘플 코드로 내 대답을 업데이 트했습니다. 예, 오버레이가 아닌 스크롤러는 숨기지 않고 항상 표시합니다. iOS 스크롤러 동작을 시뮬레이트하고 싶다면 https://github.com/rheinfabrik/RFOverlayScrollView와 같은 것을 찾아야합니다. – UJey

0

정확한 스타일을 알고 싶지만이 카테고리가 도움이 될 수 있습니다.

@implementation NSScrollView (SetScrollStyle) 

- (void) setHidingScroll 
{ 
    [self setScrollerStyle:NSScrollerStyleOverlay]; 
    [[self verticalScroller] setControlSize: NSSmallControlSize]; 
    [[self verticalScroller] setKnobStyle:NSScrollerKnobStyleDark]; 
    [self setScrollerKnobStyle:NSScrollerKnobStyleDark]; 
    [[self verticalScroller] setScrollerStyle:NSScrollerStyleOverlay]; 
} 

및 사용

[scrollView setHidingScroll]; 
+0

답변 주셔서 감사합니다. 그러나 스크롤러를 가져 가면 효과가 지속됩니다 –