2009-05-17 9 views
0

私はUIImageViewをサブクラス化しました。その後UIImageViewサブクラスのフレームは、どの時点で安全にアクセスできますか?

self = [super initWithImage:image] 

私はself.frame.origin.yの値にアクセスしようとします。しかし、それは常に0.0です。一瞬後に、外から呼び出される方法では、プロパティは100.0で素敵です。

私はまた - (id)initWithFrame:(CGRect)aRectをオーバーライドしようとしましたが、結果は同じです。そのプロパティは、ビューが一部のスーパービューに追加されるとすぐに正しく設定されますか?私は、オブジェクトが割り当てられ、初期化された後、スーパービューに追加される前に、フレームrectを直接取得しようとしていると考えています。それは1行後に起こります。

答えて

1

を上書き。どこに設定していますか?これはうまくいくようです:

- (id)initWithImage:(UIImage*)image { 
    self = [super initWithImage:image]; 
    if (self != nil) 
    { 
     CGRect frame = self.frame; 
     frame.origin = CGPointMake(100.0, 100.0); 
     self.frame = frame; 
     NSLog(@"y=%d", self.frame.origin.y); 
     NSLog(@"frame=%@", NSStringFromCGRect(self.frame)); 
    } 
    return self; 
} 

おそらくもっと大きなコードを提供できますか?

+0

新しく割り当てられたビューをサブビューに追加するまで、フレームrectは何も設定されないことがわかりました。オブジェクトを作成し、配列に追加して返したデータプロバイダがありました。この時点で、フレームプロパティは設定されていません。これは、for-in-loopの後のある時点で実行されるためです。 – Thanks

3

オブジェクトのフレームは、いつでも設定できます。あなたは、フレームへの変更を監視したい場合、私はこの問題を再現することはできませんが、私はあなたが100から来るように期待している場所を推測するビットを補間することだsetFrame:setBounds:

- (void)setFrame:(CGRect)frame 
{ 
    [super setFrame:frame]; 
    // Your code here 
} 
- (void)setBounds:(CGRect)bounds 
{ 
    [super setBounds:bounds]; 
    // Your code here 
} 
+0

ありがとうございました。元のフレーム矩形をバックアップするのは良い点でしたが、回転などの変換を行うとすぐに呼び出されます。とにかく、知っていると非常に便利です! – Thanks