1. ホーム
  2. iphone

[解決済み] UIViewのリサイズイベントはありますか?

2022-11-30 07:16:38

質問

イメージビューの行と列を持つビューがあります。

このビューのサイズが変更された場合、私はimageviewsの位置を再配置する必要があります。

このビューは、リサイズされる他のビューのサブビューです。

このビューがリサイズされていることを検出する方法はありますか?

どのように解決するのですか?

Uliが以下のようにコメントしているように、正しい方法は、オーバーライド layoutSubviews をオーバーライドし、そこにimageViewsをレイアウトすることです。

もし何らかの理由でサブクラス化してオーバーライドできない場合は layoutSubviews を観察してください。 bounds を観察すれば、多少汚くても動作するはずです。さらに悪いことに、観察にはリスクがあります。AppleはKVOがUIKitのクラスで動作することを保証していません。Appleのエンジニアとの議論はこちらです。 関連付けられたオブジェクトはいつ解放されるのですか?

オリジナルの回答です。

key-valueの観測を利用することができます。

[yourView addObserver:self forKeyPath:@"bounds" options:0 context:nil];

と実装します。

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (object == yourView && [keyPath isEqualToString:@"bounds"]) {
        // do your stuff, or better schedule to run later using performSelector:withObject:afterDuration:
    }
}