如何在UINavigationItem titleView中创建淡入/淡出动画?

问题描述 投票:0回答:1

我想创建诸如iOS Music应用之类的titleView动画!在iOS音乐应用中,您可以看到很酷的动画。当您从“我的音乐”中选择艺术家或唱片集(例如),然后向上滚动它们时,您会看到UINavigationBar上出现淡入淡出的动画效果,当您回到原始位置时也消失了!

ios swift animation uinavigationitem
1个回答
0
投票

您可以使用UIView.transitionWithView制作动画。在这种情况下,将单词ipsum变为绿色:

let rangeOfText = (textViewForPlayer.text as NSString).rangeOfString("ipsum", options: nil)
let stringForPlayer = textViewForPlayer.attributedText.mutableCopy() as NSMutableAttributedString

UIView.transitionWithView(self.textViewForPlayer, duration: 1.0, options: .TransitionCrossDissolve, animations: { () -> Void in
    stringForPlayer.addAttribute(
        NSForegroundColorAttributeName,
        value: UIColor.greenColor(),
        range: rangeOfText)
    self.textViewForPlayer.attributedText = stringForPlayer
    }, completion: nil)

您可以使用UIView.transitionWithView制作动画。在这种情况下,将单词ipsum变为绿色:

let rangeOfText = (textViewForPlayer.text as NSString).rangeOfString("ipsum", options: nil)
let stringForPlayer = textViewForPlayer.attributedText.mutableCopy() as NSMutableAttributedString

UIView.transitionWithView(self.textViewForPlayer, duration: 1.0, options: .TransitionCrossDissolve, animations: { () -> Void in
    stringForPlayer.addAttribute(
        NSForegroundColorAttributeName,
        value: UIColor.greenColor(),
        range: rangeOfText)
    self.textViewForPlayer.attributedText = stringForPlayer
    }, completion: nil)

您可以看到,这非常简单。

要使文本在此动画过程中收缩和增长是一个完全不同的蜡球,因为简单地尝试更改文本大小将导致重新布置文本视图的其余部分,这肯定不是您的目的。

在那种情况下,我可能会为文本视图的该部分拍摄快照,将该快照放置在文本视图上,为调整大小和转换设置动画。所有这些都假定您要在动画结束时将其转换为与以前完全相同的大小(否则,您将遇到一个复杂的问题,即在动画过程中如何处理其余文本)。

要实现特定的动画,这将需要大量的工作。我想问一下您是否可以通过其他方式(例如嵌套动画,先淡化文本颜色以使其清晰然后再淡化为新颜色,从而获得某种“消失并重新出现”的感觉)来更简单地实现所需的效果) 。这使得转换更加引人注目,同时又不会迷失在动画代码的老鼠巢中。

您可以使用UIView.transitionWithView制作动画。在这种情况下,将单词ipsum变为绿色:

let rangeOfText = (textViewForPlayer.text as NSString).rangeOfString("ipsum", options: nil)

let stringForPlayer = textViewForPlayer.attributedText.mutableCopy() as NSMutableAttributedString


UIView.transitionWithView(self.textViewForPlayer, duration: 1.0, options: .TransitionCrossDissolve, animations: 
{ () -> Void in
    stringForPlayer.addAttribute(
        NSForegroundColorAttributeName,

        value: UIColor.greenColor(),

        range: rangeOfText)
    self.textViewForPlayer.attributedText = stringForPlayer
    }, completion: nil)

您可以看到,这非常简单。

要使文本在此动画过程中收缩和增长是一个完全不同的蜡球,因为简单地尝试更改文本大小将导致重新布置文本视图的其余部分,这肯定不是您的目的。

在那种情况下,我可能会为文本视图的该部分拍摄快照,将该快照放置在文本视图上,为调整大小和转换设置动画。所有这些都假定您要在动画结束时将其转换为与以前完全相同的大小(否则,您将遇到一个复杂的问题,即在动画过程中如何处理其余文本)。

要实现特定的动画,这将需要大量的工作。我想问一下您是否可以通过其他方式(例如嵌套动画,先淡化文本颜色以使其清晰然后再淡化为新颜色,从而获得某种“消失并重新出现”的感觉)来更简单地实现所需的效果) 。这使得转换更加引人注目,同时又不会迷失在动画代码的老鼠巢中。

如果要先将其淡化为clearColor,然后再使其淡化为所需的颜色(使它“弹出”更多),则可以使用完成块:

UIView.transitionWithView(self.textViewForPlayer, duration: 0.25, options: 
.TransitionCrossDissolve, animations: { () -> Void in

    stringForPlayer.addAttribute(

        NSForegroundColorAttributeName,

        value: UIColor.clearColor(),

        range: rangeOfText)

    self.textViewForPlayer.attributedText = stringForPlayer

    }, completion: { (finished) -> Void in

        UIView.transitionWithView(self.textViewForPlayer, duration: 0.25,
 options: .TransitionCrossDissolve, animations: { () -> Void in

            stringForPlayer.addAttribute(

                NSForegroundColorAttributeName,

                value: UIColor.greenColor(),

                range: rangeOfText)

            self.textViewForPlayer.attributedText = stringForPlayer

            }, completion: nil)
})
© www.soinside.com 2019 - 2024. All rights reserved.