2016-10-27 10 views
0

iOSを学習しているときとは異なる動作をします。私はAppleのViewプログラミングガイドを読んできました。 私はコンテンツモード試して以下のことをやった:UIViewのコンテンツモードは、override drawRect:

  • を私はストーリーボードへのUIViewをドラッグし、それ私のCustomViewクラスました。
  • 次にコンテンツモードをに変更し、とし、背景色をピンク色に設定しました。
  • 次に、カスタムビューの幅と高さを1.5倍に変更するだけのボタンがあります。

    私はこれを実行し、ボタン、クリックします:

    • ケース1:

    さて、私は面白いことを発見した私は、ドローRECTメソッドをオーバーライドする場合

drawRect: overrided

次にビューの外観が下に移動しました

サイズは実際にオンラインいくつかの検索を行った後

を増加し、Appleのドキュメントに見て、私は1つの質問言及以外の任意のrelaventの事をcouldntのこれはdrawLayerと関係があります:inContext:drawRectをオーバーライドした場合の動作が異なります。

ここで何が起こっているのか分かりませんか?

(フォーマットについて申し訳ありませんが、これは新しいアカウントで、私は2つの以上のリンクを投稿することはできません。)

CODE:のCustomViewについては 、単にいずれかのdrawRectをオーバーライドしたり、それなし。 CustomViewのフレームを変更するための

#import "CustomView.h" 
@implementation CustomView 
- (void)drawRect:(CGRect)rect{ 
//Do nothing, for case 2 i just commented out this method. 
} 
@end 

- (IBAction)changeBound:(id)sender { 
    self.customView.frame = CGRectMake(self.customView.frame.origin.x, self.customView.frame.origin.y, self.customView.frame.size.width * 1.5, self.customView.frame.size.height * 1.5); 
} 
+1

関連するコードで質問を更新してください。 – rmaddy

+0

@rmaddyこんにちは、私はちょうど質問を更新しました。しかし、私はコードが何かを助けるとは思わない。私は、drawRectメソッドをオーバーライドすると、contentModeがleftに設定されているときにUIViewと異なる動作について混乱しています。 – dknyxh

+0

これは 'drawRect:'の実際の実装ですか?それは本当に空ですか? – rmaddy

答えて

0

いくつかの研究を行った後、私は何が起こったのかを把握思う:

だから、描画背景コードは、実際に-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)contextで別々に処理されます。そのため空のdrawRectでは、まだ背景が描画されます。また、drawRectの存在にもよるが(おそらくrespondsToSelector?を呼び出すことによって)、UIViewはdrawLayer :inContextで異なって振る舞います。 Dennis Fan's answer in this link

関連する問題