動畫 Resize
MagicalWater opened this issue · 7 comments
MagicalWater commented
請問在 TGLinearLayout 裡面其中一個 view 大小的時候
整個佈局有辦法以動畫方式重新 resize嗎
youngsoft commented
您可以在设置完子视图的tg_xxxx属性后,或者设置完布局视图的tg_xxxx属性后,然后调用方法tg_layoutAnimationWithDuration来执行动画比如:
let layout = TGLinearLayout(.vert)
let sbv = UIView()
sbv.tg_width.equal(.fill)
sbv.tg_height.equal(100)
layout.addSubview(sbv)
。。。。。。。
//假设这里在其他地方需要改变sbv的高度而产生动画。
sbv.tg_height.equal(200)
layout.tg_layoutAnimationWithDuration(0.3) //调用后将会产生尺寸变化的动画。
//你也可以用如下代码来实现动画效果:
sbv.tg_height.equal(200)
UIView.animate(withDuration: 0.3) {
layout.layoutIfNeeded()
}
具体您可以搜索我的DEMO里面的关键字tg_layoutAnimationWithDuration或UIView.animate来更加详细的了解TangramKit对动画的支持。
MagicalWater commented
好的, 非常感謝, 我去試試看
BadReese commented
但是这样执行动画的时候
如果sbv上方有其他VIEW
这个VIEW会马上出现在被顶起后的位置
只有sbv会因为动画慢慢变高
怎么办呢
youngsoft commented
但是这样执行动画的时候
如果sbv上方有其他VIEW
这个VIEW会马上出现在被顶起后的位置
只有sbv会因为动画慢慢变高
怎么办呢
那就为父布局设置动画,或者再往上一级设置动画
BadReese commented
但是这样执行动画的时候
如果sbv上方有其他VIEW
这个VIEW会马上出现在被顶起后的位置
只有sbv会因为动画慢慢变高
怎么办呢那就为父布局设置动画,或者再往上一级设置动画
谢谢欧阳大哥,确实我最终是为layout的上一级做动画的
但我不太懂这原理,可以请您帮我解释下么?谢谢
youngsoft commented
如果有可能其实你看一下源代码就好,因为那个动画函数其实是在布局视图执行layoutSubviews方法内部执行的,而layoutSubviews又调整了所有子视图的frame值。就相当于如下形式:
布局视图的 layoutSubviews实现
开始动画函数
调整所有子视图的frame值
结束动画函数
BadReese commented
恩呀
谢谢你
我去看看