0

我正在尝试通过在单击时旋转它来动画从“+”按钮到“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)

在此处输入图像描述

它如何在导航栏之外如此轻松地工作,而在导航栏上却如此难以做到?我找不到解决方案。请帮忙

4

2 回答 2

1

在 CABasicAnimation 上试试这一行:

rotateAnimation.removedOnCompletion = false

它可能会解决您的问题。

于 2016-05-20T15:45:03.273 回答
1

尝试按照您的代码行,它将解决您的问题。

rotateAnimation.fillMode = kCAFillModeForwards
rotateAnimation.removedOnCompletion = false
于 2016-05-20T22:47:16.770 回答