У меня есть маска, которую я создал благодаря слою и изображению. Я хочу переместить этот слой с небольшими «скачками» (без красивой анимации перевода).
Проблема в том, что при перемещении кадра маскирующего слоя происходит анимация. Я пробовал позвонить [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];