Добавить маску вычитания поверх UIView - PullRequest
0 голосов
/ 09 марта 2019

Я хочу поместить UIView поверх другого UIView в качестве маски вычитания. Возможно ли это сделать?

У меня прямоугольная фотография, и я хочу наложить на нее маску с закругленными черными углами. Я не хочу ставить закругленные углы на самой фотографии. По сути, маска напоминает фоторамку, которую вы можете просматривать.

Photo of a tree with a mask rounding the corners

Ответы [ 2 ]

0 голосов
/ 09 марта 2019

У меня есть идея, похожая на другую маску, но я просто использую маску UIView.

             let maskView = UIView.init()
            maskView.frame = view.bounds


            let shape = CAShapeLayer.init()
            shape.path =  UIBezierPath.init(ovalIn: maskView.bounds).cgPath
            shape.fillColor = UIColor.white.cgColor


            maskView.layer.addSublayer(shape)
            maskView.backgroundColor = UIColor.init(red: 1.0, green: 1.0, blue: 1.0, alpha: 0.0)
            view.mask = maskView // view is the imageView.
0 голосов
/ 09 марта 2019

Я сделал это один раз, используя этот в качестве ссылки.Это в основном настройка CAShapeLayer на UIView в верхней части вашего UIImageView.Вот что вам нужно:

// Add image view to the root view
let image = UIImage(named: "SomeImage.jpg")
let imageView = UIImageView(frame: view.bounds)
imageView.image = image
view.addSubview(imageView)

// Add mask view on the of image view
let maskView = UIView(frame: view.bounds)
maskView.backgroundColor = .black
view.addSubview(maskView)

// The layer that defines your maskView's behavior
let maskLayer = CAShapeLayer()
maskLayer.frame = maskView.bounds

// Create the frame for the circle.
let radius: CGFloat = 100.0
let roundedRectPath = UIBezierPath(roundedRect: maskView.frame, cornerRadius: radius)

let path = UIBezierPath(rect: maskView.bounds)

// Append the rounded rect to the external path
path.append(roundedRectPath)

maskLayer.fillRule = .evenOdd
maskLayer.path = path.cgPath
maskView.layer.mask = maskLayer

А вот и результат:

enter image description here

Надеюсь, что поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...