読者です 読者をやめる 読者になる 読者になる

SwiftでhitTestのイベント透過

Swift プログラミング

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の宣言をオプショナル型でするだけだった。。