我有一个UICollectionView
,其中每个单元格都有一个左右UISwipeGestureRecognizer
,它给人一种翻转菜单图像的错觉。我不知道该怎么做是在翻转另一个单元格之前“关闭/翻转”先前翻转的单元格。
这是现在的屏幕截图:
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/