【发布时间】:2011-09-08 07:46:28
【问题描述】:
我目前正在尝试在 UIImageView 上创建 Ken Burns effect。它首先应该放大(缓慢),然后,动画的 didStopSelector 应该调用一个方法,该方法应该缩小。问题是,只要我不将 didStopSelector 添加到动画中,第一个动画(放大)就可以并且完美地工作。如果我这样做,似乎该方法被直接调用(而不是在它 didStop 之后)。
这是包含动画的 2 种方法:
- (void)beginKenBurnsEffect {
[UIView beginAnimations:@"a" context:self.view_image];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:5];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDidStopSelector:@selector(endKenBurnsEffect)];
[UIView setAnimationDelegate:self];
self.view_image.transform = CGAffineTransformScale(self.view_image.transform, 1.06, 1.06);
self.view_image.center = CGPointMake(self.frame.size.width/1.7, self.frame.size.height/2);
[UIView commitAnimations];
}
- (void)endKenBurnsEffect {
[UIView beginAnimations:@"b" context:self.view_image];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:5];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDidStopSelector:@selector(beginKenBurnsEffect)];
[UIView setAnimationDelegate:self];
self.view_image.transform = self.origTransform;
self.view_image.center = self.origPoint;
[UIView commitAnimations];
}
初始化 UIImageView 后,我将当前的 Transform 和 Center 值保存到一个属性中。
self.origTransform = self.view_image.transform;
self.origPoint = self.view_image.center;
我也试过只用一个动画和setAnimationAutoReverse,但是在动画完成后,它在没有动画的情况下放大(在它做了缩小后缓慢动画)。
也许您知道问题可能出在哪里。
提前谢谢你:)
【问题讨论】:
标签: iphone objective-c animation