首页 文章

Swift:UIPanGestureRecognizer在从另一个类调用时不起作用

提问于
浏览
0

我有一个UIViewController,我想添加一个Pan Gesture识别器,我打算做的是创建另一个处理手势和其他功能的类,所以在init()中我得到了对UIViewController.view的引用然后我添加手势识别器,其代表是自我 . 但问题是手势的动作没有开始 . 即使它从UIViewController添加时会触发

这是我的代码片段:

// Initializer of UISwipeView
init(Target target: UIView!) {
    super.init();

    // Keep reference to the given view (target)
    self.target = target;

    // if traget is't nill
    if(target != nil) {
        // Add Pan Gesture Recognizer
        gestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(UISwipeView.didPaned))
        gestureRecognizer.delegate = self;
        self.target.addGestureRecognizer(gestureRecognizer);
    }
}

以下是我如何从UIViewController的viewDidLoad()方法中使用它

let swipeView: UISwipeView = UISwipeView(Target: self.view);

1 回答

  • 0

    你最好将手势识别器添加到你的swipeView中(也许你应该重命名你的类,因为它看起来像你给它的名字的UIKit的一部分),并实现swipeView的委托,所以当用户调用swipes和UISwipeView.didPaned,然后通知代理已发生这种情况 .

    protocol SwipeViewDelegate: class {
        func userDidSwipe(_ gestureRecognizer: UIPanGestureRecognizer)
    }
    

    在SwipeView中:

    class SwipeView: UIView {
        weak var delegate: SwipeViewDelegate?
    
        init(withFrame frame: CGRect, delegate: SwipeViewDelegate) {
    
            self.delegate = delegate
    
            super.init(frame: frame)
    
            // add your gesture recognizer stuff here
            self.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(SwipeView.didPan(_:))))
    
            // etc, etc
        }
    
        func didPan(_ gestureRecognizer: UIPanGestureRecognizer) {
            self.delegate?.userDidSwipe(gestureRecognizer)
        }
    }
    

    在添加SwipeView的viewController中,您必须实现SwipeViewDelegate协议,并在实例化SwipeView时将自己作为委托传递给自己 .

    (没有任何机会实际运行任何此类,希望没有错别字等)

相关问题