2016-04-09 22 views
0

私はUIViewに縛られた別のクラスにいくつかのコードを持っています。CGRectは自動的にアクションの後にサイズ変更されます

CGContextRef context = UIGraphicsGetCurrentContext(); 

CGRect drawRect = CGRectMake(20, 262, 139, 169); 

[self setFrame:drawRect]; 

CGContextSetLineWidth(context, 2); 
CGContextSetStrokeColorWithColor(context, [[UIColor colorWithRed:125.0f/255.0f green:251.0f/255.0f blue:181.0f/255.0f alpha:1] CGColor]); 
CGContextSetRGBFillColor(context, 200.0f/255.0f, 100.0f/255.0f, 100.0f/255.0f, 1.0f); 

CGContextFillRect(context, drawRect); 

このビューをクリックすると、UIViewのサイズが、ストーリーボードのインターフェースビルダーモデルのサイズにリサイズされます。

何が問題なの?何が問題なのですか?

+1

Autolayoutは私の推測です。 – user3386109

+1

このコードが意味をなす場所はありません。 'drawRect:'の外で 'UIGraphicsGetCurrentContext'を呼び出すことはできず、' drawRect: 'の中で' setFrame: 'を呼び出さないでください。このコードをどこで呼びますか? –

+0

このコードは関数内に配置されています ' - (void)drawRect :(CGRect)rect' 親ビュー(アプリケーションのメインビュー)で「Autoresize subviews」チェックボックスをオフにして、UIViewのチェックボックスをオフにします。上記のコードで酔っ払っている。 –

答えて

1

drawRect:は、フレームを変更する場所ではありません。システムが自動的にフレームのサイズ変更を処理できない場合(たとえば、ビューを拡大縮小するなど)、フレームのサイズ変更に応じてdrawRect:が呼び出されます。描画の途中でフレームサイズを変更することができれば、無限ループになります。

ビューを矩形にしたい場合は、(20,262,139,169)を入力すると簡単に自動レイアウトに配置できます。必要な場所にビューを配置し、Interface Builderを使用してそこに保持するための制約を作成します。

自動レイアウトを使用したくない場合(ここではオフにしたい理由はわかりませんが、そうした場合はオフにすることができます)、setFrame:viewDidLoadに電話できます。しかし、それをdrawRect:に再度呼び出す理由はありません。

関連する問題