【问题标题】:How to I have a Repeat vs Continual Animation?如何进行重复与连续动画?
【发布时间】:2019-04-24 18:04:03
【问题描述】:

场景:我有一个“>”按钮:

应该在初始点击时动画 +90 度:

然而,通过再次点击 UITableViewCell 返回到 0 度 '>' 位置后,它会返回到原来的高度;然后再次点击我会进一步旋转到“

如何将最大旋转冻结到仅 90 度(指向下方);这样我就有了单个 +/- 90 度的旋转切换开关?

这是我的代码:

 func rotate2ImageView() {
        UIView.animate(withDuration: 0.3) {
            self.rightArrowImage.transform = self.rightArrowImage.transform.rotated(by: .pi / 2)
        }
    }

这是一个失败的补救措施(我试图删除所有动画):

func rotateImageView(){
        UIView.animate(withDuration: 0.3, animations: {() -> Void in
            self.rightArrowImage.transform = self.rightArrowImage.transform.rotated(by: .pi / 2)
        }, completion: {(_ finished: Bool) -> Void in
            if finished {
               self.rightArrowImage.layer.removeAllAnimations()
            }
        })
    }

【问题讨论】:

  • "但是在返回 0 度 '>' 位置后" 请显示您执行此操作的代码。它应该涉及将transform 设置为.identity
  • 我没有代码。我只需再次点击,UITableViewCell 的高度就会恢复到原来的大小......并且“>”图标会恢复到原来的状态。
  • 好吧,您没有显示任何关于点击或更改单元格高度的代码。但你只是暗示它存在。所以你确实有代码。显示它。
  • 你给了我提示。我解决了!

标签: uiview uianimation


【解决方案1】:

我需要在以后点击旋转图标之前重置“>”图像的转换。
根据 Matt 的建议,我通过将其转换设置为“身份”来做到这一点。

 func rotateImageView() {
        // Reset any pending transformation to original status:
        rightArrowImage.transform = .identity

        UIView.animate(withDuration: 0.3) {
            self.rightArrowImage.transform = self.rightArrowImage.transform.rotated(by: .pi / 2)
        }
    }

这是通过 UITableViewDelete 的 willDisplay 函数触发的:

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        let myCell = cell as? CommonFAQCell
        if expandCell {
            myCell?.rotateImageView()
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 2011-04-06
    相关资源
    最近更新 更多