Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

動畫 Resize #10

Closed
MagicalWater opened this issue May 26, 2017 · 7 comments
Closed

動畫 Resize #10

MagicalWater opened this issue May 26, 2017 · 7 comments

Comments

@MagicalWater
Copy link

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

@youngsoft
Copy link
Owner

您可以在设置完子视图的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
Copy link
Author

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

@BadReese
Copy link

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

@youngsoft
Copy link
Owner

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


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

@BadReese
Copy link

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

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

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

@youngsoft
Copy link
Owner

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

布局视图的 layoutSubviews实现

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



@BadReese
Copy link

恩呀
谢谢你
我去看看

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants