|
//
// GestureRecognizerProxy.swift
// PaiaiUIKit
//
// Created by ffib on 2019/1/28.
// Copyright © 2019 yb. All rights reserved.
//
import Foundation
class GestureRecognizerProxy: NSObject, UIGestureRecognizerDelegate {
weak var delegate: GestureRecognizerDelegate?
init(target: GestureRecognizerDelegate) {
delegate = target
}
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
guard let d = delegate else { return false }
return d.gestureRecognizerShouldBegin(gestureRecognizer)
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
guard let d = delegate else { return false }
return d.gestureRecognizer(gestureRecognizer, shouldReceive: touch)
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
guard let d = delegate else { return false }
return d.gestureRecognizer(gestureRecognizer, shouldRecognizeSimultaneouslyWith: otherGestureRecognizer)
}
}
extension UIGestureRecognizer {
private struct AssociatedKeys {
static var proxyKey = "GestureRecognizerProxyKey"
}
private var proxy: GestureRecognizerProxy? {
get { return objc_getAssociatedObject(self, &AssociatedKeys.proxyKey) as? GestureRecognizerProxy }
set { objc_setAssociatedObject(self, &AssociatedKeys.proxyKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) }
}
func setDelegate(_ target: GestureRecognizerDelegate) {
proxy = GestureRecognizerProxy(target: target)
delegate = proxy
}
}
|