¿Cómo se puede comprobar cuándo ha aparecido una uiview en la pantalla / terminado el dibujo?

Parece que tengo algunos problemas con un método drawrect. Estoy dibujando una página PDF en una vista usando CGContextDrawPDFPage y luego deseo ejecutar la animation UIView en el marco de la vista una vez que se ha cargado. Sin embargo, si invoco la animation al final del método drawrect, provocará una animation entrecortada porque la animation está a mitad de su duración antes de que la UIView aparezca realmente en la pantalla (a veces 2 segundos más tarde).

Estoy buscando una forma de comprobar si la vista ha terminado de dibujar. ¿Alguna idea o ayuda sería muy apreciada?

Aquí está mi código …

-(void)drawRect:(CGRect)inRect{ pageRef = [[PDFManager shanetworkingManager] getLargePDFPageRefForPage:pageNumber]; if(pageRef) { ctx = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(ctx, 0.0, [self bounds].size.height); CGContextScaleCTM(ctx, 1.0, -1.0); CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(pageRef, kCGPDFCropBox, [self bounds], 0, true)); CGContextSetInterpolationQuality(ctx, kCGInterpolationNone); CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault); CGContextDrawPDFPage(ctx, pageRef); } [self moveFrame]; } -(void)moveFrame{ [UIView animateWithDuration:0.7 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ self.frame = CGRectMake(0, 0, 500, 400); } completion:^(BOOL finished) { }]; } 

AFAIK – drawRect: método cada vez que la vista "se ensucia", lo que puede ser muy a menudo. Mi consejo para usted sería escribir el código "en movimiento" no en la class de vista, pero en la class de controller, que probablemente sea un mejor lugar respecto de la separación de preocupaciones (el controller gestiona la position de la vista mientras la vista gestiona el dibujo de sí mismo). El flujo sería similar a esto:

  1. Inicie la vista y agréguela como la subvista (en el controller). Esto hará que la vista se dibuje.
  2. Mueva la vista real al lugar donde la necesite (en el controller).