2012-03-21 50 views
3

我似乎遇到了一些直接方法的问题。我正在使用CGContextDrawPDFPage将PDF页面绘制到视图上,然后希望在视图的框架上加载UIView动画。但是,如果我在drawrect方法的末尾调用动画,则会导致动画效果不佳,因为在UIView实际出现在屏幕上之前,动画会在其持续时间的中途(有时2秒钟后)(012秒, 。检查视图是否已经完成绘制任何意见或帮助的方式,将不胜感激如何检查屏幕上/画图中出现uiview?

这里是我的代码...

-(void)drawRect:(CGRect)inRect{ 

pageRef = [[PDFManager sharedManager] 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) { 

    }]; 
} 

回答

0

AFAIK - drawRect:方法每次调用时的观点“得到肮脏“,这可能是非常经常的,我的建议是编写”移动“代码而不是在游戏中w类,但在控制器类中,这可能更适合关注问题分离(控制器管理视图的位置,而视图管理自己的图形)。流程与此类似:

  1. 启动视图并将其添加为子视图(在控制器中)。这将导致视图自行绘制。
  2. 将实际视图移动到您需要的位置(在控制器中)。
+0

我明白你来自哪里,但是这并不能解决问题,因为即使在uiview中绘制rect方法之前,“add subview”完成被调用。虽然好想。 – JapanDev 2012-03-21 10:52:47

+0

所以当添加子视图时,用'[subview setNeedsDisplay:YES]'将其标记为脏。这应该强制调用'drawRect:'方法。 – Eimantas 2012-03-21 10:54:58

+1

问题不在于drawRect:不是直接调用,问题在于完成但需要时间来显示视图。因此,我想知道何时在屏幕上呈现视图。 – JapanDev 2012-03-21 11:04:27