質問の透明なオーバーレイ部分について...
画面全体をオーバーレイするサブビューを作成してから、必要な部分を差し引くのが最も簡単だと思います。これが役立つかもしれないいくつかのSwiftコードです:
// Create a view filling the screen.
let overlay = UIView(frame: CGRectMake(0, 0,
UIScreen.mainScreen().bounds.width,
UIScreen.mainScreen().bounds.height))
// Set a semi-transparent, black background.
overlay.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.85)
// Create the initial layer from the view bounds.
let maskLayer = CAShapeLayer()
maskLayer.frame = overlay.bounds
maskLayer.fillColor = UIColor.blackColor().CGColor
// Create the frame for the portion that you want to remove.
// You could get this from a container view that holds all of
// the subviews that you want to see behind the overlay.
let rect = CGRectMake(50, 50, 100, 100)
// Create the path.
let path = UIBezierPath(rect: overlay.bounds)
maskLayer.fillRule = kCAFillRuleEvenOdd
// Append the rectangle to the path so that it is subtracted.
path.appendPath(UIBezierPath(rect: rect))
maskLayer.path = path.CGPath
// Set the mask of the view.
overlay.layer.mask = maskLayer
// Add the view so it is visible.
self.view.addSubview(overlay)
上記のコードの動作は次のとおりです。

私はCocoaPodsにライブラリを追加しました。これにより、長方形/円形の穴のある半透明のオーバーレイを作成して、ユーザーがオーバーレイの背後にあるビューを操作できるようになります。これを使用して、アプリの1つでこのチュートリアルを作成しました。

ライブラリはTAOverlayViewと呼ばれ、 Apache2.0ではオープンソースです。