| // | 
| //  NSArray+MASAdditions.m | 
| //   | 
| // | 
| //  Created by Daniel Hammond on 11/26/13. | 
| // | 
| // | 
|   | 
| #import "NSArray+MASAdditions.h" | 
| #import "View+MASAdditions.h" | 
|   | 
| @implementation NSArray (MASAdditions) | 
|   | 
| - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block { | 
|     NSMutableArray *constraints = [NSMutableArray array]; | 
|     for (MAS_VIEW *view in self) { | 
|         NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views"); | 
|         [constraints addObjectsFromArray:[view mas_makeConstraints:block]]; | 
|     } | 
|     return constraints; | 
| } | 
|   | 
| - (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block { | 
|     NSMutableArray *constraints = [NSMutableArray array]; | 
|     for (MAS_VIEW *view in self) { | 
|         NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views"); | 
|         [constraints addObjectsFromArray:[view mas_updateConstraints:block]]; | 
|     } | 
|     return constraints; | 
| } | 
|   | 
| - (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block { | 
|     NSMutableArray *constraints = [NSMutableArray array]; | 
|     for (MAS_VIEW *view in self) { | 
|         NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views"); | 
|         [constraints addObjectsFromArray:[view mas_remakeConstraints:block]]; | 
|     } | 
|     return constraints; | 
| } | 
|   | 
| - (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing { | 
|     if (self.count < 2) { | 
|         NSAssert(self.count>1,@"views to distribute need to bigger than one"); | 
|         return; | 
|     } | 
|      | 
|     MAS_VIEW *tempSuperView = [self mas_commonSuperviewOfViews]; | 
|     if (axisType == MASAxisTypeHorizontal) { | 
|         MAS_VIEW *prev; | 
|         for (int i = 0; i < self.count; i++) { | 
|             MAS_VIEW *v = self[i]; | 
|             [v mas_makeConstraints:^(MASConstraintMaker *make) { | 
|                 if (prev) { | 
|                     make.width.equalTo(prev); | 
|                     make.left.equalTo(prev.mas_right).offset(fixedSpacing); | 
|                     if (i == self.count - 1) {//last one | 
|                         make.right.equalTo(tempSuperView).offset(-tailSpacing); | 
|                     } | 
|                 } | 
|                 else {//first one | 
|                     make.left.equalTo(tempSuperView).offset(leadSpacing); | 
|                 } | 
|                  | 
|             }]; | 
|             prev = v; | 
|         } | 
|     } | 
|     else { | 
|         MAS_VIEW *prev; | 
|         for (int i = 0; i < self.count; i++) { | 
|             MAS_VIEW *v = self[i]; | 
|             [v mas_makeConstraints:^(MASConstraintMaker *make) { | 
|                 if (prev) { | 
|                     make.height.equalTo(prev); | 
|                     make.top.equalTo(prev.mas_bottom).offset(fixedSpacing); | 
|                     if (i == self.count - 1) {//last one | 
|                         make.bottom.equalTo(tempSuperView).offset(-tailSpacing); | 
|                     }                     | 
|                 } | 
|                 else {//first one | 
|                     make.top.equalTo(tempSuperView).offset(leadSpacing); | 
|                 } | 
|                  | 
|             }]; | 
|             prev = v; | 
|         } | 
|     } | 
| } | 
|   | 
| - (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing { | 
|     if (self.count < 2) { | 
|         NSAssert(self.count>1,@"views to distribute need to bigger than one"); | 
|         return; | 
|     } | 
|      | 
|     MAS_VIEW *tempSuperView = [self mas_commonSuperviewOfViews]; | 
|     if (axisType == MASAxisTypeHorizontal) { | 
|         MAS_VIEW *prev; | 
|         for (int i = 0; i < self.count; i++) { | 
|             MAS_VIEW *v = self[i]; | 
|             [v mas_makeConstraints:^(MASConstraintMaker *make) { | 
|                 make.width.equalTo(@(fixedItemLength)); | 
|                 if (prev) { | 
|                     if (i == self.count - 1) {//last one | 
|                         make.right.equalTo(tempSuperView).offset(-tailSpacing); | 
|                     } | 
|                     else { | 
|                         CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1)); | 
|                         make.right.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset); | 
|                     } | 
|                 } | 
|                 else {//first one | 
|                     make.left.equalTo(tempSuperView).offset(leadSpacing); | 
|                 } | 
|             }]; | 
|             prev = v; | 
|         } | 
|     } | 
|     else { | 
|         MAS_VIEW *prev; | 
|         for (int i = 0; i < self.count; i++) { | 
|             MAS_VIEW *v = self[i]; | 
|             [v mas_makeConstraints:^(MASConstraintMaker *make) { | 
|                 make.height.equalTo(@(fixedItemLength)); | 
|                 if (prev) { | 
|                     if (i == self.count - 1) {//last one | 
|                         make.bottom.equalTo(tempSuperView).offset(-tailSpacing); | 
|                     } | 
|                     else { | 
|                         CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1)); | 
|                         make.bottom.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset); | 
|                     } | 
|                 } | 
|                 else {//first one | 
|                     make.top.equalTo(tempSuperView).offset(leadSpacing); | 
|                 } | 
|             }]; | 
|             prev = v; | 
|         } | 
|     } | 
| } | 
|   | 
| - (MAS_VIEW *)mas_commonSuperviewOfViews | 
| { | 
|     MAS_VIEW *commonSuperview = nil; | 
|     MAS_VIEW *previousView = nil; | 
|     for (id object in self) { | 
|         if ([object isKindOfClass:[MAS_VIEW class]]) { | 
|             MAS_VIEW *view = (MAS_VIEW *)object; | 
|             if (previousView) { | 
|                 commonSuperview = [view mas_closestCommonSuperview:commonSuperview]; | 
|             } else { | 
|                 commonSuperview = view; | 
|             } | 
|             previousView = view; | 
|         } | 
|     } | 
|     NSAssert(commonSuperview, @"Can't constrain views that do not share a common superview. Make sure that all the views in this array have been added into the same view hierarchy."); | 
|     return commonSuperview; | 
| } | 
|   | 
| @end |