iOS 导航栏中的 UIButton 在执行变换动画后消失

iOS UIButton in Navigation bar disappears after performing transform animation

我正在尝试通过在单击时旋转它来制作从“+”按钮到 'X' 按钮的动画转换。

当我在 UIView 上使用标准按钮时一切正常。我正在使用以下代码:

UIView.animateWithDuration(2.0, delay: 0.0, options: .CurveEaseOut, animations: {
        let transform = CGAffineTransformMakeRotation(CGFloat(M_PI_4))
        self.navigationPlusButton.transform = transform
        }, completion: nil)

当我尝试使用导航栏中的按钮实现相同功能时出现问题。

看起来按钮高度在旋转之前已调整为 0,而且我不知道如何修复导航按钮的大小,因为没有约束定义。注意故事板

和约束条件

注意:第二种方法使用 CABasicAnimation 很好地旋转了按钮,但它在动画结束后立即将其返回到初始状态。我想停留 'X' 直到我再次点击。

    let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation")
    rotateAnimation.fromValue = 0.0
    rotateAnimation.toValue = CGFloat(M_PI_4)
    rotateAnimation.duration = 2.0
    self.navigationPlusButton.layer.addAnimation(rotateAnimation, forKey: nil)

为什么在导航栏外这么容易,而在导航栏上却很难?我找不到解决方案。请帮忙

在 CABasicAnimation 上试试这一行:

rotateAnimation.removedOnCompletion = false

也许可以解决您的问题。

尝试在您的代码中添加以下几行,它会解决您的问题。

rotateAnimation.fillMode = kCAFillModeForwards
rotateAnimation.removedOnCompletion = false