[問題] UIView和CALayer動畫的問題

看板MacDev作者 (..)時間14年前 (2011/04/26 22:59), 編輯推噓1(104)
留言5則, 4人參與, 最新討論串1/1
最近遇到一個問題...UIImageView和CALayer的問題... 我在一個UIViewController的實例裡面 用 addSubview 的方式加進去一個事先做好的UIImageView實例(假設叫做ballOne) [self.view addSubview:ballOne]; 也用 addSublayer的方式加進去一個事先做好的CALayer實例(假設叫做ballTwo) [self.view.layer addSublayer:ballTwo]; 然後寫一個method(假設叫做rotation)去同時旋轉ballOne和ballTwo轉個0.01度 而且每呼叫一次rotation 這個角度就會多轉0.01度 -(void) rotation{ self.angle += 0.01; <== 每呼叫一次就會把這個角度疊加 0.01 CGAffineTransform rotate = CGAffineTransformMakeRotation(self.angle); [self.ballOne setTransform:rotate]; for(CALayer ball in self.view.layer.sublayers){ [ball setAffineTransform:rotate]; } } 然後在某個時候用一個 NSTimer 每隔 0.01秒 就呼叫 rotation 一次: self.timer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(rotation) userInfo:nil repeats:YES]; 原本我滿心期待這對 ball 會痛快地同步旋轉但是我看到的卻不是這樣...Orz..... CALayer 的 ballTwo 好像會有一點點忽快忽慢... UIImageView 的 ballOne 看起來就很規律地旋轉... 而且在用[self.timer invalidate]把這個 NSTimer 停住的那一個瞬間, ballOne 停住之後,ballTwo 還會在轉一下才停住(很快就會停住)。 而之後如果再加 CALayer 的 ballFour 進去sublayer 和 UIImage 的 ballThree 進去subview CALayer 的 ballTwo、ballFour 會同步,但是忽快忽慢... UIImageView 的 ballOne、ballThree 也是會同步,而且很規律的轉... 所以這邊想問的是,有沒有什麼辦法讓這幾個 ball 同步、不要忽快忽慢地旋轉?... ------------------- 不知道是不是這樣... CALayer部份會忽快忽慢是因為CALayer在轉動的時候就會預設用一小段時間來呈現 轉動過程的動畫。 而我的timer 設定少於這個時間,所以才會在上一段的動畫還沒結束前就開始下一個。 所以在把timer的時間大一些之後,就CALayer的部份不會有忽快忽慢的情形。 然而把UIView的物件用 setTransfor: 方式旋轉的話則沒有動畫效果。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.84.56.167 ※ 編輯: onionys 來自: 219.84.56.167 (04/26 23:00) ※ 編輯: onionys 來自: 219.84.56.167 (04/26 23:19)

04/26 23:21, , 1F
我沒做過,不過把他們放在同一個context中也許有用?
04/26 23:21, 1F

04/27 07:52, , 2F
CALayer 基本上改任何 property 都會直接產生動畫
04/27 07:52, 2F

04/27 07:53, , 3F
沒有必要用這樣的 timer 慢慢轉
04/27 07:53, 3F
※ 編輯: onionys 來自: 219.84.218.54 (04/28 20:39) ※ 編輯: onionys 來自: 219.84.218.54 (04/28 20:58)

04/28 21:01, , 4F
正在參悟zonble大的CA講義...
04/28 21:01, 4F

05/01 01:06, , 5F
Perhaps OpenGLES is to rescue
05/01 01:06, 5F
文章代碼(AID): #1DjjtLPk (MacDev)
文章代碼(AID): #1DjjtLPk (MacDev)