UIImageView对象从错误的位置开始

时间:2014-02-19 00:19:00

标签: ios objective-c animation uiimageview core-animation

要完全理解这个问题,需要提供一些信息。我哥哥和我正在为iOS开发游戏。游戏中有人物从屏幕右侧向左侧行走(动画)。这些对象是作为UIImageView的子类创建的。例如,我们有一个CharacterImageView,它是在视图控制器上的计时器期间通过其初始化程序创建的。因此,当计时器运行时,我们将变量增加1。当变量达到一定数量时,它将创建一个对象并将其添加到超级视图,如[[CharacterImageView alloc] init];但是,我们使用自定义初始化程序:

当我们初始化这个对象时,我们传递了多个属性,其中一个是CGRect来设置它的框架。我们在任何给定级别创建同一类的多个实例。因此,CharacterImageView可能有30个以上的对象,使用六个可能的起始CGRect之一进行初始化。这些对象立即在其初始化程序中创建一个计时器并开始运行它。计时器管理动画,设置如下:

- (void)characterTimerFired:(NSTimer *)newTimer
{
    // Get the presentationLayer coordinates
    CALayer *characterLayer = self.layer.presentationLayer;
    CGPoint currentPoint;
    currentPoint.x = characterLayer.position.x;
    currentPoint.y = characterLayer.position.y;

    // If there are no animation keys, begin a new animation
    if (!self.layer.animationKeys)
    {
        [CharacterImageView animationWithDuration:3.0
                                            delay:0.0
                                          options:UIViewAnimationOptionBeginFromCurrentState
                                       animations:^{
            CABasicAnimation *characterWalking = [CABasicAnimation animationWithKeyPath:@"position"];

            CGPoint newPoint;
            newPoint.x = currentPoint.x - 100;
            newPoint.y = currentPoint.y;

            [characterWalking setFromValue:[NSValue valueWithCGPoint:currentPoint];
            [characterWalking setToValue:[NSValue valueWithCGPoint:newPoint];
            [characterWalking setDuration:3.0];

            [self setAnimationImages:walkingImageArray];
            [self setAnimationRepeatCount:3];
            [self setAnimationDuration:1.0];
            [self startAnimating];

            [[self layer] addAnimation:characterWalking forKey:@"position"];
            [CharacterImageView commitAnimations];
            [[self layer] setPosition:newPoint];
                                                    }
                                        completion:nil];
     }

好的,现在已经给出了基本信息,这就是问题所在。每隔一段时间,CharacterImageView就不会在它的正确位置启动。相反,它开始并完成它在iDevice(横向)左上角的动画。任何信息都将非常感激,如果我需要更详细或提供更多代码,请告诉我。

游戏是可玩的,100到200个角色的创作通常只发生一次。但它仍然需要纠正,因为它会干扰游戏玩法。

0 个答案:

没有答案