在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>通訊/手機編程>

iOS系統中關于Autolayout約束動畫化的解析

大小:0.3 MB 人氣: 2017-09-26 需要積分:1

  下面這個gif就是我們想去實現的效果。

  iOS系統中關于Autolayout約束動畫化的解析

  藍圖應該在右邊滑出,然后黃圖相應地充斥整個屏幕…

  設置基本約束

  一開始,我在IB上拖出視圖,拉上約束。這個時候倆視圖都是可見的。

  iOS系統中關于Autolayout約束動畫化的解析

  黃圖有五個約束:左邊相對父視圖間隔,右邊相對藍圖間隔,上邊相對switch間隔,下邊相對父視圖間隔,以及和藍圖寬度相等約束。

  iOS系統中關于Autolayout約束動畫化的解析

  藍圖和黃圖的約束差不多,除了藍圖是右邊相對父視圖間隔。

  iOS系統中關于Autolayout約束動畫化的解析

  非必需約束優先級

  在只有黃圖可見的時候(真是不錯),我們需要加另一個約束,也就是它右側相對父視圖的間隔約束。如果在上面我加上這個約束,那么他就和那個“右側相對藍圖約束”沖突了,因為他倆同時有優先級1000。為了避免沖突以及移動藍圖,我們可以改變一下黃藍圖間隔的那個約束的優先級。

  必需約束優先級是這個UILayoutPriorityRequired(1000),你不能在運行時改變一個必需約束的優先級。優先級比UILayoutPriorityRequired小的,就是一個可選或者非必需的約束,類似這種,只要你別把優先級設置為UILayoutPriorityRequired,你就可以改。

  所以首先,我們把藍圖右側相對父視圖約束的優先級搞低一點,搞到750.

  iOS系統中關于Autolayout約束動畫化的解析

  然后我們在給黃圖加一個它右側相對父視圖的約束(就像上面提到的),優先級也搞到750.

  iOS系統中關于Autolayout約束動畫化的解析

  把約束拖出來!

  為了在運行時改變藍圖右側約束我們得先把這個約束拖到代碼中。你也可以像這樣拖任意的約束出來。(就像把控件關聯到代碼中一樣,選中約束,按Ctrl拖)

  @property (weak, nonatomic) IBOutlet NSLayoutConstraint *blueViewConstraint;

  為了確保我們把藍圖推出屏幕,我們也得調整黃圖和藍圖中間的間隔約束,所以我們把這個約束也整到代碼中。

  @property (weak, nonatomic) IBOutlet NSLayoutConstraint *viewSpacingContraint;

  更新約束

  現在可以很容易的寫一個方法來根據模式開關設置藍圖約束想要的優先級。

  - (void)updateConstraintsForMode { if (self.modeSwitch.isOn) { self.viewSpacingContraint.constant = 8.0; self.blueViewConstraint.priority = UILayoutPriorityDefaultHigh+1; } else { self.viewSpacingContraint.constant = self.view.frame.size.width; self.blueViewConstraint.priority = UILayoutPriorityDefaultHigh-1; } }

  我們在storyboard中把黃圖右側相對父視圖的約束也設定了優先級UILayoutPriorityDefaultHigh(750)。為了使藍圖可見,我們需要把藍圖的右側約束優先級設定的比750高一些,而隱藏起藍圖時我們得把它設定的低一些。

  請注意!看黑板!我們要給黃藍圖的間隔設定一個大點的值(我這里用的屏幕寬度)以確保藍圖推出右側邊界。

  我們在視圖第一次加載時也應該配置下約束。厚此薄彼可不好。

  - (void)viewDidLoad { // 。。. [self updateConstraintsForMode]; }

  動起來!

  現在萬事俱備只欠東風了,我們現在只需要輕輕的撥動一下模式開關,咦?輕輕的,咦?啊不好意思,忘記把開關的事件代碼寫上了- -,蘋果的Auto Layout Guide描述了autoLayout搞動畫的基本方法,推薦的代碼如下:

  [containerView layoutIfNeeded]; [UIView animateWithDuration:1.0 animations:^{ // Make all constraint changes here [containerView layoutIfNeeded]; }];

  這兩個對layoutIfNeeded的調用強迫將要執行的操作完成,然后在動畫塊里捕獲frame的改變。

  (譯者補充:想起知乎里一個回答 你在公司項目里面看到過哪些操蛋的代碼?)

  if (m_doc-》isModified() == true) { for (int i = 0; i 《 100; i++) { save(); //Save the document for 100 times to ensure it has been saved successfully. } }

  在我們的栗子中用上面的方法,就是這樣式的:

  - (IBAction)enableMode:(UISwitch *)sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setBool:sender.isOn forKey:modeUserDefaultKey]; [defaults synchronize]; [self.view layoutIfNeeded]; [UIView animateWithDuration:1.0 animations:^{ [self updateConstraintsForMode]; [self.view layoutIfNeeded]; }]; }

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      主站蜘蛛池模板: 1024手机在线看永久免费 | 美女扒开尿口让男人30视频 | 日韩毛片在线看 | 亚洲影视网 | 男女交性拍拍拍高清视频 | 国产精品久久久久aaaa | 欧美成人精品福利网站 | 国产午夜久久影院 | 美女一级免费毛片 | 六月婷婷综合 | 91三级在线观看 | 国外免费精品视频在线观看 | 成年人一级毛片 | 激情综合色综合久久综合 | 电影天堂在线观看三级 | 丝袜美腿一区 | 成人精品一区二区不卡视频 | 在线观看不卡一区 | 国产精品偷伦费观看 | aaaaaa级特色特黄的毛片 | www.四虎| 一区在线视频 | 三级在线观看视频 | 国产高清成人mv在线观看 | 免费爱爱视频网站 | 35pao强力| 欧美色视频在线观看 | 特黄特黄一级高清免费大片 | 噜噜噜噜噜久久久久久91 | 日韩一二三级 | 国产成人亚洲日本精品 | 久久久免费观看 | 国产精品午夜免费观看网站 | 性性欧美 | 日本美女黄视频 | 日本国产中文字幕 | 午夜在线观看免费视频 | 国产亚洲精品aa在线看 | 国产色婷婷精品综合在线手机播放 | 日本欧美强乱视频在线 | 哪里可以看免费毛片 |