//
|
// 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
|
* 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 * (^)())priorityLow;
|
|
/**
|
* Sets the NSLayoutConstraint priority to MASLayoutPriorityMedium
|
*/
|
- (MASConstraint * (^)())priorityMedium;
|
|
/**
|
* Sets the NSLayoutConstraint priority to MASLayoutPriorityHigh
|
*/
|
- (MASConstraint * (^)())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 TARGET_OS_IPHONE || TARGET_OS_TV
|
|
- (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
|
* 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
|