Uygulamalarımdan biri için otomatik uyum dostu bölünmüş bir görünüm sınıfı oluşturuyorum. Çeşitli özellikleri arasında, bölmeleri daraltması ve NSSplitView uygulamasının görebildiğiniz gibi çöküşlerini canlandırabilmesidir. I kısıtlamaları kullanıyorum yanaNSLayoutConstraint.constant animasyonu görmezden geliyor
ben ayarlama sonra bölmedeki gerekli genişlik = (mevcut genişlik) kısıtlamasını yerleştirilmesi ve bu elde ediyorum hareketli bir şekilde kısıtlama sabiti 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;
}
Bu güzel çalışıyor. Ne yazık ki, daha sonra bölmeyi genişletmek o kadar iyi değildir. Bazı zamanlama kodunu eklerseniz
- (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;
}
, bunu canlandırmak zamanı bulamadan kısıtlamayı kaldırarak, tamamlama işleyicisi neredeyse anında patlar olduğunu görebilirsiniz. NSAnimationContext'de bir sürenin ayarlanması bir etkisi yoktur.
Burada ne yapıyorum diye bir fikrim var mı?
Bu bölünmüş görünüm sınıfını hiç bitirdiniz mi? Açık kaynak olma ihtimali var mı? –
Şu an plan yapmıyorum. Bu uygulama için oldukça uzmanlaşmış ve inanıyorum ki [PURRDACTED] 'de NSSplitView' autolayout ile daha iyi çalışacak şekilde yeniden tasarlandı. –
Oh, gotcha. [Yeniden düzenlenmiş] ile ilgili olarak, otomatik düzende bu güzel özelliğe sahiptir, ancak tabi ki eski hedeflerle geriye dönük olarak uyumlu değildir. Oh, ben kendi başıma yapacağım sanırım! :) –