2012-03-21 52 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