123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- //
- // 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 (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
- @(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
|