| // | 
| //  MASConstraintBuilder.h | 
| //  Masonry | 
| // | 
| //  Created by Jonas Budelmann on 20/07/13. | 
| //  Copyright (c) 2013 cloudling. All rights reserved. | 
| // | 
|   | 
| #import "MASConstraint.h" | 
| #import "MASUtilities.h" | 
|   | 
| typedef NS_OPTIONS(NSInteger, MASAttribute) { | 
|     MASAttributeLeft = 1 << NSLayoutAttributeLeft, | 
|     MASAttributeRight = 1 << NSLayoutAttributeRight, | 
|     MASAttributeTop = 1 << NSLayoutAttributeTop, | 
|     MASAttributeBottom = 1 << NSLayoutAttributeBottom, | 
|     MASAttributeLeading = 1 << NSLayoutAttributeLeading, | 
|     MASAttributeTrailing = 1 << NSLayoutAttributeTrailing, | 
|     MASAttributeWidth = 1 << NSLayoutAttributeWidth, | 
|     MASAttributeHeight = 1 << NSLayoutAttributeHeight, | 
|     MASAttributeCenterX = 1 << NSLayoutAttributeCenterX, | 
|     MASAttributeCenterY = 1 << NSLayoutAttributeCenterY, | 
|     MASAttributeBaseline = 1 << NSLayoutAttributeBaseline, | 
|      | 
| #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) | 
|      | 
|     MASAttributeFirstBaseline = 1 << NSLayoutAttributeFirstBaseline, | 
|     MASAttributeLastBaseline = 1 << NSLayoutAttributeLastBaseline, | 
|      | 
| #endif | 
|      | 
| #if TARGET_OS_IPHONE || TARGET_OS_TV | 
|      | 
|     MASAttributeLeftMargin = 1 << NSLayoutAttributeLeftMargin, | 
|     MASAttributeRightMargin = 1 << NSLayoutAttributeRightMargin, | 
|     MASAttributeTopMargin = 1 << NSLayoutAttributeTopMargin, | 
|     MASAttributeBottomMargin = 1 << NSLayoutAttributeBottomMargin, | 
|     MASAttributeLeadingMargin = 1 << NSLayoutAttributeLeadingMargin, | 
|     MASAttributeTrailingMargin = 1 << NSLayoutAttributeTrailingMargin, | 
|     MASAttributeCenterXWithinMargins = 1 << NSLayoutAttributeCenterXWithinMargins, | 
|     MASAttributeCenterYWithinMargins = 1 << NSLayoutAttributeCenterYWithinMargins, | 
|   | 
| #endif | 
|      | 
| }; | 
|   | 
| /** | 
|  *  Provides factory methods for creating MASConstraints. | 
|  *  Constraints are collected until they are ready to be installed | 
|  * | 
|  */ | 
| @interface MASConstraintMaker : NSObject | 
|   | 
| /** | 
|  *    The following properties return a new MASViewConstraint | 
|  *  with the first item set to the makers associated view and the appropriate MASViewAttribute | 
|  */ | 
| @property (nonatomic, strong, readonly) MASConstraint *left; | 
| @property (nonatomic, strong, readonly) MASConstraint *top; | 
| @property (nonatomic, strong, readonly) MASConstraint *right; | 
| @property (nonatomic, strong, readonly) MASConstraint *bottom; | 
| @property (nonatomic, strong, readonly) MASConstraint *leading; | 
| @property (nonatomic, strong, readonly) MASConstraint *trailing; | 
| @property (nonatomic, strong, readonly) MASConstraint *width; | 
| @property (nonatomic, strong, readonly) MASConstraint *height; | 
| @property (nonatomic, strong, readonly) MASConstraint *centerX; | 
| @property (nonatomic, strong, readonly) MASConstraint *centerY; | 
| @property (nonatomic, strong, readonly) MASConstraint *baseline; | 
|   | 
| #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) | 
|   | 
| @property (nonatomic, strong, readonly) MASConstraint *firstBaseline; | 
| @property (nonatomic, strong, readonly) MASConstraint *lastBaseline; | 
|   | 
| #endif | 
|   | 
| #if TARGET_OS_IPHONE || TARGET_OS_TV | 
|   | 
| @property (nonatomic, strong, readonly) MASConstraint *leftMargin; | 
| @property (nonatomic, strong, readonly) MASConstraint *rightMargin; | 
| @property (nonatomic, strong, readonly) MASConstraint *topMargin; | 
| @property (nonatomic, strong, readonly) MASConstraint *bottomMargin; | 
| @property (nonatomic, strong, readonly) MASConstraint *leadingMargin; | 
| @property (nonatomic, strong, readonly) MASConstraint *trailingMargin; | 
| @property (nonatomic, strong, readonly) MASConstraint *centerXWithinMargins; | 
| @property (nonatomic, strong, readonly) MASConstraint *centerYWithinMargins; | 
|   | 
| #endif | 
|   | 
| /** | 
|  *  Returns a block which creates a new MASCompositeConstraint with the first item set | 
|  *  to the makers associated view and children corresponding to the set bits in the | 
|  *  MASAttribute parameter. Combine multiple attributes via binary-or. | 
|  */ | 
| @property (nonatomic, strong, readonly) MASConstraint *(^attributes)(MASAttribute attrs); | 
|   | 
| /** | 
|  *    Creates a MASCompositeConstraint with type MASCompositeConstraintTypeEdges | 
|  *  which generates the appropriate MASViewConstraint children (top, left, bottom, right) | 
|  *  with the first item set to the makers associated view | 
|  */ | 
| @property (nonatomic, strong, readonly) MASConstraint *edges; | 
|   | 
| /** | 
|  *    Creates a MASCompositeConstraint with type MASCompositeConstraintTypeSize | 
|  *  which generates the appropriate MASViewConstraint children (width, height) | 
|  *  with the first item set to the makers associated view | 
|  */ | 
| @property (nonatomic, strong, readonly) MASConstraint *size; | 
|   | 
| /** | 
|  *    Creates a MASCompositeConstraint with type MASCompositeConstraintTypeCenter | 
|  *  which generates the appropriate MASViewConstraint children (centerX, centerY) | 
|  *  with the first item set to the makers associated view | 
|  */ | 
| @property (nonatomic, strong, readonly) MASConstraint *center; | 
|   | 
| /** | 
|  *  Whether or not to check for an existing constraint instead of adding constraint | 
|  */ | 
| @property (nonatomic, assign) BOOL updateExisting; | 
|   | 
| /** | 
|  *  Whether or not to remove existing constraints prior to installing | 
|  */ | 
| @property (nonatomic, assign) BOOL removeExisting; | 
|   | 
| /** | 
|  *    initialises the maker with a default view | 
|  * | 
|  *    @param    view    any MASConstrait are created with this view as the first item | 
|  * | 
|  *    @return    a new MASConstraintMaker | 
|  */ | 
| - (id)initWithView:(MAS_VIEW *)view; | 
|   | 
| /** | 
|  *    Calls install method on any MASConstraints which have been created by this maker | 
|  * | 
|  *    @return    an array of all the installed MASConstraints | 
|  */ | 
| - (NSArray *)install; | 
|   | 
| - (MASConstraint * (^)(dispatch_block_t))group; | 
|   | 
| @end |