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