Tôi đang tạo lớp xem chia nhỏ thân thiện với chế độ xem tự động cho một trong các ứng dụng của tôi. Trong số các tính năng khác nhau của nó là nó có thể sụp đổ các tấm, và có thể animate sự sụp đổ của họ, nhiều như bạn có thể đã thấy NSSplitView làm.NSLayoutConstraint.constant bỏ qua hoạt ảnh
Kể từ khi tôi đang sử dụng hạn chế, tôi đạt được điều này bằng cách đặt một chiều rộng yêu cầu = (chiều rộng hiện hành) hạn chế về cửa sổ, và sau đó thiết lập các hằng số 0 hạn chế trong một thời trang hoạt hình:
- (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;
}
Công trình này đẹp mắt. Thật không may, mở rộng cửa sổ sau này không tốt như vậy.
- (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;
}
Nếu tôi chèn một số mã thời gian, tôi có thể thấy trình xử lý hoàn thành kích hoạt gần như ngay lập tức, loại bỏ ràng buộc trước khi thời gian hoạt ảnh. Đặt thời lượng trên NSAnimationContext không có hiệu lực.
Bất kỳ ý tưởng nào tôi có thể làm sai ở đây?
Bạn đã bao giờ kết thúc lớp xem chia tách này chưa? Khả năng của nó sẽ mở nguồn? –
Tôi không có kế hoạch vào lúc này. Nó khá chuyên dụng cho ứng dụng này và tôi tin rằng 'NSSplitView' trong [PURRDACTED] đã được thiết kế lại để hoạt động tốt hơn với tính năng tự động trả lời. –
Ồ, vâng. Liên quan đến [redacted], nó có tính năng tốt đẹp liên quan đến bố trí tự động, nhưng tất nhiên nó không tương thích ngược với các mục tiêu cũ hơn. Oh well, tôi sẽ tự mình đoán! :) –