私はに似た行動を探しています
[[NSNotificationQueue defaultQueue] enqueueNotification:not postingStyle:NSPostWhenIdle coalesceMask:NSNotificationCoalescingOnName|NSNotificationCoalescingOnSender forModes:nil];
ただし、通知を使用せずに、何らかの方法で通知の代わりにセレクターまたはブロックをキューに入れます。
私の動機については(これが正当な方法であるかどうかを確認するためです)。複数のサブビューをビューに追加しますが、明らかにその数を知る方法はありません。そのため、サブビューを追加するlayoutIfNeeded
たびに、特定の方法でサブビューをレイアウトするために呼び出して計算を実行する必要があります。ここで、実行ループがアイドル状態になったときにのみメソッドを呼び出すことができれば (何らかの方法で呼び出しを延期して合体させる)、レイアウト計算を実行するまでにすべてのサブビューが既に追加されていると考えていました。それが理にかなっていることを願っています。
-(void)layoutSubviews
{
[super layoutSubviews];
UIView* prevView = nil;
for (NSUInteger i=0; i<[self.subviews count]; i++) {
UIView* view = self.subviews[i];
CGFloat spacing = prevView!=nil?self.spacing:0;
view.topLeft = CGPointOffset(prevView.bottomLeft, spacing, 0);
prevView = view;
}
[self fitSubviews];
}
メソッドにコードを追加しましたlayoutSubview
。