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

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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 最近项目有一个需求需要实现一个类似气泡的popover弹窗,就是点击一个按钮的时候在按钮的某一个方向弹出一个...
    alpha_feng阅读 8,639评论 0 2
  • 夜莺2517阅读 127,810评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 11,846评论 1 6
  • 我是一名过去式的高三狗,很可悲,在这三年里我没有恋爱,看着同龄的小伙伴们一对儿一对儿的,我的心不好受。怎么说呢,高...
    小娘纸阅读 8,731评论 4 7
  • 那一年,我选择了独立远行,火车带着我在前进的轨道上爬行了超过23个小时; 那一年,我走过泥泞的柏油路,在那个远离故...
    木芽阅读 5,576评论 4 5