youngsoft/TangramKit

動畫 Resize

MagicalWater opened this issue · 7 comments

請問在 TGLinearLayout 裡面其中一個 view 大小的時候
整個佈局有辦法以動畫方式重新 resize嗎

您可以在设置完子视图的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对动画的支持。

好的, 非常感謝, 我去試試看

但是这样执行动画的时候
如果sbv上方有其他VIEW
这个VIEW会马上出现在被顶起后的位置
只有sbv会因为动画慢慢变高
怎么办呢

但是这样执行动画的时候
如果sbv上方有其他VIEW
这个VIEW会马上出现在被顶起后的位置
只有sbv会因为动画慢慢变高
怎么办呢


那就为父布局设置动画,或者再往上一级设置动画

但是这样执行动画的时候
如果sbv上方有其他VIEW
这个VIEW会马上出现在被顶起后的位置
只有sbv会因为动画慢慢变高
怎么办呢

那就为父布局设置动画,或者再往上一级设置动画

谢谢欧阳大哥,确实我最终是为layout的上一级做动画的
但我不太懂这原理,可以请您帮我解释下么?谢谢

如果有可能其实你看一下源代码就好,因为那个动画函数其实是在布局视图执行layoutSubviews方法内部执行的,而layoutSubviews又调整了所有子视图的frame值。就相当于如下形式:

布局视图的 layoutSubviews实现

开始动画函数
调整所有子视图的frame值
结束动画函数



恩呀
谢谢你
我去看看