iOS: создать одностороннюю тень

У меня есть макет стиля меню ниже, который имитирует 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];

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

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

3 ответа

Решение

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

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

Согласно документации CALayer, "указание явного пути обычно улучшает производительность рендеринга".

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

UIEdgeInsets contentInsets = UIEdgeInsetsMake(10, 0, 0, 0);
CGRect shadowPathExcludingTop = UIEdgeInsetsInsetRect(self.bounds, contentInsets);
self.layer.shadowPath = [UIBezierPath bezierPathWithRect:shadowPathExcludingTop].CGPath;

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

Другие вопросы по тегам