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
содержащую эту тень как подпредставление и переместите ее, как только представление на правой стороне будет анимировано. (например, нарисуйте эту тень со слоями или основной графикой)