作者onionys (..)
看板MacDev
标题[问题] UIView和CALayer动画的问题
时间Tue Apr 26 22:59:30 2011
最近遇到一个问题...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)
1F:推 Piceman:我没做过,不过把他们放在同一个context中也许有用? 04/26 23:21
2F:→ zonble:CALayer 基本上改任何 property 都会直接产生动画 04/27 07:52
3F:→ zonble:没有必要用这样的 timer 慢慢转 04/27 07:53
※ 编辑: onionys 来自: 219.84.218.54 (04/28 20:39)
※ 编辑: onionys 来自: 219.84.218.54 (04/28 20:58)
4F:→ onionys:正在参悟zonble大的CA讲义... 04/28 21:01
5F:→ ttflee:Perhaps OpenGLES is to rescue 05/01 01:06