iOS: создать одностороннюю тень - PullRequest
9 голосов
/ 18 февраля 2012

У меня есть макет стиля меню ниже, который имитирует Facebook.Я бы хотел, чтобы на левой стороне были тени, как показано ниже, однако код, который я использую с тенями слоев, делает приложение LAGGY.Я не смог найти хорошее альтернативное решение.У кого-нибудь есть альтернатива для создания тени, которая не влияет на производительность приложения?

[self.navController.view.layer setShadowOffset:CGSizeMake(0, 1)];
[self.navController.view.layer setShadowColor:[[UIColor darkGrayColor] CGColor]];
[self.navController.view.layer setShadowRadius:8.0];
[self.navController.view.layer setShadowOpacity:0.8];

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

enter image description here

Ответы [ 3 ]

11 голосов
/ 18 февраля 2012

Это должно помочь указать теневой путь, например,

CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:self.navController.view.layer.bounds].CGPath;
[self.navController.view.layer setShadowPath:shadowPath]

В соответствии с документацией CALayer , «Указание явного пути обычно улучшает производительность рендеринга».

4 голосов
/ 17 апреля 2014

Вы можете просто вставить границы видов и задать путь тени:

UIEdgeInsets contentInsets = UIEdgeInsetsMake(10, 0, 0, 0);
CGRect shadowPathExcludingTop = UIEdgeInsetsInsetRect(self.bounds, contentInsets);
self.layer.shadowPath = [UIBezierPath bezierPathWithRect:shadowPathExcludingTop].CGPath;
0 голосов
/ 18 февраля 2012

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

...