假设,在xib文件中定义了视图控制器的view,其中有一个label,被放置在view的中心位置(通过constraints固定)。
现在想通过触摸屏幕的某个点实现label从左滑入,从右滑出的效果(目标-动作)。于是我在viewDidLoad
中将label的frame设置到屏幕左边,窗口外侧。可是实现效果却是label从原地冒了出来(就是不知道什么时候label的frame又被改回了xib中的frame)。
我试过在动作方法中对label的frame进行同样的设置,这时效果符合预期。所以我的问题是,为什么不能viewDidLoad
方法中进行这样的修改,我记得同视图相关的设置都应该在这个方法里完成啊?
1 把label的限制拿出來
2 點擊時改變約束
從初始位置出現是因為在執行佈局操作的時候會根據你的約束來產生 frame,你的初始約束導致的這個行為的發生。
如果你想從左滑向中間,那麼你應該先設定初始約束在螢幕左邊
(UILabel)|Screen|
。然後在執行 Target Action 行為時修改 UILabel 約束的 constant。接著執行佈局操作。就如@paul_ding 的第二個答案,不過建議改成: