youngsoft / TangramKit

TangramKit is a powerful iOS UI framework implemented by Swift. It integrates the functions with Android layout,iOS AutoLayout,SizeClass, HTML CSS float and flexbox and bootstrap. So you can use LinearLayout,RelativeLayout,FrameLayout,TableLayout,FlowLayout,FloatLayout,LayoutSizeClass to build your App 自动布局 UIView UITableView UICollectionView
MIT License
1.21k stars 175 forks source link

動畫 Resize #10

Closed MagicalWater closed 7 years ago

MagicalWater commented 7 years ago

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

youngsoft commented 7 years ago

您可以在设置完子视图的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 7 years ago

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

BadReese commented 5 years ago

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

youngsoft commented 5 years ago

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


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

BadReese commented 5 years ago

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

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

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

youngsoft commented 5 years ago

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

布局视图的 layoutSubviews实现

开始动画函数
调整所有子视图的frame值
结束动画函数
BadReese commented 5 years ago

恩呀 谢谢你 我去看看