iOS 當Animation遇到Constrains
在複雜的系統中,難免遇到混合使用frame和contrains的情況。這裡記錄下我遇到的一種情況。
RootView:使用frame方式。
ContentView: RootView的子view,採用Masonry約束。
CGRect rect = self.RootView.frame;
[UIView animateWithDuration:0.3 animations:^{
weakSelf.RootView.frame = CGRectMake(rect.origin.x, rect.origin.y - 50, rect.size.width, rect.size.height + 50);
}];
想要實現的是,調整RootView的y,並同時增加高度;但是實際效果是ContentView動畫效果總是跟RootView不一致。
修改方案:
CGRect rect = self.RootView.frame;
[UIView animateWithDuration:0.3 animations:^{
weakSelf.RootView.frame = CGRectMake(rect.origin.x, rect.origin.y - 50, rect.size.width, rect.size.height + 50);
[weakSelf.RootView layoutIfNeeded];
}];
增加layoutIfNeeded方法呼叫,API中的解釋是:Allows you to perform layout before the drawing cycle happens. -layoutIfNeeded forces layout early
使用此方法強制立即進行layout,從當前view開始,此方法會遍歷整個view層次(包括superviews)請求layout。因此,呼叫此方法會強制整個view層次佈局。
猜測是重新整理約束需要呼叫layout。
相關文章
- iOS Animation建立及使用iOS
- iOS開發之Core AnimationiOS
- iOS Animation] CALayer 專用圖層iOS
- iOS動畫系列之三:Core AnimationiOS動畫
- iOS——Core Animation 知識摘抄(二)iOS
- iOS——Core Animation 知識摘抄(三)iOS
- iOS——Core Animation 知識摘抄(一)iOS
- iOS——Core Animation 知識摘抄(四)iOS
- iOS Core Animation 簡明系列教程iOS
- 當.NET遇到機器學習機器學習
- 當vue遇到swiperVue
- 當RxJava遇到AOPRxJava
- 當SOA遇到DDD
- iOS開發UI篇--iOS動畫(Core Animation)總結iOSUI動畫
- 視覺效果 -- iOS Core Animation 系列三視覺iOS
- 當資料遇到挖掘
- 當Spring遇到OpenAI...SpringOpenAI
- 當SDN遇到物聯網
- 當開發遇到運維運維
- 當DDD遇到專案管理專案管理
- 當我遇到了爬蟲爬蟲
- 當useEffect遇到函式依賴函式
- 玩轉iOS開發:7.《Core Animation》Implicit AnimationsiOS
- 當Notification和Websocket遇到https、httpWebHTTP
- 當Flutter遇到節流與防抖Flutter
- 當融合基礎遇到了私有云
- 當Java 22遇到 SpringBoot 3.3.0!JavaSpring Boot
- 玩轉iOS開發:1.《Core Animation》基礎概念iOS
- 當 Python 遇到了你的微信好友Python
- 當MySQL資料庫遇到Syn FloodingMySql資料庫
- [譯]當 Node.js Core 遇到 HTTP/2Node.jsHTTP
- 當 JS 大豬蹄子遇到 HTML 小姐姐JSHTML
- 當Serverless遇到Regionless:現狀與挑戰Server
- Android IntentService完全解析 當Service遇到HandlerAndroidIntent
- 玩轉iOS開發:6.《Core Animation》CALayer的Specialized LayersiOSZed
- 【iOS】那些年,遇到的小坑iOS
- Android Animation 系列——屬性動畫(Property Animation)Android動畫
- 當移動資料分析需求遇到Quick BIUI