UINavigationItem 动画

Posted

技术标签:

【中文标题】UINavigationItem 动画【英文标题】:UINavigationItem animation 【发布时间】:2015-07-15 10:50:15 【问题描述】:

我正在尝试为UINavigationItem 创建自定义动画。我有 4 个项目的导航栏,但是当我向下滚动时,我想将搜索栏放在导航中。我想拥有自下而上的动画,但我尝试的一切都不起作用。

这是我尝试过的一些东西:

setLeftBarButtonItem:animated:(它正在工作,但它很生涩 - 一点也不流畅。有点像 gif... UIView 带有:动画、延迟、选项、处理程序,几乎所有来自 UI 的动画方法(根本不起作用)

我还应该注意,滚动后导航中有一个按钮和搜索栏。

我的问题是 - 是否可以更改默认动画并自己制作?如果是这样,我该如何实现?

【问题讨论】:

有点难以理解您想要实现的目标。请您添加一些您想要的屏幕截图或插图。另外,发布您尝试过的代码。 我这里没有mac所以不能给你看代码,但是我想要实现的很简单。在按钮单击、滚动或任何其他事件时,我想使用自定义动画更改导航栏元素 【参考方案1】:

我不确定我是否完全理解您要执行的操作,但您可以将自定义视图放入 leftBarButtonItem 并根据需要对其进行动画处理(不过,您需要在视图中实现触摸处理)...

根据您需要的动画,您可以使用 UIScrollView 作为自定义视图,并将其设置为 contentOffset,具体取决于您的视图滚动视图的 contentOffset(创建类似于 Twitter 应用在​​查看用户主页)。

我尝试了第一种方法(带有动画的自定义视图),它似乎工作得很好:

class itemView : UIView 
    var active : Bool 
        set 
            UIView.animateWithDuration(1, animations: 
                if newValue 
                    self.backgroundColor = UIColor.greenColor()
                    self.transform = CGAffineTransformMakeRotation(3.1415/2)
                 else 
                    self.backgroundColor = UIColor.redColor()
                    self.transform = CGAffineTransformMakeRotation(-3.1415/2)
                
            )
        
        get 
            if let color = backgroundColor 
                return color.isEqual(UIColor.greenColor())
            
            return false
        
    

然后我像这样使用它(我正在使用一个简单的事件处理程序来更改活动状态,从rightBarButtonItem 链接,但您可以在这里使用几乎任何东西,包括scrollViewDidScroll:):

let item = itemView(frame: CGRectMake(0, 0, 30, 20))

override func viewDidLoad() 
    super.viewDidLoad()

    item.active = false

    self.navigationItem.setLeftBarButtonItem(UIBarButtonItem(customView: item), animated: false)


@IBAction func itemClicked(sender: UIBarButtonItem) 
    item.active = !item.active

【讨论】:

以上是关于UINavigationItem 动画的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationItem 提示动画问题

UINavigationItem:检测触摸

导航栏按钮动画错误

动画替换 UINavigationController 的 viewControllers

iOS 8 - 动画显示导航和状态栏无法正常工作

使用喷气背包导航将自定义过渡动画添加到底部导航设置