UICollectionViewCell不会更改帧更新

时间:2014-07-11 13:41:56

标签: ios swift uicollectionview uicollectionviewcell

我正在尝试使用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,并在故事板和界面构建器中设置所有内容。

1 个答案:

答案 0 :(得分:0)

我找到了答案! layoutAttributesForItemAtIndexPath()返回属性的副本,而不是实际的属性对象。这意味着修改这些属性显然不会做任何事情。而是使用UICollectionViewCell属性。