1

我在 UIImageView 中有一个汽车图像,带有移动和旋转动画。我在 UIImageView 中有一个轮胎标记图像,我已将其作为子视图添加到汽车中。这意味着所有相同的移动和旋转动画都适用于两者。

我想要做的是留下轮胎滑痕的痕迹。

任何人都可以提出如何做到这一点的策略吗?

搜索其他主题我看到了这个片段,不确定我是否可以使用它:

UIGraphicsBeginImageContext(drawingView.bounds.size);
[drawingView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//then display viewImage in another UIImageView...

如果它可用,关于如何在动画期间调用它的任何线索?

4

2 回答 2

1

那个片段不是你要找的。该片段将当前在上下文中显示的内容保存为 UIImage。您也可以使用 ImageContext 进行绘制,但不是这样。

于 2009-07-21T12:53:10.203 回答
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 在每一步都递增。当每个动画停止时,我们在我们正在制作动画的那个下方绘制一个精灵图像,然后我们重新开始我们的动画,直到没有更多的点可以移动。然后我们完成。

希望这可以帮助!

于 2010-01-06T10:59:40.260 回答