Как скрыть documentView в NSScrollView? - PullRequest
4 голосов
/ 08 марта 2012

Как затенить documentView в NSScrollView?

Эффект похож на iBook Автор:

Screenshot

Ответы [ 3 ]

0 голосов
/ 11 марта 2013

NSScrollView contentView - это подкласс NSView, который имеет теневое поле, если вы создадите теневой объект и назначите его этому полю, представление автоматически отобразит тень при рисовании

    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;

Это работает, потому что все виды, которые нарисованы на drawRect, используют это свойство тени с помощью [Набор теней].

выполнение [набор теней] во время операции рисования делает все, что нарисовано после этого, для репликации под

0 голосов
/ 27 апреля 2013

Я новичок во вводе сообщений о переполнении стека, но у меня возникла та же проблема, и я решил ее, поэтому я подумал, что после нескольких часов поиска в сети, чтобы найти решение, было бы неплохо ответить на него.

Мое решение состоит в том, чтобы создать подкласс для NSClipView со следующим кодом для drawRect ...

- (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];
}

Затем необходимо создать экземпляр подкласса и установить его с помощью селектора setContentView.

Вам также необходимо перекрашивать представление клипа каждый раз, когда изменяется размер представления контента.Если у вас настроено представление содержимого для изменения размера холста, когда пользователь этого захочет, тогда, если вы не перекрасите представление клипа, некоторые неприятные следы тени останутся позади.

Вам не нужно возиться с клипамикак предлагали другие.

Надеюсь, это поможет!

0 голосов
/ 03 февраля 2013

Вам необходимо вставить содержимое в представление документа, чтобы освободить место для отображения тени, затем отодвинуть вид назад и задать тень для него. Пример:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...