CGRect frame= self.bg.frame;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:2];
long tag=sender.tag;
switch (tag) {
case 10:
frame.origin.y-=30;
break;
case 20:
frame.origin.y+=30;
break;
default:
break;
}
self.bg.frame=frame;
[UIView commitAnimations];
中間這部分程式碼將被執行動畫。
我有一個比較奇葩的問題,就是這部分動畫程式碼,編譯器是如何取得的呢?
我的心裡是這麼想的,當然是偽代碼表述:就是用String去截取,把這段程式碼截取出來去執行。 。
求教。 。
還有順便一個問題,我一起問了。
self.bg.frame=frame;這樣位置就變了。 。那麼OC或是說IOS肯定是不斷監聽這個屬性的變化的。 。那麼IOS中事件模型是怎麼樣的呢?
大家讲道理2017-04-24 09:16:03
還有一種,就是一定是順序執行的。 。 。只是到了commitAnimations才是真正提交。
- (IBAction)move:(UIButton *)sender {
CGRect frame= self.bg.frame;
[UIView beginAnimations:nil context:nil];
NSLog(@"执行到了这里beginAnimations");
[UIView setAnimationDuration:2];
NSLog(@"执行到了这里setAnimationDuration");
long tag=sender.tag;
switch (tag) {
case 10:
frame.origin.y-=30;
break;
case 20:
frame.origin.y+=30;
break;
default:
break;
}
self.bg.frame=frame;
NSLog(@"执行到了这里2");
[UIView commitAnimations];
NSLog(@"commitAnimations");
}
運行的結果:
2015-08-28 1520.020 02計算器[1403:73936] 執行到了這裡beginAnimations
2015-08-28 15130320320320320303:003232032323232323232323333333333:003:003:003:003]執行到了這裡setAnimationDuration2015-08-28 15
20.022 02計算器[1403:73936] 執行到了這裡22015-08-28 15.
就是說程式碼一定是順序執行的。 。沒有說把程式碼抽出來執行這一說法。 self.bg.frame=frame;執行的時候肯定是有某個類似於獲取動畫狀態之類的東西。 。