ios - UICollectionViewCell 中的 UISwipeGestureRecogniser 问题

标签 ios swift uicollectionviewcell uiswipegesturerecognizer

我有一个UICollectionView,其中每个单元格都有一个左右UISwipeGestureRecognizer,它给人一种翻转菜单图像的错觉。我不知道该怎么做是在翻转另一个单元格之前“关闭/翻转”先前翻转的单元格。

这是现在的屏幕截图:

enter image description here

class Note: UICollectionViewCell {
var isFlipped = false

func addSwipeGestures() {
    let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(swipeLeft(swipe:)))
    swipeLeft.direction = UISwipeGestureRecognizer.Direction.left
    contentView.addGestureRecognizer(swipeLeft)

    let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(swipeRight(swipe:)))
    swipeRight.direction = UISwipeGestureRecognizer.Direction.right
    contentView.addGestureRecognizer(swipeRight)
}

@objc func swipeLeft(swipe: UISwipeGestureRecognizer) {
    if isFlipped {
        flipToBackView(options: .transitionFlipFromLeft)
    }
    else {
        flipToFrontView(options: .transitionFlipFromLeft)
    }
}

@objc func swipeRight(swipe: UISwipeGestureRecognizer) {
    if isFlipped {
        flipToBackView(options: .transitionFlipFromRight)
    }
    else {
        flipToFrontView(options: .transitionFlipFromRight)
    }
}

func flipToBackView(options: UIView.AnimationOptions ) {
    UIView.transition(with: backView, duration: 0.3, options: options, animations: { [unowned self] in
        self.coverImageView.isHidden = false
        self.titleLabel.isHidden = false
        self.titleView.isHidden = false
        self.isFlipped = !self.isFlipped
    })
}

func flipToFrontView(options: UIView.AnimationOptions) {
    UIView.transition(with: backView, duration: 0.3, options: options, animations: { [unowned self] in
        self.coverImageView.isHidden = true
        self.titleLabel.isHidden = true
        self.titleView.isHidden = true
        self.isFlipped = !self.isFlipped
    })
}
}

最佳答案

您可以使用 delegation pattern为了这。例如。您可以向 Note 类添加协议(protocol):

protocol FlipDelegate: class {
    func willFlip(note: Note)
}

使ViewController符合此协议(protocol),存储对最后翻转的卡片的引用并再次翻转最后翻转的卡片:

    weak var lastFlippedNote: Note?

    func willFlip(_ note: Note) {
        lastFlippedNote?. flipToBackView(options: .transitionFlipFromLeft)
        lastFlippedNote = note

    }

添加对 Note 类的弱引用,例如 weak var FlipDelegate: FlipDelegate? 并将 viewController 分配给 collectionView(_:cellForItemAt:) 中的单元格。 在您的滑动操作中,您可以调用 willFlip(_:) 例如当您翻到笔记的正面时,例如:

@objc func swipeLeft(swipe: UISwipeGestureRecognizer) {
    if isFlipped {
        flipToBackView(options: .transitionFlipFromLeft)
    }
    else {
        flipToFrontView(options: .transitionFlipFromLeft)
        flipDelegate?.willFlip(note: self)
    }
}

@objc func swipeRight(swipe: UISwipeGestureRecognizer) {
    if isFlipped {
        flipToBackView(options: .transitionFlipFromRight)
    }
    else {
        flipToFrontView(options: .transitionFlipFromRight)
        flipDelegate?.willFlip(note: self)
    }
}

问候

关于ios - UICollectionViewCell 中的 UISwipeGestureRecogniser 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54908001/

相关文章:

ios - 在带有Phonegap的IOS InAppBrowser中显示“完成”按钮

IOS -TextView 委托(delegate)未在页面容器 View 中调用

ios - UICollectionViewCell 拖动动画

ios - 由于 GTLRServiceCompletionHandler,无法为 Google Drive REST API 运行 service.executeQuery()

ios - 播放音频文件时找不到 'PathForResource' 的过载

swift - 重新加载没有动画 Swift 的 Collection View

ios - 如何将新的 UICollectionViewController 推送到单元格单元格内的导航 Controller

iphone - 嵌入 YouTube 视频

ios - iTunes Connect、Testflight 在邀请邮件中发送了令人困惑的名字

ios - 如何在运行耗时函数时显示 Activity Indicator Alert Controller?