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

Posted

技术标签:

【中文标题】导航栏中的iOS UIButton在执行变换动画后消失【英文标题】:iOS UIButton in Navigation bar disappears after performing transform animation 【发布时间】:2016-05-20 14:53:09 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

尝试以下几行代码,它将解决您的问题。

rotateAnimation.fillMode = kCAFillModeForwards
rotateAnimation.removedOnCompletion = false

【讨论】:

【参考方案2】:

在 CABasicAnimation 上试试这条线:

rotateAnimation.removedOnCompletion = false

它可能会解决您的问题。

【讨论】:

以上是关于导航栏中的iOS UIButton在执行变换动画后消失的主要内容,如果未能解决你的问题,请参考以下文章

关于 iOS UIButton执行动画后点击按钮无法响应事件的问题.

iOS 11 prefersLargeTitles 以 uibutton 作为标题

更改 UIButton 标题导航栏的颜色

iOS:在导航栏中显示搜索栏时隐藏范围栏

如何在 iOS 的导航栏中添加标准信息按钮?

调整动画大小后UIButton不尊重Aspect Fill contentMode