Я использую этот код для создания слоя с прозрачным отверстием
let radius = min(self.view.frame.size.width,self.view.frame.size.height)
print(radius)
let path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height), cornerRadius: 0)
let circlePath = UIBezierPath(roundedRect: CGRect(x: 0, y: self.view.frame.size.height/2 - radius/2 , width: radius, height: radius), cornerRadius: radius/2)
path.append(circlePath)
path.usesEvenOddFillRule = true
fillLayer.path = path.cgPath
fillLayer.fillRule = kCAFillRuleEvenOdd
fillLayer.fillColor = UIColor.black.cgColor
fillLayer.opacity = 0.5
view.layer.addSublayer(fillLayer)
, он отлично работает, если начальный вид - книжный или альбомный, как показано на изображении
![enter image description here](https://i.stack.imgur.com/qj7RW.jpg)
Однако, если вид меняется с портретного на ландшафтный или ландшафтный на портретный
Слой неправильно ориентирован, как показано
![enter image description here](https://i.stack.imgur.com/zqJPb.jpg)