中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS閱讀器與直播的控件重疊滑動交互怎么實現

發布時間:2022-08-04 11:19:53 來源:億速云 閱讀:111 作者:iii 欄目:開發技術

這篇文章主要介紹“iOS閱讀器與直播的控件重疊滑動交互怎么實現”,在日常操作中,相信很多人在iOS閱讀器與直播的控件重疊滑動交互怎么實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”iOS閱讀器與直播的控件重疊滑動交互怎么實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

場景一

進行一個閱讀器項目的開發時,遇到了一個問題,

需要在點擊綠色區域時彈出一個菜單,因此在該區域加了一個View,

然而,當在這個區域滑動時,滑動手勢被綠色區域攔截,手勢無法傳遞到下面的 UIPageViewController 的 View 上

iOS閱讀器與直播的控件重疊滑動交互怎么實現

描述

閱讀器上方,搖啊搖,出來一個綠色的菜單

要求可以點,也可以拖動

拖動是下方 UIPageViewController 的事情。

手勢被綠色視圖擋住了,需要一個透傳

思路:

把綠色視圖的 hitTest View ,交給正在看的閱讀器,那一頁

這樣拖動綠色視圖,也可以滑動

class GreenView: UIView{
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        var afterThat = next
        while afterThat != nil{
            if let tmp = afterThat as? ViewController{
                if let target = tmp.pagedController.viewControllers?.first{
                    return target.view
                }
            }
            else{
                afterThat = afterThat?.next
            }
        }
        return nil
    }
}

同時要捕捉綠色視圖的點擊事件,

通過閱讀頁面的視圖控制器,來捕捉

class ContentCtrl: UIViewController {
    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        if let touch = touches.first, greenFrame.contains(touch.location(in: view)){
            NotificationCenter.default.post(name: .hitGreen, object: nil)
        }
    }
}

場景二

用戶在直播室,吃瓜

來了一條重要的消息,必須要用戶處理,

用戶退出直播室,也要展示,

同時不影響用戶給主播送禮物

iOS閱讀器與直播的控件重疊滑動交互怎么實現

如上圖,用戶看到消息,也可以滑動閱讀器

( 在消息的區域,滑動無效 )

思路肯定是 window,

脫離控制器,也能展示

實現一,創建新的 window

class MsgWindow: UIWindow {
    init() {
        let originX: CGFloat = 50
        let width = UIScreen.main.bounds.width - originX * 2
        // 窗口大小固定
        super.init(frame: CGRect(x: originX, y: 100, width: width, height: 150))
        clipsToBounds = true
        layer.cornerRadius = 8
        backgroundColor = UIColor.cyan
        // 提升 zIndex
        windowLevel = UIWindow.Level.statusBar + 100
        isHidden = true
    }
    func show(){
         // 展現的必要配置
        if windowScene == nil, let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene{
            windowScene = scene
        }
        isHidden = false
    }
}

實現 2,使用老的 window 和 View

class MsgView: UIView {
    init() {
        let originX: CGFloat = 50
        let width = UIScreen.main.bounds.width - originX * 2
        super.init(frame: CGRect(x: originX, y: 100, width: width, height: 150))
        clipsToBounds = true
        layer.cornerRadius = 8
        backgroundColor = UIColor.cyan
        // 設置 z Index
        layer.zPosition = CGFloat.infinity
        isHidden = true
    }
    func show(){
        // 找到 key window, 
        // 把視圖,添加上去
        let scenes = UIApplication.shared.connectedScenes
        for sce in scenes{
            if let windowScene = sce as? UIWindowScene, windowScene.activationState == .foregroundActive , let win = windowScene.windows.first{
                isHidden = false
                win.addSubview(self)
                return
            }
        }
    }
}

場景三

用戶在直播室,吃瓜

來了一條重要的消息,必須要用戶處理,

用戶退出直播室,也要展示,

同時不影響用戶給主播送禮物

這條消息,很長

( 在消息的區域,滑動有效 )

思路, 擴展場景 2 的第 2 種實現

iOS閱讀器與直播的控件重疊滑動交互怎么實現

一句話,限定了響應范圍,

重寫了 func point(inside

class MsgView: UIView {
    let rect : CGRect = {
        let originX: CGFloat = 50
        let width = UIScreen.main.bounds.width - originX * 2
        return CGRect(x: originX, y: 100, width: width, height: 400)
    }()
    let btnRect = CGRect(x: 10, y: 10, width: 50, height: 50)
    init() {
        super.init(frame: rect)
        clipsToBounds = true
        layer.cornerRadius = 8
        backgroundColor = UIColor.clear
        layer.zPosition = CGFloat.infinity
        isHidden = true
        let bg = UIView(frame: CGRect(origin: .zero, size: rect.size))
        bg.backgroundColor = UIColor.cyan
        bg.alpha = 0.5
        addSubview(bg)
        let btn = UIButton(frame: btnRect)
        btn.backgroundColor = UIColor.red
        btn.layer.cornerRadius = 8
        btn.backgroundColor = UIColor.white
        addSubview(btn)
        btn.addTarget(self, action: #selector(hide), for: .touchUpInside)
    }
    @objc func hide(){
        isHidden = true
    }
    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
        return btnRect.contains(point)
    }
}

到此,關于“iOS閱讀器與直播的控件重疊滑動交互怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

ios
AI

淮滨县| 漯河市| 上饶市| 将乐县| 夹江县| 宁远县| 阿拉善右旗| 泾源县| 鄱阳县| 河西区| 丹阳市| 合水县| 凤凰县| 黑水县| 稷山县| 菏泽市| 桑日县| 湘西| 界首市| 汉寿县| 乐都县| 玉屏| 清原| 军事| 章丘市| 盘山县| 赤城县| 大宁县| 阜新| 越西县| 乐业县| 东至县| 满城县| 日喀则市| 明星| 商丘市| 东城区| 林州市| 彰化县| 栾川县| 文昌市|