Я пытаюсь округлить и отбросить тень от одного производного класса NSView с помощью следующего кода:
[graphHostView setWantsLayer:YES];
graphHostView.layer.shadowRadius = 5.0;
graphHostView.layer.shadowOffset = NSMakeSize(10.0f, -10.0f);
graphHostView.layer.shadowOpacity = 0.5f;
graphHostView.layer.needsDisplayOnBoundsChange = YES;
graphHostView.layer.masksToBounds = YES;
graphHostView.layer.cornerRadius = 10.0;
[graphHostView.layer setNeedsLayout];
Затенение работает только в том случае, если нет округления и не имеет значения, происходит ли округление первым иливторой.Я также могу опускать тени косвенно из вида с помощью кода:
NSShadow * myShadow = [[NSShadow alloc] init];[myShadow setShadowOffset: NSMakeSize (10.0f, -10.0f)];[myShadow setShadowBlurRadius: 3.0];[graphHostView setShadow: myShadow];[myShadow set];
с абсолютно таким же эффектом.Я перепробовал все комбинации display, setNeedsLayout и других свойств и методов, и ничего не работает.
Мне кажется невероятным, что это не работает, в конце концов, NSWindow округлено и затенено ...
Напомним, я должен добавить, что я пытался нанести тень также на слой подложки с тем же результатом.Поскольку masksToBounds может маскировать все, что находится за пределами границ, разумно полагать, что тень не может быть отображена на одном слое.Также ясно, что маскирование влияет на все, что можно добавить к этому слою также позже, после маскировки, поскольку порядок установки тени и маски не влияет и не влияет на результат.
Итак, вопросТем не менее, как добиться желаемого результата, не затеняя еще один NSView ниже, если это вообще возможно?