我的 UITapGestureRecognizer 影响 TableViewCell 中的所有元素

Posted

技术标签:

【中文标题】我的 UITapGestureRecognizer 影响 TableViewCell 中的所有元素【英文标题】:My UITapGestureRecognizer affects all elements in TableViewCell 【发布时间】:2021-07-16 08:46:08 【问题描述】:

我正在尝试做我的第一个应用程序,我需要添加 UITapGestureRecognizer 来缩放 TableViewCell 中的照片。

它有效,但不正确——我的手势不仅缩放 ViewCell 中的照片,还缩放 ViewCell 中的所有元素。我该如何解决这个问题?

我所有的 TableViewCell 代码:

import UIKit

class PhotosCollectionViewCell: UICollectionViewCell 
    
    static let identifier = "PhotosCollectionViewCell"
    
    @IBOutlet weak var mainPhoto: UIImageView!
    @IBOutlet weak var mainLabel: UILabel!
    
    var isInScale: Bool = false
        
    func configure(photo: PhotosInProfile) 
        mainPhoto.image = UIImage(named: photo.mainPhoto)
        mainLabel.text = "Date: \(photo.date)"
    
    
    override func awakeFromNib() 
        super.awakeFromNib()
        let doubleTap = UITapGestureRecognizer(target: self, action: #selector(imageDoubleTapped))
        doubleTap.numberOfTapsRequired = 2
        mainPhoto.isUserInteractionEnabled = true
        mainPhoto.addGestureRecognizer(doubleTap)
    
    
    @objc func imageDoubleTapped() 
        if isInScale 
            self.transform = .identity
         else 
            self.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
        
        isInScale.toggle()
    

【问题讨论】:

当您执行self.transform 时,self 是一个PhotosCollectionViewCell 实例。你指的是mainPhoto.transform 吗? @Larme 哦,你是对的。我在这里将self 更改为mainPhoto 并且有效。谢谢! 【参考方案1】:

导入 UIKit

类 PhotosCollectionViewCell: UICollectionViewCell

static let identifier = "PhotosCollectionViewCell"

@IBOutlet weak var mainPhoto: UIImageView!
@IBOutlet weak var mainLabel: UILabel!

var isInScale: Bool = false
    
func configure(photo: PhotosInProfile) 
    mainPhoto.image = UIImage(named: photo.mainPhoto)
    mainLabel.text = "Date: \(photo.date)"


override func awakeFromNib() 
    super.awakeFromNib()
    let doubleTap = UITapGestureRecognizer(target: self, action: #selector(imageDoubleTapped))
    doubleTap.numberOfTapsRequired = 2
    mainPhoto.isUserInteractionEnabled = true
    mainPhoto.addGestureRecognizer(doubleTap)


@objc func imageDoubleTapped() 
    if isInScale 
        mainPhoto.transform = .identity
     else 
        mainPhoto.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
    
    isInScale.toggle()

【讨论】:

以上是关于我的 UITapGestureRecognizer 影响 TableViewCell 中的所有元素的主要内容,如果未能解决你的问题,请参考以下文章

UITapGestureRecognizer 吞下所有手势

为啥我的 UITapGestureRecognizer 在我将它附加到我的 UITableViewCell 中的元素时不起作用?

UITapGestureRecognizer 不适用于 UIImageView 自定义类

在我点击我的 MPVolumeSlider 后,UIView 上的 UITapGestureRecognizer 被触发

Swift - UITapGestureRecognizer UIPageViewController

UITapGestureRecognizer 不适用于 UIView 动画