有没有办法动画以下内容:
UIView *exampleView = //something
[exampleView.superview bringToFront:exampleView];
在for循环中,以便视图层次结构中的每个视图一次一个地被带到层次结构的前面,每次视图更改之间有一个延迟,因为当我将上面的代码行放入一个动画内部时for循环所有视图都立即被带到层次结构的前面,因为动画会立即出现在代码中,并且只会随着时间的推移以它们在屏幕上的显示方式发生变化。
答案 0 :(得分:2)
您只能为动画属性的更改设置动画。您无法为任意方法的制定设置动画。并且只有某些属性是可动画的(它们是明确列出的)。属性是可动画的,因为有一些方法可以直观地表示初始值和最终值之间的中间阶段。
您可以调查图层的zPosition
属性,这被明确说是可动画的,但我不知道视觉效果是什么样的。
答案 1 :(得分:0)
您还可以使用UIView的transition(from:to:duration:options:completion:)
或transition(with:duration:options:animations:completion:)
函数为过渡设置动画。这些功能的Apple文档链接为here和here。
请记住,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