NSTimer no se activa cuando se produce el evento uiscrollview

Tengo un UIImageView colocado en UIScrollView, básicamente este UIImageView contiene un map muy grande y creó animation en una ruta pnetworkingefinida con la dirección de navigation apuntada con "flechas".

Pero, siempre que se producen uiscrollevents, creo que MainLoop se congela y NSTimer no se activa y la animation se detiene.

¿Existe alguna propiedad existente que resuelva este problema en UIScrollView, CAKeyFrameAnimation o NSTimer?

//viewDidLoad self.myTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(drawLines:) userInfo:nil repeats:YES]; - (void)drawLines:(NSTimer *)timer { CALayer *arrow = [CALayer layer]; arrow.bounds = CGRectMake(0, 0, 5, 5); arrow.position = CGPointMake(line.x1, line.y1); arrow.contents = (id)([UIImage imageNamed:@"arrow.png"].CGImage); [self.contentView.layer addSublayer:arrow]; CAKeyframeAnimation* animation = [CAKeyframeAnimation animation]; animation.path = path; animation.duration = 1.0; animation.rotationMode = kCAAnimationRotateAuto; // object auto rotates to follow the path animation.repeatCount = 1; animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; animation.fillMode = kCAFillModeForwards; [arrow addAnimation:animation forKey:@"position"]; } 

Las aplicaciones de iOS se ejecutan en un NSRunLoop. Cada NSRunLoop tiene diferentes modos de ejecución para diferentes tareas. Por ejemplo, el nstimer pnetworkingeterminado está progtwigdo para ejecutarse bajo el NSDefaultRunMode en el NSRunLoop. Sin embargo, lo que esto significa es que ciertos UIEvents, siendo uno de los modos de desplazamiento, interrumpirán el timer y lo colocarán en una queue para ejecutar tan pronto como el evento deje de actualizarse. En su caso, para que el timer no se interrumpa, debe progtwigrlo para un modo diferente, es decir, NSRunLoopCommonModes, así:

  self.myTimer = [NSTimer scheduledTimerWithTimeInterval:280 target:self selector:@selector(doStuff) userInfo:nil repeats:NO]; [[NSRunLoop currentRunLoop] addTimer:self.myTimer forMode:NSRunLoopCommonModes]; 

Este modo le permitirá a su cronómetro no ser interrumpido por el desplazamiento. Puede encontrar más información sobre esta información aquí: https://developer.apple.com/documentation/foundation/nsrunloop En la parte inferior verá las definiciones de los modos que puede elegir. Además, la leyenda lo tiene, puede escribir sus propios modos personalizados, pero pocos han vivido para contar la historia, tengo miedo.