//
|
// 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
|