Я пытаюсь округлить и отбросить тень из одного производного класса 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]; [набор моих теней];
с совершенно таким же эффектом. Я пробовал все комбинации отображения, setNeedsLayout и других свойств и методов, и ничего не работает.
Мне кажется невероятным, что это не работает, ведь NSWindow закруглен и затенен...
Напомню, что я должен добавить, что я пытался применить тень также к фоновому слою с тем же результатом. Поскольку masksToBounds, как ожидается, будет маскировать все, что выходит за границы, разумно предположить, что тень не может отображаться на том же слое. Также ясно, что маскирование влияет на все, что можно было бы добавить к этому слою и позже, после маскирования, так как порядок установки тени и маски не влияет на результат.
Итак, вопрос все еще в том, как добиться желаемого результата, не управляя другим NSView ниже с тенью, если это вообще возможно?