如何使用UIPresentationController定制模态视图的呈现方式

蜗牛 互联网技术资讯 2024-06-01 16 0

要使用UIPresentationController来定制模态视图的呈现方式,首先需要创建一个自定义的PresentationController类,继承自UIPresentationController。在这个类中,可以重写一些方法来自定义模态视图的呈现效果。

下面是一个简单的示例代码,演示了如何使用UIPresentationController来定制模态视图的呈现方式:

import UIKit

class CustomPresentationController: UIPresentationController {
    
    override var shouldRemovePresentersView: Bool {
        return true // 是否移除背景视图
    }
    
    override func presentationTransitionWillBegin() {
        // 在模态视图呈现之前执行的操作
        let dimmingView = UIView()
        dimmingView.frame = containerView!.bounds
        dimmingView.backgroundColor = UIColor.black.withAlphaComponent(0.5)
        dimmingView.alpha = 0.0
        containerView?.insertSubview(dimmingView, at: 0)
        
        presentedViewController.transitionCoordinator?.animate(alongsideTransition: { _ in
            dimmingView.alpha = 1.0
        }, completion: nil)
    }
    
    override func dismissalTransitionWillBegin() {
        // 在模态视图消失之前执行的操作
        containerView?.subviews.first?.alpha = 0.0
    }
    
    override func containerViewWillLayoutSubviews() {
        // 设置模态视图的frame
        presentedView?.frame = frameOfPresentedViewInContainerView
    }
    
    override func size(forChildContentContainer container: UIContentContainer, withParentContainerSize parentSize: CGSize) -> CGSize {
        return CGSize(width: parentSize.width, height: parentSize.height * 0.5) // 设置模态视图的大小
    }
    
    override var frameOfPresentedViewInContainerView: CGRect {
        guard let containerView = containerView else { return .zero }
        let presentedViewSize = size(forChildContentContainer: presentedViewController, withParentContainerSize: containerView.bounds.size)
        return CGRect(x: 0, y: containerView.bounds.height * 0.5, width: presentedViewSize.width, height: presentedViewSize.height)
    }
}

在创建自定义PresentationController类后,需要在呈现模态视图的时候指定这个PresentationController类,例如:

let presentedViewController = YourViewController()
presentedViewController.modalPresentationStyle = .custom
presentedViewController.transitioningDelegate = self
presentedViewController.presentationController?.delegate = self

self.present(presentedViewController, animated: true, completion: nil)

需要注意的是,在使用自定义PresentationController时,需要设置模态视图的modalPresentationStyle为.custom,并且设置transitioningDelegate为自定义PresentationController。同时,也可以设置delegate为自定义PresentationController来进一步定制模态视图的呈现方式。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo6@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论

有免费节点资源,我们会通知你!加入纸飞机订阅群

×
天气预报查看日历分享网页手机扫码留言评论Telegram