首页 > 解决方案 > 点击一个 UIView 到全屏,然后再次点击回到小尺寸

问题描述

我有一个包含 6 个 UIView 的视图,vPreviews每个视图都播放实时流视频。

目标是:

  1. 当点击每个 UIView 之一时,它应该变成全屏。
  2. 再次点击,回到原点小屏布局

代码如下:

  1. 具有值的自定义点击手势
    class FullScreenTapGesture: UITapGestureRecognizer{
        var isFullScreen: Bool = false
        var index: Int?
    }
  1. 在中添加点击手势识别器viewDidLoad()
let gesture = FullScreenTapGesture(target: self, action: #selector(fullScreenTap))
vPreviews[0].addGestureRecognizer(gesture)
gesture.index = 0
  1. fullScreenTap 实现
@objc func fullScreenTap(sender: FullScreenTapGesture){
            if sender.isFullScreen{
                print("setsmall")
                setSmallScreenLayoutConstrains()
        //                sender.isFullScreen = false
            }else{
                print("setfull")
                setFullScreenLayoutConstrains(index: sender.index!)
        //                sender.isFullScreen = true
            }
            
                    // Animate to full screen
                    UIView.animate(withDuration: 0.8, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {

                        self.vc.view.layoutIfNeeded()

                    }) { (finished) in
                        // ...
                    }
        }
        
        func setSmallScreenLayoutConstrains(){
            vPreviews[0].pin.top().left().width(previewWidth).height(previewHeight).margin(padding,padding,0,0)
            vPreviews[1].pin.top().after(of: vPreviews[0]).width(previewWidth).height(previewHeight).margin(padding,padding,0,0)
            vPreviews[2].pin.top().after(of: vPreviews[1]).width(previewWidth).height(previewHeight).margin(padding,padding,0,0)
            
            vPreviews[3].pin.below(of: vPreviews[0]).left().width(previewWidth).height(previewHeight).margin(padding,padding,0,0)
            vPreviews[4].pin.below(of: vPreviews[0]).after(of: vPreviews[3]).width(previewWidth).height(previewHeight).margin(padding,padding,0,0)
            vPreviews[5].pin.below(of: vPreviews[0]).after(of: vPreviews[4]).width(previewWidth).height(previewHeight).margin(padding,padding,0,0)
        }
        
        func setFullScreenLayoutConstrains(index: Int){
            self.vPreviews[index].pin.top().right().left().bottom().margin(3)
        }

然而,目前的结果是这样的当检测到点击时,全屏但自动并立即回到小屏幕。

任何建议将不胜感激!

标签: iosswiftanimationuiview

解决方案


推荐阅读