Вызов пользовательской функции после прибытия в первую точку каанимации - PullRequest
0 голосов
/ 19 июля 2011

Я хочу скользить в изображении справа (вне экрана) к середине, а затем из середины влево (вне экрана). Когда изображение прибыло (первая точка пути анимации) в середине, я хочу вызвать пользовательскую функцию. Как я могу это понять?

спасибо за помощь.

Это то, что я пробовал, но немного посередине (начало второй анимации). Я думаю, что лучше иметь одну анимацию

мой код:

- (void) animateFromRightToMiddlePath {

 CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
 pathAnimation.calculationMode = kCAAnimationPaced;
 pathAnimation.fillMode = kCAFillModeForwards;
 pathAnimation.removedOnCompletion = NO;
 pathAnimation.duration = 3;
 pathAnimation.repeatCount = 1;
 pathAnimation.delegate = self;
 [pathAnimation setValue:@"rightToMiddle" forKey:@"AnimationType"];


 CGMutablePathRef curvedPath = CGPathCreateMutable();
 CGPathMoveToPoint(curvedPath, NULL, x + (picture.size.width/2), 250);
 CGPathAddLineToPoint(curvedPath, NULL, (picture.size.width/2), 250);
 pathAnimation.path = curvedPath;
 CGPathRelease(curvedPath);
 imageView = [[UIImageView alloc] initWithImage:picture];
 imageView.tag = 1;
 imageView.frame = CGRectMake(1, 1, picture.size.width, picture.size.height);
 [self addSubview:imageView];
 [imageView.layer addAnimation:pathAnimation forKey:@"moveTheSquare"];

}

- (void) animateFromMiddleToLeftPath {

     CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
     pathAnimation.calculationMode = kCAAnimationPaced;
     pathAnimation.fillMode = kCAFillModeForwards;
     pathAnimation.removedOnCompletion = NO;
     pathAnimation.duration = 3; 
     pathAnimation.repeatCount = 1;
     pathAnimation.delegate = self;
     [pathAnimation setValue:@"middleToLeft" forKey:@"AnimationType"];

     CGMutablePathRef curvedPath = CGPathCreateMutable();
     CGPathMoveToPoint(curvedPath, NULL, (picture.size.width/2), 250);
     CGPathAddLineToPoint(curvedPath, NULL, -(picture.size.width/2), 250);
     pathAnimation.path = curvedPath;
     CGPathRelease(curvedPath);

     [imageView.layer addAnimation:pathAnimation forKey:@"moveTheSquare"];

}

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag{

    NSString *aniType = [theAnimation valueForKey:@"AnimationType"];

    if ([aniType isEqualToString:@"rightToMiddle"]) {

        [self animateFromMiddleToLeftPath];
     // CUSTOM FUNCTION CALL
    }

    if ([aniType isEqualToString:@"middleToLeft"]) {

//        [self animateFromRightToMiddlePath];

    }

}

1 Ответ

0 голосов
/ 19 июля 2011

Способ моделирования такого вида взаимодействия следующий:

  1. ваше изображение движется по экрану в соответствии со своей логикой (фиксированная анимация, вы перетаскиваете ее и т. Д.);

  2. вы определяете таймер так, чтобы на каждом тике вызывалась функция обработчика; этот обработчик несет ответственность (в вашем конкретном случае) за проверку положения изображения;

  3. когда положение соответствует желаемому, обработчик запускает другую вашу функцию.

Это может показаться сложным, но это не совсем так. Это позволяет вам решить эту проблему модульным и многократно используемым способом, и это вдохновлено тем, как игры решают эту проблему.

...