//
|
// NSLayoutConstraint+MASDebugAdditions.m
|
// Masonry
|
//
|
// Created by Jonas Budelmann on 3/08/13.
|
// Copyright (c) 2013 Jonas Budelmann. All rights reserved.
|
//
|
|
#import "NSLayoutConstraint+MASDebugAdditions.h"
|
#import "MASConstraint.h"
|
#import "MASLayoutConstraint.h"
|
|
@implementation NSLayoutConstraint (MASDebugAdditions)
|
|
#pragma mark - description maps
|
|
+ (NSDictionary *)layoutRelationDescriptionsByValue {
|
static dispatch_once_t once;
|
static NSDictionary *descriptionMap;
|
dispatch_once(&once, ^{
|
descriptionMap = @{
|
@(NSLayoutRelationEqual) : @"==",
|
@(NSLayoutRelationGreaterThanOrEqual) : @">=",
|
@(NSLayoutRelationLessThanOrEqual) : @"<=",
|
};
|
});
|
return descriptionMap;
|
}
|
|
+ (NSDictionary *)layoutAttributeDescriptionsByValue {
|
static dispatch_once_t once;
|
static NSDictionary *descriptionMap;
|
dispatch_once(&once, ^{
|
descriptionMap = @{
|
@(NSLayoutAttributeTop) : @"top",
|
@(NSLayoutAttributeLeft) : @"left",
|
@(NSLayoutAttributeBottom) : @"bottom",
|
@(NSLayoutAttributeRight) : @"right",
|
@(NSLayoutAttributeLeading) : @"leading",
|
@(NSLayoutAttributeTrailing) : @"trailing",
|
@(NSLayoutAttributeWidth) : @"width",
|
@(NSLayoutAttributeHeight) : @"height",
|
@(NSLayoutAttributeCenterX) : @"centerX",
|
@(NSLayoutAttributeCenterY) : @"centerY",
|
@(NSLayoutAttributeBaseline) : @"baseline",
|
|
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
|
@(NSLayoutAttributeFirstBaseline) : @"firstBaseline",
|
@(NSLayoutAttributeLastBaseline) : @"lastBaseline",
|
#endif
|
|
#if TARGET_OS_IPHONE || TARGET_OS_TV
|
@(NSLayoutAttributeLeftMargin) : @"leftMargin",
|
@(NSLayoutAttributeRightMargin) : @"rightMargin",
|
@(NSLayoutAttributeTopMargin) : @"topMargin",
|
@(NSLayoutAttributeBottomMargin) : @"bottomMargin",
|
@(NSLayoutAttributeLeadingMargin) : @"leadingMargin",
|
@(NSLayoutAttributeTrailingMargin) : @"trailingMargin",
|
@(NSLayoutAttributeCenterXWithinMargins) : @"centerXWithinMargins",
|
@(NSLayoutAttributeCenterYWithinMargins) : @"centerYWithinMargins",
|
#endif
|
|
};
|
|
});
|
return descriptionMap;
|
}
|
|
|
+ (NSDictionary *)layoutPriorityDescriptionsByValue {
|
static dispatch_once_t once;
|
static NSDictionary *descriptionMap;
|
dispatch_once(&once, ^{
|
#if TARGET_OS_IPHONE || TARGET_OS_TV
|
descriptionMap = @{
|
@(MASLayoutPriorityDefaultHigh) : @"high",
|
@(MASLayoutPriorityDefaultLow) : @"low",
|
@(MASLayoutPriorityDefaultMedium) : @"medium",
|
@(MASLayoutPriorityRequired) : @"required",
|
@(MASLayoutPriorityFittingSizeLevel) : @"fitting size",
|
};
|
#elif TARGET_OS_MAC
|
descriptionMap = @{
|
@(MASLayoutPriorityDefaultHigh) : @"high",
|
@(MASLayoutPriorityDragThatCanResizeWindow) : @"drag can resize window",
|
@(MASLayoutPriorityDefaultMedium) : @"medium",
|
@(MASLayoutPriorityWindowSizeStayPut) : @"window size stay put",
|
@(MASLayoutPriorityDragThatCannotResizeWindow) : @"drag cannot resize window",
|
@(MASLayoutPriorityDefaultLow) : @"low",
|
@(MASLayoutPriorityFittingSizeCompression) : @"fitting size",
|
@(MASLayoutPriorityRequired) : @"required",
|
};
|
#endif
|
});
|
return descriptionMap;
|
}
|
|
#pragma mark - description override
|
|
+ (NSString *)descriptionForObject:(id)obj {
|
if ([obj respondsToSelector:@selector(mas_key)] && [obj mas_key]) {
|
return [NSString stringWithFormat:@"%@:%@", [obj class], [obj mas_key]];
|
}
|
return [NSString stringWithFormat:@"%@:%p", [obj class], obj];
|
}
|
|
- (NSString *)description {
|
NSMutableString *description = [[NSMutableString alloc] initWithString:@"<"];
|
|
[description appendString:[self.class descriptionForObject:self]];
|
|
[description appendFormat:@" %@", [self.class descriptionForObject:self.firstItem]];
|
if (self.firstAttribute != NSLayoutAttributeNotAnAttribute) {
|
[description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.firstAttribute)]];
|
}
|
|
[description appendFormat:@" %@", self.class.layoutRelationDescriptionsByValue[@(self.relation)]];
|
|
if (self.secondItem) {
|
[description appendFormat:@" %@", [self.class descriptionForObject:self.secondItem]];
|
}
|
if (self.secondAttribute != NSLayoutAttributeNotAnAttribute) {
|
[description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.secondAttribute)]];
|
}
|
|
if (self.multiplier != 1) {
|
[description appendFormat:@" * %g", self.multiplier];
|
}
|
|
if (self.secondAttribute == NSLayoutAttributeNotAnAttribute) {
|
[description appendFormat:@" %g", self.constant];
|
} else {
|
if (self.constant) {
|
[description appendFormat:@" %@ %g", (self.constant < 0 ? @"-" : @"+"), ABS(self.constant)];
|
}
|
}
|
|
if (self.priority != MASLayoutPriorityRequired) {
|
[description appendFormat:@" ^%@", self.class.layoutPriorityDescriptionsByValue[@(self.priority)] ?: [NSNumber numberWithDouble:self.priority]];
|
}
|
|
[description appendString:@">"];
|
return description;
|
}
|
|
@end
|