我在UIImageView中有一个汽车图像,带有移动和旋转动画。 我在UIImageView中有一个轮胎标记图像,我已将其作为子视图添加到汽车中。 这意味着所有相同的移动和旋转动画都适用于两者。
我想做的是留下轮胎打滑痕迹。
有人可以建议如何做到这一点的策略吗?
搜索其他主题我看到了这个片段,不确定我是否可以使用它:
UIGraphicsBeginImageContext(drawingView.bounds.size);
[drawingView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//then display viewImage in another UIImageView...
如果它可用,那么在动画中如何调用它的任何线索?
答案 0 :(得分:1)
那个片段并不是你想要的。该片段将当前在上下文中显示的内容保存为UIImage。您也可以使用ImageContext进行绘制,但不是这样。
答案 1 :(得分:0)
理想情况是,如果CAKeyframeAnimation在执行以下关键帧之前通知了其委托;因为我不认为这是可能的(?)我能想到做这样的事情的唯一方法是使用一个位置数组,并使用连续的CABasicAnimation实例来执行此操作。这就像一个“穷人”CAKeyframeAnimation。
这样的事情:
- (void)viewDidLoad
{
[super viewDidLoad];
_step = 0;
_positions = [[NSArray alloc] initWithObjects:[NSValue valueWithCGPoint:CGPointMake(20.0, 20.0)],
[NSValue valueWithCGPoint:CGPointMake(40.0, 80.0)],
[NSValue valueWithCGPoint:CGPointMake(60.0, 120.0)],
[NSValue valueWithCGPoint:CGPointMake(80.0, 160.0)],
[NSValue valueWithCGPoint:CGPointMake(100.0, 200.0)],
[NSValue valueWithCGPoint:CGPointMake(120.0, 240.0)],
[NSValue valueWithCGPoint:CGPointMake(140.0, 280.0)],
[NSValue valueWithCGPoint:CGPointMake(160.0, 320.0)],
[NSValue valueWithCGPoint:CGPointMake(180.0, 360.0)],
[NSValue valueWithCGPoint:CGPointMake(200.0, 400.0)],
nil];
[self moveToNextPosition];
}
- (void)moveToNextPosition
{
if (_step < [_positions count] - 1)
{
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.fromValue = [_positions objectAtIndex:_step];
animation.toValue = [_positions objectAtIndex:(_step + 1)];
animation.delegate = self;
animation.removedOnCompletion = YES;
[_sprite.layer addAnimation:animation forKey:@"position"];
++_step;
}
else
{
_sprite.center = [[_positions objectAtIndex:_step] CGPointValue];
}
}
- (void)animationDidStop:(CAAnimation *)animation finished:(BOOL)finished
{
UIImageView *trail = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"sprite.png"]];
trail.center = [[_positions objectAtIndex:_step] CGPointValue];
[self.view insertSubview:trail belowSubview:_sprite];
[trail release];
[self moveToNextPosition];
}
在这种情况下,动画一个接一个地执行,其中的值在_positions NSArray ivar中指定,并且_step在每一步都递增。当每个动画停止时,我们在我们动画的动画下方绘制一个精灵图像,然后我们重新启动动画,直到没有更多的点移动到。然后我们完成了。
希望这有帮助!