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

时间:2016-01-05 02:55:48

标签: ios swift animation uinavigationitem

我想创建像iOS音乐应用程序一样的titleView动画!在iOS音乐应用程序中,您可以看到很酷的动画。当您从“我的音乐”中选择艺术家或专辑(例如)然后将它们向上滚动时,您可以看到UINavigationBar上出现淡入淡出动画,并且当您回到原始位置时也会消失!

1 个答案:

答案 0 :(得分:0)

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

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

UIView.transitionWithView(self.textViewForPlayer,持续时间:1.0,选项:.TransitionCrossDissolve,动画:{() - > Void in     stringForPlayer.addAttribute(         NSForegroundColorAttributeName,         值:UIColor.greenColor(),         range:rangeOfText)     self.textViewForPlayer.attributedText = stringForPlayer     },完成:无)

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

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

UIView.transitionWithView(self.textViewForPlayer,持续时间:1.0,选项:.TransitionCrossDissolve,动画:{() - > Void in     stringForPlayer.addAttribute(         NSForegroundColorAttributeName,         值:UIColor.greenColor(),         range:rangeOfText)     self.textViewForPlayer.attributedText = stringForPlayer     },完成:无) 如你所见,这非常简单。

在这个动画期间让文本缩小和增长是一个完全不同的蜡球,因为简单的尝试改变文本的大小将导致文本视图的其余部分重新布局,我相信不是你的意图。

在这种情况下,我可以拍摄文本视图的那部分快照,将快照放在文本视图上,为调整大小和转换设置动画。所有这些都假设你在动画结束时将它转换为完全相同的大小(否则你有一个复杂的问题,即在动画期间如何处理文本的其余部分) )。

实现特定动画需要做很多工作。我问你是否可以更简单地通过其他方式实现所需的效果(例如嵌套动画,一种淡化文本颜色以使其清晰然后将其淡化为新颜色,使其达到一点"消失并重新出现"感觉)。这使得转换更加引人注目,同时不会迷失在动画代码的大鼠巢中。

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

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

让stringForPlayer = textViewForPlayer.attributedText.mutableCopy()为NSMutableAttributedString

UIView.transitionWithView(self.textViewForPlayer,持续时间:1.0,选项:.TransitionCrossDissolve,动画: {() - >无效     stringForPlayer.addAttribute(         NSForegroundColorAttributeName,

    value: UIColor.greenColor(),

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

如您所见,这非常简单。

在这个动画期间让文本缩小和增长是一个完全不同的蜡球,因为简单的尝试改变文本的大小将导致文本视图的其余部分重新布局,我相信不是你的意图。

在这种情况下,我可以拍摄文本视图的那部分快照,将快照放在文本视图上,为调整大小和转换设置动画。所有这些都假设你在动画结束时将它转换为完全相同的大小(否则你有一个复杂的问题,即在动画期间如何处理文本的其余部分) )。

实现特定动画需要做很多工作。我问你是否可以更简单地通过其他方式实现所需的效果(例如嵌套动画,一种淡化文本颜色以使其清晰然后将其淡化为新颜色,使其达到一点"消失并重新出现"感觉)。这使得转换更加引人注目,同时不会迷失在动画代码的大鼠巢中。

如果你想将它淡化为clearColor,然后将其淡化为所需的颜色(使它"弹出"再多一点),你可以使用完成块:

UIView.transitionWithView(self.textViewForPlayer,持续时间:0.25,选项: .TransitionCrossDissolve,动画:{() - >无效

stringForPlayer.addAttribute(

    NSForegroundColorAttributeName,

    value: UIColor.clearColor(),

    range: rangeOfText)

self.textViewForPlayer.attributedText = stringForPlayer

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

    UIView.transitionWithView(self.textViewForPlayer, duration: 0.25,

选项:.TransitionCrossDissolve,动画:{() - >无效

        stringForPlayer.addAttribute(

            NSForegroundColorAttributeName,

            value: UIColor.greenColor(),

            range: rangeOfText)

        self.textViewForPlayer.attributedText = stringForPlayer

        }, completion: nil)

})