2012-03-21 10 views
3

私はdrawrectメソッドでいくつかの問題があるようです。私は、CGContextDrawPDFPageを使用してビューにPDFページを描画しています。そして、読み込んだビューのフレームでUIViewアニメーションを実行します。しかし、drawrectメソッドの最後にアニメーションを呼び出すと、実際にUIViewが実際に画面に表示されるまでのアニメーションの途中にアニメーションが表示されます(時には2秒後に表示されます)。 。ビューが描画完了したかどうかをチェックする方法任意のアイデアやヘルプははるかに高く評価されるだろう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

私の知る限り - ?drawRect:方法は、ビューが「取得するたびに呼び出されあなたのための私の助言は、 "動いている"コードを買うことではないでしょうコントローラクラスでは、懸念の分離に関するより良い場所になります(コントローラがビューの管理をしている間にビューの位置を管理します)。このフローは次のようになります。

  1. ビューを開始し、コントローラ内のサブビューとして追加します。これにより、ビュー自体が描画されます。
  2. 実際のビューを(コントローラ内に)必要な場所に移動します。
+0

どこから来ているのか分かりませんが、「サブビューの追加」がuiviewの描画rectメソッドでも呼び出されているので、これで問題は解決しません。ニースは思った。 – JapanDev

+0

したがって、サブビューを追加するときは、 '[subview setNeedsDisplay:YES]'でダーティとマークしてください。これは強制的に 'drawRect:'メソッドを呼び出すはずです。 – Eimantas

+1

問題はdrawRect:が直ちに呼び出されていないことです。問題は終了していますが、ビューを表示するには時間がかかります。したがって、私は画面上でレンダリングされたビューを知りたいと思います。 – JapanDev

関連する問題