美文网首页
iOS类似气泡弹窗的系统实现方法(UIPopoverPresen

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

作者: Mr_xuy | 来源:发表于2021-01-17 23:39 被阅读0次

    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

    相关文章

      网友评论

          本文标题:iOS类似气泡弹窗的系统实现方法(UIPopoverPresen

          本文链接:https://www.haomeiwen.com/subject/cvazaktx.html