Анимация на слое, который не нужно удалять

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

Проблема в том, что при перемещении кадра маскирующего слоя происходит анимация. Я пробовал позвонить [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}} ---- Анимация Анимация с ключом: position Завершение анимации Анимация после удаления
Завершение анимации после удаления

--- 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];

person CedricSoubrie    schedule 05.09.2011    source источник


Ответы (1)


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

  1. Можно ли вместо этого попробовать сделать это с UIView?
  2. Не могли бы вы попробовать removeFromSuperview и addSubview вместо того, чтобы просто менять рамку?
person Mundi    schedule 05.09.2011
comment
1- Я не знаю, как указать маску без использования слоев. Ты ? 2- ДА, это работает, когда я удаляю предыдущий слой маски и строю новый в правильном месте. Думаю, для производительности это плохо, но на iPad вроде нормально. Спасибо - person CedricSoubrie; 06.09.2011