iOS类似气泡弹窗的系统实现方法(UIPopoverPresen

2021-01-17  本文已影响0人  Mr_xuy

iOS上类似微信右上角的气泡弹窗,使用系统提供的api实现如下(三角箭头的目前居中,如何实现偏移,目前没找到方法)。


Ex1气泡.jpg
    // 在iPad端只实现本方法即可显示气泡弹窗,在iPhone上需要实现下面的代理方法并返回 .none 才可以。
    @objc private func button2Action(sender: UIButton) {
        // 弹出气泡的控制器
        let vc = UIViewController()
        vc.view.backgroundColor = .red
        // 设置弹出样式
        vc.modalPresentationStyle = .popover
        // 设置弹出窗口的大小
        vc.preferredContentSize = CGSize(width: 100, height: 100)
        let popoverPresentation = vc.popoverPresentationController
        popoverPresentation?.sourceView = sender // 箭头指向的view
        // 弹出界面的起点(箭头指向的起点)。
        // 当箭头朝上时(.up)看效果是以指向的 sender起点为原点,最终箭头坐标为(boubds.x + bounds.width/2, bounds.y + bounds.height/2)
        popoverPresentation?.sourceRect = sender.bounds
//        popoverPresentation?.popoverLayoutMargins = UIEdgeInsets(top: 10, left: 110, bottom: 10, right: 10)
        // 弹窗默认带的箭头方向(整个弹窗方向也会随之变化)
        popoverPresentation?.permittedArrowDirections = .up
        popoverPresentation?.backgroundColor = .green
        // iPhone上若要展示气泡弹窗需实现此代理的一个方法
        popoverPresentation?.delegate = self
        present(vc, animated: true, completion: nil)
    }

    /// 在iPhone上若要实现气泡弹窗,需要实现此方法并且返回 .none,否则弹出界面会充满全屏
    /// 此方法为 UIAdaptivePresentationControllerDelegate 协议提供的方法,UIPopoverPresentationControllerDelegate协议遵循此协议
    /// - Parameter controller:
    /// - Returns: .none
    func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
        print("++++++++++++++++++")
        return .none
    }

如上代码实现的效果如下图Ex3气泡


Ex2气泡.jpg
上一篇下一篇

猜你喜欢

热点阅读