UICollectionViewCell翻转动画

3
我希望当用户触摸单元格时,可以通过翻转动画使其翻转,并显示另一张图片。我已经通过在单元格内容上方放置一个覆盖图像并将其隐藏或不隐藏来解决了这个问题。
如何强制一个单元格执行翻转动画?我只能通过重新加载单元格来使其正常工作,但这样会产生副作用。
如何强制进行翻转动画,并在单元格被翻转180度时更改其状态?
下面是包含动画的我的UICollectionViewCell中的代码:
func makeImageVisible(visible:Bool, animated: Bool){

        if(animated){
            UIView.transitionWithView(self.contentView, duration: 0.5, options: UIViewAnimationOptions.TransitionFlipFromLeft, animations: { () -> Void in
                    self.coverImageView.hidden = visible
            }, completion: nil)
        }
        else{
            self.coverImageView.hidden = visible
        }
    }

该单元格包含一些被coverimage覆盖的视图。根据状态,coverimage可能会隐藏或显示。

以下是我的cellForIndexPath方法:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("MemoryGameCell", forIndexPath: indexPath) as! MemoryGameCell

    cell.setImage(self.image!)
    cell.makeImageVisibile(self.imageIsVisible(indexPath), animated: self.imageIsTemporaryVisible(indexPath))

    return cell
}

如果一个单元格被触摸,我将其放入visiblecells数组并重新加载collectionview。我尝试直接调用makeImageVisible而不重新加载collectionview,但是什么都没有发生。有什么想法可能是问题?


在UITableViewCell中添加一个subView。在didSelectRow中,使用+ transitionWithView:duration:options:animations:completion:对subView提供动画效果。作为选项,在动画块中传递TransitionFlipFromBottom,并用新视图替换旧视图。 - TheCodingArt
您还可以使用CATransform图层进行自定义UIAnimation。只需将视图的图层旋转一半(使视图的y轴面向屏幕,以便视图不可见),然后用新视图替换视图并适当旋转即可。 - TheCodingArt
我编辑了我的帖子并添加了我目前拥有的代码。抱歉,我一开始写的是TrableViewCell,但实际上是指CollectionviewCell。 - netshark1000
2个回答

1
我可以帮您翻译成中文。这段内容与编程有关,涉及到collectionViewCell的两个视图(前面和后面),您可以隐藏其中一个来实现翻转效果。首先将背景视图标记为隐藏,然后在didselect时可以进行翻转。如果您想在滚动时重新翻转,请从collectionView实现scrollViewDidScroll代理。请确保反转动画过渡并且您正在操作单元格的contentView。
以下是代码示例:
func flip() {
        let flipSide: UIView.AnimationOptions = versoView.isHidden ? .transitionFlipFromLeft : .transitionFlipFromRight
        UIView.transition(with: self.contentView, duration: 0.3, options: flipSide, animations: { [weak self]  () -> Void in
            self?.frontView.isHidden = !(self?.frontView.isHidden ?? true)
            self?.backView.isHidden = !(self?.backView.isHidden ?? false)
        }, completion: nil)
    }

这是关于你的collectionView的代码:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        guard let cell = collectionView.cellForItem(at: indexPath) as? MyFlippingCell else {
            return
        }
        // if you have the current cell then flip
        cell.flip()
        // you can save it for reflip on didscroll
}

1

您可以在UITableView的didSelectRowAtIndexPath委托方法上执行UIView动画。这是您应该调用的方法:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath     indexPath: NSIndexPath) {
      if(animated){
            UIView.transitionWithView(self.contentView, duration: 0.5, options: UIViewAnimationOptions.TransitionFlipFromLeft, animations: { () -> Void in
                    self.coverImageView.hidden = visible
            }, completion: nil)
        }
        else{
            self.coverImageView.hidden = visible
        } }

1
我尝试了这个,但是什么也没有发生。视图没有得到动画效果。唯一启动动画的方法是重新加载单元格并从那里开始动画。但是,然后我会遇到上一个动画单元格的图像出现一瞬间的错误。 - netshark1000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接