Я работаю над представлением, которое отображает сетку основных слоев анимации. Когда я удаляю слой, я хочу, чтобы этот слой исчез, и чтобы другие слои двигались, чтобы заполнить пробел. Это почти работает так, как я хочу, используя неявную анимацию. Единственная проблема заключается в том, что слои, которые должны двигаться, исчезают, в то время как копия этих слоев перемещается в новую позицию. Как я могу изменить это поведение, чтобы слои просто двигались, а не двигались и исчезали?
Чтобы удалить один слой, я просто делаю [theLayer removeFromSuperLayer]
, а затем вызываю подпрограмму макета на уровне контейнера, которая делает это:
CGFloat x = 0;
CGFloat y = CGRectGetMaxY( [layer bounds] ) - buttonHeight - buttonVPadding;
for (CALayer *l in [layer sublayers]) {
if ([layer bounds].size.width < x + buttonWidth) {
x = 0;
y -= buttonHeight + buttonVPadding;
}
CGRect bounds = CGRectMake( 0, 0, buttonWidth, buttonHeight );
[l setBounds: bounds];
[l setPosition: CGPointMake( x, y )];
x += buttonWidth + buttonVPadding;
}
Я попытался переопределить поведение анимации по умолчанию в - (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event;
, но не смог найти, какие события переопределить, чтобы получить желаемое поведение.