我正在尝试使用UICollectionViewCell
制作自定义可刷卡UIPanGestureRecognizer
。这是我的代码:
在自定义UICollectionViewCell
中:
func setup() {
attributes = delegate.attributesForCell(self)
selectionView = UIView(frame: attributes.frame)
self.addSubview(selectionView)
let cellPan = UIPanGestureRecognizer(target: self, action: "cellDidPan:")
selectionView.addGestureRecognizer(cellPan)
}
func cellDidPan(gesture: UIPanGestureRecognizer) {
switch gesture.state {
case .Began:
originalFrame = attributes.frame
case .Changed:
let translation: CGPoint = gesture.translationInView(selectionView)
attributes.frame = CGRect(origin: CGPoint(x: originalFrame.origin.x + translation.x, y: originalFrame.origin.y), size: originalFrame.size)
println("t \(translation.x)")
println("c \(attributes.center)")
println("f \(attributes.frame)")
case .Ended:
println("nothing here yet")
default:
println("Unrecognized gesture state")
}
}
在UICollectionViewController
(单元格的委托)中:
func attributesForCell(cell: SwipeableCollectionViewCell) -> UICollectionViewLayoutAttributes {
let indexPath = collectionView.indexPathForCell(cell)
return collectionView.layoutAttributesForItemAtIndexPath(indexPath)
}
当我在我的UICollectionViewCell
上滑动时,框架会记录正确的更改(除了x坐标之外,所有内容都保持不变,左边的扫描越小,向右滑动越大)但是单元格保持不变地点。
我正在使用UICollectionViewFlowLayout
,并在故事板和界面构建器中设置所有内容。
答案 0 :(得分:0)
我找到了答案! layoutAttributesForItemAtIndexPath()返回属性的副本,而不是实际的属性对象。这意味着修改这些属性显然不会做任何事情。而是使用UICollectionViewCell属性。