У меня есть этот файл PNG, который я хотел бы использовать в качестве маски для UIView
.Swift: Mask Alignment + Auto-Layout Constraints
мнение должно быть:
- 20 пикселей/точек в с каждой стороны
- Идеальный квадратный
- По центру вертикально
Я установил следующие ограничения для достижения этой цели:
Однако, похоже, эти ограничения не очень хорошо сочетаются с масками. Когда эти ограничения и mask
собственности установлены, я получаю следующее:
, но я хотел бы вид, чтобы выглядеть так же, как маски выше, за исключением оранжевый (The backgroundColor
здесь только для simplicity- позже я добавить подвидов, которые должны быть замаскированы)
Однако, когда никакие ограничения не установлены, mask
, кажется, работает нормально, и я получаю что-то вроде этого (borderColor
добавлен только для визуальных целей):.
Вот мой код (viewForLayer
это UIView я сделал в раскадровке):
viewForLayer.layer.borderColor = UIColor.redColor().CGColor
viewForLayer.layer.borderWidth = 10
var mask = CALayer()
mask.contents = UIImage(named: "TopBump")!.CGImage
mask.frame = CGRect(x: 0, y: 0, width: viewForLayer.bounds.width, height: viewForLayer.bounds.height)
mask.position = CGPoint(x: viewForLayer.bounds.width/2, y: viewForLayer.bounds.height/2)
viewForLayer.layer.mask = mask
viewForLayer.backgroundColor = UIColor.orangeColor()
Проблема в том, однако, что в настоящее время точка зрения не правильный размер или в правильном положении, он Безразлично «Следуйте правилам выше». «Представление должно быть:». Как я могу корректно работать с mask
, а ограничения автомакета установлены одновременно?
Вы уверены, что этот 'viewForLayer' имеет правильный размер? – Kametrixom
Не уверен, что вы имеете в виду под правильным размером, но я устанавливаю ограничения в раскадровке, и когда я запускаю его, не устанавливая свойство 'mask' слоя, это оранжевый квадрат, который занимает то же место, что и при маскировке, за исключением того, что нижний правый угол, который, очевидно, также оранжевый. – 5813
Попытайтесь вставить оранжевый вид с помощью рамки, чтобы увидеть, правильны ли ограничения. Я подозреваю, что оранжевый вид фона расширяется, пройдя правую границу экрана. – Laurent