Swift:点击图片以在 tableviewcell 上像 Facebook 一样展开

Posted

技术标签:

【中文标题】Swift:点击图片以在 tableviewcell 上像 Facebook 一样展开【英文标题】:Swift : Tap image to expand it like Facebook on tableviewcell 【发布时间】:2015-10-09 03:01:36 【问题描述】:

我希望用户点击 tableviewcell 中的图像来展开它我试过了 github 上的 4 个库不能很好地与自动布局配合使用。

我也发现了,但它在 Objective-c 中,甚至不适用于 Xcode 7 MHFacebookImageViewer。 https://github.com/michaelhenry/MHFacebookImageViewer

也是https://github.com/aleckretch/AKImageViewer,但在objective-c中

有没有 swift 的库?

【问题讨论】:

这个库你可以在 swift 中使用,也可以为此做桥接 视频教程:youtube.com/watch?v=kzdI2aiTX4k 认为对于喜欢视频而不是文字的人来说值得添加。 【参考方案1】:

对于以上这个库,如果你想在 swift 中使用你必须Add Bridging Header

AKImageViewer - 例如,我正在从这个库中获取一些代码

var aKImageViewerViewController: AKImageViewerController = AKImageViewerViewController()
aKImageViewerViewController.image = UIImage.imageName("lion.png")
aKImageViewerViewController.imgCancel = UIImage.imageNamed("btn_cancel.png")
self.view.addSubview(aKImageViewerViewController.view)
aKImageViewerViewController.centerPictureFromPoint(CGPointMake(0, 0), ofSize: CGSizeMake(30, 30), withCornerRadius: 1.0)

MHFacebookImageViewer - 例如,我从这个库中采用一种方法,你可以像这样快速使用它

func setupImageViewer() 

   // Some code



func setupImageViewerWithCompletionOnOpen(open: MHFacebookImageViewerOpeningBlock, onClose close: MHFacebookImageViewerClosingBlock) 

  // Some code


【讨论】:

【参考方案2】:

这是实现该特殊动画所需的内容,假设您有两个相似的矩形,它们的比例相同,然后我们使用 W1/W2 = H1/H2 等式,我们得到 H2 = (W2/W1) H1 如果您对数学部分不感兴趣,请查看代码,该代码基本上是 zoomIn 动画和 zoomOut 的两个函数以返回绝对坐标系。

    let zoomImageView = UIImageView()
        let blackBackgroundView = UIView()
        let navBarCoverView = UIView()// to hide navigation bar
        let tabBarCoverView = UIView() // to hide tab bar

        var statusImageView: UIImageView?

        func animateImageView(statusImageView: UIImageView) 
            self.statusImageView = statusImageView

 //to get absolute coordinate system 
            if let startingFrame = statusImageView.superview?.convertRect(statusImageView.frame, toView: nil) 

                statusImageView.alpha = 0

                blackBackgroundView.frame = self.view.frame
                blackBackgroundView.backgroundColor = UIColor.blackColor()
                blackBackgroundView.alpha = 0
                view.addSubview(blackBackgroundView)

                navBarCoverView.frame = CGRectMake(0, 0, 1000, 20 + 44)
                navBarCoverView.backgroundColor = UIColor.blackColor()
                navBarCoverView.alpha = 0



                if let keyWindow = UIApplication.sharedApplication().keyWindow 
                    keyWindow.addSubview(navBarCoverView)

                    tabBarCoverView.frame = CGRectMake(0, keyWindow.frame.height - 49, 1000, 49)
                    tabBarCoverView.backgroundColor = UIColor.blackColor()
                    tabBarCoverView.alpha = 0
                    keyWindow.addSubview(tabBarCoverView)
                

                zoomImageView.backgroundColor = UIColor.redColor()
                zoomImageView.frame = startingFrame
                zoomImageView.userInteractionEnabled = true
                zoomImageView.image = statusImageView.image
                zoomImageView.contentMode = .ScaleAspectFill
                zoomImageView.clipsToBounds = true
                view.addSubview(zoomImageView)

                zoomImageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "zoomOut"))

                UIView.animateWithDuration(0.75, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 0.5, options: .CurveEaseOut, animations:  () -> Void in

                    let height = (self.view.frame.width / startingFrame.width) * startingFrame.height

                    let y = self.view.frame.height / 2 - height / 2

                    self.zoomImageView.frame = CGRectMake(0, y, self.view.frame.width, height)

                    self.blackBackgroundView.alpha = 1

                    self.navBarCoverView.alpha = 1

                    self.tabBarCoverView.alpha = 1

                    , completion: nil)

            
        

        func zoomOut() 
            if let startingFrame = statusImageView!.superview?.convertRect(statusImageView!.frame, toView: nil) 

                UIView.animateWithDuration(0.75, animations:  () -> Void in
                    self.zoomImageView.frame = startingFrame

                    self.blackBackgroundView.alpha = 0
                    self.navBarCoverView.alpha = 0
                    self.tabBarCoverView.alpha = 0

                    , completion:  (didComplete) -> Void in
                        self.zoomImageView.removeFromSuperview()
                        self.blackBackgroundView.removeFromSuperview()
                        self.navBarCoverView.removeFromSuperview()
                        self.tabBarCoverView.removeFromSuperview()
                        self.statusImageView?.alpha = 1
                )

            
        

    

【讨论】:

以上是关于Swift:点击图片以在 tableviewcell 上像 Facebook 一样展开的主要内容,如果未能解决你的问题,请参考以下文章

在swift 3中的tableview中更新tableviewcell中的特定行?

TableViewCell Swift中的切换(复选框)按钮

如何在 swift tableviewCell 中集成“喜欢”按钮

通过点击 UIButton 动态管理 TableViewCell 高度

来自 tableViewCell 的快速@IBAction

swift tableViewCell touch.swift