2017-07-14 40 views
1

在我們的應用程序中,我們有一個自定義的警報通知,基本上是UITabBarItem內的一個圓圈。我已通過獲取UITabBarItem的視圖,然後在適當的位置創建CAShapeLayer來添加它。不幸的是,無論我嘗試什麼,我都無法將形狀變成動畫。我嘗試過使用各種屬性,例如path和fillColor,但沒有成功。UITabBarItem內的iOS自定義動畫

這裏有一個代碼摘錄:

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) 

我在常規視圖嘗試這個代碼,它的偉大工程,但是不管我怎麼努力,我不能讓它在UITabBarItem工作。

更新:我已經想出了重現此錯誤的確切步驟。用一個按鈕啓動您的應用程序與一個普通的舊視圖控制器。在該按鈕上單擊,出現選項卡控制器視圖。您在TabBarItem中繪製的形狀在此時不會動畫。不過:如果TabBarController作爲第一個視圖啓動,動畫就會發生。

有沒有人有任何想法?

謝謝!

回答

0

首先我會說你問了個好問題。我甚至在尋找類似的東西,我得到了我的答案。你需要做一個自定義類的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) 
    } 
} 

我得到這個答案形成一個博客帖子我最近讀。對於這進一步明晰,我會建議你參考這個博客: https://medium.com/@werry_paxman/bring-your-uitabbar-to-life-animating-uitabbaritem-images-with-swift-and-coregraphics-d3be75eb8d4d

我希望這將幫助你:)

+0

嗨!感謝您及時的回覆。但是:我看不出爲什麼你需要從UITabBarController繼承來完成這個任務。它有什麼變化?另外:我不想看圖像的動畫。相反,我正在爲添加的UITabBarItem內部的CAShapeLayer設置動畫。 你能解釋爲什麼繼承自UITabBarController的工作原理?爲什麼當你不這樣做? 謝謝! –

+0

我猜是因爲我們無法迭代tabbar的子視圖,也無法直接訪問imageview屬性。通過子類化,您可以靈活地添加自定義的代碼和行爲。 –

+0

其實你可以通過幾種不同的方式獲得UITabBarItem的視圖。他甚至在他的帖子中展示了一種非常冒險的方式來獲得UIImage。我迭代並測試某種類型的視圖,但是您肯定能夠以任何方式獲得視圖...再次感謝您回到我身邊。我很欣賞投入! –

0

於是,我終於聽到了來自蘋果回來,我提交了一個bug報告之後。他們告訴我,我在做什麼不被支持,而且他們不會解決它。不是我正在尋找的答案,但至少是它的答案。

希望這可以幫助那些遇到此問題的人。

James