动画带来前面的UIView方法

时间:2014-01-20 03:51:47

标签: objective-c animation uiview

有没有办法动画以下内容:

UIView *exampleView = //something
[exampleView.superview bringToFront:exampleView];

在for循环中,以便视图层次结构中的每个视图一次一个地被带到层次结构的前面,每次视图更改之间有一个延迟,因为当我将上面的代码行放入一个动画内部时for循环所有视图都立即被带到层次结构的前面,因为动画会立即出现在代码中,并且只会随着时间的推移以它们在屏幕上的显示方式发生变化。

2 个答案:

答案 0 :(得分:2)

您只能为动画属性的更改设置动画。您无法为任意方法的制定设置动画。并且只有某些属性是可动画的(它们是明确列出的)。属性是可动画的,因为有一些方法可以直观地表示初始值和最终值之间的中间阶段。

您可以调查图层的zPosition属性,这被明确说是可动画的,但我不知道视觉效果是什么样的。

答案 1 :(得分:0)

您还可以使用UIView的transition(from:to:duration:options:completion:)transition(with:duration:options:animations:completion:)函数为过渡设置动画。这些功能的Apple文档链接为herehere

请记住,Apple不鼓励从iOS 13开始使用这些动画技术,并建议改为使用UIViewPropertyAnimator类函数。

让我举一个Swift中用法的例子:

let containerView = UIView()
let transitionFromView = UIView()
containerView.addSubview(transitionFromView)
//add your layout constraints to the transitionFromView within the containerView

let transitionToView = UIView()
containerView.addSubview(transitionToView)
//add your layout constraints to the transitionToView within the containerView
...
func performTransition1() {
   //since both transitionFromView and transitionToView have already been added 
   //to their parent's subviews, we can use showHideTransitionViews animation option
   //in this example I am using transitionCrossDissolve animation; however, 
   //there are other options that can be used instead such as 
   //transitionFlipFromRight
   UIView.transition(from: transitionFromView,
                     to: transitionToView,
                     duration: 0.5,
                     options: [.showHideTransitionViews, .transitionCrossDissolve],
                     completion: nil)
}

ps:可以找到完整的动画选项列表here