我有一个UITableViewCell。 在这个tableviewcell中,我有一个UIImageView。
我想在按下图像时将CGAffineTransform应用于UIImageView。
问题:单元格的其他项目位于我的图像之上,我希望它们在动画发生时位于后面。
我尝试过这样的事情:
//In the UITableViewCell
override func didMoveToWindow() {
super.didMoveToWindow()
superview?.superview?.bringSubview(toFront: photoView)
}
但这不起作用。
我也尝试过:
photoView.layer.zLocation = 10
但这也不起作用。
对于那些想知道的人,转换代码如下:
let scaleTransform = CGAffineTransform(scaleX: scale, y: scale)
photoView.transform = scaleTransform
有什么想法吗?
答案 0 :(得分:1)
如果我没有误会,这就是你想要的:
“当我按下图像” - 在其他单元格的子视图顶部时,我希望将CGAffineTransform应用于UIImageView-意味着您应该为imageView设置UITapGestureRecognizer
:
您的UITableViewCell
应该类似于:
// your custom cell, in my case I'm calling it "TableViewCell"
class TableViewCell: UITableViewCell {
@IBOutlet weak var imgView: UIImageView!
// your other IBOutlets...
//...
// this flag is useful when you want to check if the imageView is tapped, you should return it to its normal transform -for example-
private var isImageViewMovedToFront = false
override func didMoveToWindow() {
// adding the tap gesture
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(TableViewCell.imgViewTapped))
imgView.isUserInteractionEnabled = true
imgView.addGestureRecognizer(tapGesture)
}
func imgViewTapped() {
if isImageViewMovedToFront == false {
isImageViewMovedToFront = true
contentView.bringSubview(toFront: imgView)
UIView.animate(withDuration: 0.25) {
let scaleTransform = CGAffineTransform(scaleX: 1.2, y: 1.2)
self.imgView.transform = scaleTransform
}
} else {
isImageViewMovedToFront = false
contentView.sendSubview(toBack: imgView)
UIView.animate(withDuration: 0.25) {
let scaleTransform = CGAffineTransform(scaleX: 1.0, y: 1.0)
self.imgView.transform = scaleTransform
}
}
}
}
输出应如下所示:
希望有所帮助。