マスク画像を使用してUIImageView
を特定の形状にするには、何が必要かと考えていました。私が理解していることから、マスクを作成するには、白い背景の上にすべて黒のマスクの形をした画像が必要です。たとえば、次のようなものです。
まず第一に、これは画像ビューを形作るのに十分です、そしてもしそうなら、どうすればそれをSwift 3?で行うことができますか? C.上の画像をUIImageView
に割り当ててから、画像ビューをmask
のUIImageView
プロパティに割り当ててみました。
self.defaultImageView.mask = self.maskImageView
これは何もしませんでした。 self.maskImageView
消えます(両方の画像ビューがストーリーボードを介して追加され、IBOutlet
プロパティを使用して接続されます)。私は何かをするのを忘れていると確信しています。これほど単純なことはできません。誰かが私を助けてくれたら幸いです。私が言ったように、私はストーリーボードのまったく同じ場所に、互いの上に両方の画像ビューを配置しました。
UPDATE:ストーリーボードからマスクを削除した後、プログラムでマスクを設定する最初の試み。
let layer:CALayer = CALayer()
let mask:UIImage = UIImage(named: "Black-Star-Photographic-Agency")!
layer.contents = mask
layer.frame = CGRect(x: 0, y: 0, width: ((self.defaultImageView.image?.size.width)!), height: (self.defaultImageView.image?.size.height)!)
self.defaultImageView.layer.mask = layer
self.defaultImageView.layer.masksToBounds = true
その結果、画像ビューが完全に消えて、表示されなくなりました。私は何かをしているのですか、何かを忘れているのですか、それとも両方ですか?
Jpgとは異なり、透明度をサポートするpng画像を使用する必要があります。
Photoshopでは、画像は次のようになります。
あなたの形が黒か白かは関係ありません。重要なのは各ピクセルの透明度です。不透明な領域(この場合は黒)が表示され、透明な領域がトリミングされます。
編集:
ストーリーボードからマスクビューを作成する場合は、作成しないでください。ビュー階層の一部にはなりません。次のようにプログラムで追加するだけです。
let maskView = UIImageView()
override func viewDidLoad() {
super.viewDidLoad()
maskView.image = UIImage(named: "mask")
imageView.mask = maskView
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
maskView.frame = imageView.bounds
}
出力:
ここ はそれがどのように機能するかを示すためのテストプロジェクトです。
また、カスタムフレーム/画像を使用していて、マスクが正しく表示されない場合は、マスクのコンテンツモードを設定してみてください。
maskView.contentMode = .scaleAspectFit