UICwipeGestureRecogniser在UICollectionViewCell问题中

问题描述 投票:0回答:1

我有一个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
    })
}
}
ios swift uicollectionviewcell uiswipegesturerecognizer
1个回答
0
投票

你可以使用delegation pattern。例如。你可以在Note类中添加一个协议:

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

使ViewController符合此协议,将引用存储到最后翻转的卡并再次翻转最后翻转的卡:

    weak var lastFlippedNote: Note?

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

    }

weak var flipDelegate: FlipDelegate?一样添加对Note类的弱引用,并将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)
    }
}

问候

© www.soinside.com 2019 - 2024. All rights reserved.