У меня есть UIImageView, что я хочу добавить тень позади. Я хочу, чтобы у яблока было это свойство, но нам нужно много сделать для программистов, поэтому мне нужно задать этот вопрос.Каков наилучший способ создать тень за UIImageView
ответ
Там это лучше и проще сделать это. UIImageView наследует UIView, поэтому он обладает свойством layer. Вы можете получить доступ к свойствам тени тени и bam, у вас есть тень.
Если у вас есть UIImageView как IBOutlet для файла nib, вы можете просто реализовать awakeFromNib , например.
Objective-C
- (void)awakeFromNib {
imageView.layer.shadowColor = [UIColor purpleColor].CGColor;
imageView.layer.shadowOffset = CGSizeMake(0, 1);
imageView.layer.shadowOpacity = 1;
imageView.layer.shadowRadius = 1.0;
imageView.clipsToBounds = NO;
}
Не забудьте #import "QuartzCore/CALayer.h"
Для Swift, вы можете это сделать несколькими способами. Создайте расширение класса, подкласс или экземпляр imageView. Какой бы ни был способ, процесс тот же, что и при изменении свойства теневого слоя.
Swift 3
override func awakeFromNib() {
super.awakeFromNib()
imageView.layer.shadowColor = UIColor.purple.cgColor
imageView.layer.shadowOffset = CGSize(width: 0, height: 1)
imageView.layer.shadowOpacity = 1
imageView.layer.shadowRadius = 1.0
imageView.clipsToBounds = false
}
Самое простое, что нужно сделать, это добавить тень слоя на ваш взгляд изображения:
CALayer *layer = [CALayer layer];
CGRect bounds = self.bounds;
layer.bounds = bounds;
layer.position = CGPointMake(bounds.size.width/2 + 3, bounds.size.height/2 + 3);
layer.backgroundColor = [UIColor colorWithWhite: 0.25 alpha: 0.55].CGColor;
layer.zPosition = -5;
[self.layer addSublayer: layer];
Убедитесь, что «Клип подвиды» выключен для зрения
Почему вы делаете ограничения CGRect *, когда вы можете просто установить границы слоя на self.bounds? И где тень появляется на месте? – Jaba
Я создаю временную переменную для удобочитаемости; типизация self.bounds немного длиннее, чем просто границы, и делает код немного менее удобочитаемым. Этот слой - это тень. Конечно, это предполагает, что у вас есть квадратное изображение; если вы делаете непрямоугольный образ, вам придется использовать настраиваемую маску изображения. –
Ну, я хочу, чтобы он исчез, и я не знаю, как бы я это сделал. Просьба помочь! – Jaba
в дополнение к этому, если вы хотите, чтобы сделать белую рамку и тени вы можете использовать этот код:
//shadow part
imageView.layer.shadowColor = [UIColor blackColor].CGColor;
imageView.layer.shadowOffset = CGSizeMake(0, 1);
imageView.layer.shadowOpacity = 1;
imageView.layer.shadowRadius = 1.0;
//white border part
[imageView.layer setBorderColor: [[UIColor whiteColor] CGColor]];
[imageView.layer setBorderWidth: 2.0];
Но в этом случае, как сделать теневую часть свойства .image, скажем, сохранить или показать это изображение где-то еще? – alejandrormz
Вы не можете. Вы не редактируете изображение, вы его украшаете для отображения. Фактически редактировать растровые данные намного сложнее. Подумайте, просто украшая изображение везде, где вы его показываете, поскольку вы вообще не хотите обрабатывать изображения, чтобы добавлять такие эффекты, если только вы не делаете этого в задней части, которая обрабатывает их партиями. – Tim
UIView набор shadowlayer
и addSubview: ваше изображениеView
Можете ли вы рассказать об этом? Благодаря! –
Быстрое решение с расширением. Подкласс не требуется. Позвоните myImage.addShadow()
от viewDidLoad()
. Это должно работать для UIView
и UIImageView
.
extension UIView {
func addShadow() {
layer.shadowColor = UIColor.black.cgColor
layer.shadowOffset = CGSize(width: 0, height: 0)
layer.shadowOpacity = 0.5
layer.shadowRadius = 5
clipsToBounds = false
}
}
Скорее всего, вы хотите использовать функции рисования сердечника для рисования тени. –
Эти вопросы очень похожи на ваши: http://stackoverflow.com/questions/962827/uiimage-shadow, http://stackoverflow.com/questions/1943087/i-am-trying-to-add-a-drop -shadow-to-a-uimageview –