uitabaritem中的iOS自定义动画

uitabaritem中的iOS自定义动画,ios,swift,animation,Ios,Swift,Animation,在我们的应用程序中,我们有一个自定义警报通知,它基本上是uitabaritem中的一个圆圈。我通过获取uitabaritem的视图,然后在适当的位置创建CAShapeLayer来添加它。不幸的是,无论我尝试什么,我都无法获得要设置动画的形状。我尝试过设置各种属性的动画,例如路径和填充颜色,但没有成功 下面是一段代码摘录: var lyrShape = CAShapeLayer() lyrShape.fillColor = UIColor.red.cgColor lyrShape.path = U

在我们的应用程序中,我们有一个自定义警报通知,它基本上是
uitabaritem
中的一个圆圈。我通过获取
uitabaritem
的视图,然后在适当的位置创建
CAShapeLayer
来添加它。不幸的是,无论我尝试什么,我都无法获得要设置动画的形状。我尝试过设置各种属性的动画,例如路径和填充颜色,但没有成功

下面是一段代码摘录:

var lyrShape = CAShapeLayer()
lyrShape.fillColor = UIColor.red.cgColor
lyrShape.path = UIBezierPath(overIn: CGRect(x: 5, y: 5, width: 10, height: 10)).cgPath

vwTabBar.layer.addSublayer(lyrShape)

var aniShape = CABasicAnimation(keyPath: "fillColor")
aniShape.duration = 5
aniShape.toValue = UIColor.blue.cgColor
aniShape.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
aniShape.fillMode = kCAFillModeBoth
aniShape.autoreverses = true
aniShape.repeatCount = 20

lyrShape.add(aniShape, forKey: aniShape.keyPath)
我在常规视图中尝试过这段代码,它工作得很好,但是无论我尝试什么,我都无法在
uitabaritem
中让它工作

更新:我已经找到了复制这个bug的确切步骤。使用带有按钮的普通旧视图控制器启动应用程序。在该按钮上单击,显示选项卡控制器视图。此时,您在TabBarItem中绘制的形状将不会设置动画。但是:如果TabBarController作为第一个视图启动,则动画效果良好

有人有什么想法吗


谢谢

首先,我要说你问了一个好问题。我甚至在寻找类似的东西,我得到了答案。您需要为UITabBarController创建一个自定义类,然后可以执行以下操作:

override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
    if item.tag == 1{
    //do our animations
        self.secondItemImageView.transform = CGAffineTransformIdentity
        UIView.animateWithDuration(0.7, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1, options: .CurveEaseInOut, animations: { () -> Void in
            let rotation = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
            self.secondItemImageView.transform = rotation
        }, completion: nil)
    }
}
我从最近读到的一篇博文中得到了这个答案。为了进一步澄清这一点,我建议您参考以下博客:


我希望这能对你有所帮助:)

所以在我提交了一份bug报告后,我终于收到了苹果的回复。他们告诉我,我正在做的事情不受支持,他们不会去解决它。这不完全是我想要的答案,但至少是一个答案

希望这能帮助其他遇到这种情况的人


詹姆斯你好!谢谢你的快速回复。但是:我看不出有什么理由需要继承UITabBarController来实现这一点。它改变了什么?另外:我不希望为图像设置动画。相反,我希望在我添加的UITabBarItem中设置一个现金流层的动画。您能解释一下为什么从UITabBarController继承是有效的吗?为什么你不这么做呢?谢谢我猜是因为我们不能迭代tabbar的子视图,也不能直接访问imageview属性。子类化为您提供了添加自定义代码和行为的灵活性。实际上,您可以通过几种不同的方式查看UItabaritem。他甚至在自己的帖子中展示了一种非常老练的方式来获得这个形象。我迭代并测试特定类型的视图,但您肯定可以通过任何一种方式获得该视图。。。再次感谢你回复我。我感谢你的意见!