使用swift 自定义的popView,从底部弹出view

9 篇文章 0 订阅

在我们的项目中,我们经常会需要从控制器底部弹出一个View。有的人会去选择一个第三方的Demo,其实这个功能写起来还是蛮简单的。

直接上代码了。

import UIKit

class ZXPopView: UIView {
   
    var contenView:UIView?
    {
        didSet{
           setUpContent()
        }
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func setUpContent(){
        
        if self.contenView != nil {
            self.contenView?.y = self.height
            self.addSubview(self.contenView!)
        }
        self.backgroundColor = UIColor(displayP3Red: 0, green: 0, blue: 0, alpha: 0.4)
        self.isUserInteractionEnabled = true
        //为view添加手势。
        self.addGestureRecognizer(UITapGestureRecognizer.init(target: self, action: #selector(dismissView)))
        
    }
    
    
    @objc func dismissView(){
        UIView.animate(withDuration: 0.3, animations: {
            self.alpha = 0
        }) { (true) in
           self.removeFromSuperview()
           self.contenView?.removeFromSuperview()
        }
    }
    func showInView(view:UIView){
        if (view == nil && contenView == nil) {
            return
        }
        
        view.addSubview(self)
       UIView.animate(withDuration: 0.3, animations: {
             self.alpha = 1.0
            self.contenView?.y = self.height-(self.contenView?.height)!
        }, completion: nil)
    }
//在Window上展示,当我们有的界面可能不能获取某个view上的时候,可以Window上展示contentView
    func showInWindow(){
        
        
        UIApplication.shared.keyWindow?.addSubview(self)
        
        UIView.animate(withDuration: 0.3, animations: {
            self.alpha = 1.0
            self.contenView?.y = self.height-(self.contenView?.height)!
        }, completion: nil)
    }

}

其实原理很简单。自定义一个view,在view添加一个手势,利用这个手势来调用自己消失的方法。在view中放一个contentview。用来展示你要显示View,利用uiview动画,调整contenview的y值,来实现一个底部弹出效果,利用alfa值设置背景view的阴影效果。当然我们直接将我们自定义View直接添加要显示的父view中,当然也可以直接将自定义View添加到KeyWindow中。方法类似。

下面的代码是如何调用这个自定义的popView

 let popview = ZXPopView.init(frame: self.view.bounds)

       popview.contenView = UIView.init(frame: CGRect.init(x: 0, y: KScreenW - 100, width: KScreenW, height:100 ))

        popview.contenView?.backgroundColor = UIColor.orange

       popview.showInView(view: self.view)

我将继续完善这篇博客,代码后续会进一步的补齐。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在iOS的开发中,使用Swift可以实现底部弹出视图。以下是一个简单的实现方式: 首先,需要创建一个底部弹出视图的ViewController。可以在Storyboard中创建一个新的ViewController,并设置其底部约束为屏幕底部,高度为底部弹出视图的高度。可以在该ViewController中添加需要显示的内容,比如按钮、标签等。 然后,在需要弹出底部视图的地方,可以通过 present 方法来显示这个ViewController。可以在当前的ViewController中添加一个按钮,当点击该按钮时,调用如下代码来显示底部弹出视图: ```swift // 创建底部弹出视图的ViewController let bottomViewController = storyboard?.instantiateViewController(withIdentifier: "BottomViewController") as! BottomViewController // 设置底部弹出视图的 ModalPresentationStyle 为 .overCurrentContext,使得弹出视图会覆盖当前视图 bottomViewController.modalPresentationStyle = .overCurrentContext // 设置底部弹出视图的 TransitioningDelegate;通过实现相关代理方法来自定义弹出视图的动画效果 bottomViewController.transitioningDelegate = self // 弹出底部视图 present(bottomViewController, animated: true, completion: nil) ``` 在当前ViewController中,需要增加一个扩展来实现底部弹出视图的自定义动画: ```swift extension ViewController: UIViewControllerTransitioningDelegate { // 返回自定义的动画控制器对象 func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { return BottomViewAnimator(isPresenting: true) } // 返回自定义的动画控制器对象 func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { return BottomViewAnimator(isPresenting: false) } } ``` 在自定义动画控制器中,可以实现底部弹出视图的动画效果。可以通过使用 UIView 的动画方法来实现位移、透明度等动画效果。 最后,需要创建一个自定义的 Animator 类,实现 UIViewControllerAnimatedTransitioning 协议的相关代理方法来控制动画的展示和隐藏。 通过上述步骤,即可完成iOS底部弹出视图的实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值