Каков наилучший способ создать тень за UIImageView - PullRequest
73 голосов
/ 11 января 2010

У меня есть UIImageView, к которому я хочу добавить тень. Хотелось бы, чтобы у Apple это было свойством, но нам, программистам, нужно многое усложнить, поэтому мне нужно задать этот вопрос.

Ответы [ 4 ]

209 голосов
/ 02 октября 2010

Есть лучший и более простой способ сделать это. UIImageView наследует от UIView, поэтому он имеет свойство layer. Вы можете получить доступ к свойствам слоя и тени, у вас есть тень.

Если у вас есть 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. Как бы то ни было, процесс одинаков при изменении свойства shadows.

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
}
10 голосов
/ 11 января 2010

Самое простое, что нужно сделать, это добавить слой тени к вашему изображению:

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];

Убедитесь, что «Клип Subviews» отключен для просмотра

8 голосов
/ 10 февраля 2017

Быстрое решение с расширением. Подклассы не требуются. Звоните 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
    }
}
4 голосов
/ 09 мая 2012

в дополнение к этому, если вы хотите сделать белую рамку и тень, вы можете использовать этот код:

//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];
...