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 动画的主要内容,如果未能解决你的问题,请参考以下文章