自動レイアウトを使用してCocoaのコントロールをアニメーション化しようとしています。
これで、設定できます[[constraint animator] setConstant:newWidth];
。これは機能します。しかし、どうすれば正しい制約を得ることができますか?
これ[self constraints]
ですべての制約を取得できます。この場合は、を選択するだけconstraints[0]
ですが、制約の順序は異なる場合があります。
常に正しい制約があることをどのように確認できますか?制約はInterfaceBuilderで設定されます。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