New file |
| | |
| | | // |
| | | // MASConstraint.h |
| | | // Masonry |
| | | // |
| | | // Created by Jonas Budelmann on 22/07/13. |
| | | // Copyright (c) 2013 cloudling. All rights reserved. |
| | | // |
| | | |
| | | #import "MASUtilities.h" |
| | | |
| | | /** |
| | | * Enables Constraints to be created with chainable syntax |
| | | * Constraint can represent single NSLayoutConstraint (MASViewConstraint) |
| | | * or a group of NSLayoutConstraints (MASComposisteConstraint) |
| | | */ |
| | | @interface MASConstraint : NSObject |
| | | |
| | | // Chaining Support |
| | | |
| | | /** |
| | | * Modifies the NSLayoutConstraint constant, |
| | | * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following |
| | | * NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight |
| | | */ |
| | | - (MASConstraint * (^)(MASEdgeInsets insets))insets; |
| | | |
| | | /** |
| | | * Modifies the NSLayoutConstraint constant, |
| | | * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following |
| | | * NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight |
| | | */ |
| | | - (MASConstraint * (^)(CGFloat inset))inset; |
| | | |
| | | /** |
| | | * Modifies the NSLayoutConstraint constant, |
| | | * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following |
| | | * NSLayoutAttributeWidth, NSLayoutAttributeHeight |
| | | */ |
| | | - (MASConstraint * (^)(CGSize offset))sizeOffset; |
| | | |
| | | /** |
| | | * Modifies the NSLayoutConstraint constant, |
| | | * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following |
| | | * NSLayoutAttributeCenterX, NSLayoutAttributeCenterY |
| | | */ |
| | | - (MASConstraint * (^)(CGPoint offset))centerOffset; |
| | | |
| | | /** |
| | | * Modifies the NSLayoutConstraint constant |
| | | */ |
| | | - (MASConstraint * (^)(CGFloat offset))offset; |
| | | |
| | | /** |
| | | * Modifies the NSLayoutConstraint constant based on a value type |
| | | */ |
| | | - (MASConstraint * (^)(NSValue *value))valueOffset; |
| | | |
| | | /** |
| | | * Sets the NSLayoutConstraint multiplier property |
| | | */ |
| | | - (MASConstraint * (^)(CGFloat multiplier))multipliedBy; |
| | | |
| | | /** |
| | | * Sets the NSLayoutConstraint multiplier to 1.0/dividedBy |
| | | */ |
| | | - (MASConstraint * (^)(CGFloat divider))dividedBy; |
| | | |
| | | /** |
| | | * Sets the NSLayoutConstraint priority to a float or MASLayoutPriority |
| | | */ |
| | | - (MASConstraint * (^)(MASLayoutPriority priority))priority; |
| | | |
| | | /** |
| | | * Sets the NSLayoutConstraint priority to MASLayoutPriorityLow |
| | | */ |
| | | - (MASConstraint * (^)(void))priorityLow; |
| | | |
| | | /** |
| | | * Sets the NSLayoutConstraint priority to MASLayoutPriorityMedium |
| | | */ |
| | | - (MASConstraint * (^)(void))priorityMedium; |
| | | |
| | | /** |
| | | * Sets the NSLayoutConstraint priority to MASLayoutPriorityHigh |
| | | */ |
| | | - (MASConstraint * (^)(void))priorityHigh; |
| | | |
| | | /** |
| | | * Sets the constraint relation to NSLayoutRelationEqual |
| | | * returns a block which accepts one of the following: |
| | | * MASViewAttribute, UIView, NSValue, NSArray |
| | | * see readme for more details. |
| | | */ |
| | | - (MASConstraint * (^)(id attr))equalTo; |
| | | |
| | | /** |
| | | * Sets the constraint relation to NSLayoutRelationGreaterThanOrEqual |
| | | * returns a block which accepts one of the following: |
| | | * MASViewAttribute, UIView, NSValue, NSArray |
| | | * see readme for more details. |
| | | */ |
| | | - (MASConstraint * (^)(id attr))greaterThanOrEqualTo; |
| | | |
| | | /** |
| | | * Sets the constraint relation to NSLayoutRelationLessThanOrEqual |
| | | * returns a block which accepts one of the following: |
| | | * MASViewAttribute, UIView, NSValue, NSArray |
| | | * see readme for more details. |
| | | */ |
| | | - (MASConstraint * (^)(id attr))lessThanOrEqualTo; |
| | | |
| | | /** |
| | | * Optional semantic property which has no effect but improves the readability of constraint |
| | | */ |
| | | - (MASConstraint *)with; |
| | | |
| | | /** |
| | | * Optional semantic property which has no effect but improves the readability of constraint |
| | | */ |
| | | - (MASConstraint *)and; |
| | | |
| | | /** |
| | | * Creates a new MASCompositeConstraint with the called attribute and reciever |
| | | */ |
| | | - (MASConstraint *)left; |
| | | - (MASConstraint *)top; |
| | | - (MASConstraint *)right; |
| | | - (MASConstraint *)bottom; |
| | | - (MASConstraint *)leading; |
| | | - (MASConstraint *)trailing; |
| | | - (MASConstraint *)width; |
| | | - (MASConstraint *)height; |
| | | - (MASConstraint *)centerX; |
| | | - (MASConstraint *)centerY; |
| | | - (MASConstraint *)baseline; |
| | | |
| | | #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) |
| | | |
| | | - (MASConstraint *)firstBaseline; |
| | | - (MASConstraint *)lastBaseline; |
| | | |
| | | #endif |
| | | |
| | | #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) |
| | | |
| | | - (MASConstraint *)leftMargin; |
| | | - (MASConstraint *)rightMargin; |
| | | - (MASConstraint *)topMargin; |
| | | - (MASConstraint *)bottomMargin; |
| | | - (MASConstraint *)leadingMargin; |
| | | - (MASConstraint *)trailingMargin; |
| | | - (MASConstraint *)centerXWithinMargins; |
| | | - (MASConstraint *)centerYWithinMargins; |
| | | |
| | | #endif |
| | | |
| | | |
| | | /** |
| | | * Sets the constraint debug name |
| | | */ |
| | | - (MASConstraint * (^)(id key))key; |
| | | |
| | | // NSLayoutConstraint constant Setters |
| | | // for use outside of mas_updateConstraints/mas_makeConstraints blocks |
| | | |
| | | /** |
| | | * Modifies the NSLayoutConstraint constant, |
| | | * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following |
| | | * NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight |
| | | */ |
| | | - (void)setInsets:(MASEdgeInsets)insets; |
| | | |
| | | /** |
| | | * Modifies the NSLayoutConstraint constant, |
| | | * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following |
| | | * NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight |
| | | */ |
| | | - (void)setInset:(CGFloat)inset; |
| | | |
| | | /** |
| | | * Modifies the NSLayoutConstraint constant, |
| | | * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following |
| | | * NSLayoutAttributeWidth, NSLayoutAttributeHeight |
| | | */ |
| | | - (void)setSizeOffset:(CGSize)sizeOffset; |
| | | |
| | | /** |
| | | * Modifies the NSLayoutConstraint constant, |
| | | * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following |
| | | * NSLayoutAttributeCenterX, NSLayoutAttributeCenterY |
| | | */ |
| | | - (void)setCenterOffset:(CGPoint)centerOffset; |
| | | |
| | | /** |
| | | * Modifies the NSLayoutConstraint constant |
| | | */ |
| | | - (void)setOffset:(CGFloat)offset; |
| | | |
| | | |
| | | // NSLayoutConstraint Installation support |
| | | |
| | | #if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV) |
| | | /** |
| | | * Whether or not to go through the animator proxy when modifying the constraint |
| | | */ |
| | | @property (nonatomic, copy, readonly) MASConstraint *animator; |
| | | #endif |
| | | |
| | | /** |
| | | * Activates an NSLayoutConstraint if it's supported by an OS. |
| | | * Invokes install otherwise. |
| | | */ |
| | | - (void)activate; |
| | | |
| | | /** |
| | | * Deactivates previously installed/activated NSLayoutConstraint. |
| | | */ |
| | | - (void)deactivate; |
| | | |
| | | /** |
| | | * Creates a NSLayoutConstraint and adds it to the appropriate view. |
| | | */ |
| | | - (void)install; |
| | | |
| | | /** |
| | | * Removes previously installed NSLayoutConstraint |
| | | */ |
| | | - (void)uninstall; |
| | | |
| | | @end |
| | | |
| | | |
| | | /** |
| | | * Convenience auto-boxing macros for MASConstraint methods. |
| | | * |
| | | * Defining MAS_SHORTHAND_GLOBALS will turn on auto-boxing for default syntax. |
| | | * A potential drawback of this is that the unprefixed macros will appear in global scope. |
| | | */ |
| | | #define mas_equalTo(...) equalTo(MASBoxValue((__VA_ARGS__))) |
| | | #define mas_greaterThanOrEqualTo(...) greaterThanOrEqualTo(MASBoxValue((__VA_ARGS__))) |
| | | #define mas_lessThanOrEqualTo(...) lessThanOrEqualTo(MASBoxValue((__VA_ARGS__))) |
| | | |
| | | #define mas_offset(...) valueOffset(MASBoxValue((__VA_ARGS__))) |
| | | |
| | | |
| | | #ifdef MAS_SHORTHAND_GLOBALS |
| | | |
| | | #define equalTo(...) mas_equalTo(__VA_ARGS__) |
| | | #define greaterThanOrEqualTo(...) mas_greaterThanOrEqualTo(__VA_ARGS__) |
| | | #define lessThanOrEqualTo(...) mas_lessThanOrEqualTo(__VA_ARGS__) |
| | | |
| | | #define offset(...) mas_offset(__VA_ARGS__) |
| | | |
| | | #endif |
| | | |
| | | |
| | | @interface MASConstraint (AutoboxingSupport) |
| | | |
| | | /** |
| | | * Aliases to corresponding relation methods (for shorthand macros) |
| | | * Also needed to aid autocompletion |
| | | */ |
| | | - (MASConstraint * (^)(id attr))mas_equalTo; |
| | | - (MASConstraint * (^)(id attr))mas_greaterThanOrEqualTo; |
| | | - (MASConstraint * (^)(id attr))mas_lessThanOrEqualTo; |
| | | |
| | | /** |
| | | * A dummy method to aid autocompletion |
| | | */ |
| | | - (MASConstraint * (^)(id offset))mas_offset; |
| | | |
| | | @end |