【问题标题】:Swift - How can I make an image full screen when clicked and then original size when clicked again? [closed]Swift - 单击时如何使图像全屏显示,然后再次单击时显示原始大小? [关闭]
【发布时间】:2016-04-14 03:48:51
【问题描述】:

对于我正在制作的应用程序,我希望用户能够单击图像以使其在应用程序上全屏显示。然后用户可以单击现在全屏的图像使其成为原始大小。

这可能吗?

任何帮助都会很棒,我只是 xcode 的初学者,并且有兴趣知道如何做到这一点。

【问题讨论】:

    标签: swift image fullscreen


    【解决方案1】:

    这是在单击图像时创建全屏图像(带有黑条以保持纵横比)的代码。

    要使用它,请将此代码添加到保存图像的 ViewController。

    然后,对于您要扩展的 imageView,选中 Attributes Inspector 中的 userInteractionEnabled 框,并添加一个 TapGestureRecognizer 到它并设置它调用imageTapped

    @IBAction func imageTapped(sender: UITapGestureRecognizer) {
        let imageView = sender.view as! UIImageView
        let newImageView = UIImageView(image: imageView.image)
        newImageView.frame = UIScreen.main.bounds
        newImageView.backgroundColor = .blackColor()
        newImageView.contentMode = .ScaleAspectFit
        newImageView.userInteractionEnabled = true
        let tap = UITapGestureRecognizer(target: self, action: "dismissFullscreenImage:")
        newImageView.addGestureRecognizer(tap)
        self.view.addSubview(newImageView)
        self.navigationController?.isNavigationBarHidden = true
        self.tabBarController?.tabBar.isHidden = true
    }
    
    func dismissFullscreenImage(sender: UITapGestureRecognizer) {
        self.navigationController?.isNavigationBarHidden = false
        self.tabBarController?.tabBar.isHidden = false
        sender.view?.removeFromSuperview()
    }
    

    此代码通过创建一个涵盖其他所有内容的新全屏图像来工作。它有自己的 TapGestureRecognizer,可以从其 superView 中移除全屏图像(从而露出原始屏幕)。


    Swift 3 和 4 更新:

    @IBAction func imageTapped(_ sender: UITapGestureRecognizer) {
        let imageView = sender.view as! UIImageView
        let newImageView = UIImageView(image: imageView.image)
        newImageView.frame = UIScreen.main.bounds
        newImageView.backgroundColor = .black
        newImageView.contentMode = .scaleAspectFit
        newImageView.isUserInteractionEnabled = true
        let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
        newImageView.addGestureRecognizer(tap)
        self.view.addSubview(newImageView)
        self.navigationController?.isNavigationBarHidden = true
        self.tabBarController?.tabBar.isHidden = true
    }
    
    @objc func dismissFullscreenImage(_ sender: UITapGestureRecognizer) {
        self.navigationController?.isNavigationBarHidden = false
        self.tabBarController?.tabBar.isHidden = false
        sender.view?.removeFromSuperview()
    }
    

    【讨论】:

    • 这对表格视图单元格内的图像视图有效吗??
    • @WoShiNiBaBa,我不明白为什么不这样做。您应该在单元格中为 UIImageView 设置 userInteractionEnabled,并以编程方式在 cellForRowAt 中添加 UITapGestureRecognizer
    • @BadrFilali,你让我的代码成为你添加到UIImageViewUITapGestureRecognizer 的目标。
    • 对于那些想要复制/粘贴的人:在viewDidLoad 添加let pictureTap = UITapGestureRecognizer(target: self, action: #selector(YourClass.yourFunction)) 然后yourImageView.addGestureRecognizer(pictureTap) 然后yourImageView.isUserInteractionEnabled = true //also can be set via storyboard
    • ============ for fade # addSubview UIView.transition(with: self.view, duration: 0.25, options: [.transitionCrossDissolve], animations: { self. view.addSubview(newImageView) }, completion: nil) # removeFromSuperview UIView.transition(with: self.view, duration: 0.25, options: [.transitionCrossDissolve], animations: { sender.removeFromSuperview() }, completion: nil)
    猜你喜欢
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 2020-07-28
    • 2022-12-21
    • 2014-10-03
    • 1970-01-01
    相关资源
    最近更新 更多