swift4 UIScrollView滑動手勢與UIPageViewController沖突解決辦法


 

UIPageViewController常用多頁管理中,可能會碰到滑動手勢與子頁面中的UIScrollView滾動視圖出現沖突。

下圖是我們需要的效果

 

 

自定義一個scrollview 看代碼就ok了

class PanScroll: UIScrollView,UIGestureRecognizerDelegate {

    override init(frame: CGRect) {

        super.init(frame: frame)

    }

    

    required init?(coder aDecoder: NSCoder) {

        fatalError("init(coder:) has not been implemented")

    }

    

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {

        

        if let swip = otherGestureRecognizer as? UIPanGestureRecognizer{

            

            if self.contentOffset.x <= 1 && self.commitTranslation(translation: swip.translation(in: self)) == .right {

                

                return true

            }

            

            if self.contentOffset.x >= UIScreen.main.bounds.size.width && self.commitTranslation(translation: swip.translation(in: self)) == .left {

                

                return true

            }

        }

        return false

    }

    

    ///MARK: pan手勢方向

    enum panDic {

        case upward,down,left,right,none

    }

    

    func commitTranslation(translation:CGPoint ) ->panDic{

        let absX = fabs(translation.x)

        let absY = fabs(translation.y)

        

        // 設置滑動有效距離

        if max(absX, absY) < 2{

            return .none

        }

        

        if absX > absY  {

            if (translation.x<0) {return .left}else{return .right}

        } else if absY > absX {

            if (translation.y<0) {return .upward}else{return .down}

        }

        return .none

    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM