2012-02-22 6 views
4

を呼びかけたばかりではない:私はしかしのdrawRect、このサブクラスにUIImageViewのクラスを変更したのdrawRectは私が私のIBにUIImageViewを持っていると私は1つの方法のdrawRectでUIImageViewのサブクラスを作成しUIImageView

@implementation UIImageViewLine 

- (void)drawRect:(CGRect)rect 
{ 
    NSLog(@"CALLED"); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor); 
    CGContextSetLineWidth(context, 1.0f); 
    CGContextMoveToPoint(context, 0, 0); 
    CGContextAddLineToPoint(context, self.frame.size.width, self.frame.size.height); 
    CGContextStrokePath(context); 

} 

@end 

決して呼ばれない。どんな考え?サブクラス化するとき

+0

サブクラスUIImageViewがUIViewではないのはなぜですか? –

+0

よく私はUIImageViewではなく、UIViewをサブクラス化する必要がありますか? UIImageViewに線を描画したい場合はどうしたらいいですか? – adit

+0

あなたが不透明サブビューを表示自分のイメージを与える、と線を描画するためにサブビューを使用することができます –

答えて

20

UIImageViewdrawRectを呼び出すことはありません。 documentationから

UIImageViewクラスは、ディスプレイにその画像を描画するために最適化されています。 UIImageViewはdrawRect:サブクラスを呼び出しません。サブクラスにカスタム描画コードが必要な場合は、UIViewを基本クラスとして使用することをお勧めします。

あなたは、単に通常のUIViewUIImageViewを交換し、UIViewdrawRect方法または子の層にイメージとカスタム図面を描くことができます。 SCHの答えに加えて

+1

だから、私はそう大好きです、これはちょうど半時間を節約したと思います –

0

、それはUIImageViewは違っのUIViewにどのように使用できるか注目されます。

ImageViewの持つアプローチは、あなたがその.imageプロパティを変更することです。これは、イメージがビュースタックにキャッシュされていることを意味します。画像がフレームごとに変化すると、これはあまり効果がありません。しかし、そうでなければ、それはかなりの改善です。ほとんどのゲーム/アプリでは、ほとんどのオブジェクトがすべてのフレームを変更することはありません。

あなたは、基礎となるのCALayerの呼び出しを通じてのUIViewの位置、回転、および不透明度を変更することができます。これは、変換行列の単なる変更であり、時間ペナルティがほとんどまたは全くない。

この引数に慣れていないリアルタイムの2Dグラフィックスを作成する人は、引数をもっとよく説明し、サンプルコードを提供するhttps://developer.apple.com/library/ios/qa/qa1708/_index.htmlと読むことを強くお勧めします。それは驚くほど簡単です。

プレゼンテーションレベルからゲームロジックを分離するためにwan'tと、これはそれらを一緒に結合するのでUIImageViewであなたのゲームオブジェクトをラップするという考え方は、直感に反するようです。しかし、私の試作したプロトタイプをAppleの勧告に従って改造しただけで、フレームレートは2倍になってしまったので、私は自分の建築の純度を妥協するつもりです。

関連する問題