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 中集成“喜欢”按钮