SwiftでhitTestのイベント透過
Objective-CにはhitTestというメソッドがあって、それを使えばそのビューを透過して下のビューのイベントを動作させることができていた。
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { UIView *view = [super hitTest:point withEvent:event]; if (view == self) { return nil; } return view; }
こういうの。 Swiftでそのまま同じコード書いたらビルドエラーが出た。 オプショナル型をちゃんと理解してればこんなのは簡単にSwiftで書けるんだろうけど、自分は全く分かっていなかったので30分くらい試行錯誤してしまった。。
Swiftでは以下のように書いたら動いた。
override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? { var hitView:UIView? = super.hitTest(point, withEvent: event) if(self == hitView) { return nil } return hitView }
UIViewの宣言をオプショナル型でするだけだった。。