Я пытаюсь анимировать элемент управления в Cocoa с автоматической компоновкой.
Теперь я могу установить [[constraint animator] setConstant:newWidth];
, который работает.
Но как я могу получить правильное ограничение?
С [self constraints]
вы можете получить все ограничения, и в этом случае я могу просто выбрать constraints[0]
, но порядок ограничений может отличаться.
Как я могу быть уверен, что у меня всегда есть правильное ограничение? Ограничения задаются в Interface Builder. Я видел, что вы можете добавить к нему IBOutlet, но это не кажется необходимым.
Мое решение
Спасибо, он отлично поработал. Я написал небольшую категорию.
NSView + NSLayoutConstraintFilter.h
#import <Cocoa/Cocoa.h>
@interface NSView (NSLayoutConstraintFilter)
- (NSLayoutConstraint *)constraintForAttribute:(NSLayoutAttribute)attribute;
- (NSArray *)constaintsForAttribute:(NSLayoutAttribute)attribute;
@end
NSView + NSLayoutConstraintFilter.m
#import "NSView+NSLayoutConstraintFilter.h"
@implementation NSView (NSLayoutConstraintFilter)
- (NSArray *)constaintsForAttribute:(NSLayoutAttribute)attribute {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstAttribute = %d", attribute];
NSArray *filteredArray = [[self constraints] filteredArrayUsingPredicate:predicate];
return filteredArray;
}
- (NSLayoutConstraint *)constraintForAttribute:(NSLayoutAttribute)attribute {
NSArray *constraints = [self constaintsForAttribute:attribute];
if (constraints.count) {
return constraints[0];
}
return nil;
}
@end