Я создаю класс с открытым списком для автоматического отключения для одного из моих приложений. Среди его различных особенностей заключается в том, что он может свернуть панели и может оживить их крах, как вы, возможно, видели NSSplitView.NSLayoutConstraint.constant игнорирование анимации
Поскольку я использую ограничение, я достижение этого цели путем размещения требуемой ширина = (текущая ширина) ограничения на панели, а затем установить ограничение постоянной 0 в анимированных модах:
- (NSLayoutConstraint*)newHiddenConstraintAnimated:(BOOL)animated {
NSLayoutConstraint * constraint = [NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:NSWidth(self.view.frame)];
constraint.priority = NSLayoutPriorityRequired;
CABasicAnimation * anim = [CABasicAnimation animation];
anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
anim.duration = 0.2;
constraint.animations = [NSDictionary dictionaryWithObject:anim forKey:@"constant"];
[self.view addConstraint:constraint];
[(animated ? constraint.animator : constraint) setConstant:0.0];
return constraint;
}
Это прекрасно работает. К сожалению, расширение панели позже не так хорошо.
- (void)removeHiddenConstraintAnimated:(BOOL)animated {
if(!animated) {
[self.view removeConstraint:self.hiddenConstraint];
}
else {
NSLayoutConstraint * constraint = self.hiddenConstraint;
NSView * theView = self.view;
[NSAnimationContext beginGrouping];
[constraint.animator setConstant:self.width];
[NSAnimationContext currentContext].completionHandler = ^{
[theView removeConstraint:constraint];
};
[NSAnimationContext endGrouping];
}
self.hiddenConstraint = nil;
}
Если вставить код синхронизации, я могу видеть, что обработчик завершения срабатывает почти мгновенно, снимая ограничения, прежде чем он успевает анимировать. Установка длительности в NSAnimationContext не влияет.
Любая идея, что я могу делать неправильно здесь?
Вы когда-нибудь закончили этот класс с разделенным видом? Возможность его выхода с открытым исходным кодом? –
Я не планирую в данный момент. Он довольно специализирован для этого приложения, и я считаю, что «NSSplitView» в [PURRDACTED] был переработан, чтобы лучше работать с автозапуском. –
Ой, есть. Что касается [redacted], у него есть такая приятная особенность в отношении автомаркета, но, конечно же, он не совместим с предыдущими объектами назад. Ну, я сделаю все, что я думаю! :) –