web-dev-qa-db-ja.com

UIImageViewの背後に影を作成する最良の方法は何ですか

背後に影を追加したいUIImageViewがあります。私はAppleがプロパティとしてそれを持っていたことを望んでいますが、私たちプログラマーにとって多くのものを難しくしなければならないので、この質問をする必要があります。

73
Jab

これを行うには、より簡単で簡単な方法があります。 UIImageViewはUIViewを継承するため、レイヤープロパティがあります。レイヤーのシャドウプロパティとバムにアクセスして、シャドウを取得できます。

UIImageViewをnibファイルへのIBOutletとして持っている場合、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

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
}
209
Alex Nguyen

最も簡単なことは、画像ビューにシャドウレイヤーを追加することです。

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

ビューの[クリップサブビュー]がオフになっていることを確認します

10
Ben Gottlieb

拡張機能を備えたSwiftソリューション。サブクラス化は必要ありません。 myImage.addShadow()からviewDidLoad()を呼び出します。これはUIViewUIImageViewで機能するはずです。

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
    }
}
8
Boris Y.

それに加えて、白い境界線と影を作りたい場合は、そのコードを使用できます:

//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];
4
mturhan55