Анимация на слое, который не хочет быть удаленным - PullRequest
0 голосов
/ 05 сентября 2011

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

Проблема в том, что при каждом перемещении кадра маскирующего слоя происходит анимация. Я пытался позвонить [maskLayer removeAllAnimations];, но это ничего не меняет.

В моем коде я вообще не помещаю анимацию, поэтому не понимаю, откуда взялась эта анимация.

Когда я запускаю эту функцию:

-(void) moveAlternativeMask:(CALayer*) maskLayer {
     NSLog (@"moveAlternativeMask %@", NSStringFromCGRect(maskLayer.frame));

    // Change the frame of the layer
    CGRect originalFrame = maskLayer.frame;
    CGFloat newYPos = maskLayer.frame.origin.y + 5.;
    maskLayer.frame = CGRectMake (originalFrame.origin.x, newYPos, originalFrame.size.width, originalFrame.size.height);

    // Try removing all animations on the layer
    NSLog (@"Animations");
    for (NSString* animationKey in maskLayer.animationKeys) {
        NSLog(@"    Animation With Key %@", animationKey);
    }
    NSLog (@"End animations");
    [maskLayer removeAllAnimations];

    NSLog (@"Animations after removing");
    for (NSString* animationKey in maskLayer.animationKeys) {
        NSLog(@"    Animation With Key %@", animationKey);
    }
    NSLog (@"End animations after removing");

    // Launch the animation with a small delay
    [self performSelector:@selector(moveAlternativeMask:) withObject:maskLayer afterDelay:0.5];

}

Я получаю этот журнал:

---- moveAlternativeMask {{0, 200}, {768, 643}} ---- Анимации Анимация с ключом: позиция Конец анимации Анимации после удаления
Завершить анимацию после удаления

--- moveAlternativeMask {{0, 205}, {768, 643}} Анимации Анимация с ключом: позиция Конец анимации Анимации после удаления
Завершить анимацию после удаления

--- moveAlternativeMask {{0, 210}, {768, 643}} Анимации Анимация с ключом: позиция Конец анимации Анимации после удаления
Завершить анимацию после удаления

Итак, слой перемещается так, как я хочу, единственная проблема в том, что анимация «позиции» продолжает возвращаться ...

Обратите внимание, что CALayer был построен следующим образом:

UIImage *maskImage = [UIImage imageNamed:@"masque2.png"];
self.maskLayer = [CALayer layer];
self.maskLayer.contents = (id) maskImage.CGImage;
self.maskLayer.frame = CGRectMake(0, ORIGINAL_Y_POSITION, 768, 643);
[myView.layer setMask:self.maskLayer];

1 Ответ

1 голос
/ 05 сентября 2011

Хм, очень странно.У меня есть 2 идеи:

  1. Можно ли попробовать сделать это с UIView вместо этого?
  2. Не могли бы вы попробовать removeFromSuperview и addSubview вместо простого изменениякадр?
...