From d1d1f93239aab1262c35a0055d76a69b0b3026cc Mon Sep 17 00:00:00 2001 From: daniAlvarezMM <79452393+daniAlvarezMM@users.noreply.github.com> Date: Mon, 2 Oct 2023 12:44:34 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20mediamon?= =?UTF-8?q?ks/MMMCommonUI@fa5e32ba3f1354e5c7e213bd3f1267061a24b0bc=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Categories.html | 538 ------ Categories/NSLayoutConstraint(MMMTemple).html | 722 -------- Categories/UILayoutGuide(MMMTemple).html | 495 ------ .../UIView(MMMPreferredSizeChanges).html | 363 ---- Categories/UIView(MMMTemple).html | 1340 -------------- Classes.html | 1516 ---------------- Classes/MMMAnimation.html | 611 ------- Classes/MMMAnimationHandle.html | 421 ----- Classes/MMMAnimator.html | 528 ------ Classes/MMMAutoLayoutIsolator.html | 483 ----- Classes/MMMAutoLayoutScrollView.html | 503 ------ Classes/MMMCollectionView.html | 482 ----- Classes/MMMContainerView.html | 422 ----- Classes/MMMHorizontalStackContainer.html | 393 ----- Classes/MMMImageView.html | 583 ------ Classes/MMMLayoutUtils.html | 509 ------ Classes/MMMNavigation.html | 473 ----- Classes/MMMNavigationHop.html | 491 ------ Classes/MMMNavigationPath.html | 517 ------ Classes/MMMNavigationRequest.html | 456 ----- Classes/MMMNavigationStack.html | 447 ----- Classes/MMMPaddedView.html | 514 ------ Classes/MMMScrollViewShadowView.html | 453 ----- Classes/MMMScrollViewShadows.html | 491 ------ Classes/MMMScrollViewShadowsSettings.html | 663 ------- Classes/MMMShadowView.html | 515 ------ Classes/MMMShadowViewSetting.html | 613 ------- Classes/MMMSpacerView.html | 422 ----- Classes/MMMStackContainer.html | 490 ----- Classes/MMMStubView.html | 452 ----- Classes/MMMStubViewController.html | 450 ----- Classes/MMMStylesheet.html | 931 ---------- Classes/MMMStylesheetScaleConverter.html | 433 ----- Classes/MMMTableView.html | 548 ------ Classes/MMMTableViewCell.html | 482 ----- Classes/MMMVelocityMeter.html | 455 ----- Classes/MMMVerticalGradientView.html | 483 ----- Classes/MMMVerticalStackContainer.html | 393 ----- Classes/MMMViewWrappingCell.html | 457 ----- Constants.html | 537 ------ Enums.html | 562 ------ Enums/MMMAnimationCurve.html | 964 ---------- Enums/MMMLayoutAlignment.html | 517 ------ Enums/MMMLayoutDirection.html | 392 ---- Enums/MMMLayoutHorizontalAlignment.html | 524 ------ Enums/MMMLayoutVerticalAlignment.html | 524 ------ Enums/MMMScrollViewShadowAlignment.html | 392 ---- Functions.html | 524 ------ Protocols.html | 490 ----- Protocols/MMMNavigationHandler.html | 359 ---- Protocols/MMMNavigationStackItem.html | 430 ----- Protocols/MMMNavigationStackItemDelegate.html | 363 ---- Protocols/MMMPreferredSizeChanges.html | 363 ---- Protocols/MMMStylesheetConverter.html | 362 ---- Type Definitions.html | 542 ------ badge.svg | 16 +- .../Resources/Documents/Categories.html | 538 ------ .../NSLayoutConstraint(MMMTemple).html | 722 -------- .../Categories/UILayoutGuide(MMMTemple).html | 495 ------ .../UIView(MMMPreferredSizeChanges).html | 363 ---- .../Categories/UIView(MMMTemple).html | 1340 -------------- .../Contents/Resources/Documents/Classes.html | 1516 ---------------- .../Documents/Classes/MMMAnimation.html | 611 ------- .../Documents/Classes/MMMAnimationHandle.html | 421 ----- .../Documents/Classes/MMMAnimator.html | 528 ------ .../Classes/MMMAutoLayoutIsolator.html | 483 ----- .../Classes/MMMAutoLayoutScrollView.html | 503 ------ .../Documents/Classes/MMMCollectionView.html | 482 ----- .../Documents/Classes/MMMContainerView.html | 422 ----- .../Classes/MMMHorizontalStackContainer.html | 393 ----- .../Documents/Classes/MMMImageView.html | 583 ------ .../Documents/Classes/MMMLayoutUtils.html | 509 ------ .../Documents/Classes/MMMNavigation.html | 473 ----- .../Documents/Classes/MMMNavigationHop.html | 491 ------ .../Documents/Classes/MMMNavigationPath.html | 517 ------ .../Classes/MMMNavigationRequest.html | 456 ----- .../Documents/Classes/MMMNavigationStack.html | 447 ----- .../Documents/Classes/MMMPaddedView.html | 514 ------ .../Classes/MMMScrollViewShadowView.html | 453 ----- .../Classes/MMMScrollViewShadows.html | 491 ------ .../Classes/MMMScrollViewShadowsSettings.html | 663 ------- .../Documents/Classes/MMMShadowView.html | 515 ------ .../Classes/MMMShadowViewSetting.html | 613 ------- .../Documents/Classes/MMMSpacerView.html | 422 ----- .../Documents/Classes/MMMStackContainer.html | 490 ----- .../Documents/Classes/MMMStubView.html | 452 ----- .../Classes/MMMStubViewController.html | 450 ----- .../Documents/Classes/MMMStylesheet.html | 931 ---------- .../Classes/MMMStylesheetScaleConverter.html | 433 ----- .../Documents/Classes/MMMTableView.html | 548 ------ .../Documents/Classes/MMMTableViewCell.html | 482 ----- .../Documents/Classes/MMMVelocityMeter.html | 455 ----- .../Classes/MMMVerticalGradientView.html | 483 ----- .../Classes/MMMVerticalStackContainer.html | 393 ----- .../Classes/MMMViewWrappingCell.html | 457 ----- .../Resources/Documents/Constants.html | 537 ------ .../Contents/Resources/Documents/Enums.html | 562 ------ .../Documents/Enums/MMMAnimationCurve.html | 964 ---------- .../Documents/Enums/MMMLayoutAlignment.html | 517 ------ .../Documents/Enums/MMMLayoutDirection.html | 392 ---- .../Enums/MMMLayoutHorizontalAlignment.html | 524 ------ .../Enums/MMMLayoutVerticalAlignment.html | 524 ------ .../Enums/MMMScrollViewShadowAlignment.html | 392 ---- .../Resources/Documents/Functions.html | 524 ------ .../Resources/Documents/Protocols.html | 490 ----- .../Protocols/MMMNavigationHandler.html | 359 ---- .../Protocols/MMMNavigationStackItem.html | 430 ----- .../MMMNavigationStackItemDelegate.html | 363 ---- .../Protocols/MMMPreferredSizeChanges.html | 363 ---- .../Protocols/MMMStylesheetConverter.html | 362 ---- .../Resources/Documents/Type Definitions.html | 542 ------ .../Contents/Resources/Documents/index.html | 241 +-- .../Contents/Resources/Documents/search.json | 2 +- .../Contents/Resources/docSet.dsidx | Bin 94208 -> 12288 bytes docsets/MMMCommonUI.tgz | Bin 199186 -> 85498 bytes index.html | 241 +-- search.json | 2 +- undocumented.json | 1569 +---------------- 118 files changed, 13 insertions(+), 60824 deletions(-) delete mode 100644 Categories.html delete mode 100644 Categories/NSLayoutConstraint(MMMTemple).html delete mode 100644 Categories/UILayoutGuide(MMMTemple).html delete mode 100644 Categories/UIView(MMMPreferredSizeChanges).html delete mode 100644 Categories/UIView(MMMTemple).html delete mode 100644 Classes.html delete mode 100644 Classes/MMMAnimation.html delete mode 100644 Classes/MMMAnimationHandle.html delete mode 100644 Classes/MMMAnimator.html delete mode 100644 Classes/MMMAutoLayoutIsolator.html delete mode 100644 Classes/MMMAutoLayoutScrollView.html delete mode 100644 Classes/MMMCollectionView.html delete mode 100644 Classes/MMMContainerView.html delete mode 100644 Classes/MMMHorizontalStackContainer.html delete mode 100644 Classes/MMMImageView.html delete mode 100644 Classes/MMMLayoutUtils.html delete mode 100644 Classes/MMMNavigation.html delete mode 100644 Classes/MMMNavigationHop.html delete mode 100644 Classes/MMMNavigationPath.html delete mode 100644 Classes/MMMNavigationRequest.html delete mode 100644 Classes/MMMNavigationStack.html delete mode 100644 Classes/MMMPaddedView.html delete mode 100644 Classes/MMMScrollViewShadowView.html delete mode 100644 Classes/MMMScrollViewShadows.html delete mode 100644 Classes/MMMScrollViewShadowsSettings.html delete mode 100644 Classes/MMMShadowView.html delete mode 100644 Classes/MMMShadowViewSetting.html delete mode 100644 Classes/MMMSpacerView.html delete mode 100644 Classes/MMMStackContainer.html delete mode 100644 Classes/MMMStubView.html delete mode 100644 Classes/MMMStubViewController.html delete mode 100644 Classes/MMMStylesheet.html delete mode 100644 Classes/MMMStylesheetScaleConverter.html delete mode 100644 Classes/MMMTableView.html delete mode 100644 Classes/MMMTableViewCell.html delete mode 100644 Classes/MMMVelocityMeter.html delete mode 100644 Classes/MMMVerticalGradientView.html delete mode 100644 Classes/MMMVerticalStackContainer.html delete mode 100644 Classes/MMMViewWrappingCell.html delete mode 100644 Constants.html delete mode 100644 Enums.html delete mode 100644 Enums/MMMAnimationCurve.html delete mode 100644 Enums/MMMLayoutAlignment.html delete mode 100644 Enums/MMMLayoutDirection.html delete mode 100644 Enums/MMMLayoutHorizontalAlignment.html delete mode 100644 Enums/MMMLayoutVerticalAlignment.html delete mode 100644 Enums/MMMScrollViewShadowAlignment.html delete mode 100644 Functions.html delete mode 100644 Protocols.html delete mode 100644 Protocols/MMMNavigationHandler.html delete mode 100644 Protocols/MMMNavigationStackItem.html delete mode 100644 Protocols/MMMNavigationStackItemDelegate.html delete mode 100644 Protocols/MMMPreferredSizeChanges.html delete mode 100644 Protocols/MMMStylesheetConverter.html delete mode 100644 Type Definitions.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories/NSLayoutConstraint(MMMTemple).html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories/UILayoutGuide(MMMTemple).html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories/UIView(MMMPreferredSizeChanges).html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories/UIView(MMMTemple).html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAnimation.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAnimationHandle.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAnimator.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAutoLayoutIsolator.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAutoLayoutScrollView.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMCollectionView.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMContainerView.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMHorizontalStackContainer.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMImageView.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMLayoutUtils.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigation.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigationHop.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigationPath.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigationRequest.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigationStack.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMPaddedView.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMScrollViewShadowView.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMScrollViewShadows.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMScrollViewShadowsSettings.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMShadowView.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMShadowViewSetting.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMSpacerView.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStackContainer.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStubView.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStubViewController.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStylesheet.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStylesheetScaleConverter.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMTableView.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMTableViewCell.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMVelocityMeter.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMVerticalGradientView.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMVerticalStackContainer.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMViewWrappingCell.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Constants.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMAnimationCurve.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMLayoutAlignment.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMLayoutDirection.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMLayoutHorizontalAlignment.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMLayoutVerticalAlignment.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMScrollViewShadowAlignment.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Functions.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMNavigationHandler.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMNavigationStackItem.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMNavigationStackItemDelegate.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMPreferredSizeChanges.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMStylesheetConverter.html delete mode 100644 docsets/MMMCommonUI.docset/Contents/Resources/Documents/Type Definitions.html diff --git a/Categories.html b/Categories.html deleted file mode 100644 index 2a6fb0c..0000000 --- a/Categories.html +++ /dev/null @@ -1,538 +0,0 @@ - - - - Categories Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

Categories

-

The following categories are available globally.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface UIView (MMMPreferredSizeChanges)
    -
    -/// Signals to one of the interested parent views (supporting `MMMPreferredSizeChanges`)
    -/// that the size of this view could have potentially changed and they should measure things again.
    -///
    -/// This helps with containers that do not primarily rely on Auto Layout, like UITableView.
    -- (void)mmm_setPreferredSizeCouldChange;
    -
    -@end
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface UILayoutGuide (MMMTemple)
    -
    -/// Convenience initializer setting the guide's identifier.
    -- (id)initWithIdentifier:(NSString *)identifier;
    -
    -/**
    - * Not yet activated constraints anchoring the given view within the receiver according to horizontal
    - * and vertical alignment flags.
    - */
    -- (NSArray<NSLayoutConstraint *> *)mmm_constraintsAligningView:(UIView *)view
    -	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment
    -	vertically:(MMMLayoutVerticalAlignment)verticalAlignment
    -	insets:(UIEdgeInsets)insets NS_SWIFT_NAME(mmm_constraints(aligning:horizontally:vertically:insets:));
    -
    -- (NSArray<NSLayoutConstraint *> *)mmm_constraintsAligningGuide:(UILayoutGuide *)guide
    -	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment
    -	vertically:(MMMLayoutVerticalAlignment)verticalAlignment
    -	insets:(UIEdgeInsets)insets NS_SWIFT_NAME(mmm_constraints(aligning:horizontally:vertically:insets:));
    -
    -/**
    - * Not yet activated constraints implementing a common layout idiom used with text:
    - * - the given view is centered within the receiver,
    - * - certain minimum padding is ensured on the sides,
    - * - if `maxWidth > 0`, then the width of the view is limited to `maxWidth`, so it does not grow too wide e.g. on iPad.
    - */
    -- (NSArray<NSLayoutConstraint *> *)mmm_constraintsHorizontallyCenteringView:(UIView *)view
    -	minPadding:(CGFloat)minPadding
    -	maxWidth:(CGFloat)maxWidth NS_SWIFT_NAME(mmm_constraints(horizontallyCentering:minPadding:maxWidth:));
    -
    -@end
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - UIView(MMMTemple) - -
    -
    -
    -
    -
    -
    -

    A few shorthands for UIView.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface UIView (MMMTemple)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface NSLayoutConstraint (MMMTemple)
    -
    -/**
    - * Our wrapper over the corresponding method of NSLayoutConstraint extending the visual layout language a bit to support
    - * `safeAreaLayoutGuide` property introduced in iOS 11 and still be compatible with older versions of iOS.
    - * (See also `mmm_safeAreaLayoutGuide` in our extension of UIView.)
    - *
    - * To use it simply replace a reference to the superview edge "|" with a reference to a safe edge "<|".
    - *
    - * For example, if you have the following pre iOS 9 code:
    - *
    - * \code
    - * [NSLayoutConstraint activateConstraints:[NSLayoutConstraint
    - *     constraintsWithVisualFormat:@"V:[_button]-(normalPadding)-|"
    - *     options:0 metrics:metrics views:views
    - * ]];
    - * \endcode
    - *
    - * And now you want to make sure that the button sits above the safe bottom margin on iPhone X, then do this:
    - *
    - * \code
    - * [NSLayoutConstraint activateConstraints:[NSLayoutConstraint
    - *     mmm_constraintsWithVisualFormat:@"V:[_button]-(normalPadding)-<|"
    - *     options:0 metrics:metrics views:views
    - * ]];
    - * \endcode
    - *
    - * That's it. It'll anchor the button to the bottom of its superview on iOS 9 and 10, but anchor it to the bottom of
    - * its safeAreaLayoutGuide on iOS 11.
    - *
    - * Please note that using "|>" to pin to the top won't exclude the status bar on iOS 9 and 10.
    - */
    -+ (NSArray<NSLayoutConstraint *> *)mmm_constraintsWithVisualFormat:(NSString *)format
    -	options:(NSLayoutFormatOptions)opts
    -	metrics:(nullable NSDictionary<NSString *,id> *)metrics
    -	views:(nullable NSDictionary<NSString *,id> *)views;
    -
    -/** A shortcut for `[NSLayoutConstraint activateConstraints:[NSLayoutConstraint mmm_constraintsWithVisualFormat:...`. */
    -+ (void)mmm_activateConstraintsWithVisualFormat:(NSString *)format
    -	options:(NSLayoutFormatOptions)opts
    -	metrics:(nullable NSDictionary<NSString *,id> *)metrics
    -	views:(nullable NSDictionary<NSString *,id> *)views;
    -
    -/** Missing counterparts for (de)activateConstraints, so constraint activation code looks the same for individual constraints. */
    -+ (void)activateConstraint:(NSLayoutConstraint *)constraint;
    -+ (void)deactivateConstraint:(NSLayoutConstraint *)constraint;
    -
    -/** A missing convenience initializer including priority. */
    -+ (instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1
    -	relatedBy:(NSLayoutRelation)relation
    -	toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2
    -	multiplier:(CGFloat)multiplier constant:(CGFloat)c
    -	priority:(UILayoutPriority)priority;
    -
    -/** A missing convenience initializer allowing to set identifier for this constraint. */
    -+ (instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1
    -	relatedBy:(NSLayoutRelation)relation
    -	toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2
    -	multiplier:(CGFloat)multiplier constant:(CGFloat)c
    -	identifier:(NSString *)identifier;
    -
    -/** A missing convenience initializer allowing to set both priority and identifier for this constraint. */
    -+ (instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1
    -	relatedBy:(NSLayoutRelation)relation
    -	toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2
    -	multiplier:(CGFloat)multiplier constant:(CGFloat)c
    -	priority:(UILayoutPriority)priority
    -	identifier:(NSString *)identifier;
    -
    -/** A missing convenience initializer allowing to tag a bunch of visual constraints with the same identifier. */
    -+ (NSArray<__kindof NSLayoutConstraint *> *)constraintsWithVisualFormat:(NSString *)format
    -	options:(NSLayoutFormatOptions)opts
    -	metrics:(nullable NSDictionary<NSString *,id> *)metrics
    -	views:(nullable NSDictionary<NSString *, id> *)views
    -	identifier:(NSString *)identifier DEPRECATED_ATTRIBUTE;
    -
    -@end
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Categories/NSLayoutConstraint(MMMTemple).html b/Categories/NSLayoutConstraint(MMMTemple).html deleted file mode 100644 index 3cb7b36..0000000 --- a/Categories/NSLayoutConstraint(MMMTemple).html +++ /dev/null @@ -1,722 +0,0 @@ - - - - NSLayoutConstraint(MMMTemple) Category Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

NSLayoutConstraint(MMMTemple)

-
-
- -
@interface NSLayoutConstraint (MMMTemple)
-
-/**
- * Our wrapper over the corresponding method of NSLayoutConstraint extending the visual layout language a bit to support
- * `safeAreaLayoutGuide` property introduced in iOS 11 and still be compatible with older versions of iOS.
- * (See also `mmm_safeAreaLayoutGuide` in our extension of UIView.)
- *
- * To use it simply replace a reference to the superview edge "|" with a reference to a safe edge "<|".
- *
- * For example, if you have the following pre iOS 9 code:
- *
- * \code
- * [NSLayoutConstraint activateConstraints:[NSLayoutConstraint
- *     constraintsWithVisualFormat:@"V:[_button]-(normalPadding)-|"
- *     options:0 metrics:metrics views:views
- * ]];
- * \endcode
- *
- * And now you want to make sure that the button sits above the safe bottom margin on iPhone X, then do this:
- *
- * \code
- * [NSLayoutConstraint activateConstraints:[NSLayoutConstraint
- *     mmm_constraintsWithVisualFormat:@"V:[_button]-(normalPadding)-<|"
- *     options:0 metrics:metrics views:views
- * ]];
- * \endcode
- *
- * That's it. It'll anchor the button to the bottom of its superview on iOS 9 and 10, but anchor it to the bottom of
- * its safeAreaLayoutGuide on iOS 11.
- *
- * Please note that using "|>" to pin to the top won't exclude the status bar on iOS 9 and 10.
- */
-+ (NSArray<NSLayoutConstraint *> *)mmm_constraintsWithVisualFormat:(NSString *)format
-	options:(NSLayoutFormatOptions)opts
-	metrics:(nullable NSDictionary<NSString *,id> *)metrics
-	views:(nullable NSDictionary<NSString *,id> *)views;
-
-/** A shortcut for `[NSLayoutConstraint activateConstraints:[NSLayoutConstraint mmm_constraintsWithVisualFormat:...`. */
-+ (void)mmm_activateConstraintsWithVisualFormat:(NSString *)format
-	options:(NSLayoutFormatOptions)opts
-	metrics:(nullable NSDictionary<NSString *,id> *)metrics
-	views:(nullable NSDictionary<NSString *,id> *)views;
-
-/** Missing counterparts for (de)activateConstraints, so constraint activation code looks the same for individual constraints. */
-+ (void)activateConstraint:(NSLayoutConstraint *)constraint;
-+ (void)deactivateConstraint:(NSLayoutConstraint *)constraint;
-
-/** A missing convenience initializer including priority. */
-+ (instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1
-	relatedBy:(NSLayoutRelation)relation
-	toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2
-	multiplier:(CGFloat)multiplier constant:(CGFloat)c
-	priority:(UILayoutPriority)priority;
-
-/** A missing convenience initializer allowing to set identifier for this constraint. */
-+ (instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1
-	relatedBy:(NSLayoutRelation)relation
-	toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2
-	multiplier:(CGFloat)multiplier constant:(CGFloat)c
-	identifier:(NSString *)identifier;
-
-/** A missing convenience initializer allowing to set both priority and identifier for this constraint. */
-+ (instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1
-	relatedBy:(NSLayoutRelation)relation
-	toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2
-	multiplier:(CGFloat)multiplier constant:(CGFloat)c
-	priority:(UILayoutPriority)priority
-	identifier:(NSString *)identifier;
-
-/** A missing convenience initializer allowing to tag a bunch of visual constraints with the same identifier. */
-+ (NSArray<__kindof NSLayoutConstraint *> *)constraintsWithVisualFormat:(NSString *)format
-	options:(NSLayoutFormatOptions)opts
-	metrics:(nullable NSDictionary<NSString *,id> *)metrics
-	views:(nullable NSDictionary<NSString *, id> *)views
-	identifier:(NSString *)identifier DEPRECATED_ATTRIBUTE;
-
-@end
- -
-
-

Undocumented

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Our wrapper over the corresponding method of NSLayoutConstraint extending the visual layout language a bit to support - safeAreaLayoutGuide property introduced in iOS 11 and still be compatible with older versions of iOS. - (See also mmm_safeAreaLayoutGuide in our extension of UIView.)

    - -

    To use it simply replace a reference to the superview edge “|” with a reference to a safe edge “<|”.

    - -

    For example, if you have the following pre iOS 9 code:

    - -

    \code - [NSLayoutConstraint activateConstraints:[NSLayoutConstraint - constraintsWithVisualFormat:@“V:[_button]-(normalPadding)-|” - options:0 metrics:metrics views:views - ]]; - \endcode

    - -

    And now you want to make sure that the button sits above the safe bottom margin on iPhone X, then do this:

    - -

    \code - [NSLayoutConstraint activateConstraints:[NSLayoutConstraint - mmm_constraintsWithVisualFormat:@“V:[_button]-(normalPadding)-<|” - options:0 metrics:metrics views:views - ]]; - \endcode

    - -

    That’s it. It’ll anchor the button to the bottom of its superview on iOS 9 and 10, but anchor it to the bottom of - its safeAreaLayoutGuide on iOS 11.

    - -

    Please note that using “|>” to pin to the top won’t exclude the status bar on iOS 9 and 10.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (nonnull NSArray<NSLayoutConstraint *> *)
    -    mmm_constraintsWithVisualFormat:(nonnull NSString *)format
    -                            options:(NSLayoutFormatOptions)opts
    -                            metrics:
    -                                (nullable NSDictionary<NSString *, id> *)metrics
    -                              views:(nullable NSDictionary<NSString *, id> *)
    -                                        views;
    - -
    -
    -

    Swift

    -
    class func mmm_constraints(withVisualFormat format: String, options opts: NSLayoutConstraint.FormatOptions = [], metrics: [String : Any]?, views: [String : Any]?) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A shortcut for [NSLayoutConstraint activateConstraints:[NSLayoutConstraint mmm_constraintsWithVisualFormat:....

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (void)
    -    mmm_activateConstraintsWithVisualFormat:(nonnull NSString *)format
    -                                    options:(NSLayoutFormatOptions)opts
    -                                    metrics:(nullable NSDictionary<NSString *,
    -                                                                   id> *)metrics
    -                                      views:(nullable NSDictionary<NSString *,
    -                                                                   id> *)views;
    - -
    -
    -

    Swift

    -
    class func mmm_activateConstraints(withVisualFormat format: String, options opts: NSLayoutConstraint.FormatOptions = [], metrics: [String : Any]?, views: [String : Any]?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - +activateConstraint: - -
    -
    -
    -
    -
    -
    -

    Missing counterparts for (de)activateConstraints, so constraint activation code looks the same for individual constraints.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (void)activateConstraint:(nonnull NSLayoutConstraint *)constraint;
    - -
    -
    -

    Swift

    -
    class func activate(_ constraint: NSLayoutConstraint)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (void)deactivateConstraint:(NSLayoutConstraint *)constraint;
    - -
    -
    -

    Swift

    -
    class func deactivate(_ constraint: NSLayoutConstraint)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A missing convenience initializer including priority.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (nonnull instancetype)constraintWithItem:(nonnull id)view1
    -                                 attribute:(NSLayoutAttribute)attr1
    -                                 relatedBy:(NSLayoutRelation)relation
    -                                    toItem:(nullable id)view2
    -                                 attribute:(NSLayoutAttribute)attr2
    -                                multiplier:(CGFloat)multiplier
    -                                  constant:(CGFloat)c
    -                                  priority:(UILayoutPriority)priority;
    - -
    -
    -

    Swift

    -
    convenience init(item view1: Any, attribute attr1: NSLayoutConstraint.Attribute, relatedBy relation: NSLayoutConstraint.Relation, toItem view2: Any?, attribute attr2: NSLayoutConstraint.Attribute, multiplier: CGFloat, constant c: CGFloat, priority: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A missing convenience initializer allowing to set identifier for this constraint.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (nonnull instancetype)constraintWithItem:(nonnull id)view1
    -                                 attribute:(NSLayoutAttribute)attr1
    -                                 relatedBy:(NSLayoutRelation)relation
    -                                    toItem:(nullable id)view2
    -                                 attribute:(NSLayoutAttribute)attr2
    -                                multiplier:(CGFloat)multiplier
    -                                  constant:(CGFloat)c
    -                                identifier:(nonnull NSString *)identifier;
    - -
    -
    -

    Swift

    -
    convenience init(item view1: Any, attribute attr1: NSLayoutConstraint.Attribute, relatedBy relation: NSLayoutConstraint.Relation, toItem view2: Any?, attribute attr2: NSLayoutConstraint.Attribute, multiplier: CGFloat, constant c: CGFloat, identifier: String)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A missing convenience initializer allowing to set both priority and identifier for this constraint.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (nonnull instancetype)constraintWithItem:(nonnull id)view1
    -                                 attribute:(NSLayoutAttribute)attr1
    -                                 relatedBy:(NSLayoutRelation)relation
    -                                    toItem:(nullable id)view2
    -                                 attribute:(NSLayoutAttribute)attr2
    -                                multiplier:(CGFloat)multiplier
    -                                  constant:(CGFloat)c
    -                                  priority:(UILayoutPriority)priority
    -                                identifier:(nonnull NSString *)identifier;
    - -
    -
    -

    Swift

    -
    convenience init(item view1: Any, attribute attr1: NSLayoutConstraint.Attribute, relatedBy relation: NSLayoutConstraint.Relation, toItem view2: Any?, attribute attr2: NSLayoutConstraint.Attribute, multiplier: CGFloat, constant c: CGFloat, priority: UILayoutPriority, identifier: String)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    A missing convenience initializer allowing to tag a bunch of visual constraints with the same identifier.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (nonnull NSArray<__kindof NSLayoutConstraint *> *)
    -    constraintsWithVisualFormat:(nonnull NSString *)format
    -                        options:(NSLayoutFormatOptions)opts
    -                        metrics:(nullable NSDictionary<NSString *, id> *)metrics
    -                          views:(nullable NSDictionary<NSString *, id> *)views
    -                     identifier:(nonnull NSString *)identifier;
    - -
    -
    -

    Swift

    -
    class func constraints(withVisualFormat format: String, options opts: NSLayoutConstraint.FormatOptions = [], metrics: [String : Any]?, views: [String : Any]?, identifier: String) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Categories/UILayoutGuide(MMMTemple).html b/Categories/UILayoutGuide(MMMTemple).html deleted file mode 100644 index a0d79e1..0000000 --- a/Categories/UILayoutGuide(MMMTemple).html +++ /dev/null @@ -1,495 +0,0 @@ - - - - UILayoutGuide(MMMTemple) Category Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

UILayoutGuide(MMMTemple)

-
-
- -
@interface UILayoutGuide (MMMTemple)
-
-/// Convenience initializer setting the guide's identifier.
-- (id)initWithIdentifier:(NSString *)identifier;
-
-/**
- * Not yet activated constraints anchoring the given view within the receiver according to horizontal
- * and vertical alignment flags.
- */
-- (NSArray<NSLayoutConstraint *> *)mmm_constraintsAligningView:(UIView *)view
-	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment
-	vertically:(MMMLayoutVerticalAlignment)verticalAlignment
-	insets:(UIEdgeInsets)insets NS_SWIFT_NAME(mmm_constraints(aligning:horizontally:vertically:insets:));
-
-- (NSArray<NSLayoutConstraint *> *)mmm_constraintsAligningGuide:(UILayoutGuide *)guide
-	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment
-	vertically:(MMMLayoutVerticalAlignment)verticalAlignment
-	insets:(UIEdgeInsets)insets NS_SWIFT_NAME(mmm_constraints(aligning:horizontally:vertically:insets:));
-
-/**
- * Not yet activated constraints implementing a common layout idiom used with text:
- * - the given view is centered within the receiver,
- * - certain minimum padding is ensured on the sides,
- * - if `maxWidth > 0`, then the width of the view is limited to `maxWidth`, so it does not grow too wide e.g. on iPad.
- */
-- (NSArray<NSLayoutConstraint *> *)mmm_constraintsHorizontallyCenteringView:(UIView *)view
-	minPadding:(CGFloat)minPadding
-	maxWidth:(CGFloat)maxWidth NS_SWIFT_NAME(mmm_constraints(horizontallyCentering:minPadding:maxWidth:));
-
-@end
- -
-
-

Undocumented

- -
-
- -
-
-
-
    -
  • -
    - - - - -initWithIdentifier: - -
    -
    -
    -
    -
    -
    -

    Convenience initializer setting the guide’s identifier.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithIdentifier:(nonnull NSString *)identifier;
    - -
    -
    -

    Swift

    -
    init(identifier: String)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Not yet activated constraints anchoring the given view within the receiver according to horizontal -and vertical alignment flags.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSArray<NSLayoutConstraint *> *)
    -    mmm_constraintsAligningView:(nonnull UIView *)view
    -                   horizontally:
    -                       (MMMLayoutHorizontalAlignment)horizontalAlignment
    -                     vertically:(MMMLayoutVerticalAlignment)verticalAlignment
    -                         insets:(UIEdgeInsets)insets;
    - -
    -
    -

    Swift

    -
    func mmm_constraints(aligning view: UIView, horizontally horizontalAlignment: MMMLayoutHorizontalAlignment, vertically verticalAlignment: MMMLayoutVerticalAlignment, insets: UIEdgeInsets) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (NSArray<NSLayoutConstraint *> *)mmm_constraintsAligningGuide:(UILayoutGuide *)guide
    -	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment
    -	vertically:(MMMLayoutVerticalAlignment)verticalAlignment
    -	insets:(UIEdgeInsets)insets NS_SWIFT_NAME(mmm_constraints(aligning:horizontally:vertically:insets:));
    - -
    -
    -

    Swift

    -
    func mmm_constraints(aligning guide: UILayoutGuide, horizontally horizontalAlignment: MMMLayoutHorizontalAlignment, vertically verticalAlignment: MMMLayoutVerticalAlignment, insets: UIEdgeInsets) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Not yet activated constraints implementing a common layout idiom used with text:

    - -
      -
    • the given view is centered within the receiver,
    • -
    • certain minimum padding is ensured on the sides,
    • -
    • if maxWidth > 0, then the width of the view is limited to maxWidth, so it does not grow too wide e.g. on iPad.
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSArray<NSLayoutConstraint *> *)
    -    mmm_constraintsHorizontallyCenteringView:(nonnull UIView *)view
    -                                  minPadding:(CGFloat)minPadding
    -                                    maxWidth:(CGFloat)maxWidth;
    - -
    -
    -

    Swift

    -
    func mmm_constraints(horizontallyCentering view: UIView, minPadding: CGFloat, maxWidth: CGFloat) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Categories/UIView(MMMPreferredSizeChanges).html b/Categories/UIView(MMMPreferredSizeChanges).html deleted file mode 100644 index 4442148..0000000 --- a/Categories/UIView(MMMPreferredSizeChanges).html +++ /dev/null @@ -1,363 +0,0 @@ - - - - UIView(MMMPreferredSizeChanges) Category Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

UIView(MMMPreferredSizeChanges)

-
-
- -
@interface UIView (MMMPreferredSizeChanges)
-
-/// Signals to one of the interested parent views (supporting `MMMPreferredSizeChanges`)
-/// that the size of this view could have potentially changed and they should measure things again.
-///
-/// This helps with containers that do not primarily rely on Auto Layout, like UITableView.
-- (void)mmm_setPreferredSizeCouldChange;
-
-@end
- -
-
-

Undocumented

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Signals to one of the interested parent views (supporting MMMPreferredSizeChanges) -that the size of this view could have potentially changed and they should measure things again.

    - -

    This helps with containers that do not primarily rely on Auto Layout, like UITableView.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setPreferredSizeCouldChange;
    - -
    -
    -

    Swift

    -
    func mmm_setPreferredSizeCouldChange()
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Categories/UIView(MMMTemple).html b/Categories/UIView(MMMTemple).html deleted file mode 100644 index f57ac9a..0000000 --- a/Categories/UIView(MMMTemple).html +++ /dev/null @@ -1,1340 +0,0 @@ - - - - UIView(MMMTemple) Category Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

UIView(MMMTemple)

-
-
- -
@interface UIView (MMMTemple)
- -
-
-

A few shorthands for UIView.

- -
-
- -
-
-
-
    -
  • -
    - - - - mmm_rect - -
    -
    -
    -
    -
    -
    -

    A wrapper for the center and bounds.size properties similar to ‘frame’, but not taking the current transform into account.

    - -
      -
    • Handy when there is a transform applied to a view already, but we want to set its frame in normal state.
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, setter=mmm_setRect:) CGRect mmm_rect;
    - -
    -
    -

    Swift

    -
    var mmm_rect: CGRect { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - mmm_size - -
    -
    -
    -
    -
    -
    -

    A wrapper for the size component of bounds property.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, setter=mmm_setSize:) CGSize mmm_size;
    - -
    -
    -

    Swift

    -
    var mmm_size: CGSize { get set }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A safer version of safeAreaLayoutGuide that attempts to avoid layout loops happening when a view using it

    - -
      -
    • is transformed in certain “inconvenient” way. (Apple Feedback ID: FB7609936.)
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) UILayoutGuide *_Nonnull mmm_safeAreaLayoutGuide;
    - -
    -
    -

    Swift

    -
    var mmm_safeAreaLayoutGuide: UILayoutGuide { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - mmm_safeAreaInsets - -
    -
    -
    -
    -
    -
    -

    Effective safeAreaInsets as seen by mmm_safeAreaLayoutGuide.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) UIEdgeInsets mmm_safeAreaInsets;
    - -
    -
    -

    Swift

    -
    var mmm_safeAreaInsets: UIEdgeInsets { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Constraints anchoring the given view within the receiver according to horizontal and vertical alignment flags. -Note that constrains are not added into the reciever automatically. -It is recommended to use this method instead of the mmm_addConstraintsForSubview:* bunch.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSArray<NSLayoutConstraint *> *)
    -    mmm_constraintsAligningView:(nonnull UIView *)subview
    -                   horizontally:
    -                       (MMMLayoutHorizontalAlignment)horizontalAlignment
    -                     vertically:(MMMLayoutVerticalAlignment)verticalAlignment
    -                         insets:(UIEdgeInsets)insets;
    - -
    -
    -

    Swift

    -
    func mmm_constraintsAligningView(_ subview: UIView, horizontally horizontalAlignment: MMMLayoutHorizontalAlignment, vertically verticalAlignment: MMMLayoutVerticalAlignment, insets: UIEdgeInsets) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (NSArray<NSLayoutConstraint *> *)mmm_constraintsAligningView:(UIView *)subview
    -	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment DEPRECATED_ATTRIBUTE;
    - -
    -
    -

    Swift

    -
    func mmm_constraintsAligningView(_ subview: UIView, horizontally horizontalAlignment: MMMLayoutHorizontalAlignment) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (NSArray<NSLayoutConstraint *> *)mmm_constraintsAligningView:(UIView *)subview
    -	vertically:(MMMLayoutVerticalAlignment)verticalAlignment DEPRECATED_ATTRIBUTE;
    - -
    -
    -

    Swift

    -
    func mmm_constraintsAligningView(_ subview: UIView, vertically verticalAlignment: MMMLayoutVerticalAlignment) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (NSArray<NSLayoutConstraint *> *)mmm_constraintsAligningGuide:(UILayoutGuide *)guide
    -	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment
    -	vertically:(MMMLayoutVerticalAlignment)verticalAlignment
    -	insets:(UIEdgeInsets)insets NS_SWIFT_NAME(mmm_constraints(aligning:horizontally:vertically:insets:));
    - -
    -
    -

    Swift

    -
    func mmm_constraints(aligning guide: UILayoutGuide, horizontally horizontalAlignment: MMMLayoutHorizontalAlignment, vertically verticalAlignment: MMMLayoutVerticalAlignment, insets: UIEdgeInsets) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Adds contraints anchoring the given view within the receiver according to horizontal and vertical alignment flags. -(This is a shortcut for calling mmm_constraintsAligningView:horizontally:vertically:insets: and adding the contraints returned.)

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSArray<NSLayoutConstraint *> *)
    -    mmm_addConstraintsAligningView:(nonnull UIView *)subview
    -                      horizontally:
    -                          (MMMLayoutHorizontalAlignment)horizontalAlignment
    -                        vertically:(MMMLayoutVerticalAlignment)verticalAlignment
    -                            insets:(UIEdgeInsets)insets;
    - -
    -
    -

    Swift

    -
    func mmm_addConstraintsAligningView(_ subview: UIView, horizontally horizontalAlignment: MMMLayoutHorizontalAlignment, vertically verticalAlignment: MMMLayoutVerticalAlignment, insets: UIEdgeInsets) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (NSArray<NSLayoutConstraint *> *)mmm_addConstraintsAligningView:(UIView *)subview
    -	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment
    -	vertically:(MMMLayoutVerticalAlignment)verticalAlignment;
    - -
    -
    -

    Swift

    -
    func mmm_addConstraintsAligningView(_ subview: UIView, horizontally horizontalAlignment: MMMLayoutHorizontalAlignment, vertically verticalAlignment: MMMLayoutVerticalAlignment) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (NSArray<NSLayoutConstraint *> *)mmm_addConstraintsAligningView:(UIView *)subview
    -	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment DEPRECATED_ATTRIBUTE;
    - -
    -
    -

    Swift

    -
    func mmm_addConstraintsAligningView(_ subview: UIView, horizontally horizontalAlignment: MMMLayoutHorizontalAlignment) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (NSArray<NSLayoutConstraint *> *)mmm_addConstraintsAligningView:(UIView *)subview
    -	vertically:(MMMLayoutVerticalAlignment)verticalAlignment DEPRECATED_ATTRIBUTE;
    - -
    -
    -

    Swift

    -
    func mmm_addConstraintsAligningView(_ subview: UIView, vertically verticalAlignment: MMMLayoutVerticalAlignment) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Not yet activated constraints implementing a common layout idiom used with text:

    - -
      -
    • the given view is centered within the receiver,
    • -
    • certain minimum padding is ensured on the sides,
    • -
    • if maxWidth > 0, then the width of the view is limited to maxWidth, so it does not grow too wide e.g. on iPad.
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSArray<NSLayoutConstraint *> *)
    -    mmm_constraintsHorizontallyCenteringView:(nonnull UIView *)view
    -                                  minPadding:(CGFloat)minPadding
    -                                    maxWidth:(CGFloat)maxWidth;
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A shortcut activating constraints returned by mmm_constraintsHorizontallyCenteringView:minPadding:maxWidth:.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_addConstraintsHorizontallyCenteringView:(nonnull UIView *)view
    -                                         minPadding:(CGFloat)minPadding
    -                                           maxWidth:(CGFloat)maxWidth;
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A shortcut activating constraints returned by mmm_constraintsHorizontallyCenteringView:minPadding:maxWidth:

    - -
      -
    • setting maxWidth to zero.
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_addConstraintsHorizontallyCenteringView:(nonnull UIView *)view
    -                                         minPadding:(CGFloat)minPadding;
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

To be deprecated soon -

-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Adds constraints anchoring the given subview within the receiver according to horizontal and vertical alignment flags. -The constraints are also returned, so the caller can remove them later, for example.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSArray<NSLayoutConstraint *> *)
    -    mmm_addConstraintsForSubview:(nonnull UIView *)subview
    -             horizontalAlignment:
    -                 (UIControlContentHorizontalAlignment)horizontalAlignment
    -               verticalAlignment:
    -                   (UIControlContentVerticalAlignment)verticalAlignment
    -                          insets:(UIEdgeInsets)insets;
    - -
    -
    -

    Swift

    -
    func mmm_addConstraints(forSubview subview: UIView, horizontalAlignment: UIControl.ContentHorizontalAlignment, verticalAlignment: UIControl.ContentVerticalAlignment, insets: UIEdgeInsets) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (NSArray<NSLayoutConstraint *> *)mmm_addConstraintsForSubview:(UIView *)subview
    -	horizontalAlignment:(UIControlContentHorizontalAlignment)horizontalAlignment
    -	verticalAlignment:(UIControlContentVerticalAlignment)verticalAlignment
    -	DEPRECATED_ATTRIBUTE;
    - -
    -
    -

    Swift

    -
    func mmm_addConstraints(forSubview subview: UIView, horizontalAlignment: UIControl.ContentHorizontalAlignment, verticalAlignment: UIControl.ContentVerticalAlignment) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Adds constraints and two hidden auxiliary views ensuring that the space between the top of the subview and - topAttribute of topItem is in ‘ratio’ proportion to the space between the bottom of the subview - and bottomAttribute of bottomItem.

    - -

    To be clear: - ratio = (top space) / (bottom space)

    - -

    So you need to use 1 when you want the same size, not 0.5, for example.

    - -

    The given priority will be used for the constraints between the heights of the aux views.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_addVerticalSpaceRatioConstraintsForSubview:(nonnull UIView *)subview
    -                                               topItem:(nonnull id)topItem
    -                                          topAttribute:
    -                                              (NSLayoutAttribute)topAttribute
    -                                            bottomItem:(nonnull id)bottomItem
    -                                       bottomAttribute:
    -                                           (NSLayoutAttribute)bottomAttribute
    -                                                 ratio:(CGFloat)ratio
    -                                              priority:
    -                                                  (UILayoutPriority)priority;
    - -
    -
    -

    Swift

    -
    func mmm_addVerticalSpaceRatioConstraints(forSubview subview: UIView, topItem: Any, topAttribute: NSLayoutConstraint.Attribute, bottomItem: Any, bottomAttribute: NSLayoutConstraint.Attribute, ratio: CGFloat, priority: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_addVerticalSpaceRatioConstraintsForSubview:(UIView *)subview
    -	topItem:(id)topItem topAttribute:(NSLayoutAttribute)topAttribute
    -	bottomItem:(id)bottomItem bottomAttribute:(NSLayoutAttribute)bottomAttribute
    -	ratio:(CGFloat)ratio;
    - -
    -
    -

    Swift

    -
    func mmm_addVerticalSpaceRatioConstraints(forSubview subview: UIView, topItem: Any, topAttribute: NSLayoutConstraint.Attribute, bottomItem: Any, bottomAttribute: NSLayoutConstraint.Attribute, ratio: CGFloat)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Adds constrains and a hidden auxiliary view ensuring that specified item / attribute vertically divides -the subview in the specified ratio. -Unlike the previous function the ratio here is given not as (top space / bottom space), but as -(top space / (top space + bottom space)). Sorry for the confusion, deprecating this one for now.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_addVerticalSpaceRatioConstraintsForSubview:(nonnull UIView *)subview
    -                                                  item:(nonnull id)item
    -                                             attribute:
    -                                                 (NSLayoutAttribute)attribute
    -                                                 ratio:(CGFloat)ratio;
    - -
    -
    -

    Swift

    -
    func mmm_addVerticalSpaceRatioConstraints(forSubview subview: UIView, item: Any, attribute: NSLayoutConstraint.Attribute, ratio: CGFloat)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Shortcuts for compression resistance and hugging priorities.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setVerticalCompressionResistance:(UILayoutPriority)priority;
    - -
    -
    -

    Swift

    -
    func mmm_setVerticalCompressionResistance(_ priority: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setHorizontalCompressionResistance:(UILayoutPriority)priority;
    - -
    -
    -

    Swift

    -
    func mmm_setHorizontalCompressionResistance(_ priority: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setVerticalHuggingPriority:(UILayoutPriority)priority;
    - -
    -
    -

    Swift

    -
    func mmm_setVerticalHuggingPriority(_ priority: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setHorizontalHuggingPriority:(UILayoutPriority)priority;
    - -
    -
    -

    Swift

    -
    func mmm_setHorizontalHuggingPriority(_ priority: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setVerticalCompressionResistance:(UILayoutPriority)compressionResistance hugging:(UILayoutPriority)hugging DEPRECATED_ATTRIBUTE;
    - -
    -
    -

    Swift

    -
    func mmm_setVerticalCompressionResistance(_ compressionResistance: UILayoutPriority, hugging: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setHorizontalCompressionResistance:(UILayoutPriority)compressionResistance hugging:(UILayoutPriority)hugging DEPRECATED_ATTRIBUTE;
    - -
    -
    -

    Swift

    -
    func mmm_setHorizontalCompressionResistance(_ compressionResistance: UILayoutPriority, hugging: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setCompressionResistanceHorizontal:(UILayoutPriority)horizontal
    -	vertical:(UILayoutPriority)vertical NS_SWIFT_NAME(mmm_setCompressionResistance(horizontal:vertical:));
    - -
    -
    -

    Swift

    -
    func mmm_setCompressionResistance(horizontal: UILayoutPriority, vertical: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setHuggingHorizontal:(UILayoutPriority)horizontal
    -	vertical:(UILayoutPriority)vertical NS_SWIFT_NAME(mmm_setHugging(horizontal:vertical:));
    - -
    -
    -

    Swift

    -
    func mmm_setHugging(horizontal: UILayoutPriority, vertical: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes.html b/Classes.html deleted file mode 100644 index 94402af..0000000 --- a/Classes.html +++ /dev/null @@ -1,1516 +0,0 @@ - - - - Classes Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

Classes

-

The following classes are available globally.

- -
-
- -
-
-
-
    -
  • -
    - - - - MMMTableViewCell - -
    -
    -
    -
    -
    -
    -

    A base for table view cells redeclareing the designated initializer into the one we typically use, -so subclasses do not have to.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMTableViewCell : UITableViewCell
    - -
    -
    -

    Swift

    -
    class MMMTableViewCell : UITableViewCell
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMViewWrappingCell - -
    -
    -
    -
    -
    -
    -

    A simple table view cell wrapping the given view.

    - -

    This is handy when you have a view already and just want to show it as one more cell.

    - -

    The view being wrapped should support Auto Layout and inflate its height properly. The cell has its selectionStyle - set to UITableViewCellSelectionStyleNone as these kind of cells typically do not appear selected.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMViewWrappingCell<ViewType> : MMMTableViewCell
    - -
    -
    -

    Swift

    -
    class MMMViewWrappingCell<ViewType> : MMMTableViewCell where ViewType : AnyObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMScrollViewShadows - -
    -
    -
    -
    -
    -
    -

    A helper for adding top and bottom shadows into any UIScrollView-based class. -You create an instance in your subclass and forward calls from layoutSubviews.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMScrollViewShadows : NSObject
    - -
    -
    -

    Swift

    -
    class MMMScrollViewShadows : NSObject
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Holds configuration for MMMScrollViewShadows that can be set only on initialization time.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMScrollViewShadowsSettings : NSObject
    - -
    -
    -

    Swift

    -
    class MMMScrollViewShadowsSettings : NSObject
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A view that’s used internally to render shadows in MMMAutoLayoutScrollView. -Open for reuse in cases we want to display compatible shadows but differntly controlled. -Note that this does not support Auto Layout, you have to manage its frame.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMScrollViewShadowView : UIView
    - -
    -
    -

    Swift

    -
    class MMMScrollViewShadowView : UIView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMNavigationHop - -
    -
    -
    -
    -
    -
    -

    Opening a deep link can involve following through one or more steps, for example:

    - -

    1) make sure the main screen is visible and can switch between the pages; - 2) move to the recipes page; - 3) open recipe with ID N; - 4) scroll to ingredients, etc.

    - -

    This is a single step in such a chain.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMNavigationHop : NSObject
    - -
    -
    -

    Swift

    -
    class MMMNavigationHop : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMNavigationPath - -
    -
    -
    -
    -
    -
    -

    A navigation path is just a collection of one or more “hops”.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMNavigationPath : NSObject
    - -
    -
    -

    Swift

    -
    class MMMNavigationPath : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMNavigation - -
    -
    -
    -
    -
    -
    -

    Manages switching between different sections of the app (kind of internal URL router). -It’s like a central hub accepting navigation requests and then passing them to the entities that able to perform them. -(The entities that are able to open requests should register themselves as handlers.)

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMNavigation : NSObject
    - -
    -
    -

    Swift

    -
    class MMMNavigation : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMNavigationRequest - -
    -
    -
    -
    -
    -
    -

    Info about a navigation request that is passed to handlers.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMNavigationRequest : NSObject
    - -
    -
    -

    Swift

    -
    class MMMNavigationRequest : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMStubViewController - -
    -
    -
    -
    -
    -
    -

    This is to be used during development to stub not ready yet parts of the app.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMStubViewController : UIViewController
    - -
    -
    -

    Swift

    -
    class MMMStubViewController : UIViewController
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMImageView - -
    -
    -
    -
    -
    -
    -

    A limited replacement for UIImageView fixing its inability to properly work with images having - non-zero alignmentRectInsets when scaled.

    - -

    Note that this view is already constrained to the aspect ratio of the image’s alignment rect, - so you should not use hard (equal) pins against both width and height or against all edges.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMImageView : UIView
    - -
    -
    -

    Swift

    -
    class MMMImageView : UIView
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A vertical scroll view with a content view and preconfigured constraints, so there is no need in creating - a scroll view / content view sandwitch manually every time.

    - -

    It also supports top and bottom shadows that are displayed only when the content is clipped. - The shadows can be enabled individually and they can sit either flush with the edges of the scroll view - or can be inset according to adjustedContentInset, which can be handy when vertical safeAreaInsets need - to be taken into account. (Note that contentInsetAdjustmentBehavior has to be either None or Always - on this view since “automatic” options can lead to cyclic calculations.) Also note that scroll indicators - are disabled here by default.

    - -

    Begin by adding your controls and constraints into the contentView ensuring that its size can be derived from your - constraints alone. Avoid constraints to the scroll view itself or outside views unless you are prepared to deal - with the consequences.

    - -

    Note that the width of the contentView will be constrainted hard to be equal to the width of the scroll view - and its height will be constrained with prio 251 to be at least as large as the height of the scroll view.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMAutoLayoutScrollView : UIScrollView
    - -
    -
    -

    Swift

    -
    class MMMAutoLayoutScrollView : UIScrollView
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A subview of MMMAutoLayoutScrollView where all the subviews should be added.

    - -
      -
    • (It’s not different from UIView, but making it of its own class helps when browsing view hierarchies.)
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMAutoLayoutScrollViewContentView : UIView
    - -
    -
    -

    Swift

    -
    class MMMAutoLayoutScrollViewContentView : UIView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMStubView - -
    -
    -
    -
    -
    -
    -

    To be used during development as a placeholder for not yet implemented views. -It inherits a vertical scroll view so it’s possible to see that gesture recognizers of the container do not interfere -with a typical scrolling.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMStubView : UIScrollView
    - -
    -
    -

    Swift

    -
    class MMMStubView : UIScrollView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMNavigationStack - -
    -
    -
    -
    -
    -
    -

    This is to track the navigation state of the app and have the possibility to programmatically return to registered points of - the navigation path. The actual navigation entities of the app (usually view controllers) must cooperate in order to - achieve this.

    - -

    The possibility to go back is needed to properly handle in-app links. We have a basic mechanism for this (MMMNavigation) - which allows to “open” a part of a link and forward the remaining parts to the corresponding handler down the navigation tree. - The handlers thus need to be able to “close” current navigation path before opening something new.

    - -

    Although navigation in the app is better represented by a tree, we assume here that at least the current path in this tree - can be represented as a stack. Each element of the stack can correspond to a modal view controller or alert view, for example, - but it can also correspond to a special state of the app or a screen.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMNavigationStack : NSObject
    - -
    -
    -

    Swift

    -
    class MMMNavigationStack : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMTableView - -
    -
    -
    -
    -
    -
    -

    A table view supporting top and bottom shadows.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMTableView : UITableView <MMMPreferredSizeChanges>
    - -
    -
    -

    Swift

    -
    class MMMTableView : UITableView, MMMPreferredSizeChanges
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMShadowViewSetting - -
    -
    -
    -
    -
    -
    -

    Holds configuration for MMMShadowView.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMShadowViewSetting : NSObject
    - -
    -
    -

    Swift

    -
    class MMMShadowViewSetting : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMShadowView - -
    -
    -
    -
    -
    -
    -

    Helper view for adding custom layer shadows, while taking the the shadow sizes in conserderation for its final frame.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMShadowView : UIView
    - -
    -
    -

    Swift

    -
    class MMMShadowView : UIView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMContainerView - -
    -
    -
    -
    -
    -
    -

    Auto Layout does not support constraints against groups of items, so this is for the cases a normal UIView is -typically used as a container for such a group. -Unlike UIView we have translatesAutoresizingMaskIntoConstraints set to NO already. -Also MMMContainerView does not intercept touches but subviews still do.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMContainerView : UIView
    - -
    -
    -

    Swift

    -
    class MMMContainerView : UIView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMLayoutUtils - -
    -
    -
    -
    -
    -
    -

    This is to group a few simple layout helpers.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMLayoutUtils : NSObject
    - -
    -
    -

    Swift

    -
    class MMMLayoutUtils : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMVelocityMeter - -
    -
    -
    -
    -
    -
    -

    A little helper for velocity/acceleration calculations: you feed it values with timestamps and can get the most recent -acceleration/velocity values.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMVelocityMeter : NSObject
    - -
    -
    -

    Swift

    -
    class MMMVelocityMeter : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMAnimation - -
    -
    -
    -
    -
    -
    -

    Minimalistic animation helpers.

    - -

    Terminology:

    - -
      -
    • Normalized time — time value from the [0; 1] range.
    • -
    • Curved time — normalized time transformed using one of the predefined animation curves.
    • -
    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMAnimation : NSObject
    - -
    -
    -

    Swift

    -
    class MMMAnimation : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMAnimator - -
    -
    -
    -
    -
    -
    -

    Minimalistic animator object in the spirit of helpers defined in MMMAnimation.

    - -

    You add animation items, which are basically a set of blocks that will be called every frame on the main run loop and - when it’s done or cancelled.

    - -

    It’s not for every case, it’s for those moments when you know the duration in advance and just need to animate a - simple custom property and don’t want to subclass CALayer or mess with its multithreaded delegates.

    - -

    The animator object does not take care of interpolation of values nor time curves, the normalized time passed into - update blocks can be transformed and values can be interpolated using simple helpers in MMMAnimation.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMAnimator : NSObject
    - -
    -
    -

    Swift

    -
    class MMMAnimator : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMAnimationHandle - -
    -
    -
    -
    -
    -
    -

    Sort of a handle returned by MMMAnimator when a new animation is scheduled. -Keep it around, otherwise the animation will be cancelled.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMAnimationHandle : NSObject
    - -
    -
    -

    Swift

    -
    class MMMAnimationHandle : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMCollectionView - -
    -
    -
    -
    -
    -
    -

    Collection view supporting top & bottom shadows.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMCollectionView : UICollectionView
    - -
    -
    -

    Swift

    -
    class MMMCollectionView : UICollectionView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMSpacerView - -
    -
    -
    -
    -
    -
    -

    Auto Layout does not support relationships between empty spaces, so we need to use spacer views and set such -constraints between them. This one is a transparent and by default hidden view which can be used as such a spacer. -It has no intrinsic size and low content hugging and compression resistance priorities. -Unlike UIView we have translatesAutoresizingMaskIntoConstraints set to NO already.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMSpacerView : UIView
    - -
    -
    -

    Swift

    -
    class MMMSpacerView : UIView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMStackContainer - -
    -
    -
    -
    -
    -
    -

    A container which lays out its subviews in certain direction one after another using fixed spacing between them. -It also aligns all the items along the layout line according to the given alignment settings. -Note that you must use setSubviews: method instead of feeding them one by one via addSubview:. -This is kind of a UIStackView that we understand the internals of.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMStackContainer : UIView
    - -
    -
    -

    Swift

    -
    class MMMStackContainer : UIView
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Vertical version of MMMStackContainer.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMVerticalStackContainer : MMMStackContainer
    - -
    -
    -

    Swift

    -
    class MMMVerticalStackContainer : MMMStackContainer
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Horizontal version of MMMStackContainer.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMHorizontalStackContainer : MMMStackContainer
    - -
    -
    -

    Swift

    -
    class MMMHorizontalStackContainer : MMMStackContainer
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMAutoLayoutIsolator - -
    -
    -
    -
    -
    -
    -

    Wraps a view that uses Auto Layout into a manual layout view providing sizeThatFits: for the outside world. -Can be handy with old APIs that do not fully support Auto Layout.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMAutoLayoutIsolator : UIView
    - -
    -
    -

    Swift

    -
    class MMMAutoLayoutIsolator : UIView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMPaddedView - -
    -
    -
    -
    -
    -
    -

    Wraps a view padding it from all the sides.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMPaddedView : UIView
    - -
    -
    -

    Swift

    -
    class MMMPaddedView : UIView
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A view displaying a gradient from top to bottom. The linearity of the gradient can be controlled. -Can be handy for shadow overlays, etc.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMVerticalGradientView : UIView
    - -
    -
    -

    Swift

    -
    class MMMVerticalGradientView : UIView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMStylesheet - -
    -
    -
    -
    -
    -
    -

    A base for app-specific stylesheets: commonly used paddings, colors, fonts, etc in a single place.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMStylesheet : NSObject
    - -
    -
    -

    Swift

    -
    class MMMStylesheet : NSObject
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Dimension converter that uses a table of scales.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMStylesheetScaleConverter : NSObject <MMMStylesheetConverter>
    - -
    -
    -

    Swift

    -
    class MMMStylesheetScaleConverter : NSObject, MMMStylesheetConverter
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMAnimation.html b/Classes/MMMAnimation.html deleted file mode 100644 index 9401b0d..0000000 --- a/Classes/MMMAnimation.html +++ /dev/null @@ -1,611 +0,0 @@ - - - - MMMAnimation Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMAnimation

-
-
-

Objective-C

-
@interface MMMAnimation : NSObject
- -
-
-

Swift

-
class MMMAnimation : NSObject
- -
-
-

Minimalistic animation helpers.

- -

Terminology:

- -
    -
  • Normalized time — time value from the [0; 1] range.
  • -
  • Curved time — normalized time transformed using one of the predefined animation curves.
  • -
- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Time obtained by curving the given normalized time (from [0; 1] range).

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGFloat)curvedTimeForTime:(CGFloat)time curve:(MMMAnimationCurve)curve;
    - -
    -
    -

    Swift

    -
    class func curvedTime(forTime time: CGFloat, curve: MMMAnimationCurve) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Inverse function for curvedTimeForTime:curve:, i.e. when we know the value returned by curvedTimeForTime:curve: -and want the time value passed there. -This should be used sparingly (not every frame) as the implementation is no very efficient.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGFloat)timeForCurvedTime:(CGFloat)time curve:(MMMAnimationCurve)curve;
    - -
    -
    -

    Swift

    -
    class func time(forCurvedTime time: CGFloat, curve: MMMAnimationCurve) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Time obtained by clamping the given time into [startTime; startTime + duration], normalizing to [0; 1] range, -and then curving using a preset curve.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGFloat)curvedTimeForTime:(CGFloat)t
    -                   startTime:(CGFloat)startTime
    -                    duration:(CGFloat)duration
    -                       curve:(MMMAnimationCurve)curve;
    - -
    -
    -

    Swift

    -
    class func curvedTime(forTime t: CGFloat, startTime: CGFloat, duration: CGFloat, curve: MMMAnimationCurve) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A float between ‘from’ and ‘to’ corresponding to already normalized and curved time.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGFloat)interpolateFrom:(CGFloat)from to:(CGFloat)to time:(CGFloat)time;
    - -
    -
    -

    Swift

    -
    class func interpolate(from: CGFloat, to: CGFloat, time: CGFloat) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    This has been renamed. Use the version above.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGFloat)interpolateFrom:(CGFloat)from
    -                        to:(CGFloat)to
    -                curvedTime:(CGFloat)time;
    - -
    -
    -

    Swift

    -
    class func interpolate(from: CGFloat, to: CGFloat, curvedTime time: CGFloat) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Value between two floats corresponding to the given time and timing curve. -If the time is less then startTime, then ‘from’ is returned. -If the time is greater then startTime + duration, then ‘to’ is returned.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGFloat)interpolateFrom:(CGFloat)from
    -                        to:(CGFloat)to
    -                      time:(CGFloat)time
    -                 startTime:(CGFloat)startTime
    -                  duration:(CGFloat)duration
    -                     curve:(MMMAnimationCurve)curve;
    - -
    -
    -

    Swift

    -
    class func interpolate(from: CGFloat, to: CGFloat, time: CGFloat, startTime: CGFloat, duration: CGFloat, curve: MMMAnimationCurve) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - +colorFrom:to:time: - -
    -
    -
    -
    -
    -
    -

    A color between ‘from’ and ‘to’ corresponding to already normalized and curved time. -Only RGB colors are supported. -Interpolation is done along a straight line in the RGB space.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (nonnull UIColor *)colorFrom:(nonnull UIColor *)from
    -                            to:(nonnull UIColor *)to
    -                          time:(CGFloat)time;
    - -
    -
    -

    Swift

    -
    class func color(from: UIColor, to: UIColor, time: CGFloat) -> UIColor
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - +pointFrom:to:time: - -
    -
    -
    -
    -
    -
    -

    A point on the line between given points corresponding to already normalized and curved time.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGPoint)pointFrom:(CGPoint)from to:(CGPoint)to time:(CGFloat)time;
    - -
    -
    -

    Swift

    -
    class func point(from: CGPoint, to: CGPoint, time: CGFloat) -> CGPoint
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMAnimationHandle.html b/Classes/MMMAnimationHandle.html deleted file mode 100644 index 46613ef..0000000 --- a/Classes/MMMAnimationHandle.html +++ /dev/null @@ -1,421 +0,0 @@ - - - - MMMAnimationHandle Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMAnimationHandle

-
-
-

Objective-C

-
@interface MMMAnimationHandle : NSObject
- -
-
-

Swift

-
class MMMAnimationHandle : NSObject
- -
-
-

Sort of a handle returned by MMMAnimator when a new animation is scheduled. -Keep it around, otherwise the animation will be cancelled.

- -
-
- -
-
-
-
    -
  • -
    - - - - inProgress - -
    -
    -
    -
    -
    -
    -

    YES, if the animation has not been finished yet.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) BOOL inProgress;
    - -
    -
    -

    Swift

    -
    var inProgress: Bool { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -cancel - -
    -
    -
    -
    -
    -
    -

    Finishes animation before its designated end time.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)cancel;
    - -
    -
    -

    Swift

    -
    func cancel()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMAnimator.html b/Classes/MMMAnimator.html deleted file mode 100644 index 1823c62..0000000 --- a/Classes/MMMAnimator.html +++ /dev/null @@ -1,528 +0,0 @@ - - - - MMMAnimator Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMAnimator

-
-
-

Objective-C

-
@interface MMMAnimator : NSObject
- -
-
-

Swift

-
class MMMAnimator : NSObject
- -
-
-

Minimalistic animator object in the spirit of helpers defined in MMMAnimation.

- -

You add animation items, which are basically a set of blocks that will be called every frame on the main run loop and - when it’s done or cancelled.

- -

It’s not for every case, it’s for those moments when you know the duration in advance and just need to animate a - simple custom property and don’t want to subclass CALayer or mess with its multithreaded delegates.

- -

The animator object does not take care of interpolation of values nor time curves, the normalized time passed into - update blocks can be transformed and values can be interpolated using simple helpers in MMMAnimation.

- -
-
- -
-
-
-
    -
  • -
    - - - - +shared - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (instancetype)shared;
    - -
    -
    -

    Swift

    -
    class func shared() -> Self
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Schedules a new animation item.

    - -

    The updateBlock is called on every update cycle within the animation’s duration. It is guaranteed to be called with - zero time even if cancelled before the next run loop cycle. The update block is also guaranteed to be called with - time being 1 unless is cancelled earlier.

    - -

    The doneBlock is called after the animation finishes or is cancelled.

    - -

    The repeatCount parameter can be set to 0 to mean infinite repeat count.

    - -

    In case repeatCount is different from 1, then autoreverse influences the way the time changes when passed to - the updateBlock: if YES, then it’ll grow from 0 to 1 and then from 1 to 0 on the next repeat, changing back to - from 0 to 1 after this, etc; if NO, then it’ll always from from 0 to 1 on every repeat step.

    - -

    The animation will start on the next cycle of the refresh timer and will have the timestamp of this cycle as its - actual start time, so there is no need in explicit transactions: all animation added on the same run loop cycle are - guaranteed to be run in sync.

    - -

    Keep the object returned. The animation stops when the reference to this object is released.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull MMMAnimationHandle *)
    -    addAnimationWithDuration:(CGFloat)duration
    -                 updateBlock:(nonnull MMMAnimatorUpdateBlock)updateBlock
    -                   doneBlock:(nullable MMMAnimatorDoneBlock)doneBlock;
    - -
    -
    -

    Swift

    -
    func addAnimation(duration: CGFloat, update updateBlock: @escaping MMMAnimatorUpdateBlock, completion doneBlock: MMMAnimatorDoneBlock? = nil) -> MMMAnimationHandle
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (MMMAnimationHandle *)addAnimationWithDuration:(CGFloat)duration
    -	repeatCount:(NSInteger)repeatCount
    -	autoreverse:(BOOL)autoreverse
    -	updateBlock:(MMMAnimatorUpdateBlock)updateBlock
    -	doneBlock:(nullable MMMAnimatorDoneBlock)doneBlock
    -	NS_SWIFT_NAME(addAnimation(duration:repeatCount:autoreverse:update:completion:));
    - -
    -
    -

    Swift

    -
    func addAnimation(duration: CGFloat, repeatCount: Int, autoreverse: Bool, update updateBlock: @escaping MMMAnimatorUpdateBlock, completion doneBlock: MMMAnimatorDoneBlock? = nil) -> MMMAnimationHandle
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Despite the +shared method defined above you can still create own instances of this class.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)init;
    - -
    -
    -

    Swift

    -
    init()
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    For unit tests only: will synchronously run all the animations already in the animator and the ones added within - the given block in the specified number of steps, executing the given block after each step. - This is used in view-based tests for those views that run all their animations using MMMAnimator.

    - -

    The idea is that an animated action is triggered in the animationsBlock (e.g. hideAnimated:YES) and then the - stepBlock is called in the very beginning and in exactly numberOfSteps - 1 moments afterwards. The moments will be - selected, so they are spaced equally and the last one is exactly at the end of the longest animation item.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)_testRunInNumberOfSteps:(NSInteger)numberOfSteps
    -                     animations:(nonnull void (^)(void))animationsBlock
    -                    forEachStep:(nonnull void (^)(NSInteger))stepBlock;
    - -
    -
    -

    Swift

    -
    func _testRun(numberOfSteps: Int, animations animationsBlock: () -> Void, stepBlock: (Int) -> Void)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMAutoLayoutIsolator.html b/Classes/MMMAutoLayoutIsolator.html deleted file mode 100644 index 70b061d..0000000 --- a/Classes/MMMAutoLayoutIsolator.html +++ /dev/null @@ -1,483 +0,0 @@ - - - - MMMAutoLayoutIsolator Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMAutoLayoutIsolator

-
-
-

Objective-C

-
@interface MMMAutoLayoutIsolator : UIView
- -
-
-

Swift

-
class MMMAutoLayoutIsolator : UIView
- -
-
-

Wraps a view that uses Auto Layout into a manual layout view providing sizeThatFits: for the outside world. -Can be handy with old APIs that do not fully support Auto Layout.

- -
-
- -
-
-
-
    -
  • -
    - - - - view - -
    -
    -
    -
    -
    -
    -

    The view being wrapped.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) UIView *_Nonnull view;
    - -
    -
    -

    Swift

    -
    var view: UIView { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithView: - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithView:(UIView *)view NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init(view: UIView)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMAutoLayoutScrollView.html b/Classes/MMMAutoLayoutScrollView.html deleted file mode 100644 index 8eac16e..0000000 --- a/Classes/MMMAutoLayoutScrollView.html +++ /dev/null @@ -1,503 +0,0 @@ - - - - MMMAutoLayoutScrollView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMAutoLayoutScrollView

-
-
-

Objective-C

-
@interface MMMAutoLayoutScrollView : UIScrollView
- -
-
-

Swift

-
class MMMAutoLayoutScrollView : UIScrollView
- -
-
-

A vertical scroll view with a content view and preconfigured constraints, so there is no need in creating - a scroll view / content view sandwitch manually every time.

- -

It also supports top and bottom shadows that are displayed only when the content is clipped. - The shadows can be enabled individually and they can sit either flush with the edges of the scroll view - or can be inset according to adjustedContentInset, which can be handy when vertical safeAreaInsets need - to be taken into account. (Note that contentInsetAdjustmentBehavior has to be either None or Always - on this view since “automatic” options can lead to cyclic calculations.) Also note that scroll indicators - are disabled here by default.

- -

Begin by adding your controls and constraints into the contentView ensuring that its size can be derived from your - constraints alone. Avoid constraints to the scroll view itself or outside views unless you are prepared to deal - with the consequences.

- -

Note that the width of the contentView will be constrainted hard to be equal to the width of the scroll view - and its height will be constrained with prio 251 to be at least as large as the height of the scroll view.

- -
-
- -
-
-
-
    -
  • -
    - - - - contentView - -
    -
    -
    -
    -
    -
    -

    This is where your content subviews should be added.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) MMMAutoLayoutScrollViewContentView *_Nonnull contentView;
    - -
    -
    -

    Swift

    -
    var contentView: MMMAutoLayoutScrollViewContentView { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithSettings: - -
    -
    -
    -
    -
    -
    -

    Initializes with the given config.

    -
    -

    Note

    - Note that changing the config after the initialization has no effect on the view. - -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithSettings:(nonnull MMMScrollViewShadowsSettings *)settings;
    - -
    -
    -

    Swift

    -
    init(settings: MMMScrollViewShadowsSettings)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Initializes with default settings, a shortcut for initWithSettings:[[MMMScrollViewShadowsSettings alloc] init].

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)init;
    - -
    -
    -

    Swift

    -
    convenience init()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMCollectionView.html b/Classes/MMMCollectionView.html deleted file mode 100644 index 10689f7..0000000 --- a/Classes/MMMCollectionView.html +++ /dev/null @@ -1,482 +0,0 @@ - - - - MMMCollectionView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMCollectionView

-
-
-

Objective-C

-
@interface MMMCollectionView : UICollectionView
- -
-
-

Swift

-
class MMMCollectionView : UICollectionView
- -
-
-

Collection view supporting top & bottom shadows.

- -
-
- -
-
-
-
    -
  • -
    - - - - -initWithSettings: - -
    -
    -
    -
    -
    -
    -

    Uses UICollectionViewFlowLayout by default.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull instancetype)initWithSettings:
    -    (nonnull MMMScrollViewShadowsSettings *)settings;
    - -
    -
    -

    Swift

    -
    init(settings: MMMScrollViewShadowsSettings)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (instancetype)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMContainerView.html b/Classes/MMMContainerView.html deleted file mode 100644 index b7a87c2..0000000 --- a/Classes/MMMContainerView.html +++ /dev/null @@ -1,422 +0,0 @@ - - - - MMMContainerView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMContainerView

-
-
-

Objective-C

-
@interface MMMContainerView : UIView
- -
-
-

Swift

-
class MMMContainerView : UIView
- -
-
-

Auto Layout does not support constraints against groups of items, so this is for the cases a normal UIView is -typically used as a container for such a group. -Unlike UIView we have translatesAutoresizingMaskIntoConstraints set to NO already. -Also MMMContainerView does not intercept touches but subviews still do.

- -
-
- -
-
-
-
    -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)init NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMHorizontalStackContainer.html b/Classes/MMMHorizontalStackContainer.html deleted file mode 100644 index 0514e97..0000000 --- a/Classes/MMMHorizontalStackContainer.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - MMMHorizontalStackContainer Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMHorizontalStackContainer

-
-
-

Objective-C

-
@interface MMMHorizontalStackContainer : MMMStackContainer
- -
-
-

Swift

-
class MMMHorizontalStackContainer : MMMStackContainer
- -
-
-

Horizontal version of MMMStackContainer.

- -
-
- -
-
-
- -
-
-
- -
-
- - - diff --git a/Classes/MMMImageView.html b/Classes/MMMImageView.html deleted file mode 100644 index aa0065c..0000000 --- a/Classes/MMMImageView.html +++ /dev/null @@ -1,583 +0,0 @@ - - - - MMMImageView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMImageView

-
-
-

Objective-C

-
@interface MMMImageView : UIView
- -
-
-

Swift

-
class MMMImageView : UIView
- -
-
-

A limited replacement for UIImageView fixing its inability to properly work with images having - non-zero alignmentRectInsets when scaled.

- -

Note that this view is already constrained to the aspect ratio of the image’s alignment rect, - so you should not use hard (equal) pins against both width and height or against all edges.

- -
-
- -
-
-
-
    -
  • -
    - - - - image - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, nullable) UIImage *image
    - -
    -
    -

    Swift

    -
    var image: UIImage? { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - highlightedImage - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, nullable) UIImage *highlightedImage
    - -
    -
    -

    Swift

    -
    var highlightedImage: UIImage? { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - highlighted - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, getter=isHighlighted) BOOL highlighted
    - -
    -
    -

    Swift

    -
    var isHighlighted: Bool { get set }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithImage:(nullable UIImage *)image highlightedImage:(nullable UIImage *)highlightedImage NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init(image: UIImage?, highlightedImage: UIImage?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Convenience initializer.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)init;
    - -
    -
    -

    Swift

    -
    convenience init()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithImage: - -
    -
    -
    -
    -
    -
    -

    Convenience initializer.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithImage:(nullable UIImage *)image;
    - -
    -
    -

    Swift

    -
    convenience init(image: UIImage?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMLayoutUtils.html b/Classes/MMMLayoutUtils.html deleted file mode 100644 index a7541ab..0000000 --- a/Classes/MMMLayoutUtils.html +++ /dev/null @@ -1,509 +0,0 @@ - - - - MMMLayoutUtils Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMLayoutUtils

-
-
-

Objective-C

-
@interface MMMLayoutUtils : NSObject
- -
-
-

Swift

-
class MMMLayoutUtils : NSObject
- -
-
-

This is to group a few simple layout helpers.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    A rect with the given size positioned inside of the target rect in such a way that anchor points of both rects align.

    - -

    Anchor points are given relative to the sizes of the corresponding rects, similar to CALayer’s anchorPoint - property. For example, CGPointMake(0.5, 0.5) represents a center of any rect; CGPointMake(1, 0.5) means - the center point of the right vertical edge.

    - -

    Note that the origin of the rect returned is rounded to the nearest pixels (not points!).

    - -

    See rectWithSize:inRect:contentMode: for a shortcut supporting UIViewContentMode.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGRect)rectWithSize:(CGSize)size
    -                anchor:(CGPoint)anchor
    -            withinRect:(CGRect)targetRect
    -                anchor:(CGPoint)targetAnchor;
    - -
    -
    -

    Swift

    -
    class func rect(withSize size: CGSize, anchor: CGPoint, withinRect targetRect: CGRect, anchor targetAnchor: CGPoint) -> CGRect
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A shortcut for the above method with anchors being the same for both source and target rect. -(This way the resulting rect will be always inside of the target one, assuming anchors are within [0; 1] range.)

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGRect)rectWithSize:(CGSize)size
    -            withinRect:(CGRect)targetRect
    -                anchor:(CGPoint)anchor;
    - -
    -
    -

    Swift

    -
    class func rect(withSize size: CGSize, withinRect targetRect: CGRect, anchor: CGPoint) -> CGRect
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A frame for the sourceRect positioned within the targetRect according to standard UIViewContentMode flags - related to the layout (i.e. all except UIViewContentModeRedraw).

    - -

    Note that the origin of the resulting rectangle is always rounded to the nearest pixel.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGRect)rectWithSize:(CGSize)size
    -            withinRect:(CGRect)targetRect
    -           contentMode:(UIViewContentMode)contentMode;
    - -
    -
    -

    Swift

    -
    class func rect(withSize size: CGSize, withinRect targetRect: CGRect, contentMode: UIView.ContentMode) -> CGRect
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A frame of the given size with its center at the specified point (assuming the center is defined by the given anchor - point).

    - -

    Note that the origin of the resulting rectangle is rounded to the nearest pixel boundary.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGRect)rectWithSize:(CGSize)size
    -               atPoint:(CGPoint)center
    -                anchor:(CGPoint)anchor;
    - -
    -
    -

    Swift

    -
    class func rect(withSize size: CGSize, atPoint center: CGPoint, anchor: CGPoint) -> CGRect
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - +rectWithSize:center: - -
    -
    -
    -
    -
    -
    -

    Same as rectWithSize:center:anchor: with anchor set to (0.5, 0.5).

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGRect)rectWithSize:(CGSize)size center:(CGPoint)center;
    - -
    -
    -

    Swift

    -
    class func rect(withSize size: CGSize, center: CGPoint) -> CGRect
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMNavigation.html b/Classes/MMMNavigation.html deleted file mode 100644 index 46d3ff1..0000000 --- a/Classes/MMMNavigation.html +++ /dev/null @@ -1,473 +0,0 @@ - - - - MMMNavigation Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMNavigation

-
-
-

Objective-C

-
@interface MMMNavigation : NSObject
- -
-
-

Swift

-
class MMMNavigation : NSObject
- -
-
-

Manages switching between different sections of the app (kind of internal URL router). -It’s like a central hub accepting navigation requests and then passing them to the entities that able to perform them. -(The entities that are able to open requests should register themselves as handlers.)

- -
-
- -
-
-
-
    -
  • -
    - - - - +root - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (instancetype)root;
    - -
    -
    -

    Swift

    -
    class func root() -> Self
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Starts the process of opening of the given path. Calls the completion block when done, the block receives ID of the -corresponding request. Links are opened one by one. Any navigation request received while handling the current one -will be queued.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull MMMNavigationRequestId)
    -    navigateTo:(nonnull MMMNavigationPath *)path
    -    completion:(nonnull MMMNavigationCompletionBlock)completion;
    - -
    -
    -

    Swift

    -
    func navigate(to path: MMMNavigationPath, completion: @escaping MMMNavigationCompletionBlock) -> Any
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Handlers -

-
-
-
    -
  • -
    - - - - -addHandler: - -
    -
    -
    -
    -
    -
    -

    Adds a handler and returns a cookie/ID object that can be later used to remove it.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull MMMNavigationHandlerId)addHandler:
    -    (nonnull id<MMMNavigationHandler>)handler;
    - -
    -
    -

    Swift

    -
    func add(_ handler: MMMNavigationHandler) -> Any
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -removeHandlerWithId: - -
    -
    -
    -
    -
    -
    -

    Removes a handler by its ID assigned by addHandler.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)removeHandlerWithId:(nonnull MMMNavigationHandlerId)handlerId;
    - -
    -
    -

    Swift

    -
    func removeHandler(withId handlerId: Any)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMNavigationHop.html b/Classes/MMMNavigationHop.html deleted file mode 100644 index 6d8ef6c..0000000 --- a/Classes/MMMNavigationHop.html +++ /dev/null @@ -1,491 +0,0 @@ - - - - MMMNavigationHop Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMNavigationHop

-
-
-

Objective-C

-
@interface MMMNavigationHop : NSObject
- -
-
-

Swift

-
class MMMNavigationHop : NSObject
- -
-
-

Opening a deep link can involve following through one or more steps, for example:

- -

1) make sure the main screen is visible and can switch between the pages; - 2) move to the recipes page; - 3) open recipe with ID N; - 4) scroll to ingredients, etc.

- -

This is a single step in such a chain.

- -
-
- -
-
-
-
    -
  • -
    - - - - action - -
    -
    -
    -
    -
    -
    -

    Name/ID of the hop. Supposed to be a flat string, like ‘recipes’, not a path.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) NSString *_Nonnull action;
    - -
    -
    -

    Swift

    -
    var action: String { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - params - -
    -
    -
    -
    -
    -
    -

    Optional parameters for this hop only.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly, nullable) NSDictionary<NSString *, id> *params;
    - -
    -
    -

    Swift

    -
    var params: [String : Any]? { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithAction:(NSString *)action params:(nullable NSDictionary<NSString*, id> *)params NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init(action: String, params: [String : Any]?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithAction: - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithAction:(NSString *)action;
    - -
    -
    -

    Swift

    -
    convenience init(action: String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMNavigationPath.html b/Classes/MMMNavigationPath.html deleted file mode 100644 index b0d5de2..0000000 --- a/Classes/MMMNavigationPath.html +++ /dev/null @@ -1,517 +0,0 @@ - - - - MMMNavigationPath Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMNavigationPath

-
-
-

Objective-C

-
@interface MMMNavigationPath : NSObject
- -
-
-

Swift

-
class MMMNavigationPath : NSObject
- -
-
-

A navigation path is just a collection of one or more “hops”.

- -
-
- -
-
-
-
    -
  • -
    - - - - hops - -
    -
    -
    -
    -
    -
    -

    All the “hops” the link consists of.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) NSArray<MMMNavigationHop *> *_Nonnull hops;
    - -
    -
    -

    Swift

    -
    var hops: [MMMNavigationHop] { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -pathWithoutFirstHop - -
    -
    -
    -
    -
    -
    -

    A new path obtained from the current one by removing the first hop.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nullable MMMNavigationPath *)pathWithoutFirstHop;
    - -
    -
    -

    Swift

    -
    func pathWithoutFirstHop() -> MMMNavigationPath?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -firstHop - -
    -
    -
    -
    -
    -
    -

    The first hop in the path or nil if the path is empty.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nullable MMMNavigationHop *)firstHop;
    - -
    -
    -

    Swift

    -
    func firstHop() -> MMMNavigationHop?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithHops: - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithHops:(NSArray<MMMNavigationHop *> *)hops NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init(hops: [MMMNavigationHop])
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithURI: - -
    -
    -
    -
    -
    -
    -

    Convenience initializer. Allows to use URIs like “main/recipes”, to construct hops out of it. -Note that it does not currently support hop parameters.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithURI:(nonnull NSString *)uri;
    - -
    -
    -

    Swift

    -
    convenience init(uri: String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMNavigationRequest.html b/Classes/MMMNavigationRequest.html deleted file mode 100644 index 1f35957..0000000 --- a/Classes/MMMNavigationRequest.html +++ /dev/null @@ -1,456 +0,0 @@ - - - - MMMNavigationRequest Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMNavigationRequest

-
-
-

Objective-C

-
@interface MMMNavigationRequest : NSObject
- -
-
-

Swift

-
class MMMNavigationRequest : NSObject
- -
-
-

Info about a navigation request that is passed to handlers.

- -
-
- -
-
-
-
    -
  • -
    - - - - originalPath - -
    -
    -
    -
    -
    -
    -

    A sequence of hops the request has started with. This is never changed during lifetime of the request.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) MMMNavigationPath *_Nonnull originalPath;
    - -
    -
    -

    Swift

    -
    var originalPath: MMMNavigationPath { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - path - -
    -
    -
    -
    -
    -
    -

    The current sequence of hops to follow. Handlers can adjust this.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) MMMNavigationPath *_Nonnull path;
    - -
    -
    -

    Swift

    -
    var path: MMMNavigationPath { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Called by the handler when all the hops in the path were followed through.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)didFinishSuccessfully:(BOOL)successfully;
    - -
    -
    -

    Swift

    -
    func didFinishSuccessfully(_ successfully: Bool)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Called by the handler to indicate that the sequence of hops (possibly changed) should be continued by another handler. -The handler is supposed to conform to MMMNavigationHandler protocol and this will be checked for in this method. -The parameter here is not described as id to make it more convenient to call this method.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)continueWithPath:(nonnull MMMNavigationPath *)path
    -                 handler:(nonnull id)handler;
    - -
    -
    -

    Swift

    -
    func `continue`(with path: MMMNavigationPath, handler: Any)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMNavigationStack.html b/Classes/MMMNavigationStack.html deleted file mode 100644 index 4a0cdc9..0000000 --- a/Classes/MMMNavigationStack.html +++ /dev/null @@ -1,447 +0,0 @@ - - - - MMMNavigationStack Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMNavigationStack

-
-
-

Objective-C

-
@interface MMMNavigationStack : NSObject
- -
-
-

Swift

-
class MMMNavigationStack : NSObject
- -
-
-

This is to track the navigation state of the app and have the possibility to programmatically return to registered points of - the navigation path. The actual navigation entities of the app (usually view controllers) must cooperate in order to - achieve this.

- -

The possibility to go back is needed to properly handle in-app links. We have a basic mechanism for this (MMMNavigation) - which allows to “open” a part of a link and forward the remaining parts to the corresponding handler down the navigation tree. - The handlers thus need to be able to “close” current navigation path before opening something new.

- -

Although navigation in the app is better represented by a tree, we assume here that at least the current path in this tree - can be represented as a stack. Each element of the stack can correspond to a modal view controller or alert view, for example, - but it can also correspond to a special state of the app or a screen.

- -
-
- -
-
-
-
    -
  • -
    - - - - +shared - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (instancetype)shared;
    - -
    -
    -

    Swift

    -
    class func shared() -> Self
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Notifies the stack about a new modal navigation context facing the user now, such as a modal view controller being presented or - any other special state of the UI which would require either the assistance from the user or navigation items’ delegate - in order to return to the previous navigation step.

    - -

    Again, navigation steps are not limited to modal view controllers, there can be any entity responsible for the current - state of the UI which wants to clean it up properly when asked for via the corresponding delegate.

    - -

    The optional controller parameter might be a view controller corresponding to the new navigation item. This can be used by - this controller with popAllAfterController:completion: method in order to cancel/pop all the navigation items added after it.

    - -

    A nil is returned if it’s not possible to push anything now (because the stack is in the middle of a change).

    - -

    For now trying to push something when “popping” is in progress is considered a programmer’s error however and it will crash - in Debug.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nullable id<MMMNavigationStackItem>)
    -    pushItemWithName:(nonnull NSString *)name
    -            delegate:(nonnull id<MMMNavigationStackItemDelegate>)delegate
    -          controller:(nullable id)controller;
    - -
    -
    -

    Swift

    -
    func pushItem(name: String, delegate: MMMNavigationStackItemDelegate, controller: Any?) -> MMMNavigationStackItem?
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (BOOL)popAllAfterController:(id)controller completion:(MMMNavigationStackCompletion)completion;
    - -
    -
    -

    Swift

    -
    func popAll(afterController controller: Any, completion: @escaping MMMNavigationStackCompletion) -> Bool
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMPaddedView.html b/Classes/MMMPaddedView.html deleted file mode 100644 index af32dca..0000000 --- a/Classes/MMMPaddedView.html +++ /dev/null @@ -1,514 +0,0 @@ - - - - MMMPaddedView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMPaddedView

-
-
-

Objective-C

-
@interface MMMPaddedView : UIView
- -
-
-

Swift

-
class MMMPaddedView : UIView
- -
-
-

Wraps a view padding it from all the sides.

- -
-
- -
-
-
-
    -
  • -
    - - - - view - -
    -
    -
    -
    -
    -
    -

    The view being wrapped.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) UIView *_Nonnull view;
    - -
    -
    -

    Swift

    -
    var view: UIView { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - insets - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) UIEdgeInsets insets
    - -
    -
    -

    Swift

    -
    var insets: UIEdgeInsets { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithView:insets: - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithView:(UIView *)view insets:(UIEdgeInsets)insets NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init(view: UIView, insets: UIEdgeInsets)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMScrollViewShadowView.html b/Classes/MMMScrollViewShadowView.html deleted file mode 100644 index a77d1ce..0000000 --- a/Classes/MMMScrollViewShadowView.html +++ /dev/null @@ -1,453 +0,0 @@ - - - - MMMScrollViewShadowView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMScrollViewShadowView

-
-
-

Objective-C

-
@interface MMMScrollViewShadowView : UIView
- -
-
-

Swift

-
class MMMScrollViewShadowView : UIView
- -
-
-

A view that’s used internally to render shadows in MMMAutoLayoutScrollView. -Open for reuse in cases we want to display compatible shadows but differntly controlled. -Note that this does not support Auto Layout, you have to manage its frame.

- -
-
- -
-
-
- -
-
-
- -
-
- - - diff --git a/Classes/MMMScrollViewShadows.html b/Classes/MMMScrollViewShadows.html deleted file mode 100644 index da86839..0000000 --- a/Classes/MMMScrollViewShadows.html +++ /dev/null @@ -1,491 +0,0 @@ - - - - MMMScrollViewShadows Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMScrollViewShadows

-
-
-

Objective-C

-
@interface MMMScrollViewShadows : NSObject
- -
-
-

Swift

-
class MMMScrollViewShadows : NSObject
- -
-
-

A helper for adding top and bottom shadows into any UIScrollView-based class. -You create an instance in your subclass and forward calls from layoutSubviews.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithScrollView:(nonnull UIScrollView *)scrollView
    -	settings:(nonnull MMMScrollViewShadowsSettings *)settings NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init(scrollView: UIScrollView, settings: MMMScrollViewShadowsSettings)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -layoutSubviews - -
    -
    -
    -
    -
    -
    -

    Have to be called from layoutSubviews of our scroll view subclass to update the state of the shadows.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)layoutSubviews;
    - -
    -
    -

    Swift

    -
    func layoutSubviews()
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    YES, if additional content view clipping might be needed for the current shadow settings.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (BOOL)mightNeedClippingView;
    - -
    -
    -

    Swift

    -
    func mightNeedClippingView() -> Bool
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Same as layoutSubviews above but also updates clipToBounds property of the given view in case there are visible

    - -
      -
    • shadows that are not flush with the edges of our scroll view, i.e. when top/bottomShadowShouldUseContentInsets
    • -
    • are used with settings and the corresponding insets are not zero now.
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)layoutSubviewsWithClippingView:(nullable UIView *)clippingView;
    - -
    -
    -

    Swift

    -
    func layoutSubviews(withClippingView clippingView: UIView?)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMScrollViewShadowsSettings.html b/Classes/MMMScrollViewShadowsSettings.html deleted file mode 100644 index 6f365df..0000000 --- a/Classes/MMMScrollViewShadowsSettings.html +++ /dev/null @@ -1,663 +0,0 @@ - - - - MMMScrollViewShadowsSettings Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMScrollViewShadowsSettings

-
-
-

Objective-C

-
@interface MMMScrollViewShadowsSettings : NSObject
- -
-
-

Swift

-
class MMMScrollViewShadowsSettings : NSObject
- -
-
-

Holds configuration for MMMScrollViewShadows that can be set only on initialization time.

- -
-
- -
-
-
-
    -
  • -
    - - - - shadowAlpha - -
    -
    -
    -
    -
    -
    -

    The base shadow color is black with this amount of transparency applied to it.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) CGFloat shadowAlpha;
    - -
    -
    -

    Swift

    -
    var shadowAlpha: CGFloat { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - shadowColor - -
    -
    -
    -
    -
    -
    -

    The base shadow color, ensure this is an RGB color. Note that the alpha channel is ignored, use shadowAlpha instead.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) UIColor *_Nonnull shadowColor;
    - -
    -
    -

    Swift

    -
    var shadowColor: UIColor { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - shadowCurvature - -
    -
    -
    -
    -
    -
    -

    The value between 0 and 1 telling how close to an elliptical curve the shadow’s border should be.

    - -
      -
    • when it’s 0, then the shadow is a normal rectangular one.

    • -
    • when it’s 1, then the gradient of the top (bottom) shadow forms an arc crossing the center of a shadow view and -its both corners.

    • -
    - -

    All values in-between adjust the point at which the gradient crosses the sides of the shadow views.

    - -

    (The default value is 0.5.)

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) CGFloat shadowCurvature;
    - -
    -
    -

    Swift

    -
    var shadowCurvature: CGFloat { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - topShadowEnabled - -
    -
    -
    -
    -
    -
    -

    Disabled by default.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) BOOL topShadowEnabled;
    - -
    -
    -

    Swift

    -
    var topShadowEnabled: Bool { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - topShadowHeight - -
    -
    -
    -
    -
    -
    -

    The height of the top shadow view. (5px by default.)

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) CGFloat topShadowHeight;
    - -
    -
    -

    Swift

    -
    var topShadowHeight: CGFloat { get set }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    YES, if the top shadow should be offset from the top edge of the scroll view by the top offset of content insets.

    - -
      -
    • The default value is NO.
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) BOOL topShadowShouldUseContentInsets;
    - -
    -
    -

    Swift

    -
    var topShadowShouldUseContentInsets: Bool { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - bottomShadowEnabled - -
    -
    -
    -
    -
    -
    -

    Disabled by default.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) BOOL bottomShadowEnabled;
    - -
    -
    -

    Swift

    -
    var bottomShadowEnabled: Bool { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - bottomShadowHeight - -
    -
    -
    -
    -
    -
    -

    The height of the bottom shadow view. (10px by default.)

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) CGFloat bottomShadowHeight;
    - -
    -
    -

    Swift

    -
    var bottomShadowHeight: CGFloat { get set }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    YES, if the bottom shadow should be offset from the bottom edge of the scroll view by the bottom offset of content insets.

    - -
      -
    • The default value is NO.
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) BOOL bottomShadowShouldUseContentInsets;
    - -
    -
    -

    Swift

    -
    var bottomShadowShouldUseContentInsets: Bool { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)init NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init()
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMShadowView.html b/Classes/MMMShadowView.html deleted file mode 100644 index 041e89e..0000000 --- a/Classes/MMMShadowView.html +++ /dev/null @@ -1,515 +0,0 @@ - - - - MMMShadowView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMShadowView

-
-
-

Objective-C

-
@interface MMMShadowView : UIView
- -
-
-

Swift

-
class MMMShadowView : UIView
- -
-
-

Helper view for adding custom layer shadows, while taking the the shadow sizes in conserderation for its final frame.

- -
-
- -
-
-
-
    -
  • -
    - - - - contentView - -
    -
    -
    -
    -
    -
    -

    View that can accepts and lay out subviews.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) UIView *_Nonnull contentView;
    - -
    -
    -

    Swift

    -
    var contentView: UIView { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - settings - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, nullable) NSArray<MMMShadowViewSetting *> *settings
    - -
    -
    -

    Swift

    -
    var settings: [MMMShadowViewSetting]? { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init;
    - -
    -
    -

    Swift

    -
    init()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithSettings: - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithSettings:(nullable NSArray<MMMShadowViewSetting *> *)settings;
    - -
    -
    -

    Swift

    -
    init(settings: [MMMShadowViewSetting]?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMShadowViewSetting.html b/Classes/MMMShadowViewSetting.html deleted file mode 100644 index 7f5bce6..0000000 --- a/Classes/MMMShadowViewSetting.html +++ /dev/null @@ -1,613 +0,0 @@ - - - - MMMShadowViewSetting Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMShadowViewSetting

-
-
-

Objective-C

-
@interface MMMShadowViewSetting : NSObject
- -
-
-

Swift

-
class MMMShadowViewSetting : NSObject
- -
-
-

Holds configuration for MMMShadowView.

- -
-
- -
-
-
-
    -
  • -
    - - - - color - -
    -
    -
    -
    -
    -
    -

    Default is black color.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) UIColor *_Nonnull color;
    - -
    -
    -

    Swift

    -
    var color: UIColor { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - opacity - -
    -
    -
    -
    -
    -
    -

    Default is 0.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) CGFloat opacity;
    - -
    -
    -

    Swift

    -
    var opacity: CGFloat { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - offset - -
    -
    -
    -
    -
    -
    -

    Default is zero.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) CGSize offset;
    - -
    -
    -

    Swift

    -
    var offset: CGSize { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - radius - -
    -
    -
    -
    -
    -
    -

    Default is 0.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) CGFloat radius;
    - -
    -
    -

    Swift

    -
    var radius: CGFloat { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - insets - -
    -
    -
    -
    -
    -
    -

    Default is zero.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) UIEdgeInsets insets;
    - -
    -
    -

    Swift

    -
    var insets: UIEdgeInsets { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - backgroundColor - -
    -
    -
    -
    -
    -
    -

    Default is white color.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) UIColor *_Nonnull backgroundColor;
    - -
    -
    -

    Swift

    -
    var backgroundColor: UIColor { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - cornerRadius - -
    -
    -
    -
    -
    -
    -

    Default is 0.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) CGFloat cornerRadius;
    - -
    -
    -

    Swift

    -
    var cornerRadius: CGFloat { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init;
    - -
    -
    -

    Swift

    -
    init()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithBlock: - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithBlock:(MMMShadowViewSettingBlock)block;
    - -
    -
    -

    Swift

    -
    init(block: @escaping MMMShadowViewSettingBlock)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMSpacerView.html b/Classes/MMMSpacerView.html deleted file mode 100644 index f694540..0000000 --- a/Classes/MMMSpacerView.html +++ /dev/null @@ -1,422 +0,0 @@ - - - - MMMSpacerView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMSpacerView

-
-
-

Objective-C

-
@interface MMMSpacerView : UIView
- -
-
-

Swift

-
class MMMSpacerView : UIView
- -
-
-

Auto Layout does not support relationships between empty spaces, so we need to use spacer views and set such -constraints between them. This one is a transparent and by default hidden view which can be used as such a spacer. -It has no intrinsic size and low content hugging and compression resistance priorities. -Unlike UIView we have translatesAutoresizingMaskIntoConstraints set to NO already.

- -
-
- -
-
-
-
    -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)init NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMStackContainer.html b/Classes/MMMStackContainer.html deleted file mode 100644 index 9babeb7..0000000 --- a/Classes/MMMStackContainer.html +++ /dev/null @@ -1,490 +0,0 @@ - - - - MMMStackContainer Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMStackContainer

-
-
-

Objective-C

-
@interface MMMStackContainer : UIView
- -
-
-

Swift

-
class MMMStackContainer : UIView
- -
-
-

A container which lays out its subviews in certain direction one after another using fixed spacing between them. -It also aligns all the items along the layout line according to the given alignment settings. -Note that you must use setSubviews: method instead of feeding them one by one via addSubview:. -This is kind of a UIStackView that we understand the internals of.

- -
-
- -
-
-
-
    -
  • -
    - - - - -setSubviews: - -
    -
    -
    -
    -
    -
    -

    Sets subviews to be laid out. Previously set subviews will be removed from this container first.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)setSubviews:(nonnull NSArray<UIView *> *)subviews;
    - -
    -
    -

    Swift

    -
    func setSubviews(_ subviews: [UIView])
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Insets define the padding around all the subviews. -Alignment influences horizontal constraints added for the subviews. -Spacing is the fixed distance to set between items.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithDirection:(MMMLayoutDirection)direction
    -                         insets:(UIEdgeInsets)insets
    -                      alignment:(MMMLayoutAlignment)alignment
    -                        spacing:(CGFloat)spacing;
    - -
    -
    -

    Swift

    -
    init(direction: MMMLayoutDirection, insets: UIEdgeInsets, alignment: MMMLayoutAlignment, spacing: CGFloat)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMStubView.html b/Classes/MMMStubView.html deleted file mode 100644 index 1ab5c0f..0000000 --- a/Classes/MMMStubView.html +++ /dev/null @@ -1,452 +0,0 @@ - - - - MMMStubView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMStubView

-
-
-

Objective-C

-
@interface MMMStubView : UIScrollView
- -
-
-

Swift

-
class MMMStubView : UIScrollView
- -
-
-

To be used during development as a placeholder for not yet implemented views. -It inherits a vertical scroll view so it’s possible to see that gesture recognizers of the container do not interfere -with a typical scrolling.

- -
-
- -
-
-
-
    -
  • -
    - - - - -initWithText:index: - -
    -
    -
    -
    -
    -
    -

    The text is optional, the index influences the background color.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithText:(nullable NSString *)text index:(NSInteger)index;
    - -
    -
    -

    Swift

    -
    init(text: String?, index: Int)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMStubViewController.html b/Classes/MMMStubViewController.html deleted file mode 100644 index a981f7a..0000000 --- a/Classes/MMMStubViewController.html +++ /dev/null @@ -1,450 +0,0 @@ - - - - MMMStubViewController Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMStubViewController

-
-
-

Objective-C

-
@interface MMMStubViewController : UIViewController
- -
-
-

Swift

-
class MMMStubViewController : UIViewController
- -
-
-

This is to be used during development to stub not ready yet parts of the app.

- -
-
- -
-
-
-
    -
  • -
    - - - - -initWithText:index: - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithText:(NSString *)text index:(NSInteger)index NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init(text: String, index: Int)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMStylesheet.html b/Classes/MMMStylesheet.html deleted file mode 100644 index 84ba321..0000000 --- a/Classes/MMMStylesheet.html +++ /dev/null @@ -1,931 +0,0 @@ - - - - MMMStylesheet Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMStylesheet

-
-
-

Objective-C

-
@interface MMMStylesheet : NSObject
- -
-
-

Swift

-
class MMMStylesheet : NSObject
- -
-
-

A base for app-specific stylesheets: commonly used paddings, colors, fonts, etc in a single place.

- -
-
- -
-
-
-
    -
  • -
    - - - - currentSizeClass - -
    -
    -
    -
    -
    -
    -

    The size class of the current device. See the MMSize* string constants below.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) NSString *_Nonnull currentSizeClass;
    - -
    -
    -

    Swift

    -
    var currentSizeClass: String { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Allows to avoid code that picks values (fonts, sizes, etc) by explicitely matching currentSizeClass. -A mapping of size classes to values is passed here instead and a match is returned, falling back either to the value -under MMMSizeRest key, or, if it is not present, to the value under the key that seems the closest to the current -size class.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)valueForCurrentSizeClass:
    -    (nonnull NSDictionary<NSString *, id> *)sizeClassToValue;
    - -
    -
    -

    Swift

    -
    func value(forCurrentSizeClass sizeClassToValue: [String : Any]) -> Any
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A version of valueForCurrentSizeClass: unwrapping the result as a float, which is handy for numeric values.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (CGFloat)floatForCurrentSizeClass:
    -    (nonnull NSDictionary<NSString *, NSNumber *> *)sizeClassToValue;
    - -
    -
    -

    Swift

    -
    func float(forCurrentSizeClass sizeClassToValue: [String : NSNumber]) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    -

    Try using widthBasedConverter instead or a custom converter if you relied on 2 dimensions

    - -
    -
    -

    Deprecated. -Similar to floatForCurrentSizeClass: but instead of falling back to the value under MMMSizeRest key -it tries to extrapolate the requested dimension using 1 or 2 values provided for other size classes using -the widthBasedConverter.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (CGFloat)extrapolatedFloatForCurrentSizeClass:
    -    (nonnull NSDictionary<NSString *, NSNumber *> *)sizeClassToValue;
    - -
    -
    -

    Swift

    -
    func extrapolatedFloat(forCurrentSizeClass sizeClassToValue: [String : NSNumber]) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    -

    The code using this might be confusing and/or hard to support. If you need to specify values for different size classes, then list them all explicitly in a call to floatForCurrentSizeClass:

    - -
    -
    -

    Deprecated. -Similar to extrapolatedFloatForCurrentSizeClass:, but allows to override values for certain size classes -in the exceptions paramater.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (CGFloat)extrapolatedFloatForCurrentSizeClass:
    -               (nonnull NSDictionary<NSString *, NSNumber *> *)sizeClassToValue
    -                                         except:
    -                                             (nonnull NSDictionary *)exceptions;
    - -
    -
    -

    Swift

    -
    func extrapolatedFloat(forCurrentSizeClass sizeClassToValue: [String : NSNumber], except exceptions: [AnyHashable : Any]) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - widthBasedConverter - -
    -
    -
    -
    -
    -
    -

    Converts dimensions given for one size class into dimensions suitable for the current size class -based on the ratio of screen widths associated with the current and source size classes.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) id<MMMStylesheetConverter> _Nonnull widthBasedConverter;
    - -
    -
    -

    Swift

    -
    var widthBasedConverter: MMMStylesheetConverter { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A standard set of paddings. -The actual stylesheet should override all these or at least the normalPadding. -They are defined here so insetsFromRelativeInsets can be defined here as well. -In case only normalPadding is overriden then the rest will be calculated based on it using sqrt(2) as a multiplier, -so every second padding is exactly 2x larger.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) CGFloat extraExtraSmallPadding;
    - -
    -
    -

    Swift

    -
    var extraExtraSmallPadding: CGFloat { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - extraSmallPadding - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) CGFloat extraSmallPadding
    - -
    -
    -

    Swift

    -
    var extraSmallPadding: CGFloat { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - smallPadding - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) CGFloat smallPadding
    - -
    -
    -

    Swift

    -
    var smallPadding: CGFloat { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - normalPadding - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) CGFloat normalPadding
    - -
    -
    -

    Swift

    -
    var normalPadding: CGFloat { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - largePadding - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) CGFloat largePadding
    - -
    -
    -

    Swift

    -
    var largePadding: CGFloat { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - extraLargePadding - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) CGFloat extraLargePadding
    - -
    -
    -

    Swift

    -
    var extraLargePadding: CGFloat { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Actual insets from relative ones.

    - -

    Each offset in relative insets is a fixed number corresponding to the actual paddings defined above:

    - -
      -
    • .125 - extraExtraSmallPadding
    • -
    • .25 — extraSmallPadding
    • -
    • .5 — smallPadding
    • -
    • 1 — normalPadding
    • -
    • 2 — largePadding
    • -
    • 4 — extraLargePadding
    • -
    - -

    Note that the large padding is not necessarily 2x larger than the normal one, etc (by default the extra large is), - but we intentionally use them here like this to allow more compact notation for insets which is easy to remember and - easy to tweak. Compare, for example:

    - -

    \code - UIEdgeInsetsMake([MHStylesheet shared].normalPadding, [MHStylesheet shared].largePadding, [MHStylesheet shared].normalPadding, [MHStylesheet shared].largePadding) - \endcode

    - -

    and the equivalent:

    - -

    \code - [[MHStylesheet shared] insetsFromRelativeInsets:UIEdgeInsetsMake(1, 2, 1, 2)] - \endcode

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (UIEdgeInsets)insetsFromRelativeInsets:(UIEdgeInsets)insets;
    - -
    -
    -

    Swift

    -
    func insets(fromRelativeInsets insets: UIEdgeInsets) -> UIEdgeInsets
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    This is what insetsFromRelativeInsets: is using internally. Might be useful when making similar methods.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (CGFloat)paddingFromRelativePadding:(CGFloat)padding;
    - -
    -
    -

    Swift

    -
    func padding(fromRelativePadding padding: CGFloat) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A metrics dictionary that can be used with Auto Layout with keys/values corresponding to all the paddings we support, -e.g. “extraSmallPadding”, etc.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSDictionary<NSString *, NSNumber *> *)dictionaryWithPaddings;
    - -
    -
    -

    Swift

    -
    func dictionaryWithPaddings() -> [String : NSNumber]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A dictionary with 4 values under keys “Top”, “Bottom”, “Left”, “Right” -corresponding to the insets obtained from the provided relative ones via insetsFromRelativeInsets:. -(A shortcut composing insetsFromRelativeInsets method with MMMDictinaryFromUIEdgeInsets().)

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSDictionary<NSString *, NSNumber *> *)
    -    dictionaryFromRelativeInsets:(UIEdgeInsets)insets
    -                       keyPrefix:(nonnull NSString *)keyPrefix;
    - -
    -
    -

    Swift

    -
    func dictionary(fromRelativeInsets insets: UIEdgeInsets, keyPrefix: String) -> [String : NSNumber]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A dictionary with 4 values obtained from the insets returned by insetsFromRelativeInsets:insets -under the keys “paddingTop”, “paddingBottom”, “paddingLeft”, “paddingRight”, -i.e. it’s a shortcut for dictionaryFromRelativeInsets:insets keyPrefix:@"padding".

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSDictionary<NSString *, NSNumber *> *)
    -    paddingDictionaryFromRelativeInsets:(UIEdgeInsets)insets;
    - -
    -
    -

    Swift

    -
    func paddingDictionary(fromRelativeInsets insets: UIEdgeInsets) -> [String : NSNumber]
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMStylesheetScaleConverter.html b/Classes/MMMStylesheetScaleConverter.html deleted file mode 100644 index 703aa38..0000000 --- a/Classes/MMMStylesheetScaleConverter.html +++ /dev/null @@ -1,433 +0,0 @@ - - - - MMMStylesheetScaleConverter Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMStylesheetScaleConverter

-
-
-

Objective-C

-
@interface MMMStylesheetScaleConverter : NSObject <MMMStylesheetConverter>
- -
-
-

Swift

-
class MMMStylesheetScaleConverter : NSObject, MMMStylesheetConverter
- -
-
-

Dimension converter that uses a table of scales.

- -
-
- -
-
-
-
    -
  • -
    - - - - -initWithScales: - -
    -
    -
    -
    -
    -
    -

    Initializes the converter with an explicit table of scales. -Every value coming to convertFloat:fromSizeClass: will be returned multiplied by scales[sourceSizeClass].

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithScales:
    -    (nonnull NSDictionary<NSString *, NSNumber *> *)scales;
    - -
    -
    -

    Swift

    -
    init(scales: [String : NSNumber])
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Initializes the converter with a target size class and a table of dimensions associated with every size class - (e.g screen width).

    - -

    Every value coming to convertFloat:fromSizeClass: will be returned adjusted proportionally to the ratio of the - dimensions associated with target and source size classes, i.e. it will be multiplied by - scales[targetSizeClass] / scales[sourceSizeClass].

    - -

    So for a table of screen widths the converter will upscale or downscale dimensions between size classes - proprtionally to the ratios of screen width associated with size classes.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithTargetSizeClass:(nonnull NSString *)targetSizeClass
    -                           dimensions:
    -                               (nonnull NSDictionary<NSString *, NSNumber *> *)
    -                                   dimensions;
    - -
    -
    -

    Swift

    -
    convenience init(targetSizeClass: String, dimensions: [String : NSNumber])
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMTableView.html b/Classes/MMMTableView.html deleted file mode 100644 index 73f79f1..0000000 --- a/Classes/MMMTableView.html +++ /dev/null @@ -1,548 +0,0 @@ - - - - MMMTableView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMTableView

-
-
-

Objective-C

-
@interface MMMTableView : UITableView <MMMPreferredSizeChanges>
- -
-
-

Swift

-
class MMMTableView : UITableView, MMMPreferredSizeChanges
- -
-
-

A table view supporting top and bottom shadows.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithSettings:(nonnull MMMScrollViewShadowsSettings *)settings
    -                         style:(UITableViewStyle)style;
    - -
    -
    -

    Swift

    -
    init(settings: MMMScrollViewShadowsSettings, style: UITableView.Style)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithSettings: - -
    -
    -
    -
    -
    -
    -

    Note that UITableViewStylePlain is used.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithSettings:(nonnull MMMScrollViewShadowsSettings *)settings;
    - -
    -
    -

    Swift

    -
    init(settings: MMMScrollViewShadowsSettings)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame:style: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (instancetype)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    When enabled, then reloadData is automatically called whenever any of the cells report potential size -changes via mmm_setPreferredSizeCouldChange. See MMMPreferredSizeChanges for more info.

    - -

    This feature is disabled by default for compatibility with the current code.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) BOOL shouldHandlePotentialCellSizeChanges;
    - -
    -
    -

    Swift

    -
    var shouldHandlePotentialCellSizeChanges: Bool { get set }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMTableViewCell.html b/Classes/MMMTableViewCell.html deleted file mode 100644 index 5342ba5..0000000 --- a/Classes/MMMTableViewCell.html +++ /dev/null @@ -1,482 +0,0 @@ - - - - MMMTableViewCell Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMTableViewCell

-
-
-

Objective-C

-
@interface MMMTableViewCell : UITableViewCell
- -
-
-

Swift

-
class MMMTableViewCell : UITableViewCell
- -
-
-

A base for table view cells redeclareing the designated initializer into the one we typically use, -so subclasses do not have to.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithReuseIdentifier:(NSString *)reuseIdentifier NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init!(reuseIdentifier: String!)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMVelocityMeter.html b/Classes/MMMVelocityMeter.html deleted file mode 100644 index 9f36861..0000000 --- a/Classes/MMMVelocityMeter.html +++ /dev/null @@ -1,455 +0,0 @@ - - - - MMMVelocityMeter Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMVelocityMeter

-
-
-

Objective-C

-
@interface MMMVelocityMeter : NSObject
- -
-
-

Swift

-
class MMMVelocityMeter : NSObject
- -
-
-

A little helper for velocity/acceleration calculations: you feed it values with timestamps and can get the most recent -acceleration/velocity values.

- -
-
- -
-
-
-
    -
  • -
    - - - - -reset - -
    -
    -
    -
    -
    -
    -

    Resets the state of the meter, all values added before are forgotten.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)reset;
    - -
    -
    -

    Swift

    -
    func reset()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -addValue:timestamp: - -
    -
    -
    -
    -
    -
    -

    Adds a coordinate and a corresponding timestamp.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)addValue:(CGFloat)value timestamp:(NSTimeInterval)timestamp;
    - -
    -
    -

    Swift

    -
    func addValue(_ value: CGFloat, timestamp: TimeInterval)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -addValue: - -
    -
    -
    -
    -
    -
    -

    Adds a coordinate with the current timstamp.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)addValue:(CGFloat)value;
    - -
    -
    -

    Swift

    -
    func addValue(_ value: CGFloat)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Calculates velocity and acceleration based on recently added values.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)calculateVelocity:(nonnull CGFloat *)velocity
    -             acceleration:(nonnull CGFloat *)acceleration;
    - -
    -
    -

    Swift

    -
    func calculateVelocity(_ velocity: UnsafeMutablePointer<CGFloat>, acceleration: UnsafeMutablePointer<CGFloat>)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMVerticalGradientView.html b/Classes/MMMVerticalGradientView.html deleted file mode 100644 index 245f6ab..0000000 --- a/Classes/MMMVerticalGradientView.html +++ /dev/null @@ -1,483 +0,0 @@ - - - - MMMVerticalGradientView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMVerticalGradientView

-
-
-

Objective-C

-
@interface MMMVerticalGradientView : UIView
- -
-
-

Swift

-
class MMMVerticalGradientView : UIView
- -
-
-

A view displaying a gradient from top to bottom. The linearity of the gradient can be controlled. -Can be handy for shadow overlays, etc.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithTopColor:(UIColor *)topColor bottomColor:(UIColor *)bottomColor curve:(MMMAnimationCurve)curve NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init(topColor: UIColor, bottomColor: UIColor, curve: MMMAnimationCurve)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithTopColor:(UIColor *)topColor bottomColor:(UIColor *)bottomColor;
    - -
    -
    -

    Swift

    -
    convenience init(topColor: UIColor, bottomColor: UIColor)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Classes/MMMVerticalStackContainer.html b/Classes/MMMVerticalStackContainer.html deleted file mode 100644 index d215071..0000000 --- a/Classes/MMMVerticalStackContainer.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - MMMVerticalStackContainer Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMVerticalStackContainer

-
-
-

Objective-C

-
@interface MMMVerticalStackContainer : MMMStackContainer
- -
-
-

Swift

-
class MMMVerticalStackContainer : MMMStackContainer
- -
-
-

Vertical version of MMMStackContainer.

- -
-
- -
-
-
- -
-
-
- -
-
- - - diff --git a/Classes/MMMViewWrappingCell.html b/Classes/MMMViewWrappingCell.html deleted file mode 100644 index 1df566f..0000000 --- a/Classes/MMMViewWrappingCell.html +++ /dev/null @@ -1,457 +0,0 @@ - - - - MMMViewWrappingCell Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMViewWrappingCell

-
-
-

Objective-C

-
@interface MMMViewWrappingCell<ViewType> : MMMTableViewCell
- -
-
-

Swift

-
class MMMViewWrappingCell<ViewType> : MMMTableViewCell where ViewType : AnyObject
- -
-
-

A simple table view cell wrapping the given view.

- -

This is handy when you have a view already and just want to show it as one more cell.

- -

The view being wrapped should support Auto Layout and inflate its height properly. The cell has its selectionStyle - set to UITableViewCellSelectionStyleNone as these kind of cells typically do not appear selected.

- -
-
- -
-
-
-
    -
  • -
    - - - - wrappedView - -
    -
    -
    -
    -
    -
    -

    The view this cell wraps. It is added into the contentView and is laid out to fully fill it.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) ViewType _Nonnull wrappedView;
    - -
    -
    -

    Swift

    -
    var wrappedView: ViewType { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithView:(ViewType)view reuseIdentifier:(NSString *)reuseIdentifier;
    - -
    -
    -

    Swift

    -
    init(view: ViewType, reuseIdentifier: String)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithView:(ViewType)view reuseIdentifier:(NSString *)reuseIdentifier inset:(UIEdgeInsets)inset;
    - -
    -
    -

    Swift

    -
    init(view: ViewType, reuseIdentifier: String, inset: UIEdgeInsets)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithReuseIdentifier:(NSString *)reuseIdentifier NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Constants.html b/Constants.html deleted file mode 100644 index cdf1fc1..0000000 --- a/Constants.html +++ /dev/null @@ -1,537 +0,0 @@ - - - - Constants Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

Constants

-

The following constants are available globally.

- -
-
- -
-
-
-
    -
  • -
    - - - - MMMGolden - -
    -
    -
    -
    -
    -
    -

    Golden ratio constant.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern const CGFloat MMMGolden
    - -
    -
    -

    Swift

    -
    class let golden: CGFloat
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMInverseGolden - -
    -
    -
    -
    -
    -
    -

    1 divided by golden ratio.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern const CGFloat MMMInverseGolden
    - -
    -
    -

    Swift

    -
    class let inverseGolden: CGFloat
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMSizeClassic - -
    -
    -
    -
    -
    -
    -

    Small screen phones: iPhone 4/4s/5/5s/SE.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern NSString *const _Nonnull MMMSizeClassic
    - -
    -
    -

    Swift

    -
    let MMMSizeClassic: String
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMSize6 - -
    -
    -
    -
    -
    -
    -

    Regular phones: iPhone 6/6s/7/8 and X as well.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern NSString *const _Nonnull MMMSize6
    - -
    -
    -

    Swift

    -
    let MMMSize6: String
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMSize6Plus - -
    -
    -
    -
    -
    -
    -

    Pluse-sized phones: iPhone 6/7/8 Plus.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern NSString *const _Nonnull MMMSize6Plus
    - -
    -
    -

    Swift

    -
    let MMMSize6Plus: String
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMSizePad - -
    -
    -
    -
    -
    -
    -

    iPads: regular and pros.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern NSString *const _Nonnull MMMSizePad
    - -
    -
    -

    Swift

    -
    let MMMSizePad: String
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMSizeRest - -
    -
    -
    -
    -
    -
    -

    Not the actual size class, but can be used as a key valueForCurrentSizeClass: and related methods for a fallback value.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern NSString *const _Nonnull MMMSizeRest
    - -
    -
    -

    Swift

    -
    let MMMSizeRest: String
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Enums.html b/Enums.html deleted file mode 100644 index 617d7c2..0000000 --- a/Enums.html +++ /dev/null @@ -1,562 +0,0 @@ - - - - Enumerations Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

Enumerations

-

The following enumerations are available globally.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    NS_ENUM(NSInteger, MMMScrollViewShadowAlignment) {
    -	MMMScrollViewShadowAlignmentTop,
    -	MMMScrollViewShadowAlignmentBottom
    -}
    - -
    -
    -

    Swift

    -
    enum MMMScrollViewShadowAlignment : Int, @unchecked Sendable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMAnimationCurve - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    NS_ENUM(NSInteger, MMMAnimationCurve) {
    -
    -	MMMAnimationCurveLinear,
    -	MMMAnimationCurveEaseOut,
    -	MMMAnimationCurveEaseIn,
    -	MMMAnimationCurveEaseInOut,
    -
    -	// "Softer" versions are closer to the linear curve.
    -	MMMAnimationCurveSofterEaseIn,
    -	MMMAnimationCurveSofterEaseOut,
    -	MMMAnimationCurveSofterEaseInOut,
    -	
    -	// Quad animations (e.g. https://easings.net/#easeInQuad)
    -	MMMAnimationCurveEaseInQuad,
    -	MMMAnimationCurveEaseOutQuad,
    -	MMMAnimationCurveEaseInOutQuad,
    -	
    -	// Cubic animations (e.g. https://easings.net/#easeInCubic)
    -	MMMAnimationCurveEaseInCubic,
    -	MMMAnimationCurveEaseOutCubic,
    -	MMMAnimationCurveEaseInOutCubic,
    -	
    -	// Quart animations (e.g. https://easings.net/#easeInQuart)
    -	MMMAnimationCurveEaseInQuart,
    -	MMMAnimationCurveEaseOutQuart,
    -	MMMAnimationCurveEaseInOutQuart,
    -	
    -	// Quint animations (e.g. https://easings.net/#easeInQuint)
    -	MMMAnimationCurveEaseInQuint,
    -	MMMAnimationCurveEaseOutQuint,
    -	MMMAnimationCurveEaseInOutQuint
    -}
    - -
    -
    -

    Swift

    -
    enum MMMAnimationCurve : Int, @unchecked Sendable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMLayoutAlignment - -
    -
    -
    -
    -
    -
    -

    General alignment flags used when it’s not important which direction (vertical or horizontal) the alignment is for.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    enum MMMLayoutAlignment : NSInteger {}
    - -
    -
    -

    Swift

    -
    enum MMMLayoutAlignment : Int, @unchecked Sendable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMLayoutDirection - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    NS_ENUM(NSInteger, MMMLayoutDirection) {
    -	MMMLayoutDirectionHorizontal,
    -	MMMLayoutDirectionVertical
    -}
    - -
    -
    -

    Swift

    -
    enum MMMLayoutDirection : Int, @unchecked Sendable
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    NS_ENUM(NSInteger, MMMLayoutHorizontalAlignment) {
    -	MMMLayoutHorizontalAlignmentNone = MMMLayoutAlignmentNone,
    -	MMMLayoutHorizontalAlignmentLeft = MMMLayoutAlignmentLeading,
    -	MMMLayoutHorizontalAlignmentGolden = MMMLayoutAlignmentGolden,
    -	MMMLayoutHorizontalAlignmentCenter = MMMLayoutAlignmentCenter,
    -	MMMLayoutHorizontalAlignmentRight = MMMLayoutAlignmentTrailing,
    -	MMMLayoutHorizontalAlignmentFill = MMMLayoutAlignmentFill
    -}
    - -
    -
    -

    Swift

    -
    enum MMMLayoutHorizontalAlignment : Int, @unchecked Sendable
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    NS_ENUM(NSInteger, MMMLayoutVerticalAlignment) {
    -	MMMLayoutVerticalAlignmentNone = MMMLayoutAlignmentNone,
    -	MMMLayoutVerticalAlignmentTop = MMMLayoutAlignmentLeading,
    -	MMMLayoutVerticalAlignmentGolden = MMMLayoutAlignmentGolden,
    -	MMMLayoutVerticalAlignmentCenter = MMMLayoutAlignmentCenter,
    -	MMMLayoutVerticalAlignmentBottom = MMMLayoutAlignmentTrailing,
    -	MMMLayoutVerticalAlignmentFill = MMMLayoutAlignmentFill
    -}
    - -
    -
    -

    Swift

    -
    enum MMMLayoutVerticalAlignment : Int, @unchecked Sendable
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Enums/MMMAnimationCurve.html b/Enums/MMMAnimationCurve.html deleted file mode 100644 index f06e49c..0000000 --- a/Enums/MMMAnimationCurve.html +++ /dev/null @@ -1,964 +0,0 @@ - - - - MMMAnimationCurve Enumeration Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMAnimationCurve

-
-
-

Objective-C

-
NS_ENUM(NSInteger, MMMAnimationCurve) {
-
-	MMMAnimationCurveLinear,
-	MMMAnimationCurveEaseOut,
-	MMMAnimationCurveEaseIn,
-	MMMAnimationCurveEaseInOut,
-
-	// "Softer" versions are closer to the linear curve.
-	MMMAnimationCurveSofterEaseIn,
-	MMMAnimationCurveSofterEaseOut,
-	MMMAnimationCurveSofterEaseInOut,
-	
-	// Quad animations (e.g. https://easings.net/#easeInQuad)
-	MMMAnimationCurveEaseInQuad,
-	MMMAnimationCurveEaseOutQuad,
-	MMMAnimationCurveEaseInOutQuad,
-	
-	// Cubic animations (e.g. https://easings.net/#easeInCubic)
-	MMMAnimationCurveEaseInCubic,
-	MMMAnimationCurveEaseOutCubic,
-	MMMAnimationCurveEaseInOutCubic,
-	
-	// Quart animations (e.g. https://easings.net/#easeInQuart)
-	MMMAnimationCurveEaseInQuart,
-	MMMAnimationCurveEaseOutQuart,
-	MMMAnimationCurveEaseInOutQuart,
-	
-	// Quint animations (e.g. https://easings.net/#easeInQuint)
-	MMMAnimationCurveEaseInQuint,
-	MMMAnimationCurveEaseOutQuint,
-	MMMAnimationCurveEaseInOutQuint
-}
- -
-
-

Swift

-
enum MMMAnimationCurve : Int, @unchecked Sendable
- -
-
-

Undocumented

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveLinear
    - -
    -
    -

    Swift

    -
    case linear = 0
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseOut
    - -
    -
    -

    Swift

    -
    case easeOut = 1
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseIn
    - -
    -
    -

    Swift

    -
    case easeIn = 2
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInOut
    - -
    -
    -

    Swift

    -
    case easeInOut = 3
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveSofterEaseIn
    - -
    -
    -

    Swift

    -
    case softerEaseIn = 4
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveSofterEaseOut
    - -
    -
    -

    Swift

    -
    case softerEaseOut = 5
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveSofterEaseInOut
    - -
    -
    -

    Swift

    -
    case softerEaseInOut = 6
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInQuad
    - -
    -
    -

    Swift

    -
    case easeInQuad = 7
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseOutQuad
    - -
    -
    -

    Swift

    -
    case easeOutQuad = 8
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInOutQuad
    - -
    -
    -

    Swift

    -
    case easeInOutQuad = 9
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInCubic
    - -
    -
    -

    Swift

    -
    case easeInCubic = 10
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseOutCubic
    - -
    -
    -

    Swift

    -
    case easeOutCubic = 11
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInOutCubic
    - -
    -
    -

    Swift

    -
    case easeInOutCubic = 12
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInQuart
    - -
    -
    -

    Swift

    -
    case easeInQuart = 13
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseOutQuart
    - -
    -
    -

    Swift

    -
    case easeOutQuart = 14
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInOutQuart
    - -
    -
    -

    Swift

    -
    case easeInOutQuart = 15
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInQuint
    - -
    -
    -

    Swift

    -
    case easeInQuint = 16
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseOutQuint
    - -
    -
    -

    Swift

    -
    case easeOutQuint = 17
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInOutQuint
    - -
    -
    -

    Swift

    -
    case easeInOutQuint = 18
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Enums/MMMLayoutAlignment.html b/Enums/MMMLayoutAlignment.html deleted file mode 100644 index d4372c4..0000000 --- a/Enums/MMMLayoutAlignment.html +++ /dev/null @@ -1,517 +0,0 @@ - - - - MMMLayoutAlignment Enumeration Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMLayoutAlignment

-
-
-

Objective-C

-
enum MMMLayoutAlignment : NSInteger {}
- -
-
-

Swift

-
enum MMMLayoutAlignment : Int, @unchecked Sendable
- -
-
-

General alignment flags used when it’s not important which direction (vertical or horizontal) the alignment is for.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutAlignmentNone
    - -
    -
    -

    Swift

    -
    case none = 0
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutAlignmentLeading
    - -
    -
    -

    Swift

    -
    case leading = 1
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutAlignmentGolden
    - -
    -
    -

    Swift

    -
    case golden = 2
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutAlignmentCenter
    - -
    -
    -

    Swift

    -
    case center = 3
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutAlignmentTrailing
    - -
    -
    -

    Swift

    -
    case trailing = 4
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutAlignmentFill
    - -
    -
    -

    Swift

    -
    case fill = 5
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Enums/MMMLayoutDirection.html b/Enums/MMMLayoutDirection.html deleted file mode 100644 index 53133cc..0000000 --- a/Enums/MMMLayoutDirection.html +++ /dev/null @@ -1,392 +0,0 @@ - - - - MMMLayoutDirection Enumeration Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMLayoutDirection

-
-
-

Objective-C

-
NS_ENUM(NSInteger, MMMLayoutDirection) {
-	MMMLayoutDirectionHorizontal,
-	MMMLayoutDirectionVertical
-}
- -
-
-

Swift

-
enum MMMLayoutDirection : Int, @unchecked Sendable
- -
-
-

Undocumented

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutDirectionHorizontal
    - -
    -
    -

    Swift

    -
    case horizontal = 0
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutDirectionVertical
    - -
    -
    -

    Swift

    -
    case vertical = 1
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Enums/MMMLayoutHorizontalAlignment.html b/Enums/MMMLayoutHorizontalAlignment.html deleted file mode 100644 index 7592e65..0000000 --- a/Enums/MMMLayoutHorizontalAlignment.html +++ /dev/null @@ -1,524 +0,0 @@ - - - - MMMLayoutHorizontalAlignment Enumeration Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMLayoutHorizontalAlignment

-
-
-

Objective-C

-
NS_ENUM(NSInteger, MMMLayoutHorizontalAlignment) {
-	MMMLayoutHorizontalAlignmentNone = MMMLayoutAlignmentNone,
-	MMMLayoutHorizontalAlignmentLeft = MMMLayoutAlignmentLeading,
-	MMMLayoutHorizontalAlignmentGolden = MMMLayoutAlignmentGolden,
-	MMMLayoutHorizontalAlignmentCenter = MMMLayoutAlignmentCenter,
-	MMMLayoutHorizontalAlignmentRight = MMMLayoutAlignmentTrailing,
-	MMMLayoutHorizontalAlignmentFill = MMMLayoutAlignmentFill
-}
- -
-
-

Swift

-
enum MMMLayoutHorizontalAlignment : Int, @unchecked Sendable
- -
-
-

Undocumented

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutHorizontalAlignmentNone = MMMLayoutAlignmentNone
    - -
    -
    -

    Swift

    -
    case none = 0
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutHorizontalAlignmentLeft = MMMLayoutAlignmentLeading
    - -
    -
    -

    Swift

    -
    case left = 1
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutHorizontalAlignmentGolden = MMMLayoutAlignmentGolden
    - -
    -
    -

    Swift

    -
    case golden = 2
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutHorizontalAlignmentCenter = MMMLayoutAlignmentCenter
    - -
    -
    -

    Swift

    -
    case center = 3
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutHorizontalAlignmentRight = MMMLayoutAlignmentTrailing
    - -
    -
    -

    Swift

    -
    case right = 4
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutHorizontalAlignmentFill = MMMLayoutAlignmentFill
    - -
    -
    -

    Swift

    -
    case fill = 5
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Enums/MMMLayoutVerticalAlignment.html b/Enums/MMMLayoutVerticalAlignment.html deleted file mode 100644 index 06e2ec3..0000000 --- a/Enums/MMMLayoutVerticalAlignment.html +++ /dev/null @@ -1,524 +0,0 @@ - - - - MMMLayoutVerticalAlignment Enumeration Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMLayoutVerticalAlignment

-
-
-

Objective-C

-
NS_ENUM(NSInteger, MMMLayoutVerticalAlignment) {
-	MMMLayoutVerticalAlignmentNone = MMMLayoutAlignmentNone,
-	MMMLayoutVerticalAlignmentTop = MMMLayoutAlignmentLeading,
-	MMMLayoutVerticalAlignmentGolden = MMMLayoutAlignmentGolden,
-	MMMLayoutVerticalAlignmentCenter = MMMLayoutAlignmentCenter,
-	MMMLayoutVerticalAlignmentBottom = MMMLayoutAlignmentTrailing,
-	MMMLayoutVerticalAlignmentFill = MMMLayoutAlignmentFill
-}
- -
-
-

Swift

-
enum MMMLayoutVerticalAlignment : Int, @unchecked Sendable
- -
-
-

Undocumented

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutVerticalAlignmentNone = MMMLayoutAlignmentNone
    - -
    -
    -

    Swift

    -
    case none = 0
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutVerticalAlignmentTop = MMMLayoutAlignmentLeading
    - -
    -
    -

    Swift

    -
    case top = 1
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutVerticalAlignmentGolden = MMMLayoutAlignmentGolden
    - -
    -
    -

    Swift

    -
    case golden = 2
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutVerticalAlignmentCenter = MMMLayoutAlignmentCenter
    - -
    -
    -

    Swift

    -
    case center = 3
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutVerticalAlignmentBottom = MMMLayoutAlignmentTrailing
    - -
    -
    -

    Swift

    -
    case bottom = 4
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutVerticalAlignmentFill = MMMLayoutAlignmentFill
    - -
    -
    -

    Swift

    -
    case fill = 5
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Enums/MMMScrollViewShadowAlignment.html b/Enums/MMMScrollViewShadowAlignment.html deleted file mode 100644 index f18c4df..0000000 --- a/Enums/MMMScrollViewShadowAlignment.html +++ /dev/null @@ -1,392 +0,0 @@ - - - - MMMScrollViewShadowAlignment Enumeration Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMScrollViewShadowAlignment

-
-
-

Objective-C

-
NS_ENUM(NSInteger, MMMScrollViewShadowAlignment) {
-	MMMScrollViewShadowAlignmentTop,
-	MMMScrollViewShadowAlignmentBottom
-}
- -
-
-

Swift

-
enum MMMScrollViewShadowAlignment : Int, @unchecked Sendable
- -
-
-

Undocumented

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMScrollViewShadowAlignmentTop
    - -
    -
    -

    Swift

    -
    case top = 0
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMScrollViewShadowAlignmentBottom
    - -
    -
    -

    Swift

    -
    case bottom = 1
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Functions.html b/Functions.html deleted file mode 100644 index f23de8a..0000000 --- a/Functions.html +++ /dev/null @@ -1,524 +0,0 @@ - - - - Functions Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

Functions

-

The following functions are available globally.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Suppose you need to contrain a view so its center divides its container in certain ratio different from 1:1 - (e.g. golden section):

    - -

    ┌─────────┐ ◆ - │ │ │ - │ │ │ a - │┌───────┐│ │ - ─│┼ ─ ─ ─ ┼│─◆ ratio = a / b - │└───────┘│ │ - │ │ │ - │ │ │ - │ │ │ b - │ │ │ - │ │ │ - │ │ │ - └─────────┘ ◆

    - -

    You cannot put this ratio directly into the multiplier parameter of the corresponding NSLayoutConstraints relating - the centers of the views, because the multiplier would be the ratio between the distance to the center - of the view (h) and the distance to the center of the container (H) instead:

    - -

    ◆ ┌─────────┐ ◆ - │ │ │ │ - │ │ │ │ a = h - H │ │┌───────┐│ │ - │ │├ ─ ─ ─ ┼│─◆ multiplier = h / H - │ │└───────┘│ │ ratio = a / b = h / (2 * H - h) - ◆─│─ ─ ─ ─ ─│ │ - │ │ │ - │ │ │ b = 2 * H - h - │ │ │ - │ │ │ - │ │ │ - └─────────┘ ◆

    - -

    I.e. the multiplier is h / H (assuming the view is the first in the definition of the constraint), - but the ratio we are interested would be h / (2 * H - h) if expressed in the distances to centers.

    - -

    If you have a desired ratio and want to get a multiplier, which when applied, results in the layout dividing - the container in this ratio, then you can use this function as shortcut.

    - -

    Detailed calculations: - ratio = h / (2 * H - h) ==> 2 * H * ratio - h * ratio = h ==> 2 * H * ratio / h - ratio = 1 - ==> 1 + ratio = 2 * H * ratio / h ==> (1 + ratio) / (2 * ratio) = H / h - where H / h is the inverse of our multiplier, so the actual multiplier is (2 * ratio) / (1 + ratio).

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    static inline CGFloat MMMCenterMultiplierForRatio(CGFloat ratio)
    - -
    -
    -

    Swift

    -
    class func centerMultiplier(forRatio ratio: CGFloat) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Animation curve opposite to the given one, e.g. EaseIn for EaseOut.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern MMMAnimationCurve MMMReverseAnimationCurve(MMMAnimationCurve curve)
    - -
    -
    -

    Swift

    -
    func MMMReverseAnimationCurve(_ curve: MMMAnimationCurve) -> MMMAnimationCurve
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    static inline MMMLayoutAlignment MMMLayoutAlignmentFromHorizontalAlignment(MMMLayoutHorizontalAlignment alignment) {
    -	return (MMMLayoutAlignment)alignment;
    -}
    - -
    -
    -

    Swift

    -
    func MMMLayoutAlignmentFromHorizontalAlignment(_ alignment: MMMLayoutHorizontalAlignment) -> MMMLayoutAlignment
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    static inline MMMLayoutAlignment MMMLayoutAlignmentFromVerticalAlignment(MMMLayoutVerticalAlignment alignment) {
    -	return (MMMLayoutAlignment)alignment;
    -}
    - -
    -
    -

    Swift

    -
    func MMMLayoutAlignmentFromVerticalAlignment(_ alignment: MMMLayoutVerticalAlignment) -> MMMLayoutAlignment
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A dictionary built from UIEdgeInsets suitable for AutoLayout metrics. -The dictionary will have 4 values under the keys named “Top”, “Left”, “Bottom”, “Right”.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern NSDictionary<NSString *, NSNumber *>
    -    *_Nonnull MMMDictionaryFromUIEdgeInsets(NSString *_Nonnull prefix,
    -                                            UIEdgeInsets insets)
    - -
    -
    -

    Swift

    -
    func MMMDictionaryFromUIEdgeInsets(_ prefix: String, _ insets: UIEdgeInsets) -> [String : NSNumber]
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Protocols.html b/Protocols.html deleted file mode 100644 index 8558824..0000000 --- a/Protocols.html +++ /dev/null @@ -1,490 +0,0 @@ - - - - Protocols Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

Protocols

-

The following protocols are available globally.

- -
-
- -
-
-
-
    -
  • -
    - - - - MMMNavigationHandler - -
    -
    -
    -
    -
    -
    -

    Protocol for entities able to fulfill in-app navigation requests.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @protocol MMMNavigationHandler <NSObject>
    - -
    -
    -

    Swift

    -
    protocol MMMNavigationHandler : NSObjectProtocol
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    This is the delegate corresponding to each navigation item in the stack. -Its main purpose is to be able to handle popping of the corresponding navigation item.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @protocol MMMNavigationStackItemDelegate <NSObject>
    - -
    -
    -

    Swift

    -
    protocol MMMNavigationStackItemDelegate : NSObjectProtocol
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A token corresponding to a single node (item) of the current UI navigation path. -Note that a reference to the token must be stored somewhere or the corresponding item will be popped right away.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @protocol MMMNavigationStackItem <NSObject>
    - -
    -
    -

    Swift

    -
    protocol MMMNavigationStackItem : NSObjectProtocol
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A view supporting this will be notified when one of the child views indicates potential changes in its contents -that might influence its size via mmm_setPreferredSizeCouldChange.

    - -

    This is handy with views that do not fully rely on Auto Layout, like UITableView, -where a change in the size of a cell would require it to reload this cell.

    - -

    The implementation is responsible for coalescing notification and avoiding notification loops.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @protocol MMMPreferredSizeChanges <NSObject>
    - -
    -
    -

    Swift

    -
    protocol MMMPreferredSizeChanges : NSObjectProtocol
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Something that converts dimensions given for one size class (e.g. font sizes from the design made for iPhone 6) - into dimensions for another size class (e.g. font size for iPhone 5 that were not explicitely mentioned in the design).

    - -

    Different converters can be used for different kinds of values. For example, it might make sense to scale paddings - proportionally to screen widths, but keep font sizes the same.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @protocol MMMStylesheetConverter <NSObject>
    - -
    -
    -

    Swift

    -
    protocol MMMStylesheetConverter : NSObjectProtocol
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Protocols/MMMNavigationHandler.html b/Protocols/MMMNavigationHandler.html deleted file mode 100644 index c97ae9e..0000000 --- a/Protocols/MMMNavigationHandler.html +++ /dev/null @@ -1,359 +0,0 @@ - - - - MMMNavigationHandler Protocol Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMNavigationHandler

-
-
-

Objective-C

-
@protocol MMMNavigationHandler <NSObject>
- -
-
-

Swift

-
protocol MMMNavigationHandler : NSObjectProtocol
- -
-
-

Protocol for entities able to fulfill in-app navigation requests.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Returns NO, in case the handler is unable to perform the given request. (Another handler will be tried then.) -Returns YES, if the request has been accepted by the handler. -The handler must call -didFinishSuccessfully: when it’s done performing the request.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (BOOL)performNavigationRequest:(nonnull MMMNavigationRequest *)request;
    - -
    -
    -

    Swift

    -
    func perform(_ request: MMMNavigationRequest) -> Bool
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Protocols/MMMNavigationStackItem.html b/Protocols/MMMNavigationStackItem.html deleted file mode 100644 index abceea0..0000000 --- a/Protocols/MMMNavigationStackItem.html +++ /dev/null @@ -1,430 +0,0 @@ - - - - MMMNavigationStackItem Protocol Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMNavigationStackItem

-
-
-

Objective-C

-
@protocol MMMNavigationStackItem <NSObject>
- -
-
-

Swift

-
protocol MMMNavigationStackItem : NSObjectProtocol
- -
-
-

A token corresponding to a single node (item) of the current UI navigation path. -Note that a reference to the token must be stored somewhere or the corresponding item will be popped right away.

- -
-
- -
-
-
-
    -
  • -
    - - - - -didPop - -
    -
    -
    -
    -
    -
    -

    Should be called by the item’s delegate when the navigation item has been popped as a result of user’s action -and must be called when MMMNavigationStack calling popNavigationStackItem of the corresponding delegate.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)didPop;
    - -
    -
    -

    Swift

    -
    func didPop()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -didFailToPop - -
    -
    -
    -
    -
    -
    -

    Should be called by the navigation item’s delegate in rare caes when the corresponding item cannot be popped.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)didFailToPop;
    - -
    -
    -

    Swift

    -
    func didFailToPop()
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Pops all the items currently on the stack above this item, so this one becomes the top. This is an asynchronous operation - because it might involving several navigation steps.

    - -

    Returns YES, if the request to pop was accepted for execution; NO otherwise. The latter means programmers error (such as - popping while another pop is in progress) and will terminate the app when assertions are enabled.

    - -

    Note that the completion handler is executed only if the request has been accepted.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (BOOL)popAllAfterThisItemWithCompletion:
    -    (nonnull MMMNavigationStackCompletion)completion;
    - -
    -
    -

    Swift

    -
    func popAllAfterThisItem(completion: @escaping MMMNavigationStackCompletion) -> Bool
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Protocols/MMMNavigationStackItemDelegate.html b/Protocols/MMMNavigationStackItemDelegate.html deleted file mode 100644 index 2e0b330..0000000 --- a/Protocols/MMMNavigationStackItemDelegate.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - MMMNavigationStackItemDelegate Protocol Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMNavigationStackItemDelegate

-
-
-

Objective-C

-
@protocol MMMNavigationStackItemDelegate <NSObject>
- -
-
-

Swift

-
protocol MMMNavigationStackItemDelegate : NSObjectProtocol
- -
-
-

This is the delegate corresponding to each navigation item in the stack. -Its main purpose is to be able to handle popping of the corresponding navigation item.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Should perform all the work necessary to pop the corresponding UI navigation item and must call didPop method - on the corresponding item when done.

    - -

    Note that when the delegate is asked to pop, then all the items on top of it in the stack have been popped already, - so the delegate should not ask the stack to do it. In fact asking for it and waiting for completion might freeze the popping - process as pop completion callbacks are called only after all the whole popping process completes.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)popNavigationStackItem:(nonnull id<MMMNavigationStackItem>)item;
    - -
    -
    -

    Swift

    -
    func pop(_ item: MMMNavigationStackItem)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Protocols/MMMPreferredSizeChanges.html b/Protocols/MMMPreferredSizeChanges.html deleted file mode 100644 index 4340d37..0000000 --- a/Protocols/MMMPreferredSizeChanges.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - MMMPreferredSizeChanges Protocol Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMPreferredSizeChanges

-
-
-

Objective-C

-
@protocol MMMPreferredSizeChanges <NSObject>
- -
-
-

Swift

-
protocol MMMPreferredSizeChanges : NSObjectProtocol
- -
-
-

A view supporting this will be notified when one of the child views indicates potential changes in its contents -that might influence its size via mmm_setPreferredSizeCouldChange.

- -

This is handy with views that do not fully rely on Auto Layout, like UITableView, -where a change in the size of a cell would require it to reload this cell.

- -

The implementation is responsible for coalescing notification and avoiding notification loops.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_preferredSizeCouldChangeForSubview:(UIView *)subview;
    - -
    -
    -

    Swift

    -
    func mmm_preferredSizeCouldChange(forSubview subview: UIView)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Protocols/MMMStylesheetConverter.html b/Protocols/MMMStylesheetConverter.html deleted file mode 100644 index 5812565..0000000 --- a/Protocols/MMMStylesheetConverter.html +++ /dev/null @@ -1,362 +0,0 @@ - - - - MMMStylesheetConverter Protocol Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMStylesheetConverter

-
-
-

Objective-C

-
@protocol MMMStylesheetConverter <NSObject>
- -
-
-

Swift

-
protocol MMMStylesheetConverter : NSObjectProtocol
- -
-
-

Something that converts dimensions given for one size class (e.g. font sizes from the design made for iPhone 6) - into dimensions for another size class (e.g. font size for iPhone 5 that were not explicitely mentioned in the design).

- -

Different converters can be used for different kinds of values. For example, it might make sense to scale paddings - proportionally to screen widths, but keep font sizes the same.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Converts a dimension know for certain size class according to the rules of the converter.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (CGFloat)convertFloat:(CGFloat)value
    -          fromSizeClass:(nonnull NSString *)sourceSizeClass;
    - -
    -
    -

    Swift

    -
    func convert(_ value: CGFloat, fromSizeClass sourceSizeClass: String) -> CGFloat
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/Type Definitions.html b/Type Definitions.html deleted file mode 100644 index d9ddf9d..0000000 --- a/Type Definitions.html +++ /dev/null @@ -1,542 +0,0 @@ - - - - Type Definitions Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

Type Definitions

-

The following type definitions are available globally.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    typedef id MMMNavigationRequestId
    - -
    -
    -

    Swift

    -
    typealias MMMNavigationRequestId = AnyObject
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    typedef void (^MMMNavigationCompletionBlock)(MMMNavigationRequestId requestId, BOOL finished)
    - -
    -
    -

    Swift

    -
    typealias MMMNavigationCompletionBlock = (Any, Bool) -> Void
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    typedef id MMMNavigationHandlerId
    - -
    -
    -

    Swift

    -
    typealias MMMNavigationHandlerId = AnyObject
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    typedef void (^MMMNavigationStackCompletion)(BOOL success)
    - -
    -
    -

    Swift

    -
    typealias MMMNavigationStackCompletion = (Bool) -> Void
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    typedef void (^ _Nonnull MMMShadowViewSettingBlock
    - -
    -
    -

    Swift

    -
    typealias MMMShadowViewSettingBlock = (MMMShadowViewSetting) -> Void
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Called on every update cycle of MMMAnimator for the given animation item.

    - -

    The time is always within [0; 1] range here, which will correspond to the the [start; start + duration] interval of - real time clock.

    - -

    Unless the item is cancelled it is guaranteed that the block will be called for 0 and 1 values.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    typedef void (^MMMAnimatorUpdateBlock)(MMMAnimationHandle *_Nonnull, CGFloat)
    - -
    -
    -

    Swift

    -
    typealias MMMAnimatorUpdateBlock = (MMMAnimationHandle, CGFloat) -> Void
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMAnimatorDoneBlock - -
    -
    -
    -
    -
    -
    -

    Called when the animation item has been finished.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    typedef void (^MMMAnimatorDoneBlock)(MMMAnimationHandle *_Nonnull, BOOL)
    - -
    -
    -

    Swift

    -
    typealias MMMAnimatorDoneBlock = (MMMAnimationHandle, Bool) -> Void
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/badge.svg b/badge.svg index 5abf0e8..a5d7e55 100644 --- a/badge.svg +++ b/badge.svg @@ -1,15 +1,15 @@ - + - + - - + + @@ -18,11 +18,11 @@ documentation - - 50% + + 0% - - 50% + + 0% diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories.html deleted file mode 100644 index 2a6fb0c..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories.html +++ /dev/null @@ -1,538 +0,0 @@ - - - - Categories Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

Categories

-

The following categories are available globally.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface UIView (MMMPreferredSizeChanges)
    -
    -/// Signals to one of the interested parent views (supporting `MMMPreferredSizeChanges`)
    -/// that the size of this view could have potentially changed and they should measure things again.
    -///
    -/// This helps with containers that do not primarily rely on Auto Layout, like UITableView.
    -- (void)mmm_setPreferredSizeCouldChange;
    -
    -@end
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface UILayoutGuide (MMMTemple)
    -
    -/// Convenience initializer setting the guide's identifier.
    -- (id)initWithIdentifier:(NSString *)identifier;
    -
    -/**
    - * Not yet activated constraints anchoring the given view within the receiver according to horizontal
    - * and vertical alignment flags.
    - */
    -- (NSArray<NSLayoutConstraint *> *)mmm_constraintsAligningView:(UIView *)view
    -	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment
    -	vertically:(MMMLayoutVerticalAlignment)verticalAlignment
    -	insets:(UIEdgeInsets)insets NS_SWIFT_NAME(mmm_constraints(aligning:horizontally:vertically:insets:));
    -
    -- (NSArray<NSLayoutConstraint *> *)mmm_constraintsAligningGuide:(UILayoutGuide *)guide
    -	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment
    -	vertically:(MMMLayoutVerticalAlignment)verticalAlignment
    -	insets:(UIEdgeInsets)insets NS_SWIFT_NAME(mmm_constraints(aligning:horizontally:vertically:insets:));
    -
    -/**
    - * Not yet activated constraints implementing a common layout idiom used with text:
    - * - the given view is centered within the receiver,
    - * - certain minimum padding is ensured on the sides,
    - * - if `maxWidth > 0`, then the width of the view is limited to `maxWidth`, so it does not grow too wide e.g. on iPad.
    - */
    -- (NSArray<NSLayoutConstraint *> *)mmm_constraintsHorizontallyCenteringView:(UIView *)view
    -	minPadding:(CGFloat)minPadding
    -	maxWidth:(CGFloat)maxWidth NS_SWIFT_NAME(mmm_constraints(horizontallyCentering:minPadding:maxWidth:));
    -
    -@end
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - UIView(MMMTemple) - -
    -
    -
    -
    -
    -
    -

    A few shorthands for UIView.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface UIView (MMMTemple)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface NSLayoutConstraint (MMMTemple)
    -
    -/**
    - * Our wrapper over the corresponding method of NSLayoutConstraint extending the visual layout language a bit to support
    - * `safeAreaLayoutGuide` property introduced in iOS 11 and still be compatible with older versions of iOS.
    - * (See also `mmm_safeAreaLayoutGuide` in our extension of UIView.)
    - *
    - * To use it simply replace a reference to the superview edge "|" with a reference to a safe edge "<|".
    - *
    - * For example, if you have the following pre iOS 9 code:
    - *
    - * \code
    - * [NSLayoutConstraint activateConstraints:[NSLayoutConstraint
    - *     constraintsWithVisualFormat:@"V:[_button]-(normalPadding)-|"
    - *     options:0 metrics:metrics views:views
    - * ]];
    - * \endcode
    - *
    - * And now you want to make sure that the button sits above the safe bottom margin on iPhone X, then do this:
    - *
    - * \code
    - * [NSLayoutConstraint activateConstraints:[NSLayoutConstraint
    - *     mmm_constraintsWithVisualFormat:@"V:[_button]-(normalPadding)-<|"
    - *     options:0 metrics:metrics views:views
    - * ]];
    - * \endcode
    - *
    - * That's it. It'll anchor the button to the bottom of its superview on iOS 9 and 10, but anchor it to the bottom of
    - * its safeAreaLayoutGuide on iOS 11.
    - *
    - * Please note that using "|>" to pin to the top won't exclude the status bar on iOS 9 and 10.
    - */
    -+ (NSArray<NSLayoutConstraint *> *)mmm_constraintsWithVisualFormat:(NSString *)format
    -	options:(NSLayoutFormatOptions)opts
    -	metrics:(nullable NSDictionary<NSString *,id> *)metrics
    -	views:(nullable NSDictionary<NSString *,id> *)views;
    -
    -/** A shortcut for `[NSLayoutConstraint activateConstraints:[NSLayoutConstraint mmm_constraintsWithVisualFormat:...`. */
    -+ (void)mmm_activateConstraintsWithVisualFormat:(NSString *)format
    -	options:(NSLayoutFormatOptions)opts
    -	metrics:(nullable NSDictionary<NSString *,id> *)metrics
    -	views:(nullable NSDictionary<NSString *,id> *)views;
    -
    -/** Missing counterparts for (de)activateConstraints, so constraint activation code looks the same for individual constraints. */
    -+ (void)activateConstraint:(NSLayoutConstraint *)constraint;
    -+ (void)deactivateConstraint:(NSLayoutConstraint *)constraint;
    -
    -/** A missing convenience initializer including priority. */
    -+ (instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1
    -	relatedBy:(NSLayoutRelation)relation
    -	toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2
    -	multiplier:(CGFloat)multiplier constant:(CGFloat)c
    -	priority:(UILayoutPriority)priority;
    -
    -/** A missing convenience initializer allowing to set identifier for this constraint. */
    -+ (instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1
    -	relatedBy:(NSLayoutRelation)relation
    -	toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2
    -	multiplier:(CGFloat)multiplier constant:(CGFloat)c
    -	identifier:(NSString *)identifier;
    -
    -/** A missing convenience initializer allowing to set both priority and identifier for this constraint. */
    -+ (instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1
    -	relatedBy:(NSLayoutRelation)relation
    -	toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2
    -	multiplier:(CGFloat)multiplier constant:(CGFloat)c
    -	priority:(UILayoutPriority)priority
    -	identifier:(NSString *)identifier;
    -
    -/** A missing convenience initializer allowing to tag a bunch of visual constraints with the same identifier. */
    -+ (NSArray<__kindof NSLayoutConstraint *> *)constraintsWithVisualFormat:(NSString *)format
    -	options:(NSLayoutFormatOptions)opts
    -	metrics:(nullable NSDictionary<NSString *,id> *)metrics
    -	views:(nullable NSDictionary<NSString *, id> *)views
    -	identifier:(NSString *)identifier DEPRECATED_ATTRIBUTE;
    -
    -@end
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories/NSLayoutConstraint(MMMTemple).html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories/NSLayoutConstraint(MMMTemple).html deleted file mode 100644 index 3cb7b36..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories/NSLayoutConstraint(MMMTemple).html +++ /dev/null @@ -1,722 +0,0 @@ - - - - NSLayoutConstraint(MMMTemple) Category Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

NSLayoutConstraint(MMMTemple)

-
-
- -
@interface NSLayoutConstraint (MMMTemple)
-
-/**
- * Our wrapper over the corresponding method of NSLayoutConstraint extending the visual layout language a bit to support
- * `safeAreaLayoutGuide` property introduced in iOS 11 and still be compatible with older versions of iOS.
- * (See also `mmm_safeAreaLayoutGuide` in our extension of UIView.)
- *
- * To use it simply replace a reference to the superview edge "|" with a reference to a safe edge "<|".
- *
- * For example, if you have the following pre iOS 9 code:
- *
- * \code
- * [NSLayoutConstraint activateConstraints:[NSLayoutConstraint
- *     constraintsWithVisualFormat:@"V:[_button]-(normalPadding)-|"
- *     options:0 metrics:metrics views:views
- * ]];
- * \endcode
- *
- * And now you want to make sure that the button sits above the safe bottom margin on iPhone X, then do this:
- *
- * \code
- * [NSLayoutConstraint activateConstraints:[NSLayoutConstraint
- *     mmm_constraintsWithVisualFormat:@"V:[_button]-(normalPadding)-<|"
- *     options:0 metrics:metrics views:views
- * ]];
- * \endcode
- *
- * That's it. It'll anchor the button to the bottom of its superview on iOS 9 and 10, but anchor it to the bottom of
- * its safeAreaLayoutGuide on iOS 11.
- *
- * Please note that using "|>" to pin to the top won't exclude the status bar on iOS 9 and 10.
- */
-+ (NSArray<NSLayoutConstraint *> *)mmm_constraintsWithVisualFormat:(NSString *)format
-	options:(NSLayoutFormatOptions)opts
-	metrics:(nullable NSDictionary<NSString *,id> *)metrics
-	views:(nullable NSDictionary<NSString *,id> *)views;
-
-/** A shortcut for `[NSLayoutConstraint activateConstraints:[NSLayoutConstraint mmm_constraintsWithVisualFormat:...`. */
-+ (void)mmm_activateConstraintsWithVisualFormat:(NSString *)format
-	options:(NSLayoutFormatOptions)opts
-	metrics:(nullable NSDictionary<NSString *,id> *)metrics
-	views:(nullable NSDictionary<NSString *,id> *)views;
-
-/** Missing counterparts for (de)activateConstraints, so constraint activation code looks the same for individual constraints. */
-+ (void)activateConstraint:(NSLayoutConstraint *)constraint;
-+ (void)deactivateConstraint:(NSLayoutConstraint *)constraint;
-
-/** A missing convenience initializer including priority. */
-+ (instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1
-	relatedBy:(NSLayoutRelation)relation
-	toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2
-	multiplier:(CGFloat)multiplier constant:(CGFloat)c
-	priority:(UILayoutPriority)priority;
-
-/** A missing convenience initializer allowing to set identifier for this constraint. */
-+ (instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1
-	relatedBy:(NSLayoutRelation)relation
-	toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2
-	multiplier:(CGFloat)multiplier constant:(CGFloat)c
-	identifier:(NSString *)identifier;
-
-/** A missing convenience initializer allowing to set both priority and identifier for this constraint. */
-+ (instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1
-	relatedBy:(NSLayoutRelation)relation
-	toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2
-	multiplier:(CGFloat)multiplier constant:(CGFloat)c
-	priority:(UILayoutPriority)priority
-	identifier:(NSString *)identifier;
-
-/** A missing convenience initializer allowing to tag a bunch of visual constraints with the same identifier. */
-+ (NSArray<__kindof NSLayoutConstraint *> *)constraintsWithVisualFormat:(NSString *)format
-	options:(NSLayoutFormatOptions)opts
-	metrics:(nullable NSDictionary<NSString *,id> *)metrics
-	views:(nullable NSDictionary<NSString *, id> *)views
-	identifier:(NSString *)identifier DEPRECATED_ATTRIBUTE;
-
-@end
- -
-
-

Undocumented

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Our wrapper over the corresponding method of NSLayoutConstraint extending the visual layout language a bit to support - safeAreaLayoutGuide property introduced in iOS 11 and still be compatible with older versions of iOS. - (See also mmm_safeAreaLayoutGuide in our extension of UIView.)

    - -

    To use it simply replace a reference to the superview edge “|” with a reference to a safe edge “<|”.

    - -

    For example, if you have the following pre iOS 9 code:

    - -

    \code - [NSLayoutConstraint activateConstraints:[NSLayoutConstraint - constraintsWithVisualFormat:@“V:[_button]-(normalPadding)-|” - options:0 metrics:metrics views:views - ]]; - \endcode

    - -

    And now you want to make sure that the button sits above the safe bottom margin on iPhone X, then do this:

    - -

    \code - [NSLayoutConstraint activateConstraints:[NSLayoutConstraint - mmm_constraintsWithVisualFormat:@“V:[_button]-(normalPadding)-<|” - options:0 metrics:metrics views:views - ]]; - \endcode

    - -

    That’s it. It’ll anchor the button to the bottom of its superview on iOS 9 and 10, but anchor it to the bottom of - its safeAreaLayoutGuide on iOS 11.

    - -

    Please note that using “|>” to pin to the top won’t exclude the status bar on iOS 9 and 10.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (nonnull NSArray<NSLayoutConstraint *> *)
    -    mmm_constraintsWithVisualFormat:(nonnull NSString *)format
    -                            options:(NSLayoutFormatOptions)opts
    -                            metrics:
    -                                (nullable NSDictionary<NSString *, id> *)metrics
    -                              views:(nullable NSDictionary<NSString *, id> *)
    -                                        views;
    - -
    -
    -

    Swift

    -
    class func mmm_constraints(withVisualFormat format: String, options opts: NSLayoutConstraint.FormatOptions = [], metrics: [String : Any]?, views: [String : Any]?) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A shortcut for [NSLayoutConstraint activateConstraints:[NSLayoutConstraint mmm_constraintsWithVisualFormat:....

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (void)
    -    mmm_activateConstraintsWithVisualFormat:(nonnull NSString *)format
    -                                    options:(NSLayoutFormatOptions)opts
    -                                    metrics:(nullable NSDictionary<NSString *,
    -                                                                   id> *)metrics
    -                                      views:(nullable NSDictionary<NSString *,
    -                                                                   id> *)views;
    - -
    -
    -

    Swift

    -
    class func mmm_activateConstraints(withVisualFormat format: String, options opts: NSLayoutConstraint.FormatOptions = [], metrics: [String : Any]?, views: [String : Any]?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - +activateConstraint: - -
    -
    -
    -
    -
    -
    -

    Missing counterparts for (de)activateConstraints, so constraint activation code looks the same for individual constraints.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (void)activateConstraint:(nonnull NSLayoutConstraint *)constraint;
    - -
    -
    -

    Swift

    -
    class func activate(_ constraint: NSLayoutConstraint)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (void)deactivateConstraint:(NSLayoutConstraint *)constraint;
    - -
    -
    -

    Swift

    -
    class func deactivate(_ constraint: NSLayoutConstraint)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A missing convenience initializer including priority.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (nonnull instancetype)constraintWithItem:(nonnull id)view1
    -                                 attribute:(NSLayoutAttribute)attr1
    -                                 relatedBy:(NSLayoutRelation)relation
    -                                    toItem:(nullable id)view2
    -                                 attribute:(NSLayoutAttribute)attr2
    -                                multiplier:(CGFloat)multiplier
    -                                  constant:(CGFloat)c
    -                                  priority:(UILayoutPriority)priority;
    - -
    -
    -

    Swift

    -
    convenience init(item view1: Any, attribute attr1: NSLayoutConstraint.Attribute, relatedBy relation: NSLayoutConstraint.Relation, toItem view2: Any?, attribute attr2: NSLayoutConstraint.Attribute, multiplier: CGFloat, constant c: CGFloat, priority: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A missing convenience initializer allowing to set identifier for this constraint.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (nonnull instancetype)constraintWithItem:(nonnull id)view1
    -                                 attribute:(NSLayoutAttribute)attr1
    -                                 relatedBy:(NSLayoutRelation)relation
    -                                    toItem:(nullable id)view2
    -                                 attribute:(NSLayoutAttribute)attr2
    -                                multiplier:(CGFloat)multiplier
    -                                  constant:(CGFloat)c
    -                                identifier:(nonnull NSString *)identifier;
    - -
    -
    -

    Swift

    -
    convenience init(item view1: Any, attribute attr1: NSLayoutConstraint.Attribute, relatedBy relation: NSLayoutConstraint.Relation, toItem view2: Any?, attribute attr2: NSLayoutConstraint.Attribute, multiplier: CGFloat, constant c: CGFloat, identifier: String)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A missing convenience initializer allowing to set both priority and identifier for this constraint.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (nonnull instancetype)constraintWithItem:(nonnull id)view1
    -                                 attribute:(NSLayoutAttribute)attr1
    -                                 relatedBy:(NSLayoutRelation)relation
    -                                    toItem:(nullable id)view2
    -                                 attribute:(NSLayoutAttribute)attr2
    -                                multiplier:(CGFloat)multiplier
    -                                  constant:(CGFloat)c
    -                                  priority:(UILayoutPriority)priority
    -                                identifier:(nonnull NSString *)identifier;
    - -
    -
    -

    Swift

    -
    convenience init(item view1: Any, attribute attr1: NSLayoutConstraint.Attribute, relatedBy relation: NSLayoutConstraint.Relation, toItem view2: Any?, attribute attr2: NSLayoutConstraint.Attribute, multiplier: CGFloat, constant c: CGFloat, priority: UILayoutPriority, identifier: String)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    A missing convenience initializer allowing to tag a bunch of visual constraints with the same identifier.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (nonnull NSArray<__kindof NSLayoutConstraint *> *)
    -    constraintsWithVisualFormat:(nonnull NSString *)format
    -                        options:(NSLayoutFormatOptions)opts
    -                        metrics:(nullable NSDictionary<NSString *, id> *)metrics
    -                          views:(nullable NSDictionary<NSString *, id> *)views
    -                     identifier:(nonnull NSString *)identifier;
    - -
    -
    -

    Swift

    -
    class func constraints(withVisualFormat format: String, options opts: NSLayoutConstraint.FormatOptions = [], metrics: [String : Any]?, views: [String : Any]?, identifier: String) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories/UILayoutGuide(MMMTemple).html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories/UILayoutGuide(MMMTemple).html deleted file mode 100644 index a0d79e1..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories/UILayoutGuide(MMMTemple).html +++ /dev/null @@ -1,495 +0,0 @@ - - - - UILayoutGuide(MMMTemple) Category Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

UILayoutGuide(MMMTemple)

-
-
- -
@interface UILayoutGuide (MMMTemple)
-
-/// Convenience initializer setting the guide's identifier.
-- (id)initWithIdentifier:(NSString *)identifier;
-
-/**
- * Not yet activated constraints anchoring the given view within the receiver according to horizontal
- * and vertical alignment flags.
- */
-- (NSArray<NSLayoutConstraint *> *)mmm_constraintsAligningView:(UIView *)view
-	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment
-	vertically:(MMMLayoutVerticalAlignment)verticalAlignment
-	insets:(UIEdgeInsets)insets NS_SWIFT_NAME(mmm_constraints(aligning:horizontally:vertically:insets:));
-
-- (NSArray<NSLayoutConstraint *> *)mmm_constraintsAligningGuide:(UILayoutGuide *)guide
-	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment
-	vertically:(MMMLayoutVerticalAlignment)verticalAlignment
-	insets:(UIEdgeInsets)insets NS_SWIFT_NAME(mmm_constraints(aligning:horizontally:vertically:insets:));
-
-/**
- * Not yet activated constraints implementing a common layout idiom used with text:
- * - the given view is centered within the receiver,
- * - certain minimum padding is ensured on the sides,
- * - if `maxWidth > 0`, then the width of the view is limited to `maxWidth`, so it does not grow too wide e.g. on iPad.
- */
-- (NSArray<NSLayoutConstraint *> *)mmm_constraintsHorizontallyCenteringView:(UIView *)view
-	minPadding:(CGFloat)minPadding
-	maxWidth:(CGFloat)maxWidth NS_SWIFT_NAME(mmm_constraints(horizontallyCentering:minPadding:maxWidth:));
-
-@end
- -
-
-

Undocumented

- -
-
- -
-
-
-
    -
  • -
    - - - - -initWithIdentifier: - -
    -
    -
    -
    -
    -
    -

    Convenience initializer setting the guide’s identifier.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithIdentifier:(nonnull NSString *)identifier;
    - -
    -
    -

    Swift

    -
    init(identifier: String)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Not yet activated constraints anchoring the given view within the receiver according to horizontal -and vertical alignment flags.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSArray<NSLayoutConstraint *> *)
    -    mmm_constraintsAligningView:(nonnull UIView *)view
    -                   horizontally:
    -                       (MMMLayoutHorizontalAlignment)horizontalAlignment
    -                     vertically:(MMMLayoutVerticalAlignment)verticalAlignment
    -                         insets:(UIEdgeInsets)insets;
    - -
    -
    -

    Swift

    -
    func mmm_constraints(aligning view: UIView, horizontally horizontalAlignment: MMMLayoutHorizontalAlignment, vertically verticalAlignment: MMMLayoutVerticalAlignment, insets: UIEdgeInsets) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (NSArray<NSLayoutConstraint *> *)mmm_constraintsAligningGuide:(UILayoutGuide *)guide
    -	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment
    -	vertically:(MMMLayoutVerticalAlignment)verticalAlignment
    -	insets:(UIEdgeInsets)insets NS_SWIFT_NAME(mmm_constraints(aligning:horizontally:vertically:insets:));
    - -
    -
    -

    Swift

    -
    func mmm_constraints(aligning guide: UILayoutGuide, horizontally horizontalAlignment: MMMLayoutHorizontalAlignment, vertically verticalAlignment: MMMLayoutVerticalAlignment, insets: UIEdgeInsets) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Not yet activated constraints implementing a common layout idiom used with text:

    - -
      -
    • the given view is centered within the receiver,
    • -
    • certain minimum padding is ensured on the sides,
    • -
    • if maxWidth > 0, then the width of the view is limited to maxWidth, so it does not grow too wide e.g. on iPad.
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSArray<NSLayoutConstraint *> *)
    -    mmm_constraintsHorizontallyCenteringView:(nonnull UIView *)view
    -                                  minPadding:(CGFloat)minPadding
    -                                    maxWidth:(CGFloat)maxWidth;
    - -
    -
    -

    Swift

    -
    func mmm_constraints(horizontallyCentering view: UIView, minPadding: CGFloat, maxWidth: CGFloat) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories/UIView(MMMPreferredSizeChanges).html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories/UIView(MMMPreferredSizeChanges).html deleted file mode 100644 index 4442148..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories/UIView(MMMPreferredSizeChanges).html +++ /dev/null @@ -1,363 +0,0 @@ - - - - UIView(MMMPreferredSizeChanges) Category Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

UIView(MMMPreferredSizeChanges)

-
-
- -
@interface UIView (MMMPreferredSizeChanges)
-
-/// Signals to one of the interested parent views (supporting `MMMPreferredSizeChanges`)
-/// that the size of this view could have potentially changed and they should measure things again.
-///
-/// This helps with containers that do not primarily rely on Auto Layout, like UITableView.
-- (void)mmm_setPreferredSizeCouldChange;
-
-@end
- -
-
-

Undocumented

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Signals to one of the interested parent views (supporting MMMPreferredSizeChanges) -that the size of this view could have potentially changed and they should measure things again.

    - -

    This helps with containers that do not primarily rely on Auto Layout, like UITableView.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setPreferredSizeCouldChange;
    - -
    -
    -

    Swift

    -
    func mmm_setPreferredSizeCouldChange()
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories/UIView(MMMTemple).html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories/UIView(MMMTemple).html deleted file mode 100644 index f57ac9a..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Categories/UIView(MMMTemple).html +++ /dev/null @@ -1,1340 +0,0 @@ - - - - UIView(MMMTemple) Category Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

UIView(MMMTemple)

-
-
- -
@interface UIView (MMMTemple)
- -
-
-

A few shorthands for UIView.

- -
-
- -
-
-
-
    -
  • -
    - - - - mmm_rect - -
    -
    -
    -
    -
    -
    -

    A wrapper for the center and bounds.size properties similar to ‘frame’, but not taking the current transform into account.

    - -
      -
    • Handy when there is a transform applied to a view already, but we want to set its frame in normal state.
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, setter=mmm_setRect:) CGRect mmm_rect;
    - -
    -
    -

    Swift

    -
    var mmm_rect: CGRect { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - mmm_size - -
    -
    -
    -
    -
    -
    -

    A wrapper for the size component of bounds property.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, setter=mmm_setSize:) CGSize mmm_size;
    - -
    -
    -

    Swift

    -
    var mmm_size: CGSize { get set }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A safer version of safeAreaLayoutGuide that attempts to avoid layout loops happening when a view using it

    - -
      -
    • is transformed in certain “inconvenient” way. (Apple Feedback ID: FB7609936.)
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) UILayoutGuide *_Nonnull mmm_safeAreaLayoutGuide;
    - -
    -
    -

    Swift

    -
    var mmm_safeAreaLayoutGuide: UILayoutGuide { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - mmm_safeAreaInsets - -
    -
    -
    -
    -
    -
    -

    Effective safeAreaInsets as seen by mmm_safeAreaLayoutGuide.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) UIEdgeInsets mmm_safeAreaInsets;
    - -
    -
    -

    Swift

    -
    var mmm_safeAreaInsets: UIEdgeInsets { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Constraints anchoring the given view within the receiver according to horizontal and vertical alignment flags. -Note that constrains are not added into the reciever automatically. -It is recommended to use this method instead of the mmm_addConstraintsForSubview:* bunch.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSArray<NSLayoutConstraint *> *)
    -    mmm_constraintsAligningView:(nonnull UIView *)subview
    -                   horizontally:
    -                       (MMMLayoutHorizontalAlignment)horizontalAlignment
    -                     vertically:(MMMLayoutVerticalAlignment)verticalAlignment
    -                         insets:(UIEdgeInsets)insets;
    - -
    -
    -

    Swift

    -
    func mmm_constraintsAligningView(_ subview: UIView, horizontally horizontalAlignment: MMMLayoutHorizontalAlignment, vertically verticalAlignment: MMMLayoutVerticalAlignment, insets: UIEdgeInsets) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (NSArray<NSLayoutConstraint *> *)mmm_constraintsAligningView:(UIView *)subview
    -	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment DEPRECATED_ATTRIBUTE;
    - -
    -
    -

    Swift

    -
    func mmm_constraintsAligningView(_ subview: UIView, horizontally horizontalAlignment: MMMLayoutHorizontalAlignment) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (NSArray<NSLayoutConstraint *> *)mmm_constraintsAligningView:(UIView *)subview
    -	vertically:(MMMLayoutVerticalAlignment)verticalAlignment DEPRECATED_ATTRIBUTE;
    - -
    -
    -

    Swift

    -
    func mmm_constraintsAligningView(_ subview: UIView, vertically verticalAlignment: MMMLayoutVerticalAlignment) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (NSArray<NSLayoutConstraint *> *)mmm_constraintsAligningGuide:(UILayoutGuide *)guide
    -	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment
    -	vertically:(MMMLayoutVerticalAlignment)verticalAlignment
    -	insets:(UIEdgeInsets)insets NS_SWIFT_NAME(mmm_constraints(aligning:horizontally:vertically:insets:));
    - -
    -
    -

    Swift

    -
    func mmm_constraints(aligning guide: UILayoutGuide, horizontally horizontalAlignment: MMMLayoutHorizontalAlignment, vertically verticalAlignment: MMMLayoutVerticalAlignment, insets: UIEdgeInsets) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Adds contraints anchoring the given view within the receiver according to horizontal and vertical alignment flags. -(This is a shortcut for calling mmm_constraintsAligningView:horizontally:vertically:insets: and adding the contraints returned.)

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSArray<NSLayoutConstraint *> *)
    -    mmm_addConstraintsAligningView:(nonnull UIView *)subview
    -                      horizontally:
    -                          (MMMLayoutHorizontalAlignment)horizontalAlignment
    -                        vertically:(MMMLayoutVerticalAlignment)verticalAlignment
    -                            insets:(UIEdgeInsets)insets;
    - -
    -
    -

    Swift

    -
    func mmm_addConstraintsAligningView(_ subview: UIView, horizontally horizontalAlignment: MMMLayoutHorizontalAlignment, vertically verticalAlignment: MMMLayoutVerticalAlignment, insets: UIEdgeInsets) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (NSArray<NSLayoutConstraint *> *)mmm_addConstraintsAligningView:(UIView *)subview
    -	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment
    -	vertically:(MMMLayoutVerticalAlignment)verticalAlignment;
    - -
    -
    -

    Swift

    -
    func mmm_addConstraintsAligningView(_ subview: UIView, horizontally horizontalAlignment: MMMLayoutHorizontalAlignment, vertically verticalAlignment: MMMLayoutVerticalAlignment) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (NSArray<NSLayoutConstraint *> *)mmm_addConstraintsAligningView:(UIView *)subview
    -	horizontally:(MMMLayoutHorizontalAlignment)horizontalAlignment DEPRECATED_ATTRIBUTE;
    - -
    -
    -

    Swift

    -
    func mmm_addConstraintsAligningView(_ subview: UIView, horizontally horizontalAlignment: MMMLayoutHorizontalAlignment) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (NSArray<NSLayoutConstraint *> *)mmm_addConstraintsAligningView:(UIView *)subview
    -	vertically:(MMMLayoutVerticalAlignment)verticalAlignment DEPRECATED_ATTRIBUTE;
    - -
    -
    -

    Swift

    -
    func mmm_addConstraintsAligningView(_ subview: UIView, vertically verticalAlignment: MMMLayoutVerticalAlignment) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Not yet activated constraints implementing a common layout idiom used with text:

    - -
      -
    • the given view is centered within the receiver,
    • -
    • certain minimum padding is ensured on the sides,
    • -
    • if maxWidth > 0, then the width of the view is limited to maxWidth, so it does not grow too wide e.g. on iPad.
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSArray<NSLayoutConstraint *> *)
    -    mmm_constraintsHorizontallyCenteringView:(nonnull UIView *)view
    -                                  minPadding:(CGFloat)minPadding
    -                                    maxWidth:(CGFloat)maxWidth;
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A shortcut activating constraints returned by mmm_constraintsHorizontallyCenteringView:minPadding:maxWidth:.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_addConstraintsHorizontallyCenteringView:(nonnull UIView *)view
    -                                         minPadding:(CGFloat)minPadding
    -                                           maxWidth:(CGFloat)maxWidth;
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A shortcut activating constraints returned by mmm_constraintsHorizontallyCenteringView:minPadding:maxWidth:

    - -
      -
    • setting maxWidth to zero.
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_addConstraintsHorizontallyCenteringView:(nonnull UIView *)view
    -                                         minPadding:(CGFloat)minPadding;
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

To be deprecated soon -

-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Adds constraints anchoring the given subview within the receiver according to horizontal and vertical alignment flags. -The constraints are also returned, so the caller can remove them later, for example.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSArray<NSLayoutConstraint *> *)
    -    mmm_addConstraintsForSubview:(nonnull UIView *)subview
    -             horizontalAlignment:
    -                 (UIControlContentHorizontalAlignment)horizontalAlignment
    -               verticalAlignment:
    -                   (UIControlContentVerticalAlignment)verticalAlignment
    -                          insets:(UIEdgeInsets)insets;
    - -
    -
    -

    Swift

    -
    func mmm_addConstraints(forSubview subview: UIView, horizontalAlignment: UIControl.ContentHorizontalAlignment, verticalAlignment: UIControl.ContentVerticalAlignment, insets: UIEdgeInsets) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (NSArray<NSLayoutConstraint *> *)mmm_addConstraintsForSubview:(UIView *)subview
    -	horizontalAlignment:(UIControlContentHorizontalAlignment)horizontalAlignment
    -	verticalAlignment:(UIControlContentVerticalAlignment)verticalAlignment
    -	DEPRECATED_ATTRIBUTE;
    - -
    -
    -

    Swift

    -
    func mmm_addConstraints(forSubview subview: UIView, horizontalAlignment: UIControl.ContentHorizontalAlignment, verticalAlignment: UIControl.ContentVerticalAlignment) -> [NSLayoutConstraint]
    - -
    -
    -
    -
    -
  • -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Adds constraints and two hidden auxiliary views ensuring that the space between the top of the subview and - topAttribute of topItem is in ‘ratio’ proportion to the space between the bottom of the subview - and bottomAttribute of bottomItem.

    - -

    To be clear: - ratio = (top space) / (bottom space)

    - -

    So you need to use 1 when you want the same size, not 0.5, for example.

    - -

    The given priority will be used for the constraints between the heights of the aux views.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_addVerticalSpaceRatioConstraintsForSubview:(nonnull UIView *)subview
    -                                               topItem:(nonnull id)topItem
    -                                          topAttribute:
    -                                              (NSLayoutAttribute)topAttribute
    -                                            bottomItem:(nonnull id)bottomItem
    -                                       bottomAttribute:
    -                                           (NSLayoutAttribute)bottomAttribute
    -                                                 ratio:(CGFloat)ratio
    -                                              priority:
    -                                                  (UILayoutPriority)priority;
    - -
    -
    -

    Swift

    -
    func mmm_addVerticalSpaceRatioConstraints(forSubview subview: UIView, topItem: Any, topAttribute: NSLayoutConstraint.Attribute, bottomItem: Any, bottomAttribute: NSLayoutConstraint.Attribute, ratio: CGFloat, priority: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_addVerticalSpaceRatioConstraintsForSubview:(UIView *)subview
    -	topItem:(id)topItem topAttribute:(NSLayoutAttribute)topAttribute
    -	bottomItem:(id)bottomItem bottomAttribute:(NSLayoutAttribute)bottomAttribute
    -	ratio:(CGFloat)ratio;
    - -
    -
    -

    Swift

    -
    func mmm_addVerticalSpaceRatioConstraints(forSubview subview: UIView, topItem: Any, topAttribute: NSLayoutConstraint.Attribute, bottomItem: Any, bottomAttribute: NSLayoutConstraint.Attribute, ratio: CGFloat)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Adds constrains and a hidden auxiliary view ensuring that specified item / attribute vertically divides -the subview in the specified ratio. -Unlike the previous function the ratio here is given not as (top space / bottom space), but as -(top space / (top space + bottom space)). Sorry for the confusion, deprecating this one for now.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_addVerticalSpaceRatioConstraintsForSubview:(nonnull UIView *)subview
    -                                                  item:(nonnull id)item
    -                                             attribute:
    -                                                 (NSLayoutAttribute)attribute
    -                                                 ratio:(CGFloat)ratio;
    - -
    -
    -

    Swift

    -
    func mmm_addVerticalSpaceRatioConstraints(forSubview subview: UIView, item: Any, attribute: NSLayoutConstraint.Attribute, ratio: CGFloat)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Shortcuts for compression resistance and hugging priorities.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setVerticalCompressionResistance:(UILayoutPriority)priority;
    - -
    -
    -

    Swift

    -
    func mmm_setVerticalCompressionResistance(_ priority: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setHorizontalCompressionResistance:(UILayoutPriority)priority;
    - -
    -
    -

    Swift

    -
    func mmm_setHorizontalCompressionResistance(_ priority: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setVerticalHuggingPriority:(UILayoutPriority)priority;
    - -
    -
    -

    Swift

    -
    func mmm_setVerticalHuggingPriority(_ priority: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setHorizontalHuggingPriority:(UILayoutPriority)priority;
    - -
    -
    -

    Swift

    -
    func mmm_setHorizontalHuggingPriority(_ priority: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setVerticalCompressionResistance:(UILayoutPriority)compressionResistance hugging:(UILayoutPriority)hugging DEPRECATED_ATTRIBUTE;
    - -
    -
    -

    Swift

    -
    func mmm_setVerticalCompressionResistance(_ compressionResistance: UILayoutPriority, hugging: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setHorizontalCompressionResistance:(UILayoutPriority)compressionResistance hugging:(UILayoutPriority)hugging DEPRECATED_ATTRIBUTE;
    - -
    -
    -

    Swift

    -
    func mmm_setHorizontalCompressionResistance(_ compressionResistance: UILayoutPriority, hugging: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setCompressionResistanceHorizontal:(UILayoutPriority)horizontal
    -	vertical:(UILayoutPriority)vertical NS_SWIFT_NAME(mmm_setCompressionResistance(horizontal:vertical:));
    - -
    -
    -

    Swift

    -
    func mmm_setCompressionResistance(horizontal: UILayoutPriority, vertical: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_setHuggingHorizontal:(UILayoutPriority)horizontal
    -	vertical:(UILayoutPriority)vertical NS_SWIFT_NAME(mmm_setHugging(horizontal:vertical:));
    - -
    -
    -

    Swift

    -
    func mmm_setHugging(horizontal: UILayoutPriority, vertical: UILayoutPriority)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes.html deleted file mode 100644 index 94402af..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes.html +++ /dev/null @@ -1,1516 +0,0 @@ - - - - Classes Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

Classes

-

The following classes are available globally.

- -
-
- -
-
-
-
    -
  • -
    - - - - MMMTableViewCell - -
    -
    -
    -
    -
    -
    -

    A base for table view cells redeclareing the designated initializer into the one we typically use, -so subclasses do not have to.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMTableViewCell : UITableViewCell
    - -
    -
    -

    Swift

    -
    class MMMTableViewCell : UITableViewCell
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMViewWrappingCell - -
    -
    -
    -
    -
    -
    -

    A simple table view cell wrapping the given view.

    - -

    This is handy when you have a view already and just want to show it as one more cell.

    - -

    The view being wrapped should support Auto Layout and inflate its height properly. The cell has its selectionStyle - set to UITableViewCellSelectionStyleNone as these kind of cells typically do not appear selected.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMViewWrappingCell<ViewType> : MMMTableViewCell
    - -
    -
    -

    Swift

    -
    class MMMViewWrappingCell<ViewType> : MMMTableViewCell where ViewType : AnyObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMScrollViewShadows - -
    -
    -
    -
    -
    -
    -

    A helper for adding top and bottom shadows into any UIScrollView-based class. -You create an instance in your subclass and forward calls from layoutSubviews.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMScrollViewShadows : NSObject
    - -
    -
    -

    Swift

    -
    class MMMScrollViewShadows : NSObject
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Holds configuration for MMMScrollViewShadows that can be set only on initialization time.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMScrollViewShadowsSettings : NSObject
    - -
    -
    -

    Swift

    -
    class MMMScrollViewShadowsSettings : NSObject
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A view that’s used internally to render shadows in MMMAutoLayoutScrollView. -Open for reuse in cases we want to display compatible shadows but differntly controlled. -Note that this does not support Auto Layout, you have to manage its frame.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMScrollViewShadowView : UIView
    - -
    -
    -

    Swift

    -
    class MMMScrollViewShadowView : UIView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMNavigationHop - -
    -
    -
    -
    -
    -
    -

    Opening a deep link can involve following through one or more steps, for example:

    - -

    1) make sure the main screen is visible and can switch between the pages; - 2) move to the recipes page; - 3) open recipe with ID N; - 4) scroll to ingredients, etc.

    - -

    This is a single step in such a chain.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMNavigationHop : NSObject
    - -
    -
    -

    Swift

    -
    class MMMNavigationHop : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMNavigationPath - -
    -
    -
    -
    -
    -
    -

    A navigation path is just a collection of one or more “hops”.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMNavigationPath : NSObject
    - -
    -
    -

    Swift

    -
    class MMMNavigationPath : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMNavigation - -
    -
    -
    -
    -
    -
    -

    Manages switching between different sections of the app (kind of internal URL router). -It’s like a central hub accepting navigation requests and then passing them to the entities that able to perform them. -(The entities that are able to open requests should register themselves as handlers.)

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMNavigation : NSObject
    - -
    -
    -

    Swift

    -
    class MMMNavigation : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMNavigationRequest - -
    -
    -
    -
    -
    -
    -

    Info about a navigation request that is passed to handlers.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMNavigationRequest : NSObject
    - -
    -
    -

    Swift

    -
    class MMMNavigationRequest : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMStubViewController - -
    -
    -
    -
    -
    -
    -

    This is to be used during development to stub not ready yet parts of the app.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMStubViewController : UIViewController
    - -
    -
    -

    Swift

    -
    class MMMStubViewController : UIViewController
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMImageView - -
    -
    -
    -
    -
    -
    -

    A limited replacement for UIImageView fixing its inability to properly work with images having - non-zero alignmentRectInsets when scaled.

    - -

    Note that this view is already constrained to the aspect ratio of the image’s alignment rect, - so you should not use hard (equal) pins against both width and height or against all edges.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMImageView : UIView
    - -
    -
    -

    Swift

    -
    class MMMImageView : UIView
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A vertical scroll view with a content view and preconfigured constraints, so there is no need in creating - a scroll view / content view sandwitch manually every time.

    - -

    It also supports top and bottom shadows that are displayed only when the content is clipped. - The shadows can be enabled individually and they can sit either flush with the edges of the scroll view - or can be inset according to adjustedContentInset, which can be handy when vertical safeAreaInsets need - to be taken into account. (Note that contentInsetAdjustmentBehavior has to be either None or Always - on this view since “automatic” options can lead to cyclic calculations.) Also note that scroll indicators - are disabled here by default.

    - -

    Begin by adding your controls and constraints into the contentView ensuring that its size can be derived from your - constraints alone. Avoid constraints to the scroll view itself or outside views unless you are prepared to deal - with the consequences.

    - -

    Note that the width of the contentView will be constrainted hard to be equal to the width of the scroll view - and its height will be constrained with prio 251 to be at least as large as the height of the scroll view.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMAutoLayoutScrollView : UIScrollView
    - -
    -
    -

    Swift

    -
    class MMMAutoLayoutScrollView : UIScrollView
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A subview of MMMAutoLayoutScrollView where all the subviews should be added.

    - -
      -
    • (It’s not different from UIView, but making it of its own class helps when browsing view hierarchies.)
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMAutoLayoutScrollViewContentView : UIView
    - -
    -
    -

    Swift

    -
    class MMMAutoLayoutScrollViewContentView : UIView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMStubView - -
    -
    -
    -
    -
    -
    -

    To be used during development as a placeholder for not yet implemented views. -It inherits a vertical scroll view so it’s possible to see that gesture recognizers of the container do not interfere -with a typical scrolling.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMStubView : UIScrollView
    - -
    -
    -

    Swift

    -
    class MMMStubView : UIScrollView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMNavigationStack - -
    -
    -
    -
    -
    -
    -

    This is to track the navigation state of the app and have the possibility to programmatically return to registered points of - the navigation path. The actual navigation entities of the app (usually view controllers) must cooperate in order to - achieve this.

    - -

    The possibility to go back is needed to properly handle in-app links. We have a basic mechanism for this (MMMNavigation) - which allows to “open” a part of a link and forward the remaining parts to the corresponding handler down the navigation tree. - The handlers thus need to be able to “close” current navigation path before opening something new.

    - -

    Although navigation in the app is better represented by a tree, we assume here that at least the current path in this tree - can be represented as a stack. Each element of the stack can correspond to a modal view controller or alert view, for example, - but it can also correspond to a special state of the app or a screen.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMNavigationStack : NSObject
    - -
    -
    -

    Swift

    -
    class MMMNavigationStack : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMTableView - -
    -
    -
    -
    -
    -
    -

    A table view supporting top and bottom shadows.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMTableView : UITableView <MMMPreferredSizeChanges>
    - -
    -
    -

    Swift

    -
    class MMMTableView : UITableView, MMMPreferredSizeChanges
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMShadowViewSetting - -
    -
    -
    -
    -
    -
    -

    Holds configuration for MMMShadowView.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMShadowViewSetting : NSObject
    - -
    -
    -

    Swift

    -
    class MMMShadowViewSetting : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMShadowView - -
    -
    -
    -
    -
    -
    -

    Helper view for adding custom layer shadows, while taking the the shadow sizes in conserderation for its final frame.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMShadowView : UIView
    - -
    -
    -

    Swift

    -
    class MMMShadowView : UIView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMContainerView - -
    -
    -
    -
    -
    -
    -

    Auto Layout does not support constraints against groups of items, so this is for the cases a normal UIView is -typically used as a container for such a group. -Unlike UIView we have translatesAutoresizingMaskIntoConstraints set to NO already. -Also MMMContainerView does not intercept touches but subviews still do.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMContainerView : UIView
    - -
    -
    -

    Swift

    -
    class MMMContainerView : UIView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMLayoutUtils - -
    -
    -
    -
    -
    -
    -

    This is to group a few simple layout helpers.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMLayoutUtils : NSObject
    - -
    -
    -

    Swift

    -
    class MMMLayoutUtils : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMVelocityMeter - -
    -
    -
    -
    -
    -
    -

    A little helper for velocity/acceleration calculations: you feed it values with timestamps and can get the most recent -acceleration/velocity values.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMVelocityMeter : NSObject
    - -
    -
    -

    Swift

    -
    class MMMVelocityMeter : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMAnimation - -
    -
    -
    -
    -
    -
    -

    Minimalistic animation helpers.

    - -

    Terminology:

    - -
      -
    • Normalized time — time value from the [0; 1] range.
    • -
    • Curved time — normalized time transformed using one of the predefined animation curves.
    • -
    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMAnimation : NSObject
    - -
    -
    -

    Swift

    -
    class MMMAnimation : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMAnimator - -
    -
    -
    -
    -
    -
    -

    Minimalistic animator object in the spirit of helpers defined in MMMAnimation.

    - -

    You add animation items, which are basically a set of blocks that will be called every frame on the main run loop and - when it’s done or cancelled.

    - -

    It’s not for every case, it’s for those moments when you know the duration in advance and just need to animate a - simple custom property and don’t want to subclass CALayer or mess with its multithreaded delegates.

    - -

    The animator object does not take care of interpolation of values nor time curves, the normalized time passed into - update blocks can be transformed and values can be interpolated using simple helpers in MMMAnimation.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMAnimator : NSObject
    - -
    -
    -

    Swift

    -
    class MMMAnimator : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMAnimationHandle - -
    -
    -
    -
    -
    -
    -

    Sort of a handle returned by MMMAnimator when a new animation is scheduled. -Keep it around, otherwise the animation will be cancelled.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMAnimationHandle : NSObject
    - -
    -
    -

    Swift

    -
    class MMMAnimationHandle : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMCollectionView - -
    -
    -
    -
    -
    -
    -

    Collection view supporting top & bottom shadows.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMCollectionView : UICollectionView
    - -
    -
    -

    Swift

    -
    class MMMCollectionView : UICollectionView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMSpacerView - -
    -
    -
    -
    -
    -
    -

    Auto Layout does not support relationships between empty spaces, so we need to use spacer views and set such -constraints between them. This one is a transparent and by default hidden view which can be used as such a spacer. -It has no intrinsic size and low content hugging and compression resistance priorities. -Unlike UIView we have translatesAutoresizingMaskIntoConstraints set to NO already.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMSpacerView : UIView
    - -
    -
    -

    Swift

    -
    class MMMSpacerView : UIView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMStackContainer - -
    -
    -
    -
    -
    -
    -

    A container which lays out its subviews in certain direction one after another using fixed spacing between them. -It also aligns all the items along the layout line according to the given alignment settings. -Note that you must use setSubviews: method instead of feeding them one by one via addSubview:. -This is kind of a UIStackView that we understand the internals of.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMStackContainer : UIView
    - -
    -
    -

    Swift

    -
    class MMMStackContainer : UIView
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Vertical version of MMMStackContainer.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMVerticalStackContainer : MMMStackContainer
    - -
    -
    -

    Swift

    -
    class MMMVerticalStackContainer : MMMStackContainer
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Horizontal version of MMMStackContainer.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMHorizontalStackContainer : MMMStackContainer
    - -
    -
    -

    Swift

    -
    class MMMHorizontalStackContainer : MMMStackContainer
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMAutoLayoutIsolator - -
    -
    -
    -
    -
    -
    -

    Wraps a view that uses Auto Layout into a manual layout view providing sizeThatFits: for the outside world. -Can be handy with old APIs that do not fully support Auto Layout.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMAutoLayoutIsolator : UIView
    - -
    -
    -

    Swift

    -
    class MMMAutoLayoutIsolator : UIView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMPaddedView - -
    -
    -
    -
    -
    -
    -

    Wraps a view padding it from all the sides.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMPaddedView : UIView
    - -
    -
    -

    Swift

    -
    class MMMPaddedView : UIView
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A view displaying a gradient from top to bottom. The linearity of the gradient can be controlled. -Can be handy for shadow overlays, etc.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMVerticalGradientView : UIView
    - -
    -
    -

    Swift

    -
    class MMMVerticalGradientView : UIView
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMStylesheet - -
    -
    -
    -
    -
    -
    -

    A base for app-specific stylesheets: commonly used paddings, colors, fonts, etc in a single place.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMStylesheet : NSObject
    - -
    -
    -

    Swift

    -
    class MMMStylesheet : NSObject
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Dimension converter that uses a table of scales.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @interface MMMStylesheetScaleConverter : NSObject <MMMStylesheetConverter>
    - -
    -
    -

    Swift

    -
    class MMMStylesheetScaleConverter : NSObject, MMMStylesheetConverter
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAnimation.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAnimation.html deleted file mode 100644 index 9401b0d..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAnimation.html +++ /dev/null @@ -1,611 +0,0 @@ - - - - MMMAnimation Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMAnimation

-
-
-

Objective-C

-
@interface MMMAnimation : NSObject
- -
-
-

Swift

-
class MMMAnimation : NSObject
- -
-
-

Minimalistic animation helpers.

- -

Terminology:

- -
    -
  • Normalized time — time value from the [0; 1] range.
  • -
  • Curved time — normalized time transformed using one of the predefined animation curves.
  • -
- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Time obtained by curving the given normalized time (from [0; 1] range).

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGFloat)curvedTimeForTime:(CGFloat)time curve:(MMMAnimationCurve)curve;
    - -
    -
    -

    Swift

    -
    class func curvedTime(forTime time: CGFloat, curve: MMMAnimationCurve) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Inverse function for curvedTimeForTime:curve:, i.e. when we know the value returned by curvedTimeForTime:curve: -and want the time value passed there. -This should be used sparingly (not every frame) as the implementation is no very efficient.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGFloat)timeForCurvedTime:(CGFloat)time curve:(MMMAnimationCurve)curve;
    - -
    -
    -

    Swift

    -
    class func time(forCurvedTime time: CGFloat, curve: MMMAnimationCurve) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Time obtained by clamping the given time into [startTime; startTime + duration], normalizing to [0; 1] range, -and then curving using a preset curve.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGFloat)curvedTimeForTime:(CGFloat)t
    -                   startTime:(CGFloat)startTime
    -                    duration:(CGFloat)duration
    -                       curve:(MMMAnimationCurve)curve;
    - -
    -
    -

    Swift

    -
    class func curvedTime(forTime t: CGFloat, startTime: CGFloat, duration: CGFloat, curve: MMMAnimationCurve) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A float between ‘from’ and ‘to’ corresponding to already normalized and curved time.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGFloat)interpolateFrom:(CGFloat)from to:(CGFloat)to time:(CGFloat)time;
    - -
    -
    -

    Swift

    -
    class func interpolate(from: CGFloat, to: CGFloat, time: CGFloat) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    - -
    -
    -

    This has been renamed. Use the version above.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGFloat)interpolateFrom:(CGFloat)from
    -                        to:(CGFloat)to
    -                curvedTime:(CGFloat)time;
    - -
    -
    -

    Swift

    -
    class func interpolate(from: CGFloat, to: CGFloat, curvedTime time: CGFloat) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Value between two floats corresponding to the given time and timing curve. -If the time is less then startTime, then ‘from’ is returned. -If the time is greater then startTime + duration, then ‘to’ is returned.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGFloat)interpolateFrom:(CGFloat)from
    -                        to:(CGFloat)to
    -                      time:(CGFloat)time
    -                 startTime:(CGFloat)startTime
    -                  duration:(CGFloat)duration
    -                     curve:(MMMAnimationCurve)curve;
    - -
    -
    -

    Swift

    -
    class func interpolate(from: CGFloat, to: CGFloat, time: CGFloat, startTime: CGFloat, duration: CGFloat, curve: MMMAnimationCurve) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - +colorFrom:to:time: - -
    -
    -
    -
    -
    -
    -

    A color between ‘from’ and ‘to’ corresponding to already normalized and curved time. -Only RGB colors are supported. -Interpolation is done along a straight line in the RGB space.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (nonnull UIColor *)colorFrom:(nonnull UIColor *)from
    -                            to:(nonnull UIColor *)to
    -                          time:(CGFloat)time;
    - -
    -
    -

    Swift

    -
    class func color(from: UIColor, to: UIColor, time: CGFloat) -> UIColor
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - +pointFrom:to:time: - -
    -
    -
    -
    -
    -
    -

    A point on the line between given points corresponding to already normalized and curved time.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGPoint)pointFrom:(CGPoint)from to:(CGPoint)to time:(CGFloat)time;
    - -
    -
    -

    Swift

    -
    class func point(from: CGPoint, to: CGPoint, time: CGFloat) -> CGPoint
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAnimationHandle.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAnimationHandle.html deleted file mode 100644 index 46613ef..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAnimationHandle.html +++ /dev/null @@ -1,421 +0,0 @@ - - - - MMMAnimationHandle Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMAnimationHandle

-
-
-

Objective-C

-
@interface MMMAnimationHandle : NSObject
- -
-
-

Swift

-
class MMMAnimationHandle : NSObject
- -
-
-

Sort of a handle returned by MMMAnimator when a new animation is scheduled. -Keep it around, otherwise the animation will be cancelled.

- -
-
- -
-
-
-
    -
  • -
    - - - - inProgress - -
    -
    -
    -
    -
    -
    -

    YES, if the animation has not been finished yet.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) BOOL inProgress;
    - -
    -
    -

    Swift

    -
    var inProgress: Bool { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -cancel - -
    -
    -
    -
    -
    -
    -

    Finishes animation before its designated end time.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)cancel;
    - -
    -
    -

    Swift

    -
    func cancel()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAnimator.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAnimator.html deleted file mode 100644 index 1823c62..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAnimator.html +++ /dev/null @@ -1,528 +0,0 @@ - - - - MMMAnimator Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMAnimator

-
-
-

Objective-C

-
@interface MMMAnimator : NSObject
- -
-
-

Swift

-
class MMMAnimator : NSObject
- -
-
-

Minimalistic animator object in the spirit of helpers defined in MMMAnimation.

- -

You add animation items, which are basically a set of blocks that will be called every frame on the main run loop and - when it’s done or cancelled.

- -

It’s not for every case, it’s for those moments when you know the duration in advance and just need to animate a - simple custom property and don’t want to subclass CALayer or mess with its multithreaded delegates.

- -

The animator object does not take care of interpolation of values nor time curves, the normalized time passed into - update blocks can be transformed and values can be interpolated using simple helpers in MMMAnimation.

- -
-
- -
-
-
-
    -
  • -
    - - - - +shared - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (instancetype)shared;
    - -
    -
    -

    Swift

    -
    class func shared() -> Self
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Schedules a new animation item.

    - -

    The updateBlock is called on every update cycle within the animation’s duration. It is guaranteed to be called with - zero time even if cancelled before the next run loop cycle. The update block is also guaranteed to be called with - time being 1 unless is cancelled earlier.

    - -

    The doneBlock is called after the animation finishes or is cancelled.

    - -

    The repeatCount parameter can be set to 0 to mean infinite repeat count.

    - -

    In case repeatCount is different from 1, then autoreverse influences the way the time changes when passed to - the updateBlock: if YES, then it’ll grow from 0 to 1 and then from 1 to 0 on the next repeat, changing back to - from 0 to 1 after this, etc; if NO, then it’ll always from from 0 to 1 on every repeat step.

    - -

    The animation will start on the next cycle of the refresh timer and will have the timestamp of this cycle as its - actual start time, so there is no need in explicit transactions: all animation added on the same run loop cycle are - guaranteed to be run in sync.

    - -

    Keep the object returned. The animation stops when the reference to this object is released.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull MMMAnimationHandle *)
    -    addAnimationWithDuration:(CGFloat)duration
    -                 updateBlock:(nonnull MMMAnimatorUpdateBlock)updateBlock
    -                   doneBlock:(nullable MMMAnimatorDoneBlock)doneBlock;
    - -
    -
    -

    Swift

    -
    func addAnimation(duration: CGFloat, update updateBlock: @escaping MMMAnimatorUpdateBlock, completion doneBlock: MMMAnimatorDoneBlock? = nil) -> MMMAnimationHandle
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (MMMAnimationHandle *)addAnimationWithDuration:(CGFloat)duration
    -	repeatCount:(NSInteger)repeatCount
    -	autoreverse:(BOOL)autoreverse
    -	updateBlock:(MMMAnimatorUpdateBlock)updateBlock
    -	doneBlock:(nullable MMMAnimatorDoneBlock)doneBlock
    -	NS_SWIFT_NAME(addAnimation(duration:repeatCount:autoreverse:update:completion:));
    - -
    -
    -

    Swift

    -
    func addAnimation(duration: CGFloat, repeatCount: Int, autoreverse: Bool, update updateBlock: @escaping MMMAnimatorUpdateBlock, completion doneBlock: MMMAnimatorDoneBlock? = nil) -> MMMAnimationHandle
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Despite the +shared method defined above you can still create own instances of this class.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)init;
    - -
    -
    -

    Swift

    -
    init()
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    For unit tests only: will synchronously run all the animations already in the animator and the ones added within - the given block in the specified number of steps, executing the given block after each step. - This is used in view-based tests for those views that run all their animations using MMMAnimator.

    - -

    The idea is that an animated action is triggered in the animationsBlock (e.g. hideAnimated:YES) and then the - stepBlock is called in the very beginning and in exactly numberOfSteps - 1 moments afterwards. The moments will be - selected, so they are spaced equally and the last one is exactly at the end of the longest animation item.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)_testRunInNumberOfSteps:(NSInteger)numberOfSteps
    -                     animations:(nonnull void (^)(void))animationsBlock
    -                    forEachStep:(nonnull void (^)(NSInteger))stepBlock;
    - -
    -
    -

    Swift

    -
    func _testRun(numberOfSteps: Int, animations animationsBlock: () -> Void, stepBlock: (Int) -> Void)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAutoLayoutIsolator.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAutoLayoutIsolator.html deleted file mode 100644 index 70b061d..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAutoLayoutIsolator.html +++ /dev/null @@ -1,483 +0,0 @@ - - - - MMMAutoLayoutIsolator Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMAutoLayoutIsolator

-
-
-

Objective-C

-
@interface MMMAutoLayoutIsolator : UIView
- -
-
-

Swift

-
class MMMAutoLayoutIsolator : UIView
- -
-
-

Wraps a view that uses Auto Layout into a manual layout view providing sizeThatFits: for the outside world. -Can be handy with old APIs that do not fully support Auto Layout.

- -
-
- -
-
-
-
    -
  • -
    - - - - view - -
    -
    -
    -
    -
    -
    -

    The view being wrapped.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) UIView *_Nonnull view;
    - -
    -
    -

    Swift

    -
    var view: UIView { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithView: - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithView:(UIView *)view NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init(view: UIView)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAutoLayoutScrollView.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAutoLayoutScrollView.html deleted file mode 100644 index 8eac16e..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMAutoLayoutScrollView.html +++ /dev/null @@ -1,503 +0,0 @@ - - - - MMMAutoLayoutScrollView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMAutoLayoutScrollView

-
-
-

Objective-C

-
@interface MMMAutoLayoutScrollView : UIScrollView
- -
-
-

Swift

-
class MMMAutoLayoutScrollView : UIScrollView
- -
-
-

A vertical scroll view with a content view and preconfigured constraints, so there is no need in creating - a scroll view / content view sandwitch manually every time.

- -

It also supports top and bottom shadows that are displayed only when the content is clipped. - The shadows can be enabled individually and they can sit either flush with the edges of the scroll view - or can be inset according to adjustedContentInset, which can be handy when vertical safeAreaInsets need - to be taken into account. (Note that contentInsetAdjustmentBehavior has to be either None or Always - on this view since “automatic” options can lead to cyclic calculations.) Also note that scroll indicators - are disabled here by default.

- -

Begin by adding your controls and constraints into the contentView ensuring that its size can be derived from your - constraints alone. Avoid constraints to the scroll view itself or outside views unless you are prepared to deal - with the consequences.

- -

Note that the width of the contentView will be constrainted hard to be equal to the width of the scroll view - and its height will be constrained with prio 251 to be at least as large as the height of the scroll view.

- -
-
- -
-
-
-
    -
  • -
    - - - - contentView - -
    -
    -
    -
    -
    -
    -

    This is where your content subviews should be added.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) MMMAutoLayoutScrollViewContentView *_Nonnull contentView;
    - -
    -
    -

    Swift

    -
    var contentView: MMMAutoLayoutScrollViewContentView { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithSettings: - -
    -
    -
    -
    -
    -
    -

    Initializes with the given config.

    -
    -

    Note

    - Note that changing the config after the initialization has no effect on the view. - -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithSettings:(nonnull MMMScrollViewShadowsSettings *)settings;
    - -
    -
    -

    Swift

    -
    init(settings: MMMScrollViewShadowsSettings)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Initializes with default settings, a shortcut for initWithSettings:[[MMMScrollViewShadowsSettings alloc] init].

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)init;
    - -
    -
    -

    Swift

    -
    convenience init()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMCollectionView.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMCollectionView.html deleted file mode 100644 index 10689f7..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMCollectionView.html +++ /dev/null @@ -1,482 +0,0 @@ - - - - MMMCollectionView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMCollectionView

-
-
-

Objective-C

-
@interface MMMCollectionView : UICollectionView
- -
-
-

Swift

-
class MMMCollectionView : UICollectionView
- -
-
-

Collection view supporting top & bottom shadows.

- -
-
- -
-
-
-
    -
  • -
    - - - - -initWithSettings: - -
    -
    -
    -
    -
    -
    -

    Uses UICollectionViewFlowLayout by default.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull instancetype)initWithSettings:
    -    (nonnull MMMScrollViewShadowsSettings *)settings;
    - -
    -
    -

    Swift

    -
    init(settings: MMMScrollViewShadowsSettings)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (instancetype)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMContainerView.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMContainerView.html deleted file mode 100644 index b7a87c2..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMContainerView.html +++ /dev/null @@ -1,422 +0,0 @@ - - - - MMMContainerView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMContainerView

-
-
-

Objective-C

-
@interface MMMContainerView : UIView
- -
-
-

Swift

-
class MMMContainerView : UIView
- -
-
-

Auto Layout does not support constraints against groups of items, so this is for the cases a normal UIView is -typically used as a container for such a group. -Unlike UIView we have translatesAutoresizingMaskIntoConstraints set to NO already. -Also MMMContainerView does not intercept touches but subviews still do.

- -
-
- -
-
-
-
    -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)init NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMHorizontalStackContainer.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMHorizontalStackContainer.html deleted file mode 100644 index 0514e97..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMHorizontalStackContainer.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - MMMHorizontalStackContainer Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMHorizontalStackContainer

-
-
-

Objective-C

-
@interface MMMHorizontalStackContainer : MMMStackContainer
- -
-
-

Swift

-
class MMMHorizontalStackContainer : MMMStackContainer
- -
-
-

Horizontal version of MMMStackContainer.

- -
-
- -
-
-
- -
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMImageView.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMImageView.html deleted file mode 100644 index aa0065c..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMImageView.html +++ /dev/null @@ -1,583 +0,0 @@ - - - - MMMImageView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMImageView

-
-
-

Objective-C

-
@interface MMMImageView : UIView
- -
-
-

Swift

-
class MMMImageView : UIView
- -
-
-

A limited replacement for UIImageView fixing its inability to properly work with images having - non-zero alignmentRectInsets when scaled.

- -

Note that this view is already constrained to the aspect ratio of the image’s alignment rect, - so you should not use hard (equal) pins against both width and height or against all edges.

- -
-
- -
-
-
-
    -
  • -
    - - - - image - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, nullable) UIImage *image
    - -
    -
    -

    Swift

    -
    var image: UIImage? { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - highlightedImage - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, nullable) UIImage *highlightedImage
    - -
    -
    -

    Swift

    -
    var highlightedImage: UIImage? { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - highlighted - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, getter=isHighlighted) BOOL highlighted
    - -
    -
    -

    Swift

    -
    var isHighlighted: Bool { get set }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithImage:(nullable UIImage *)image highlightedImage:(nullable UIImage *)highlightedImage NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init(image: UIImage?, highlightedImage: UIImage?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Convenience initializer.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)init;
    - -
    -
    -

    Swift

    -
    convenience init()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithImage: - -
    -
    -
    -
    -
    -
    -

    Convenience initializer.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithImage:(nullable UIImage *)image;
    - -
    -
    -

    Swift

    -
    convenience init(image: UIImage?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMLayoutUtils.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMLayoutUtils.html deleted file mode 100644 index a7541ab..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMLayoutUtils.html +++ /dev/null @@ -1,509 +0,0 @@ - - - - MMMLayoutUtils Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMLayoutUtils

-
-
-

Objective-C

-
@interface MMMLayoutUtils : NSObject
- -
-
-

Swift

-
class MMMLayoutUtils : NSObject
- -
-
-

This is to group a few simple layout helpers.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    A rect with the given size positioned inside of the target rect in such a way that anchor points of both rects align.

    - -

    Anchor points are given relative to the sizes of the corresponding rects, similar to CALayer’s anchorPoint - property. For example, CGPointMake(0.5, 0.5) represents a center of any rect; CGPointMake(1, 0.5) means - the center point of the right vertical edge.

    - -

    Note that the origin of the rect returned is rounded to the nearest pixels (not points!).

    - -

    See rectWithSize:inRect:contentMode: for a shortcut supporting UIViewContentMode.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGRect)rectWithSize:(CGSize)size
    -                anchor:(CGPoint)anchor
    -            withinRect:(CGRect)targetRect
    -                anchor:(CGPoint)targetAnchor;
    - -
    -
    -

    Swift

    -
    class func rect(withSize size: CGSize, anchor: CGPoint, withinRect targetRect: CGRect, anchor targetAnchor: CGPoint) -> CGRect
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A shortcut for the above method with anchors being the same for both source and target rect. -(This way the resulting rect will be always inside of the target one, assuming anchors are within [0; 1] range.)

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGRect)rectWithSize:(CGSize)size
    -            withinRect:(CGRect)targetRect
    -                anchor:(CGPoint)anchor;
    - -
    -
    -

    Swift

    -
    class func rect(withSize size: CGSize, withinRect targetRect: CGRect, anchor: CGPoint) -> CGRect
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A frame for the sourceRect positioned within the targetRect according to standard UIViewContentMode flags - related to the layout (i.e. all except UIViewContentModeRedraw).

    - -

    Note that the origin of the resulting rectangle is always rounded to the nearest pixel.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGRect)rectWithSize:(CGSize)size
    -            withinRect:(CGRect)targetRect
    -           contentMode:(UIViewContentMode)contentMode;
    - -
    -
    -

    Swift

    -
    class func rect(withSize size: CGSize, withinRect targetRect: CGRect, contentMode: UIView.ContentMode) -> CGRect
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A frame of the given size with its center at the specified point (assuming the center is defined by the given anchor - point).

    - -

    Note that the origin of the resulting rectangle is rounded to the nearest pixel boundary.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGRect)rectWithSize:(CGSize)size
    -               atPoint:(CGPoint)center
    -                anchor:(CGPoint)anchor;
    - -
    -
    -

    Swift

    -
    class func rect(withSize size: CGSize, atPoint center: CGPoint, anchor: CGPoint) -> CGRect
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - +rectWithSize:center: - -
    -
    -
    -
    -
    -
    -

    Same as rectWithSize:center:anchor: with anchor set to (0.5, 0.5).

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (CGRect)rectWithSize:(CGSize)size center:(CGPoint)center;
    - -
    -
    -

    Swift

    -
    class func rect(withSize size: CGSize, center: CGPoint) -> CGRect
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigation.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigation.html deleted file mode 100644 index 46d3ff1..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigation.html +++ /dev/null @@ -1,473 +0,0 @@ - - - - MMMNavigation Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMNavigation

-
-
-

Objective-C

-
@interface MMMNavigation : NSObject
- -
-
-

Swift

-
class MMMNavigation : NSObject
- -
-
-

Manages switching between different sections of the app (kind of internal URL router). -It’s like a central hub accepting navigation requests and then passing them to the entities that able to perform them. -(The entities that are able to open requests should register themselves as handlers.)

- -
-
- -
-
-
-
    -
  • -
    - - - - +root - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (instancetype)root;
    - -
    -
    -

    Swift

    -
    class func root() -> Self
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Starts the process of opening of the given path. Calls the completion block when done, the block receives ID of the -corresponding request. Links are opened one by one. Any navigation request received while handling the current one -will be queued.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull MMMNavigationRequestId)
    -    navigateTo:(nonnull MMMNavigationPath *)path
    -    completion:(nonnull MMMNavigationCompletionBlock)completion;
    - -
    -
    -

    Swift

    -
    func navigate(to path: MMMNavigationPath, completion: @escaping MMMNavigationCompletionBlock) -> Any
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Handlers -

-
-
-
    -
  • -
    - - - - -addHandler: - -
    -
    -
    -
    -
    -
    -

    Adds a handler and returns a cookie/ID object that can be later used to remove it.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull MMMNavigationHandlerId)addHandler:
    -    (nonnull id<MMMNavigationHandler>)handler;
    - -
    -
    -

    Swift

    -
    func add(_ handler: MMMNavigationHandler) -> Any
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -removeHandlerWithId: - -
    -
    -
    -
    -
    -
    -

    Removes a handler by its ID assigned by addHandler.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)removeHandlerWithId:(nonnull MMMNavigationHandlerId)handlerId;
    - -
    -
    -

    Swift

    -
    func removeHandler(withId handlerId: Any)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigationHop.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigationHop.html deleted file mode 100644 index 6d8ef6c..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigationHop.html +++ /dev/null @@ -1,491 +0,0 @@ - - - - MMMNavigationHop Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMNavigationHop

-
-
-

Objective-C

-
@interface MMMNavigationHop : NSObject
- -
-
-

Swift

-
class MMMNavigationHop : NSObject
- -
-
-

Opening a deep link can involve following through one or more steps, for example:

- -

1) make sure the main screen is visible and can switch between the pages; - 2) move to the recipes page; - 3) open recipe with ID N; - 4) scroll to ingredients, etc.

- -

This is a single step in such a chain.

- -
-
- -
-
-
-
    -
  • -
    - - - - action - -
    -
    -
    -
    -
    -
    -

    Name/ID of the hop. Supposed to be a flat string, like ‘recipes’, not a path.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) NSString *_Nonnull action;
    - -
    -
    -

    Swift

    -
    var action: String { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - params - -
    -
    -
    -
    -
    -
    -

    Optional parameters for this hop only.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly, nullable) NSDictionary<NSString *, id> *params;
    - -
    -
    -

    Swift

    -
    var params: [String : Any]? { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithAction:(NSString *)action params:(nullable NSDictionary<NSString*, id> *)params NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init(action: String, params: [String : Any]?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithAction: - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithAction:(NSString *)action;
    - -
    -
    -

    Swift

    -
    convenience init(action: String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigationPath.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigationPath.html deleted file mode 100644 index b0d5de2..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigationPath.html +++ /dev/null @@ -1,517 +0,0 @@ - - - - MMMNavigationPath Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMNavigationPath

-
-
-

Objective-C

-
@interface MMMNavigationPath : NSObject
- -
-
-

Swift

-
class MMMNavigationPath : NSObject
- -
-
-

A navigation path is just a collection of one or more “hops”.

- -
-
- -
-
-
-
    -
  • -
    - - - - hops - -
    -
    -
    -
    -
    -
    -

    All the “hops” the link consists of.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) NSArray<MMMNavigationHop *> *_Nonnull hops;
    - -
    -
    -

    Swift

    -
    var hops: [MMMNavigationHop] { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -pathWithoutFirstHop - -
    -
    -
    -
    -
    -
    -

    A new path obtained from the current one by removing the first hop.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nullable MMMNavigationPath *)pathWithoutFirstHop;
    - -
    -
    -

    Swift

    -
    func pathWithoutFirstHop() -> MMMNavigationPath?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -firstHop - -
    -
    -
    -
    -
    -
    -

    The first hop in the path or nil if the path is empty.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nullable MMMNavigationHop *)firstHop;
    - -
    -
    -

    Swift

    -
    func firstHop() -> MMMNavigationHop?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithHops: - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithHops:(NSArray<MMMNavigationHop *> *)hops NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init(hops: [MMMNavigationHop])
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithURI: - -
    -
    -
    -
    -
    -
    -

    Convenience initializer. Allows to use URIs like “main/recipes”, to construct hops out of it. -Note that it does not currently support hop parameters.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithURI:(nonnull NSString *)uri;
    - -
    -
    -

    Swift

    -
    convenience init(uri: String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigationRequest.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigationRequest.html deleted file mode 100644 index 1f35957..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigationRequest.html +++ /dev/null @@ -1,456 +0,0 @@ - - - - MMMNavigationRequest Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMNavigationRequest

-
-
-

Objective-C

-
@interface MMMNavigationRequest : NSObject
- -
-
-

Swift

-
class MMMNavigationRequest : NSObject
- -
-
-

Info about a navigation request that is passed to handlers.

- -
-
- -
-
-
-
    -
  • -
    - - - - originalPath - -
    -
    -
    -
    -
    -
    -

    A sequence of hops the request has started with. This is never changed during lifetime of the request.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) MMMNavigationPath *_Nonnull originalPath;
    - -
    -
    -

    Swift

    -
    var originalPath: MMMNavigationPath { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - path - -
    -
    -
    -
    -
    -
    -

    The current sequence of hops to follow. Handlers can adjust this.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) MMMNavigationPath *_Nonnull path;
    - -
    -
    -

    Swift

    -
    var path: MMMNavigationPath { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Called by the handler when all the hops in the path were followed through.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)didFinishSuccessfully:(BOOL)successfully;
    - -
    -
    -

    Swift

    -
    func didFinishSuccessfully(_ successfully: Bool)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Called by the handler to indicate that the sequence of hops (possibly changed) should be continued by another handler. -The handler is supposed to conform to MMMNavigationHandler protocol and this will be checked for in this method. -The parameter here is not described as id to make it more convenient to call this method.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)continueWithPath:(nonnull MMMNavigationPath *)path
    -                 handler:(nonnull id)handler;
    - -
    -
    -

    Swift

    -
    func `continue`(with path: MMMNavigationPath, handler: Any)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigationStack.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigationStack.html deleted file mode 100644 index 4a0cdc9..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMNavigationStack.html +++ /dev/null @@ -1,447 +0,0 @@ - - - - MMMNavigationStack Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMNavigationStack

-
-
-

Objective-C

-
@interface MMMNavigationStack : NSObject
- -
-
-

Swift

-
class MMMNavigationStack : NSObject
- -
-
-

This is to track the navigation state of the app and have the possibility to programmatically return to registered points of - the navigation path. The actual navigation entities of the app (usually view controllers) must cooperate in order to - achieve this.

- -

The possibility to go back is needed to properly handle in-app links. We have a basic mechanism for this (MMMNavigation) - which allows to “open” a part of a link and forward the remaining parts to the corresponding handler down the navigation tree. - The handlers thus need to be able to “close” current navigation path before opening something new.

- -

Although navigation in the app is better represented by a tree, we assume here that at least the current path in this tree - can be represented as a stack. Each element of the stack can correspond to a modal view controller or alert view, for example, - but it can also correspond to a special state of the app or a screen.

- -
-
- -
-
-
-
    -
  • -
    - - - - +shared - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    + (instancetype)shared;
    - -
    -
    -

    Swift

    -
    class func shared() -> Self
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Notifies the stack about a new modal navigation context facing the user now, such as a modal view controller being presented or - any other special state of the UI which would require either the assistance from the user or navigation items’ delegate - in order to return to the previous navigation step.

    - -

    Again, navigation steps are not limited to modal view controllers, there can be any entity responsible for the current - state of the UI which wants to clean it up properly when asked for via the corresponding delegate.

    - -

    The optional controller parameter might be a view controller corresponding to the new navigation item. This can be used by - this controller with popAllAfterController:completion: method in order to cancel/pop all the navigation items added after it.

    - -

    A nil is returned if it’s not possible to push anything now (because the stack is in the middle of a change).

    - -

    For now trying to push something when “popping” is in progress is considered a programmer’s error however and it will crash - in Debug.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nullable id<MMMNavigationStackItem>)
    -    pushItemWithName:(nonnull NSString *)name
    -            delegate:(nonnull id<MMMNavigationStackItemDelegate>)delegate
    -          controller:(nullable id)controller;
    - -
    -
    -

    Swift

    -
    func pushItem(name: String, delegate: MMMNavigationStackItemDelegate, controller: Any?) -> MMMNavigationStackItem?
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (BOOL)popAllAfterController:(id)controller completion:(MMMNavigationStackCompletion)completion;
    - -
    -
    -

    Swift

    -
    func popAll(afterController controller: Any, completion: @escaping MMMNavigationStackCompletion) -> Bool
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMPaddedView.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMPaddedView.html deleted file mode 100644 index af32dca..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMPaddedView.html +++ /dev/null @@ -1,514 +0,0 @@ - - - - MMMPaddedView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMPaddedView

-
-
-

Objective-C

-
@interface MMMPaddedView : UIView
- -
-
-

Swift

-
class MMMPaddedView : UIView
- -
-
-

Wraps a view padding it from all the sides.

- -
-
- -
-
-
-
    -
  • -
    - - - - view - -
    -
    -
    -
    -
    -
    -

    The view being wrapped.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) UIView *_Nonnull view;
    - -
    -
    -

    Swift

    -
    var view: UIView { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - insets - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) UIEdgeInsets insets
    - -
    -
    -

    Swift

    -
    var insets: UIEdgeInsets { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithView:insets: - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithView:(UIView *)view insets:(UIEdgeInsets)insets NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init(view: UIView, insets: UIEdgeInsets)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMScrollViewShadowView.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMScrollViewShadowView.html deleted file mode 100644 index a77d1ce..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMScrollViewShadowView.html +++ /dev/null @@ -1,453 +0,0 @@ - - - - MMMScrollViewShadowView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMScrollViewShadowView

-
-
-

Objective-C

-
@interface MMMScrollViewShadowView : UIView
- -
-
-

Swift

-
class MMMScrollViewShadowView : UIView
- -
-
-

A view that’s used internally to render shadows in MMMAutoLayoutScrollView. -Open for reuse in cases we want to display compatible shadows but differntly controlled. -Note that this does not support Auto Layout, you have to manage its frame.

- -
-
- -
-
-
- -
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMScrollViewShadows.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMScrollViewShadows.html deleted file mode 100644 index da86839..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMScrollViewShadows.html +++ /dev/null @@ -1,491 +0,0 @@ - - - - MMMScrollViewShadows Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMScrollViewShadows

-
-
-

Objective-C

-
@interface MMMScrollViewShadows : NSObject
- -
-
-

Swift

-
class MMMScrollViewShadows : NSObject
- -
-
-

A helper for adding top and bottom shadows into any UIScrollView-based class. -You create an instance in your subclass and forward calls from layoutSubviews.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithScrollView:(nonnull UIScrollView *)scrollView
    -	settings:(nonnull MMMScrollViewShadowsSettings *)settings NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init(scrollView: UIScrollView, settings: MMMScrollViewShadowsSettings)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -layoutSubviews - -
    -
    -
    -
    -
    -
    -

    Have to be called from layoutSubviews of our scroll view subclass to update the state of the shadows.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)layoutSubviews;
    - -
    -
    -

    Swift

    -
    func layoutSubviews()
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    YES, if additional content view clipping might be needed for the current shadow settings.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (BOOL)mightNeedClippingView;
    - -
    -
    -

    Swift

    -
    func mightNeedClippingView() -> Bool
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Same as layoutSubviews above but also updates clipToBounds property of the given view in case there are visible

    - -
      -
    • shadows that are not flush with the edges of our scroll view, i.e. when top/bottomShadowShouldUseContentInsets
    • -
    • are used with settings and the corresponding insets are not zero now.
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)layoutSubviewsWithClippingView:(nullable UIView *)clippingView;
    - -
    -
    -

    Swift

    -
    func layoutSubviews(withClippingView clippingView: UIView?)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMScrollViewShadowsSettings.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMScrollViewShadowsSettings.html deleted file mode 100644 index 6f365df..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMScrollViewShadowsSettings.html +++ /dev/null @@ -1,663 +0,0 @@ - - - - MMMScrollViewShadowsSettings Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMScrollViewShadowsSettings

-
-
-

Objective-C

-
@interface MMMScrollViewShadowsSettings : NSObject
- -
-
-

Swift

-
class MMMScrollViewShadowsSettings : NSObject
- -
-
-

Holds configuration for MMMScrollViewShadows that can be set only on initialization time.

- -
-
- -
-
-
-
    -
  • -
    - - - - shadowAlpha - -
    -
    -
    -
    -
    -
    -

    The base shadow color is black with this amount of transparency applied to it.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) CGFloat shadowAlpha;
    - -
    -
    -

    Swift

    -
    var shadowAlpha: CGFloat { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - shadowColor - -
    -
    -
    -
    -
    -
    -

    The base shadow color, ensure this is an RGB color. Note that the alpha channel is ignored, use shadowAlpha instead.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) UIColor *_Nonnull shadowColor;
    - -
    -
    -

    Swift

    -
    var shadowColor: UIColor { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - shadowCurvature - -
    -
    -
    -
    -
    -
    -

    The value between 0 and 1 telling how close to an elliptical curve the shadow’s border should be.

    - -
      -
    • when it’s 0, then the shadow is a normal rectangular one.

    • -
    • when it’s 1, then the gradient of the top (bottom) shadow forms an arc crossing the center of a shadow view and -its both corners.

    • -
    - -

    All values in-between adjust the point at which the gradient crosses the sides of the shadow views.

    - -

    (The default value is 0.5.)

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) CGFloat shadowCurvature;
    - -
    -
    -

    Swift

    -
    var shadowCurvature: CGFloat { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - topShadowEnabled - -
    -
    -
    -
    -
    -
    -

    Disabled by default.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) BOOL topShadowEnabled;
    - -
    -
    -

    Swift

    -
    var topShadowEnabled: Bool { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - topShadowHeight - -
    -
    -
    -
    -
    -
    -

    The height of the top shadow view. (5px by default.)

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) CGFloat topShadowHeight;
    - -
    -
    -

    Swift

    -
    var topShadowHeight: CGFloat { get set }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    YES, if the top shadow should be offset from the top edge of the scroll view by the top offset of content insets.

    - -
      -
    • The default value is NO.
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) BOOL topShadowShouldUseContentInsets;
    - -
    -
    -

    Swift

    -
    var topShadowShouldUseContentInsets: Bool { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - bottomShadowEnabled - -
    -
    -
    -
    -
    -
    -

    Disabled by default.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) BOOL bottomShadowEnabled;
    - -
    -
    -

    Swift

    -
    var bottomShadowEnabled: Bool { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - bottomShadowHeight - -
    -
    -
    -
    -
    -
    -

    The height of the bottom shadow view. (10px by default.)

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) CGFloat bottomShadowHeight;
    - -
    -
    -

    Swift

    -
    var bottomShadowHeight: CGFloat { get set }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    YES, if the bottom shadow should be offset from the bottom edge of the scroll view by the bottom offset of content insets.

    - -
      -
    • The default value is NO.
    • -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) BOOL bottomShadowShouldUseContentInsets;
    - -
    -
    -

    Swift

    -
    var bottomShadowShouldUseContentInsets: Bool { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)init NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init()
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMShadowView.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMShadowView.html deleted file mode 100644 index 041e89e..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMShadowView.html +++ /dev/null @@ -1,515 +0,0 @@ - - - - MMMShadowView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMShadowView

-
-
-

Objective-C

-
@interface MMMShadowView : UIView
- -
-
-

Swift

-
class MMMShadowView : UIView
- -
-
-

Helper view for adding custom layer shadows, while taking the the shadow sizes in conserderation for its final frame.

- -
-
- -
-
-
-
    -
  • -
    - - - - contentView - -
    -
    -
    -
    -
    -
    -

    View that can accepts and lay out subviews.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) UIView *_Nonnull contentView;
    - -
    -
    -

    Swift

    -
    var contentView: UIView { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - settings - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, nullable) NSArray<MMMShadowViewSetting *> *settings
    - -
    -
    -

    Swift

    -
    var settings: [MMMShadowViewSetting]? { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init;
    - -
    -
    -

    Swift

    -
    init()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithSettings: - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithSettings:(nullable NSArray<MMMShadowViewSetting *> *)settings;
    - -
    -
    -

    Swift

    -
    init(settings: [MMMShadowViewSetting]?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMShadowViewSetting.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMShadowViewSetting.html deleted file mode 100644 index 7f5bce6..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMShadowViewSetting.html +++ /dev/null @@ -1,613 +0,0 @@ - - - - MMMShadowViewSetting Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMShadowViewSetting

-
-
-

Objective-C

-
@interface MMMShadowViewSetting : NSObject
- -
-
-

Swift

-
class MMMShadowViewSetting : NSObject
- -
-
-

Holds configuration for MMMShadowView.

- -
-
- -
-
-
-
    -
  • -
    - - - - color - -
    -
    -
    -
    -
    -
    -

    Default is black color.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) UIColor *_Nonnull color;
    - -
    -
    -

    Swift

    -
    var color: UIColor { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - opacity - -
    -
    -
    -
    -
    -
    -

    Default is 0.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) CGFloat opacity;
    - -
    -
    -

    Swift

    -
    var opacity: CGFloat { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - offset - -
    -
    -
    -
    -
    -
    -

    Default is zero.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) CGSize offset;
    - -
    -
    -

    Swift

    -
    var offset: CGSize { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - radius - -
    -
    -
    -
    -
    -
    -

    Default is 0.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) CGFloat radius;
    - -
    -
    -

    Swift

    -
    var radius: CGFloat { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - insets - -
    -
    -
    -
    -
    -
    -

    Default is zero.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) UIEdgeInsets insets;
    - -
    -
    -

    Swift

    -
    var insets: UIEdgeInsets { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - backgroundColor - -
    -
    -
    -
    -
    -
    -

    Default is white color.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) UIColor *_Nonnull backgroundColor;
    - -
    -
    -

    Swift

    -
    var backgroundColor: UIColor { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - cornerRadius - -
    -
    -
    -
    -
    -
    -

    Default is 0.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) CGFloat cornerRadius;
    - -
    -
    -

    Swift

    -
    var cornerRadius: CGFloat { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init;
    - -
    -
    -

    Swift

    -
    init()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithBlock: - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithBlock:(MMMShadowViewSettingBlock)block;
    - -
    -
    -

    Swift

    -
    init(block: @escaping MMMShadowViewSettingBlock)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMSpacerView.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMSpacerView.html deleted file mode 100644 index f694540..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMSpacerView.html +++ /dev/null @@ -1,422 +0,0 @@ - - - - MMMSpacerView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMSpacerView

-
-
-

Objective-C

-
@interface MMMSpacerView : UIView
- -
-
-

Swift

-
class MMMSpacerView : UIView
- -
-
-

Auto Layout does not support relationships between empty spaces, so we need to use spacer views and set such -constraints between them. This one is a transparent and by default hidden view which can be used as such a spacer. -It has no intrinsic size and low content hugging and compression resistance priorities. -Unlike UIView we have translatesAutoresizingMaskIntoConstraints set to NO already.

- -
-
- -
-
-
-
    -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)init NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStackContainer.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStackContainer.html deleted file mode 100644 index 9babeb7..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStackContainer.html +++ /dev/null @@ -1,490 +0,0 @@ - - - - MMMStackContainer Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMStackContainer

-
-
-

Objective-C

-
@interface MMMStackContainer : UIView
- -
-
-

Swift

-
class MMMStackContainer : UIView
- -
-
-

A container which lays out its subviews in certain direction one after another using fixed spacing between them. -It also aligns all the items along the layout line according to the given alignment settings. -Note that you must use setSubviews: method instead of feeding them one by one via addSubview:. -This is kind of a UIStackView that we understand the internals of.

- -
-
- -
-
-
-
    -
  • -
    - - - - -setSubviews: - -
    -
    -
    -
    -
    -
    -

    Sets subviews to be laid out. Previously set subviews will be removed from this container first.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)setSubviews:(nonnull NSArray<UIView *> *)subviews;
    - -
    -
    -

    Swift

    -
    func setSubviews(_ subviews: [UIView])
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Insets define the padding around all the subviews. -Alignment influences horizontal constraints added for the subviews. -Spacing is the fixed distance to set between items.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithDirection:(MMMLayoutDirection)direction
    -                         insets:(UIEdgeInsets)insets
    -                      alignment:(MMMLayoutAlignment)alignment
    -                        spacing:(CGFloat)spacing;
    - -
    -
    -

    Swift

    -
    init(direction: MMMLayoutDirection, insets: UIEdgeInsets, alignment: MMMLayoutAlignment, spacing: CGFloat)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStubView.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStubView.html deleted file mode 100644 index 1ab5c0f..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStubView.html +++ /dev/null @@ -1,452 +0,0 @@ - - - - MMMStubView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMStubView

-
-
-

Objective-C

-
@interface MMMStubView : UIScrollView
- -
-
-

Swift

-
class MMMStubView : UIScrollView
- -
-
-

To be used during development as a placeholder for not yet implemented views. -It inherits a vertical scroll view so it’s possible to see that gesture recognizers of the container do not interfere -with a typical scrolling.

- -
-
- -
-
-
-
    -
  • -
    - - - - -initWithText:index: - -
    -
    -
    -
    -
    -
    -

    The text is optional, the index influences the background color.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithText:(nullable NSString *)text index:(NSInteger)index;
    - -
    -
    -

    Swift

    -
    init(text: String?, index: Int)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStubViewController.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStubViewController.html deleted file mode 100644 index a981f7a..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStubViewController.html +++ /dev/null @@ -1,450 +0,0 @@ - - - - MMMStubViewController Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMStubViewController

-
-
-

Objective-C

-
@interface MMMStubViewController : UIViewController
- -
-
-

Swift

-
class MMMStubViewController : UIViewController
- -
-
-

This is to be used during development to stub not ready yet parts of the app.

- -
-
- -
-
-
-
    -
  • -
    - - - - -initWithText:index: - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithText:(NSString *)text index:(NSInteger)index NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init(text: String, index: Int)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStylesheet.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStylesheet.html deleted file mode 100644 index 84ba321..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStylesheet.html +++ /dev/null @@ -1,931 +0,0 @@ - - - - MMMStylesheet Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMStylesheet

-
-
-

Objective-C

-
@interface MMMStylesheet : NSObject
- -
-
-

Swift

-
class MMMStylesheet : NSObject
- -
-
-

A base for app-specific stylesheets: commonly used paddings, colors, fonts, etc in a single place.

- -
-
- -
-
-
-
    -
  • -
    - - - - currentSizeClass - -
    -
    -
    -
    -
    -
    -

    The size class of the current device. See the MMSize* string constants below.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) NSString *_Nonnull currentSizeClass;
    - -
    -
    -

    Swift

    -
    var currentSizeClass: String { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Allows to avoid code that picks values (fonts, sizes, etc) by explicitely matching currentSizeClass. -A mapping of size classes to values is passed here instead and a match is returned, falling back either to the value -under MMMSizeRest key, or, if it is not present, to the value under the key that seems the closest to the current -size class.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)valueForCurrentSizeClass:
    -    (nonnull NSDictionary<NSString *, id> *)sizeClassToValue;
    - -
    -
    -

    Swift

    -
    func value(forCurrentSizeClass sizeClassToValue: [String : Any]) -> Any
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A version of valueForCurrentSizeClass: unwrapping the result as a float, which is handy for numeric values.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (CGFloat)floatForCurrentSizeClass:
    -    (nonnull NSDictionary<NSString *, NSNumber *> *)sizeClassToValue;
    - -
    -
    -

    Swift

    -
    func float(forCurrentSizeClass sizeClassToValue: [String : NSNumber]) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    -

    Try using widthBasedConverter instead or a custom converter if you relied on 2 dimensions

    - -
    -
    -

    Deprecated. -Similar to floatForCurrentSizeClass: but instead of falling back to the value under MMMSizeRest key -it tries to extrapolate the requested dimension using 1 or 2 values provided for other size classes using -the widthBasedConverter.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (CGFloat)extrapolatedFloatForCurrentSizeClass:
    -    (nonnull NSDictionary<NSString *, NSNumber *> *)sizeClassToValue;
    - -
    -
    -

    Swift

    -
    func extrapolatedFloat(forCurrentSizeClass sizeClassToValue: [String : NSNumber]) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Deprecated

    -

    The code using this might be confusing and/or hard to support. If you need to specify values for different size classes, then list them all explicitly in a call to floatForCurrentSizeClass:

    - -
    -
    -

    Deprecated. -Similar to extrapolatedFloatForCurrentSizeClass:, but allows to override values for certain size classes -in the exceptions paramater.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (CGFloat)extrapolatedFloatForCurrentSizeClass:
    -               (nonnull NSDictionary<NSString *, NSNumber *> *)sizeClassToValue
    -                                         except:
    -                                             (nonnull NSDictionary *)exceptions;
    - -
    -
    -

    Swift

    -
    func extrapolatedFloat(forCurrentSizeClass sizeClassToValue: [String : NSNumber], except exceptions: [AnyHashable : Any]) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - widthBasedConverter - -
    -
    -
    -
    -
    -
    -

    Converts dimensions given for one size class into dimensions suitable for the current size class -based on the ratio of screen widths associated with the current and source size classes.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) id<MMMStylesheetConverter> _Nonnull widthBasedConverter;
    - -
    -
    -

    Swift

    -
    var widthBasedConverter: MMMStylesheetConverter { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A standard set of paddings. -The actual stylesheet should override all these or at least the normalPadding. -They are defined here so insetsFromRelativeInsets can be defined here as well. -In case only normalPadding is overriden then the rest will be calculated based on it using sqrt(2) as a multiplier, -so every second padding is exactly 2x larger.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) CGFloat extraExtraSmallPadding;
    - -
    -
    -

    Swift

    -
    var extraExtraSmallPadding: CGFloat { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - extraSmallPadding - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) CGFloat extraSmallPadding
    - -
    -
    -

    Swift

    -
    var extraSmallPadding: CGFloat { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - smallPadding - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) CGFloat smallPadding
    - -
    -
    -

    Swift

    -
    var smallPadding: CGFloat { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - normalPadding - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) CGFloat normalPadding
    - -
    -
    -

    Swift

    -
    var normalPadding: CGFloat { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - largePadding - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) CGFloat largePadding
    - -
    -
    -

    Swift

    -
    var largePadding: CGFloat { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - extraLargePadding - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) CGFloat extraLargePadding
    - -
    -
    -

    Swift

    -
    var extraLargePadding: CGFloat { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Actual insets from relative ones.

    - -

    Each offset in relative insets is a fixed number corresponding to the actual paddings defined above:

    - -
      -
    • .125 - extraExtraSmallPadding
    • -
    • .25 — extraSmallPadding
    • -
    • .5 — smallPadding
    • -
    • 1 — normalPadding
    • -
    • 2 — largePadding
    • -
    • 4 — extraLargePadding
    • -
    - -

    Note that the large padding is not necessarily 2x larger than the normal one, etc (by default the extra large is), - but we intentionally use them here like this to allow more compact notation for insets which is easy to remember and - easy to tweak. Compare, for example:

    - -

    \code - UIEdgeInsetsMake([MHStylesheet shared].normalPadding, [MHStylesheet shared].largePadding, [MHStylesheet shared].normalPadding, [MHStylesheet shared].largePadding) - \endcode

    - -

    and the equivalent:

    - -

    \code - [[MHStylesheet shared] insetsFromRelativeInsets:UIEdgeInsetsMake(1, 2, 1, 2)] - \endcode

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (UIEdgeInsets)insetsFromRelativeInsets:(UIEdgeInsets)insets;
    - -
    -
    -

    Swift

    -
    func insets(fromRelativeInsets insets: UIEdgeInsets) -> UIEdgeInsets
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    This is what insetsFromRelativeInsets: is using internally. Might be useful when making similar methods.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (CGFloat)paddingFromRelativePadding:(CGFloat)padding;
    - -
    -
    -

    Swift

    -
    func padding(fromRelativePadding padding: CGFloat) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A metrics dictionary that can be used with Auto Layout with keys/values corresponding to all the paddings we support, -e.g. “extraSmallPadding”, etc.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSDictionary<NSString *, NSNumber *> *)dictionaryWithPaddings;
    - -
    -
    -

    Swift

    -
    func dictionaryWithPaddings() -> [String : NSNumber]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A dictionary with 4 values under keys “Top”, “Bottom”, “Left”, “Right” -corresponding to the insets obtained from the provided relative ones via insetsFromRelativeInsets:. -(A shortcut composing insetsFromRelativeInsets method with MMMDictinaryFromUIEdgeInsets().)

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSDictionary<NSString *, NSNumber *> *)
    -    dictionaryFromRelativeInsets:(UIEdgeInsets)insets
    -                       keyPrefix:(nonnull NSString *)keyPrefix;
    - -
    -
    -

    Swift

    -
    func dictionary(fromRelativeInsets insets: UIEdgeInsets, keyPrefix: String) -> [String : NSNumber]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A dictionary with 4 values obtained from the insets returned by insetsFromRelativeInsets:insets -under the keys “paddingTop”, “paddingBottom”, “paddingLeft”, “paddingRight”, -i.e. it’s a shortcut for dictionaryFromRelativeInsets:insets keyPrefix:@"padding".

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull NSDictionary<NSString *, NSNumber *> *)
    -    paddingDictionaryFromRelativeInsets:(UIEdgeInsets)insets;
    - -
    -
    -

    Swift

    -
    func paddingDictionary(fromRelativeInsets insets: UIEdgeInsets) -> [String : NSNumber]
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStylesheetScaleConverter.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStylesheetScaleConverter.html deleted file mode 100644 index 703aa38..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMStylesheetScaleConverter.html +++ /dev/null @@ -1,433 +0,0 @@ - - - - MMMStylesheetScaleConverter Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMStylesheetScaleConverter

-
-
-

Objective-C

-
@interface MMMStylesheetScaleConverter : NSObject <MMMStylesheetConverter>
- -
-
-

Swift

-
class MMMStylesheetScaleConverter : NSObject, MMMStylesheetConverter
- -
-
-

Dimension converter that uses a table of scales.

- -
-
- -
-
-
-
    -
  • -
    - - - - -initWithScales: - -
    -
    -
    -
    -
    -
    -

    Initializes the converter with an explicit table of scales. -Every value coming to convertFloat:fromSizeClass: will be returned multiplied by scales[sourceSizeClass].

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithScales:
    -    (nonnull NSDictionary<NSString *, NSNumber *> *)scales;
    - -
    -
    -

    Swift

    -
    init(scales: [String : NSNumber])
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Initializes the converter with a target size class and a table of dimensions associated with every size class - (e.g screen width).

    - -

    Every value coming to convertFloat:fromSizeClass: will be returned adjusted proportionally to the ratio of the - dimensions associated with target and source size classes, i.e. it will be multiplied by - scales[targetSizeClass] / scales[sourceSizeClass].

    - -

    So for a table of screen widths the converter will upscale or downscale dimensions between size classes - proprtionally to the ratios of screen width associated with size classes.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithTargetSizeClass:(nonnull NSString *)targetSizeClass
    -                           dimensions:
    -                               (nonnull NSDictionary<NSString *, NSNumber *> *)
    -                                   dimensions;
    - -
    -
    -

    Swift

    -
    convenience init(targetSizeClass: String, dimensions: [String : NSNumber])
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMTableView.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMTableView.html deleted file mode 100644 index 73f79f1..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMTableView.html +++ /dev/null @@ -1,548 +0,0 @@ - - - - MMMTableView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMTableView

-
-
-

Objective-C

-
@interface MMMTableView : UITableView <MMMPreferredSizeChanges>
- -
-
-

Swift

-
class MMMTableView : UITableView, MMMPreferredSizeChanges
- -
-
-

A table view supporting top and bottom shadows.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithSettings:(nonnull MMMScrollViewShadowsSettings *)settings
    -                         style:(UITableViewStyle)style;
    - -
    -
    -

    Swift

    -
    init(settings: MMMScrollViewShadowsSettings, style: UITableView.Style)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithSettings: - -
    -
    -
    -
    -
    -
    -

    Note that UITableViewStylePlain is used.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithSettings:(nonnull MMMScrollViewShadowsSettings *)settings;
    - -
    -
    -

    Swift

    -
    init(settings: MMMScrollViewShadowsSettings)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame:style: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (instancetype)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    When enabled, then reloadData is automatically called whenever any of the cells report potential size -changes via mmm_setPreferredSizeCouldChange. See MMMPreferredSizeChanges for more info.

    - -

    This feature is disabled by default for compatibility with the current code.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic) BOOL shouldHandlePotentialCellSizeChanges;
    - -
    -
    -

    Swift

    -
    var shouldHandlePotentialCellSizeChanges: Bool { get set }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMTableViewCell.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMTableViewCell.html deleted file mode 100644 index 5342ba5..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMTableViewCell.html +++ /dev/null @@ -1,482 +0,0 @@ - - - - MMMTableViewCell Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMTableViewCell

-
-
-

Objective-C

-
@interface MMMTableViewCell : UITableViewCell
- -
-
-

Swift

-
class MMMTableViewCell : UITableViewCell
- -
-
-

A base for table view cells redeclareing the designated initializer into the one we typically use, -so subclasses do not have to.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithReuseIdentifier:(NSString *)reuseIdentifier NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init!(reuseIdentifier: String!)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMVelocityMeter.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMVelocityMeter.html deleted file mode 100644 index 9f36861..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMVelocityMeter.html +++ /dev/null @@ -1,455 +0,0 @@ - - - - MMMVelocityMeter Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMVelocityMeter

-
-
-

Objective-C

-
@interface MMMVelocityMeter : NSObject
- -
-
-

Swift

-
class MMMVelocityMeter : NSObject
- -
-
-

A little helper for velocity/acceleration calculations: you feed it values with timestamps and can get the most recent -acceleration/velocity values.

- -
-
- -
-
-
-
    -
  • -
    - - - - -reset - -
    -
    -
    -
    -
    -
    -

    Resets the state of the meter, all values added before are forgotten.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)reset;
    - -
    -
    -

    Swift

    -
    func reset()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -addValue:timestamp: - -
    -
    -
    -
    -
    -
    -

    Adds a coordinate and a corresponding timestamp.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)addValue:(CGFloat)value timestamp:(NSTimeInterval)timestamp;
    - -
    -
    -

    Swift

    -
    func addValue(_ value: CGFloat, timestamp: TimeInterval)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -addValue: - -
    -
    -
    -
    -
    -
    -

    Adds a coordinate with the current timstamp.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)addValue:(CGFloat)value;
    - -
    -
    -

    Swift

    -
    func addValue(_ value: CGFloat)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Calculates velocity and acceleration based on recently added values.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)calculateVelocity:(nonnull CGFloat *)velocity
    -             acceleration:(nonnull CGFloat *)acceleration;
    - -
    -
    -

    Swift

    -
    func calculateVelocity(_ velocity: UnsafeMutablePointer<CGFloat>, acceleration: UnsafeMutablePointer<CGFloat>)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMVerticalGradientView.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMVerticalGradientView.html deleted file mode 100644 index 245f6ab..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMVerticalGradientView.html +++ /dev/null @@ -1,483 +0,0 @@ - - - - MMMVerticalGradientView Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMVerticalGradientView

-
-
-

Objective-C

-
@interface MMMVerticalGradientView : UIView
- -
-
-

Swift

-
class MMMVerticalGradientView : UIView
- -
-
-

A view displaying a gradient from top to bottom. The linearity of the gradient can be controlled. -Can be handy for shadow overlays, etc.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithTopColor:(UIColor *)topColor bottomColor:(UIColor *)bottomColor curve:(MMMAnimationCurve)curve NS_DESIGNATED_INITIALIZER;
    - -
    -
    -

    Swift

    -
    init(topColor: UIColor, bottomColor: UIColor, curve: MMMAnimationCurve)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (nonnull id)initWithTopColor:(UIColor *)topColor bottomColor:(UIColor *)bottomColor;
    - -
    -
    -

    Swift

    -
    convenience init(topColor: UIColor, bottomColor: UIColor)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -init - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)init NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithCoder: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -initWithFrame: - -
    -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMVerticalStackContainer.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMVerticalStackContainer.html deleted file mode 100644 index d215071..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMVerticalStackContainer.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - MMMVerticalStackContainer Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMVerticalStackContainer

-
-
-

Objective-C

-
@interface MMMVerticalStackContainer : MMMStackContainer
- -
-
-

Swift

-
class MMMVerticalStackContainer : MMMStackContainer
- -
-
-

Vertical version of MMMStackContainer.

- -
-
- -
-
-
- -
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMViewWrappingCell.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMViewWrappingCell.html deleted file mode 100644 index 1df566f..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Classes/MMMViewWrappingCell.html +++ /dev/null @@ -1,457 +0,0 @@ - - - - MMMViewWrappingCell Class Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMViewWrappingCell

-
-
-

Objective-C

-
@interface MMMViewWrappingCell<ViewType> : MMMTableViewCell
- -
-
-

Swift

-
class MMMViewWrappingCell<ViewType> : MMMTableViewCell where ViewType : AnyObject
- -
-
-

A simple table view cell wrapping the given view.

- -

This is handy when you have a view already and just want to show it as one more cell.

- -

The view being wrapped should support Auto Layout and inflate its height properly. The cell has its selectionStyle - set to UITableViewCellSelectionStyleNone as these kind of cells typically do not appear selected.

- -
-
- -
-
-
-
    -
  • -
    - - - - wrappedView - -
    -
    -
    -
    -
    -
    -

    The view this cell wraps. It is added into the contentView and is laid out to fully fill it.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @property (nonatomic, readonly) ViewType _Nonnull wrappedView;
    - -
    -
    -

    Swift

    -
    var wrappedView: ViewType { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithView:(ViewType)view reuseIdentifier:(NSString *)reuseIdentifier;
    - -
    -
    -

    Swift

    -
    init(view: ViewType, reuseIdentifier: String)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithView:(ViewType)view reuseIdentifier:(NSString *)reuseIdentifier inset:(UIEdgeInsets)inset;
    - -
    -
    -

    Swift

    -
    init(view: ViewType, reuseIdentifier: String, inset: UIEdgeInsets)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Unavailable

    - -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (id)initWithReuseIdentifier:(NSString *)reuseIdentifier NS_UNAVAILABLE;
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Constants.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Constants.html deleted file mode 100644 index cdf1fc1..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Constants.html +++ /dev/null @@ -1,537 +0,0 @@ - - - - Constants Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

Constants

-

The following constants are available globally.

- -
-
- -
-
-
-
    -
  • -
    - - - - MMMGolden - -
    -
    -
    -
    -
    -
    -

    Golden ratio constant.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern const CGFloat MMMGolden
    - -
    -
    -

    Swift

    -
    class let golden: CGFloat
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMInverseGolden - -
    -
    -
    -
    -
    -
    -

    1 divided by golden ratio.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern const CGFloat MMMInverseGolden
    - -
    -
    -

    Swift

    -
    class let inverseGolden: CGFloat
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMSizeClassic - -
    -
    -
    -
    -
    -
    -

    Small screen phones: iPhone 4/4s/5/5s/SE.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern NSString *const _Nonnull MMMSizeClassic
    - -
    -
    -

    Swift

    -
    let MMMSizeClassic: String
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMSize6 - -
    -
    -
    -
    -
    -
    -

    Regular phones: iPhone 6/6s/7/8 and X as well.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern NSString *const _Nonnull MMMSize6
    - -
    -
    -

    Swift

    -
    let MMMSize6: String
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMSize6Plus - -
    -
    -
    -
    -
    -
    -

    Pluse-sized phones: iPhone 6/7/8 Plus.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern NSString *const _Nonnull MMMSize6Plus
    - -
    -
    -

    Swift

    -
    let MMMSize6Plus: String
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMSizePad - -
    -
    -
    -
    -
    -
    -

    iPads: regular and pros.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern NSString *const _Nonnull MMMSizePad
    - -
    -
    -

    Swift

    -
    let MMMSizePad: String
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMSizeRest - -
    -
    -
    -
    -
    -
    -

    Not the actual size class, but can be used as a key valueForCurrentSizeClass: and related methods for a fallback value.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern NSString *const _Nonnull MMMSizeRest
    - -
    -
    -

    Swift

    -
    let MMMSizeRest: String
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums.html deleted file mode 100644 index 617d7c2..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums.html +++ /dev/null @@ -1,562 +0,0 @@ - - - - Enumerations Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

Enumerations

-

The following enumerations are available globally.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    NS_ENUM(NSInteger, MMMScrollViewShadowAlignment) {
    -	MMMScrollViewShadowAlignmentTop,
    -	MMMScrollViewShadowAlignmentBottom
    -}
    - -
    -
    -

    Swift

    -
    enum MMMScrollViewShadowAlignment : Int, @unchecked Sendable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMAnimationCurve - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    NS_ENUM(NSInteger, MMMAnimationCurve) {
    -
    -	MMMAnimationCurveLinear,
    -	MMMAnimationCurveEaseOut,
    -	MMMAnimationCurveEaseIn,
    -	MMMAnimationCurveEaseInOut,
    -
    -	// "Softer" versions are closer to the linear curve.
    -	MMMAnimationCurveSofterEaseIn,
    -	MMMAnimationCurveSofterEaseOut,
    -	MMMAnimationCurveSofterEaseInOut,
    -	
    -	// Quad animations (e.g. https://easings.net/#easeInQuad)
    -	MMMAnimationCurveEaseInQuad,
    -	MMMAnimationCurveEaseOutQuad,
    -	MMMAnimationCurveEaseInOutQuad,
    -	
    -	// Cubic animations (e.g. https://easings.net/#easeInCubic)
    -	MMMAnimationCurveEaseInCubic,
    -	MMMAnimationCurveEaseOutCubic,
    -	MMMAnimationCurveEaseInOutCubic,
    -	
    -	// Quart animations (e.g. https://easings.net/#easeInQuart)
    -	MMMAnimationCurveEaseInQuart,
    -	MMMAnimationCurveEaseOutQuart,
    -	MMMAnimationCurveEaseInOutQuart,
    -	
    -	// Quint animations (e.g. https://easings.net/#easeInQuint)
    -	MMMAnimationCurveEaseInQuint,
    -	MMMAnimationCurveEaseOutQuint,
    -	MMMAnimationCurveEaseInOutQuint
    -}
    - -
    -
    -

    Swift

    -
    enum MMMAnimationCurve : Int, @unchecked Sendable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMLayoutAlignment - -
    -
    -
    -
    -
    -
    -

    General alignment flags used when it’s not important which direction (vertical or horizontal) the alignment is for.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    enum MMMLayoutAlignment : NSInteger {}
    - -
    -
    -

    Swift

    -
    enum MMMLayoutAlignment : Int, @unchecked Sendable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMLayoutDirection - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    NS_ENUM(NSInteger, MMMLayoutDirection) {
    -	MMMLayoutDirectionHorizontal,
    -	MMMLayoutDirectionVertical
    -}
    - -
    -
    -

    Swift

    -
    enum MMMLayoutDirection : Int, @unchecked Sendable
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    NS_ENUM(NSInteger, MMMLayoutHorizontalAlignment) {
    -	MMMLayoutHorizontalAlignmentNone = MMMLayoutAlignmentNone,
    -	MMMLayoutHorizontalAlignmentLeft = MMMLayoutAlignmentLeading,
    -	MMMLayoutHorizontalAlignmentGolden = MMMLayoutAlignmentGolden,
    -	MMMLayoutHorizontalAlignmentCenter = MMMLayoutAlignmentCenter,
    -	MMMLayoutHorizontalAlignmentRight = MMMLayoutAlignmentTrailing,
    -	MMMLayoutHorizontalAlignmentFill = MMMLayoutAlignmentFill
    -}
    - -
    -
    -

    Swift

    -
    enum MMMLayoutHorizontalAlignment : Int, @unchecked Sendable
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    NS_ENUM(NSInteger, MMMLayoutVerticalAlignment) {
    -	MMMLayoutVerticalAlignmentNone = MMMLayoutAlignmentNone,
    -	MMMLayoutVerticalAlignmentTop = MMMLayoutAlignmentLeading,
    -	MMMLayoutVerticalAlignmentGolden = MMMLayoutAlignmentGolden,
    -	MMMLayoutVerticalAlignmentCenter = MMMLayoutAlignmentCenter,
    -	MMMLayoutVerticalAlignmentBottom = MMMLayoutAlignmentTrailing,
    -	MMMLayoutVerticalAlignmentFill = MMMLayoutAlignmentFill
    -}
    - -
    -
    -

    Swift

    -
    enum MMMLayoutVerticalAlignment : Int, @unchecked Sendable
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMAnimationCurve.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMAnimationCurve.html deleted file mode 100644 index f06e49c..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMAnimationCurve.html +++ /dev/null @@ -1,964 +0,0 @@ - - - - MMMAnimationCurve Enumeration Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMAnimationCurve

-
-
-

Objective-C

-
NS_ENUM(NSInteger, MMMAnimationCurve) {
-
-	MMMAnimationCurveLinear,
-	MMMAnimationCurveEaseOut,
-	MMMAnimationCurveEaseIn,
-	MMMAnimationCurveEaseInOut,
-
-	// "Softer" versions are closer to the linear curve.
-	MMMAnimationCurveSofterEaseIn,
-	MMMAnimationCurveSofterEaseOut,
-	MMMAnimationCurveSofterEaseInOut,
-	
-	// Quad animations (e.g. https://easings.net/#easeInQuad)
-	MMMAnimationCurveEaseInQuad,
-	MMMAnimationCurveEaseOutQuad,
-	MMMAnimationCurveEaseInOutQuad,
-	
-	// Cubic animations (e.g. https://easings.net/#easeInCubic)
-	MMMAnimationCurveEaseInCubic,
-	MMMAnimationCurveEaseOutCubic,
-	MMMAnimationCurveEaseInOutCubic,
-	
-	// Quart animations (e.g. https://easings.net/#easeInQuart)
-	MMMAnimationCurveEaseInQuart,
-	MMMAnimationCurveEaseOutQuart,
-	MMMAnimationCurveEaseInOutQuart,
-	
-	// Quint animations (e.g. https://easings.net/#easeInQuint)
-	MMMAnimationCurveEaseInQuint,
-	MMMAnimationCurveEaseOutQuint,
-	MMMAnimationCurveEaseInOutQuint
-}
- -
-
-

Swift

-
enum MMMAnimationCurve : Int, @unchecked Sendable
- -
-
-

Undocumented

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveLinear
    - -
    -
    -

    Swift

    -
    case linear = 0
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseOut
    - -
    -
    -

    Swift

    -
    case easeOut = 1
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseIn
    - -
    -
    -

    Swift

    -
    case easeIn = 2
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInOut
    - -
    -
    -

    Swift

    -
    case easeInOut = 3
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveSofterEaseIn
    - -
    -
    -

    Swift

    -
    case softerEaseIn = 4
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveSofterEaseOut
    - -
    -
    -

    Swift

    -
    case softerEaseOut = 5
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveSofterEaseInOut
    - -
    -
    -

    Swift

    -
    case softerEaseInOut = 6
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInQuad
    - -
    -
    -

    Swift

    -
    case easeInQuad = 7
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseOutQuad
    - -
    -
    -

    Swift

    -
    case easeOutQuad = 8
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInOutQuad
    - -
    -
    -

    Swift

    -
    case easeInOutQuad = 9
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInCubic
    - -
    -
    -

    Swift

    -
    case easeInCubic = 10
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseOutCubic
    - -
    -
    -

    Swift

    -
    case easeOutCubic = 11
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInOutCubic
    - -
    -
    -

    Swift

    -
    case easeInOutCubic = 12
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInQuart
    - -
    -
    -

    Swift

    -
    case easeInQuart = 13
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseOutQuart
    - -
    -
    -

    Swift

    -
    case easeOutQuart = 14
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInOutQuart
    - -
    -
    -

    Swift

    -
    case easeInOutQuart = 15
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInQuint
    - -
    -
    -

    Swift

    -
    case easeInQuint = 16
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseOutQuint
    - -
    -
    -

    Swift

    -
    case easeOutQuint = 17
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMAnimationCurveEaseInOutQuint
    - -
    -
    -

    Swift

    -
    case easeInOutQuint = 18
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMLayoutAlignment.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMLayoutAlignment.html deleted file mode 100644 index d4372c4..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMLayoutAlignment.html +++ /dev/null @@ -1,517 +0,0 @@ - - - - MMMLayoutAlignment Enumeration Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMLayoutAlignment

-
-
-

Objective-C

-
enum MMMLayoutAlignment : NSInteger {}
- -
-
-

Swift

-
enum MMMLayoutAlignment : Int, @unchecked Sendable
- -
-
-

General alignment flags used when it’s not important which direction (vertical or horizontal) the alignment is for.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutAlignmentNone
    - -
    -
    -

    Swift

    -
    case none = 0
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutAlignmentLeading
    - -
    -
    -

    Swift

    -
    case leading = 1
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutAlignmentGolden
    - -
    -
    -

    Swift

    -
    case golden = 2
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutAlignmentCenter
    - -
    -
    -

    Swift

    -
    case center = 3
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutAlignmentTrailing
    - -
    -
    -

    Swift

    -
    case trailing = 4
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutAlignmentFill
    - -
    -
    -

    Swift

    -
    case fill = 5
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMLayoutDirection.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMLayoutDirection.html deleted file mode 100644 index 53133cc..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMLayoutDirection.html +++ /dev/null @@ -1,392 +0,0 @@ - - - - MMMLayoutDirection Enumeration Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMLayoutDirection

-
-
-

Objective-C

-
NS_ENUM(NSInteger, MMMLayoutDirection) {
-	MMMLayoutDirectionHorizontal,
-	MMMLayoutDirectionVertical
-}
- -
-
-

Swift

-
enum MMMLayoutDirection : Int, @unchecked Sendable
- -
-
-

Undocumented

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutDirectionHorizontal
    - -
    -
    -

    Swift

    -
    case horizontal = 0
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutDirectionVertical
    - -
    -
    -

    Swift

    -
    case vertical = 1
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMLayoutHorizontalAlignment.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMLayoutHorizontalAlignment.html deleted file mode 100644 index 7592e65..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMLayoutHorizontalAlignment.html +++ /dev/null @@ -1,524 +0,0 @@ - - - - MMMLayoutHorizontalAlignment Enumeration Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMLayoutHorizontalAlignment

-
-
-

Objective-C

-
NS_ENUM(NSInteger, MMMLayoutHorizontalAlignment) {
-	MMMLayoutHorizontalAlignmentNone = MMMLayoutAlignmentNone,
-	MMMLayoutHorizontalAlignmentLeft = MMMLayoutAlignmentLeading,
-	MMMLayoutHorizontalAlignmentGolden = MMMLayoutAlignmentGolden,
-	MMMLayoutHorizontalAlignmentCenter = MMMLayoutAlignmentCenter,
-	MMMLayoutHorizontalAlignmentRight = MMMLayoutAlignmentTrailing,
-	MMMLayoutHorizontalAlignmentFill = MMMLayoutAlignmentFill
-}
- -
-
-

Swift

-
enum MMMLayoutHorizontalAlignment : Int, @unchecked Sendable
- -
-
-

Undocumented

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutHorizontalAlignmentNone = MMMLayoutAlignmentNone
    - -
    -
    -

    Swift

    -
    case none = 0
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutHorizontalAlignmentLeft = MMMLayoutAlignmentLeading
    - -
    -
    -

    Swift

    -
    case left = 1
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutHorizontalAlignmentGolden = MMMLayoutAlignmentGolden
    - -
    -
    -

    Swift

    -
    case golden = 2
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutHorizontalAlignmentCenter = MMMLayoutAlignmentCenter
    - -
    -
    -

    Swift

    -
    case center = 3
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutHorizontalAlignmentRight = MMMLayoutAlignmentTrailing
    - -
    -
    -

    Swift

    -
    case right = 4
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutHorizontalAlignmentFill = MMMLayoutAlignmentFill
    - -
    -
    -

    Swift

    -
    case fill = 5
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMLayoutVerticalAlignment.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMLayoutVerticalAlignment.html deleted file mode 100644 index 06e2ec3..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMLayoutVerticalAlignment.html +++ /dev/null @@ -1,524 +0,0 @@ - - - - MMMLayoutVerticalAlignment Enumeration Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMLayoutVerticalAlignment

-
-
-

Objective-C

-
NS_ENUM(NSInteger, MMMLayoutVerticalAlignment) {
-	MMMLayoutVerticalAlignmentNone = MMMLayoutAlignmentNone,
-	MMMLayoutVerticalAlignmentTop = MMMLayoutAlignmentLeading,
-	MMMLayoutVerticalAlignmentGolden = MMMLayoutAlignmentGolden,
-	MMMLayoutVerticalAlignmentCenter = MMMLayoutAlignmentCenter,
-	MMMLayoutVerticalAlignmentBottom = MMMLayoutAlignmentTrailing,
-	MMMLayoutVerticalAlignmentFill = MMMLayoutAlignmentFill
-}
- -
-
-

Swift

-
enum MMMLayoutVerticalAlignment : Int, @unchecked Sendable
- -
-
-

Undocumented

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutVerticalAlignmentNone = MMMLayoutAlignmentNone
    - -
    -
    -

    Swift

    -
    case none = 0
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutVerticalAlignmentTop = MMMLayoutAlignmentLeading
    - -
    -
    -

    Swift

    -
    case top = 1
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutVerticalAlignmentGolden = MMMLayoutAlignmentGolden
    - -
    -
    -

    Swift

    -
    case golden = 2
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutVerticalAlignmentCenter = MMMLayoutAlignmentCenter
    - -
    -
    -

    Swift

    -
    case center = 3
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutVerticalAlignmentBottom = MMMLayoutAlignmentTrailing
    - -
    -
    -

    Swift

    -
    case bottom = 4
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMLayoutVerticalAlignmentFill = MMMLayoutAlignmentFill
    - -
    -
    -

    Swift

    -
    case fill = 5
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMScrollViewShadowAlignment.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMScrollViewShadowAlignment.html deleted file mode 100644 index f18c4df..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Enums/MMMScrollViewShadowAlignment.html +++ /dev/null @@ -1,392 +0,0 @@ - - - - MMMScrollViewShadowAlignment Enumeration Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMScrollViewShadowAlignment

-
-
-

Objective-C

-
NS_ENUM(NSInteger, MMMScrollViewShadowAlignment) {
-	MMMScrollViewShadowAlignmentTop,
-	MMMScrollViewShadowAlignmentBottom
-}
- -
-
-

Swift

-
enum MMMScrollViewShadowAlignment : Int, @unchecked Sendable
- -
-
-

Undocumented

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMScrollViewShadowAlignmentTop
    - -
    -
    -

    Swift

    -
    case top = 0
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    MMMScrollViewShadowAlignmentBottom
    - -
    -
    -

    Swift

    -
    case bottom = 1
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Functions.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Functions.html deleted file mode 100644 index f23de8a..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Functions.html +++ /dev/null @@ -1,524 +0,0 @@ - - - - Functions Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

Functions

-

The following functions are available globally.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Suppose you need to contrain a view so its center divides its container in certain ratio different from 1:1 - (e.g. golden section):

    - -

    ┌─────────┐ ◆ - │ │ │ - │ │ │ a - │┌───────┐│ │ - ─│┼ ─ ─ ─ ┼│─◆ ratio = a / b - │└───────┘│ │ - │ │ │ - │ │ │ - │ │ │ b - │ │ │ - │ │ │ - │ │ │ - └─────────┘ ◆

    - -

    You cannot put this ratio directly into the multiplier parameter of the corresponding NSLayoutConstraints relating - the centers of the views, because the multiplier would be the ratio between the distance to the center - of the view (h) and the distance to the center of the container (H) instead:

    - -

    ◆ ┌─────────┐ ◆ - │ │ │ │ - │ │ │ │ a = h - H │ │┌───────┐│ │ - │ │├ ─ ─ ─ ┼│─◆ multiplier = h / H - │ │└───────┘│ │ ratio = a / b = h / (2 * H - h) - ◆─│─ ─ ─ ─ ─│ │ - │ │ │ - │ │ │ b = 2 * H - h - │ │ │ - │ │ │ - │ │ │ - └─────────┘ ◆

    - -

    I.e. the multiplier is h / H (assuming the view is the first in the definition of the constraint), - but the ratio we are interested would be h / (2 * H - h) if expressed in the distances to centers.

    - -

    If you have a desired ratio and want to get a multiplier, which when applied, results in the layout dividing - the container in this ratio, then you can use this function as shortcut.

    - -

    Detailed calculations: - ratio = h / (2 * H - h) ==> 2 * H * ratio - h * ratio = h ==> 2 * H * ratio / h - ratio = 1 - ==> 1 + ratio = 2 * H * ratio / h ==> (1 + ratio) / (2 * ratio) = H / h - where H / h is the inverse of our multiplier, so the actual multiplier is (2 * ratio) / (1 + ratio).

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    static inline CGFloat MMMCenterMultiplierForRatio(CGFloat ratio)
    - -
    -
    -

    Swift

    -
    class func centerMultiplier(forRatio ratio: CGFloat) -> CGFloat
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Animation curve opposite to the given one, e.g. EaseIn for EaseOut.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern MMMAnimationCurve MMMReverseAnimationCurve(MMMAnimationCurve curve)
    - -
    -
    -

    Swift

    -
    func MMMReverseAnimationCurve(_ curve: MMMAnimationCurve) -> MMMAnimationCurve
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    static inline MMMLayoutAlignment MMMLayoutAlignmentFromHorizontalAlignment(MMMLayoutHorizontalAlignment alignment) {
    -	return (MMMLayoutAlignment)alignment;
    -}
    - -
    -
    -

    Swift

    -
    func MMMLayoutAlignmentFromHorizontalAlignment(_ alignment: MMMLayoutHorizontalAlignment) -> MMMLayoutAlignment
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    static inline MMMLayoutAlignment MMMLayoutAlignmentFromVerticalAlignment(MMMLayoutVerticalAlignment alignment) {
    -	return (MMMLayoutAlignment)alignment;
    -}
    - -
    -
    -

    Swift

    -
    func MMMLayoutAlignmentFromVerticalAlignment(_ alignment: MMMLayoutVerticalAlignment) -> MMMLayoutAlignment
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A dictionary built from UIEdgeInsets suitable for AutoLayout metrics. -The dictionary will have 4 values under the keys named “Top”, “Left”, “Bottom”, “Right”.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    extern NSDictionary<NSString *, NSNumber *>
    -    *_Nonnull MMMDictionaryFromUIEdgeInsets(NSString *_Nonnull prefix,
    -                                            UIEdgeInsets insets)
    - -
    -
    -

    Swift

    -
    func MMMDictionaryFromUIEdgeInsets(_ prefix: String, _ insets: UIEdgeInsets) -> [String : NSNumber]
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols.html deleted file mode 100644 index 8558824..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols.html +++ /dev/null @@ -1,490 +0,0 @@ - - - - Protocols Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

Protocols

-

The following protocols are available globally.

- -
-
- -
-
-
-
    -
  • -
    - - - - MMMNavigationHandler - -
    -
    -
    -
    -
    -
    -

    Protocol for entities able to fulfill in-app navigation requests.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @protocol MMMNavigationHandler <NSObject>
    - -
    -
    -

    Swift

    -
    protocol MMMNavigationHandler : NSObjectProtocol
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    This is the delegate corresponding to each navigation item in the stack. -Its main purpose is to be able to handle popping of the corresponding navigation item.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @protocol MMMNavigationStackItemDelegate <NSObject>
    - -
    -
    -

    Swift

    -
    protocol MMMNavigationStackItemDelegate : NSObjectProtocol
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A token corresponding to a single node (item) of the current UI navigation path. -Note that a reference to the token must be stored somewhere or the corresponding item will be popped right away.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @protocol MMMNavigationStackItem <NSObject>
    - -
    -
    -

    Swift

    -
    protocol MMMNavigationStackItem : NSObjectProtocol
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A view supporting this will be notified when one of the child views indicates potential changes in its contents -that might influence its size via mmm_setPreferredSizeCouldChange.

    - -

    This is handy with views that do not fully rely on Auto Layout, like UITableView, -where a change in the size of a cell would require it to reload this cell.

    - -

    The implementation is responsible for coalescing notification and avoiding notification loops.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @protocol MMMPreferredSizeChanges <NSObject>
    - -
    -
    -

    Swift

    -
    protocol MMMPreferredSizeChanges : NSObjectProtocol
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Something that converts dimensions given for one size class (e.g. font sizes from the design made for iPhone 6) - into dimensions for another size class (e.g. font size for iPhone 5 that were not explicitely mentioned in the design).

    - -

    Different converters can be used for different kinds of values. For example, it might make sense to scale paddings - proportionally to screen widths, but keep font sizes the same.

    - - See more -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    @protocol MMMStylesheetConverter <NSObject>
    - -
    -
    -

    Swift

    -
    protocol MMMStylesheetConverter : NSObjectProtocol
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMNavigationHandler.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMNavigationHandler.html deleted file mode 100644 index c97ae9e..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMNavigationHandler.html +++ /dev/null @@ -1,359 +0,0 @@ - - - - MMMNavigationHandler Protocol Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMNavigationHandler

-
-
-

Objective-C

-
@protocol MMMNavigationHandler <NSObject>
- -
-
-

Swift

-
protocol MMMNavigationHandler : NSObjectProtocol
- -
-
-

Protocol for entities able to fulfill in-app navigation requests.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Returns NO, in case the handler is unable to perform the given request. (Another handler will be tried then.) -Returns YES, if the request has been accepted by the handler. -The handler must call -didFinishSuccessfully: when it’s done performing the request.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (BOOL)performNavigationRequest:(nonnull MMMNavigationRequest *)request;
    - -
    -
    -

    Swift

    -
    func perform(_ request: MMMNavigationRequest) -> Bool
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMNavigationStackItem.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMNavigationStackItem.html deleted file mode 100644 index abceea0..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMNavigationStackItem.html +++ /dev/null @@ -1,430 +0,0 @@ - - - - MMMNavigationStackItem Protocol Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMNavigationStackItem

-
-
-

Objective-C

-
@protocol MMMNavigationStackItem <NSObject>
- -
-
-

Swift

-
protocol MMMNavigationStackItem : NSObjectProtocol
- -
-
-

A token corresponding to a single node (item) of the current UI navigation path. -Note that a reference to the token must be stored somewhere or the corresponding item will be popped right away.

- -
-
- -
-
-
-
    -
  • -
    - - - - -didPop - -
    -
    -
    -
    -
    -
    -

    Should be called by the item’s delegate when the navigation item has been popped as a result of user’s action -and must be called when MMMNavigationStack calling popNavigationStackItem of the corresponding delegate.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)didPop;
    - -
    -
    -

    Swift

    -
    func didPop()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - -didFailToPop - -
    -
    -
    -
    -
    -
    -

    Should be called by the navigation item’s delegate in rare caes when the corresponding item cannot be popped.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)didFailToPop;
    - -
    -
    -

    Swift

    -
    func didFailToPop()
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Pops all the items currently on the stack above this item, so this one becomes the top. This is an asynchronous operation - because it might involving several navigation steps.

    - -

    Returns YES, if the request to pop was accepted for execution; NO otherwise. The latter means programmers error (such as - popping while another pop is in progress) and will terminate the app when assertions are enabled.

    - -

    Note that the completion handler is executed only if the request has been accepted.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (BOOL)popAllAfterThisItemWithCompletion:
    -    (nonnull MMMNavigationStackCompletion)completion;
    - -
    -
    -

    Swift

    -
    func popAllAfterThisItem(completion: @escaping MMMNavigationStackCompletion) -> Bool
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMNavigationStackItemDelegate.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMNavigationStackItemDelegate.html deleted file mode 100644 index 2e0b330..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMNavigationStackItemDelegate.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - MMMNavigationStackItemDelegate Protocol Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMNavigationStackItemDelegate

-
-
-

Objective-C

-
@protocol MMMNavigationStackItemDelegate <NSObject>
- -
-
-

Swift

-
protocol MMMNavigationStackItemDelegate : NSObjectProtocol
- -
-
-

This is the delegate corresponding to each navigation item in the stack. -Its main purpose is to be able to handle popping of the corresponding navigation item.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Should perform all the work necessary to pop the corresponding UI navigation item and must call didPop method - on the corresponding item when done.

    - -

    Note that when the delegate is asked to pop, then all the items on top of it in the stack have been popped already, - so the delegate should not ask the stack to do it. In fact asking for it and waiting for completion might freeze the popping - process as pop completion callbacks are called only after all the whole popping process completes.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)popNavigationStackItem:(nonnull id<MMMNavigationStackItem>)item;
    - -
    -
    -

    Swift

    -
    func pop(_ item: MMMNavigationStackItem)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMPreferredSizeChanges.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMPreferredSizeChanges.html deleted file mode 100644 index 4340d37..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMPreferredSizeChanges.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - MMMPreferredSizeChanges Protocol Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMPreferredSizeChanges

-
-
-

Objective-C

-
@protocol MMMPreferredSizeChanges <NSObject>
- -
-
-

Swift

-
protocol MMMPreferredSizeChanges : NSObjectProtocol
- -
-
-

A view supporting this will be notified when one of the child views indicates potential changes in its contents -that might influence its size via mmm_setPreferredSizeCouldChange.

- -

This is handy with views that do not fully rely on Auto Layout, like UITableView, -where a change in the size of a cell would require it to reload this cell.

- -

The implementation is responsible for coalescing notification and avoiding notification loops.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (void)mmm_preferredSizeCouldChangeForSubview:(UIView *)subview;
    - -
    -
    -

    Swift

    -
    func mmm_preferredSizeCouldChange(forSubview subview: UIView)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMStylesheetConverter.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMStylesheetConverter.html deleted file mode 100644 index 5812565..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Protocols/MMMStylesheetConverter.html +++ /dev/null @@ -1,362 +0,0 @@ - - - - MMMStylesheetConverter Protocol Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

MMMStylesheetConverter

-
-
-

Objective-C

-
@protocol MMMStylesheetConverter <NSObject>
- -
-
-

Swift

-
protocol MMMStylesheetConverter : NSObjectProtocol
- -
-
-

Something that converts dimensions given for one size class (e.g. font sizes from the design made for iPhone 6) - into dimensions for another size class (e.g. font size for iPhone 5 that were not explicitely mentioned in the design).

- -

Different converters can be used for different kinds of values. For example, it might make sense to scale paddings - proportionally to screen widths, but keep font sizes the same.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Converts a dimension know for certain size class according to the rules of the converter.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    - (CGFloat)convertFloat:(CGFloat)value
    -          fromSizeClass:(nonnull NSString *)sourceSizeClass;
    - -
    -
    -

    Swift

    -
    func convert(_ value: CGFloat, fromSizeClass sourceSizeClass: String) -> CGFloat
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Type Definitions.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Type Definitions.html deleted file mode 100644 index d9ddf9d..0000000 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/Type Definitions.html +++ /dev/null @@ -1,542 +0,0 @@ - - - - Type Definitions Reference - - - - - - - - - - - - - - - - -
- - - - -

- -

- - GitHub - View on GitHub - -

- -
- - - -
- -
- -
-
-

Type Definitions

-

The following type definitions are available globally.

- -
-
- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    typedef id MMMNavigationRequestId
    - -
    -
    -

    Swift

    -
    typealias MMMNavigationRequestId = AnyObject
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    typedef void (^MMMNavigationCompletionBlock)(MMMNavigationRequestId requestId, BOOL finished)
    - -
    -
    -

    Swift

    -
    typealias MMMNavigationCompletionBlock = (Any, Bool) -> Void
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    typedef id MMMNavigationHandlerId
    - -
    -
    -

    Swift

    -
    typealias MMMNavigationHandlerId = AnyObject
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    typedef void (^MMMNavigationStackCompletion)(BOOL success)
    - -
    -
    -

    Swift

    -
    typealias MMMNavigationStackCompletion = (Bool) -> Void
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    typedef void (^ _Nonnull MMMShadowViewSettingBlock
    - -
    -
    -

    Swift

    -
    typealias MMMShadowViewSettingBlock = (MMMShadowViewSetting) -> Void
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Called on every update cycle of MMMAnimator for the given animation item.

    - -

    The time is always within [0; 1] range here, which will correspond to the the [start; start + duration] interval of - real time clock.

    - -

    Unless the item is cancelled it is guaranteed that the block will be called for 0 and 1 values.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    typedef void (^MMMAnimatorUpdateBlock)(MMMAnimationHandle *_Nonnull, CGFloat)
    - -
    -
    -

    Swift

    -
    typealias MMMAnimatorUpdateBlock = (MMMAnimationHandle, CGFloat) -> Void
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MMMAnimatorDoneBlock - -
    -
    -
    -
    -
    -
    -

    Called when the animation item has been finished.

    - -
    -
    -

    Declaration

    -
    -

    Objective-C

    -
    typedef void (^MMMAnimatorDoneBlock)(MMMAnimationHandle *_Nonnull, BOOL)
    - -
    -
    -

    Swift

    -
    typealias MMMAnimatorDoneBlock = (MMMAnimationHandle, Bool) -> Void
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/index.html b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/index.html index c818eb9..450b0a6 100644 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/index.html +++ b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/index.html @@ -42,245 +42,6 @@
@@ -323,7 +84,7 @@

Usage

diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/search.json b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/search.json index c48681a..9e26dfe 100644 --- a/docsets/MMMCommonUI.docset/Contents/Resources/Documents/search.json +++ b/docsets/MMMCommonUI.docset/Contents/Resources/Documents/search.json @@ -1 +1 @@ -{"Functions.html#/c:MMMLayoutUtils.h@F@MMMCenterMultiplierForRatio":{"name":"MMMCenterMultiplierForRatio","abstract":"

Suppose you need to contrain a view so its center divides its container in certain ratio different from 1:1"},"Functions.html#/c:@F@MMMReverseAnimationCurve":{"name":"MMMReverseAnimationCurve","abstract":"

Animation curve opposite to the given one, e.g. EaseIn for EaseOut.

"},"Functions.html#/c:MMMLayout.h@F@MMMLayoutAlignmentFromHorizontalAlignment":{"name":"MMMLayoutAlignmentFromHorizontalAlignment","abstract":"

Undocumented

"},"Functions.html#/c:MMMLayout.h@F@MMMLayoutAlignmentFromVerticalAlignment":{"name":"MMMLayoutAlignmentFromVerticalAlignment","abstract":"

Undocumented

"},"Functions.html#/c:@F@MMMDictionaryFromUIEdgeInsets":{"name":"MMMDictionaryFromUIEdgeInsets","abstract":"

A dictionary built from UIEdgeInsets suitable for AutoLayout metrics."},"Type%20Definitions.html#/c:MMMNavigation.h@T@MMMNavigationRequestId":{"name":"MMMNavigationRequestId","abstract":"

Undocumented

"},"Type%20Definitions.html#/c:MMMNavigation.h@T@MMMNavigationCompletionBlock":{"name":"MMMNavigationCompletionBlock","abstract":"

Undocumented

"},"Type%20Definitions.html#/c:MMMNavigation.h@T@MMMNavigationHandlerId":{"name":"MMMNavigationHandlerId","abstract":"

Undocumented

"},"Type%20Definitions.html#/c:MMMNavigationStack.h@T@MMMNavigationStackCompletion":{"name":"MMMNavigationStackCompletion","abstract":"

Undocumented

"},"Type%20Definitions.html#/c:MMMShadowView.h@T@MMMShadowViewSettingBlock":{"name":"MMMShadowViewSettingBlock","abstract":"

Undocumented

"},"Type%20Definitions.html#/c:MMMAnimations.h@T@MMMAnimatorUpdateBlock":{"name":"MMMAnimatorUpdateBlock","abstract":"

Called on every update cycle of MMMAnimator for the given animation item.

"},"Type%20Definitions.html#/c:MMMAnimations.h@T@MMMAnimatorDoneBlock":{"name":"MMMAnimatorDoneBlock","abstract":"

Called when the animation item has been finished.

"},"Protocols/MMMStylesheetConverter.html#/c:objc(pl)MMMStylesheetConverter(im)convertFloat:fromSizeClass:":{"name":"-convertFloat:fromSizeClass:","abstract":"

Converts a dimension know for certain size class according to the rules of the converter.

","parent_name":"MMMStylesheetConverter"},"Protocols/MMMPreferredSizeChanges.html#/c:objc(pl)MMMPreferredSizeChanges(im)mmm_preferredSizeCouldChangeForSubview:":{"name":"-mmm_preferredSizeCouldChangeForSubview:","abstract":"

Undocumented

","parent_name":"MMMPreferredSizeChanges"},"Protocols/MMMNavigationStackItem.html#/c:objc(pl)MMMNavigationStackItem(im)didPop":{"name":"-didPop","abstract":"

Should be called by the item’s delegate when the navigation item has been popped as a result of user’s action","parent_name":"MMMNavigationStackItem"},"Protocols/MMMNavigationStackItem.html#/c:objc(pl)MMMNavigationStackItem(im)didFailToPop":{"name":"-didFailToPop","abstract":"

Should be called by the navigation item’s delegate in rare caes when the corresponding item cannot be popped.

","parent_name":"MMMNavigationStackItem"},"Protocols/MMMNavigationStackItem.html#/c:objc(pl)MMMNavigationStackItem(im)popAllAfterThisItemWithCompletion:":{"name":"-popAllAfterThisItemWithCompletion:","abstract":"

Pops all the items currently on the stack above this item, so this one becomes the top. This is an asynchronous operation","parent_name":"MMMNavigationStackItem"},"Protocols/MMMNavigationStackItemDelegate.html#/c:objc(pl)MMMNavigationStackItemDelegate(im)popNavigationStackItem:":{"name":"-popNavigationStackItem:","abstract":"

Should perform all the work necessary to pop the corresponding UI navigation item and must call didPop method","parent_name":"MMMNavigationStackItemDelegate"},"Protocols/MMMNavigationHandler.html#/c:objc(pl)MMMNavigationHandler(im)performNavigationRequest:":{"name":"-performNavigationRequest:","abstract":"

Returns NO, in case the handler is unable to perform the given request. (Another handler will be tried then.)","parent_name":"MMMNavigationHandler"},"Protocols/MMMNavigationHandler.html":{"name":"MMMNavigationHandler","abstract":"

Protocol for entities able to fulfill in-app navigation requests.

"},"Protocols/MMMNavigationStackItemDelegate.html":{"name":"MMMNavigationStackItemDelegate","abstract":"

This is the delegate corresponding to each navigation item in the stack."},"Protocols/MMMNavigationStackItem.html":{"name":"MMMNavigationStackItem","abstract":"

A token corresponding to a single node (item) of the current UI navigation path."},"Protocols/MMMPreferredSizeChanges.html":{"name":"MMMPreferredSizeChanges","abstract":"

A view supporting this will be notified when one of the child views indicates potential changes in its contents"},"Protocols/MMMStylesheetConverter.html":{"name":"MMMStylesheetConverter","abstract":"

Something that converts dimensions given for one size class (e.g. font sizes from the design made for iPhone 6)"},"Enums/MMMLayoutVerticalAlignment.html#/c:@E@MMMLayoutVerticalAlignment@MMMLayoutVerticalAlignmentNone":{"name":"MMMLayoutVerticalAlignmentNone","abstract":"

Undocumented

","parent_name":"MMMLayoutVerticalAlignment"},"Enums/MMMLayoutVerticalAlignment.html#/c:@E@MMMLayoutVerticalAlignment@MMMLayoutVerticalAlignmentTop":{"name":"MMMLayoutVerticalAlignmentTop","abstract":"

Undocumented

","parent_name":"MMMLayoutVerticalAlignment"},"Enums/MMMLayoutVerticalAlignment.html#/c:@E@MMMLayoutVerticalAlignment@MMMLayoutVerticalAlignmentGolden":{"name":"MMMLayoutVerticalAlignmentGolden","abstract":"

Undocumented

","parent_name":"MMMLayoutVerticalAlignment"},"Enums/MMMLayoutVerticalAlignment.html#/c:@E@MMMLayoutVerticalAlignment@MMMLayoutVerticalAlignmentCenter":{"name":"MMMLayoutVerticalAlignmentCenter","abstract":"

Undocumented

","parent_name":"MMMLayoutVerticalAlignment"},"Enums/MMMLayoutVerticalAlignment.html#/c:@E@MMMLayoutVerticalAlignment@MMMLayoutVerticalAlignmentBottom":{"name":"MMMLayoutVerticalAlignmentBottom","abstract":"

Undocumented

","parent_name":"MMMLayoutVerticalAlignment"},"Enums/MMMLayoutVerticalAlignment.html#/c:@E@MMMLayoutVerticalAlignment@MMMLayoutVerticalAlignmentFill":{"name":"MMMLayoutVerticalAlignmentFill","abstract":"

Undocumented

","parent_name":"MMMLayoutVerticalAlignment"},"Enums/MMMLayoutHorizontalAlignment.html#/c:@E@MMMLayoutHorizontalAlignment@MMMLayoutHorizontalAlignmentNone":{"name":"MMMLayoutHorizontalAlignmentNone","abstract":"

Undocumented

","parent_name":"MMMLayoutHorizontalAlignment"},"Enums/MMMLayoutHorizontalAlignment.html#/c:@E@MMMLayoutHorizontalAlignment@MMMLayoutHorizontalAlignmentLeft":{"name":"MMMLayoutHorizontalAlignmentLeft","abstract":"

Undocumented

","parent_name":"MMMLayoutHorizontalAlignment"},"Enums/MMMLayoutHorizontalAlignment.html#/c:@E@MMMLayoutHorizontalAlignment@MMMLayoutHorizontalAlignmentGolden":{"name":"MMMLayoutHorizontalAlignmentGolden","abstract":"

Undocumented

","parent_name":"MMMLayoutHorizontalAlignment"},"Enums/MMMLayoutHorizontalAlignment.html#/c:@E@MMMLayoutHorizontalAlignment@MMMLayoutHorizontalAlignmentCenter":{"name":"MMMLayoutHorizontalAlignmentCenter","abstract":"

Undocumented

","parent_name":"MMMLayoutHorizontalAlignment"},"Enums/MMMLayoutHorizontalAlignment.html#/c:@E@MMMLayoutHorizontalAlignment@MMMLayoutHorizontalAlignmentRight":{"name":"MMMLayoutHorizontalAlignmentRight","abstract":"

Undocumented

","parent_name":"MMMLayoutHorizontalAlignment"},"Enums/MMMLayoutHorizontalAlignment.html#/c:@E@MMMLayoutHorizontalAlignment@MMMLayoutHorizontalAlignmentFill":{"name":"MMMLayoutHorizontalAlignmentFill","abstract":"

Undocumented

","parent_name":"MMMLayoutHorizontalAlignment"},"Enums/MMMLayoutDirection.html#/c:@E@MMMLayoutDirection@MMMLayoutDirectionHorizontal":{"name":"MMMLayoutDirectionHorizontal","abstract":"

Undocumented

","parent_name":"MMMLayoutDirection"},"Enums/MMMLayoutDirection.html#/c:@E@MMMLayoutDirection@MMMLayoutDirectionVertical":{"name":"MMMLayoutDirectionVertical","abstract":"

Undocumented

","parent_name":"MMMLayoutDirection"},"Enums/MMMLayoutAlignment.html#/c:@E@MMMLayoutAlignment@MMMLayoutAlignmentNone":{"name":"MMMLayoutAlignmentNone","abstract":"

Undocumented

","parent_name":"MMMLayoutAlignment"},"Enums/MMMLayoutAlignment.html#/c:@E@MMMLayoutAlignment@MMMLayoutAlignmentLeading":{"name":"MMMLayoutAlignmentLeading","abstract":"

Undocumented

","parent_name":"MMMLayoutAlignment"},"Enums/MMMLayoutAlignment.html#/c:@E@MMMLayoutAlignment@MMMLayoutAlignmentGolden":{"name":"MMMLayoutAlignmentGolden","abstract":"

Undocumented

","parent_name":"MMMLayoutAlignment"},"Enums/MMMLayoutAlignment.html#/c:@E@MMMLayoutAlignment@MMMLayoutAlignmentCenter":{"name":"MMMLayoutAlignmentCenter","abstract":"

Undocumented

","parent_name":"MMMLayoutAlignment"},"Enums/MMMLayoutAlignment.html#/c:@E@MMMLayoutAlignment@MMMLayoutAlignmentTrailing":{"name":"MMMLayoutAlignmentTrailing","abstract":"

Undocumented

","parent_name":"MMMLayoutAlignment"},"Enums/MMMLayoutAlignment.html#/c:@E@MMMLayoutAlignment@MMMLayoutAlignmentFill":{"name":"MMMLayoutAlignmentFill","abstract":"

Undocumented

","parent_name":"MMMLayoutAlignment"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveLinear":{"name":"MMMAnimationCurveLinear","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseOut":{"name":"MMMAnimationCurveEaseOut","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseIn":{"name":"MMMAnimationCurveEaseIn","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInOut":{"name":"MMMAnimationCurveEaseInOut","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveSofterEaseIn":{"name":"MMMAnimationCurveSofterEaseIn","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveSofterEaseOut":{"name":"MMMAnimationCurveSofterEaseOut","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveSofterEaseInOut":{"name":"MMMAnimationCurveSofterEaseInOut","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInQuad":{"name":"MMMAnimationCurveEaseInQuad","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseOutQuad":{"name":"MMMAnimationCurveEaseOutQuad","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInOutQuad":{"name":"MMMAnimationCurveEaseInOutQuad","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInCubic":{"name":"MMMAnimationCurveEaseInCubic","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseOutCubic":{"name":"MMMAnimationCurveEaseOutCubic","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInOutCubic":{"name":"MMMAnimationCurveEaseInOutCubic","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInQuart":{"name":"MMMAnimationCurveEaseInQuart","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseOutQuart":{"name":"MMMAnimationCurveEaseOutQuart","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInOutQuart":{"name":"MMMAnimationCurveEaseInOutQuart","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInQuint":{"name":"MMMAnimationCurveEaseInQuint","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseOutQuint":{"name":"MMMAnimationCurveEaseOutQuint","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInOutQuint":{"name":"MMMAnimationCurveEaseInOutQuint","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMScrollViewShadowAlignment.html#/c:@E@MMMScrollViewShadowAlignment@MMMScrollViewShadowAlignmentTop":{"name":"MMMScrollViewShadowAlignmentTop","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadowAlignment"},"Enums/MMMScrollViewShadowAlignment.html#/c:@E@MMMScrollViewShadowAlignment@MMMScrollViewShadowAlignmentBottom":{"name":"MMMScrollViewShadowAlignmentBottom","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadowAlignment"},"Enums/MMMScrollViewShadowAlignment.html":{"name":"MMMScrollViewShadowAlignment","abstract":"

Undocumented

"},"Enums/MMMAnimationCurve.html":{"name":"MMMAnimationCurve","abstract":"

Undocumented

"},"Enums/MMMLayoutAlignment.html":{"name":"MMMLayoutAlignment","abstract":"

General alignment flags used when it’s not important which direction (vertical or horizontal) the alignment is for.

"},"Enums/MMMLayoutDirection.html":{"name":"MMMLayoutDirection","abstract":"

Undocumented

"},"Enums/MMMLayoutHorizontalAlignment.html":{"name":"MMMLayoutHorizontalAlignment","abstract":"

Undocumented

"},"Enums/MMMLayoutVerticalAlignment.html":{"name":"MMMLayoutVerticalAlignment","abstract":"

Undocumented

"},"Constants.html#/c:@MMMGolden":{"name":"MMMGolden","abstract":"

Golden ratio constant.

"},"Constants.html#/c:@MMMInverseGolden":{"name":"MMMInverseGolden","abstract":"

1 divided by golden ratio.

"},"Constants.html#/c:@MMMSizeClassic":{"name":"MMMSizeClassic","abstract":"

Small screen phones: iPhone 4/4s/5/5s/SE.

"},"Constants.html#/c:@MMMSize6":{"name":"MMMSize6","abstract":"

Regular phones: iPhone 6/6s/7/8 and X as well.

"},"Constants.html#/c:@MMMSize6Plus":{"name":"MMMSize6Plus","abstract":"

Pluse-sized phones: iPhone 6/7/8 Plus.

"},"Constants.html#/c:@MMMSizePad":{"name":"MMMSizePad","abstract":"

iPads: regular and pros.

"},"Constants.html#/c:@MMMSizeRest":{"name":"MMMSizeRest","abstract":"

Not the actual size class, but can be used as a key valueForCurrentSizeClass: and related methods for a fallback value.

"},"Classes/MMMStylesheetScaleConverter.html#/c:objc(cs)MMMStylesheetScaleConverter(im)initWithScales:":{"name":"-initWithScales:","abstract":"

Initializes the converter with an explicit table of scales.","parent_name":"MMMStylesheetScaleConverter"},"Classes/MMMStylesheetScaleConverter.html#/c:objc(cs)MMMStylesheetScaleConverter(im)initWithTargetSizeClass:dimensions:":{"name":"-initWithTargetSizeClass:dimensions:","abstract":"

Initializes the converter with a target size class and a table of dimensions associated with every size class","parent_name":"MMMStylesheetScaleConverter"},"Classes/MMMStylesheetScaleConverter.html#/c:objc(cs)MMMStylesheetScaleConverter(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMStylesheetScaleConverter"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(py)currentSizeClass":{"name":"currentSizeClass","abstract":"

The size class of the current device. See the MMSize* string constants below.

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)valueForCurrentSizeClass:":{"name":"-valueForCurrentSizeClass:","abstract":"

Allows to avoid code that picks values (fonts, sizes, etc) by explicitely matching currentSizeClass.","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)floatForCurrentSizeClass:":{"name":"-floatForCurrentSizeClass:","abstract":"

A version of valueForCurrentSizeClass: unwrapping the result as a float, which is handy for numeric values.

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)extrapolatedFloatForCurrentSizeClass:":{"name":"-extrapolatedFloatForCurrentSizeClass:","abstract":"

Deprecated.","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)extrapolatedFloatForCurrentSizeClass:except:":{"name":"-extrapolatedFloatForCurrentSizeClass:except:","abstract":"

Deprecated.","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(py)widthBasedConverter":{"name":"widthBasedConverter","abstract":"

Converts dimensions given for one size class into dimensions suitable for the current size class","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(py)extraExtraSmallPadding":{"name":"extraExtraSmallPadding","abstract":"

A standard set of paddings.","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(py)extraSmallPadding":{"name":"extraSmallPadding","abstract":"

Undocumented

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(py)smallPadding":{"name":"smallPadding","abstract":"

Undocumented

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(py)normalPadding":{"name":"normalPadding","abstract":"

Undocumented

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(py)largePadding":{"name":"largePadding","abstract":"

Undocumented

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(py)extraLargePadding":{"name":"extraLargePadding","abstract":"

Undocumented

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)insetsFromRelativeInsets:":{"name":"-insetsFromRelativeInsets:","abstract":"

Actual insets from relative ones.

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)paddingFromRelativePadding:":{"name":"-paddingFromRelativePadding:","abstract":"

This is what insetsFromRelativeInsets: is using internally. Might be useful when making similar methods.

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)dictionaryWithPaddings":{"name":"-dictionaryWithPaddings","abstract":"

A metrics dictionary that can be used with Auto Layout with keys/values corresponding to all the paddings we support,","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)dictionaryFromRelativeInsets:keyPrefix:":{"name":"-dictionaryFromRelativeInsets:keyPrefix:","abstract":"

A dictionary with 4 values under keys “Top”, “Bottom”, “Left”, “Right”","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)paddingDictionaryFromRelativeInsets:":{"name":"-paddingDictionaryFromRelativeInsets:","abstract":"

A dictionary with 4 values obtained from the insets returned by insetsFromRelativeInsets:insets","parent_name":"MMMStylesheet"},"Classes/MMMVerticalGradientView.html#/c:objc(cs)MMMVerticalGradientView(im)initWithTopColor:bottomColor:curve:":{"name":"-initWithTopColor:bottomColor:curve:","abstract":"

Undocumented

","parent_name":"MMMVerticalGradientView"},"Classes/MMMVerticalGradientView.html#/c:objc(cs)MMMVerticalGradientView(im)initWithTopColor:bottomColor:":{"name":"-initWithTopColor:bottomColor:","abstract":"

Undocumented

","parent_name":"MMMVerticalGradientView"},"Classes/MMMVerticalGradientView.html#/c:objc(cs)MMMVerticalGradientView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMVerticalGradientView"},"Classes/MMMVerticalGradientView.html#/c:objc(cs)MMMVerticalGradientView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMVerticalGradientView"},"Classes/MMMVerticalGradientView.html#/c:objc(cs)MMMVerticalGradientView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMVerticalGradientView"},"Classes/MMMPaddedView.html#/c:objc(cs)MMMPaddedView(py)view":{"name":"view","abstract":"

The view being wrapped.

","parent_name":"MMMPaddedView"},"Classes/MMMPaddedView.html#/c:objc(cs)MMMPaddedView(py)insets":{"name":"insets","abstract":"

Undocumented

","parent_name":"MMMPaddedView"},"Classes/MMMPaddedView.html#/c:objc(cs)MMMPaddedView(im)initWithView:insets:":{"name":"-initWithView:insets:","abstract":"

Undocumented

","parent_name":"MMMPaddedView"},"Classes/MMMPaddedView.html#/c:objc(cs)MMMPaddedView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMPaddedView"},"Classes/MMMPaddedView.html#/c:objc(cs)MMMPaddedView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMPaddedView"},"Classes/MMMPaddedView.html#/c:objc(cs)MMMPaddedView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMPaddedView"},"Classes/MMMAutoLayoutIsolator.html#/c:objc(cs)MMMAutoLayoutIsolator(py)view":{"name":"view","abstract":"

The view being wrapped.

","parent_name":"MMMAutoLayoutIsolator"},"Classes/MMMAutoLayoutIsolator.html#/c:objc(cs)MMMAutoLayoutIsolator(im)initWithView:":{"name":"-initWithView:","abstract":"

Undocumented

","parent_name":"MMMAutoLayoutIsolator"},"Classes/MMMAutoLayoutIsolator.html#/c:objc(cs)MMMAutoLayoutIsolator(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMAutoLayoutIsolator"},"Classes/MMMAutoLayoutIsolator.html#/c:objc(cs)MMMAutoLayoutIsolator(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMAutoLayoutIsolator"},"Classes/MMMAutoLayoutIsolator.html#/c:objc(cs)MMMAutoLayoutIsolator(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMAutoLayoutIsolator"},"Classes/MMMHorizontalStackContainer.html#/c:objc(cs)MMMHorizontalStackContainer(im)initWithInsets:alignment:spacing:":{"name":"-initWithInsets:alignment:spacing:","abstract":"

Undocumented

","parent_name":"MMMHorizontalStackContainer"},"Classes/MMMHorizontalStackContainer.html#/c:objc(cs)MMMHorizontalStackContainer(im)initWithDirection:insets:alignment:spacing:":{"name":"-initWithDirection:insets:alignment:spacing:","abstract":"

Undocumented

","parent_name":"MMMHorizontalStackContainer"},"Classes/MMMVerticalStackContainer.html#/c:objc(cs)MMMVerticalStackContainer(im)initWithInsets:alignment:spacing:":{"name":"-initWithInsets:alignment:spacing:","abstract":"

Undocumented

","parent_name":"MMMVerticalStackContainer"},"Classes/MMMVerticalStackContainer.html#/c:objc(cs)MMMVerticalStackContainer(im)initWithDirection:insets:alignment:spacing:":{"name":"-initWithDirection:insets:alignment:spacing:","abstract":"

Undocumented

","parent_name":"MMMVerticalStackContainer"},"Classes/MMMStackContainer.html#/c:objc(cs)MMMStackContainer(im)setSubviews:":{"name":"-setSubviews:","abstract":"

Sets subviews to be laid out. Previously set subviews will be removed from this container first.

","parent_name":"MMMStackContainer"},"Classes/MMMStackContainer.html#/c:objc(cs)MMMStackContainer(im)initWithDirection:insets:alignment:spacing:":{"name":"-initWithDirection:insets:alignment:spacing:","abstract":"

Insets define the padding around all the subviews.","parent_name":"MMMStackContainer"},"Classes/MMMStackContainer.html#/c:objc(cs)MMMStackContainer(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMStackContainer"},"Classes/MMMStackContainer.html#/c:objc(cs)MMMStackContainer(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMStackContainer"},"Classes/MMMStackContainer.html#/c:objc(cs)MMMStackContainer(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMStackContainer"},"Classes/MMMSpacerView.html#/c:objc(cs)MMMSpacerView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMSpacerView"},"Classes/MMMSpacerView.html#/c:objc(cs)MMMSpacerView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMSpacerView"},"Classes/MMMSpacerView.html#/c:objc(cs)MMMSpacerView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMSpacerView"},"Classes/MMMCollectionView.html#/c:objc(cs)MMMCollectionView(im)initWithSettings:":{"name":"-initWithSettings:","abstract":"

Uses UICollectionViewFlowLayout by default.

","parent_name":"MMMCollectionView"},"Classes/MMMCollectionView.html#/c:objc(cs)MMMCollectionView(im)initWithFrame:collectionViewLayout:":{"name":"-initWithFrame:collectionViewLayout:","abstract":"

Undocumented

","parent_name":"MMMCollectionView"},"Classes/MMMCollectionView.html#/c:objc(cs)MMMCollectionView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMCollectionView"},"Classes/MMMCollectionView.html#/c:objc(cs)MMMCollectionView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMCollectionView"},"Classes/MMMCollectionView.html#/c:objc(cs)MMMCollectionView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMCollectionView"},"Classes/MMMAnimationHandle.html#/c:objc(cs)MMMAnimationHandle(py)inProgress":{"name":"inProgress","abstract":"

YES, if the animation has not been finished yet.

","parent_name":"MMMAnimationHandle"},"Classes/MMMAnimationHandle.html#/c:objc(cs)MMMAnimationHandle(im)cancel":{"name":"-cancel","abstract":"

Finishes animation before its designated end time.

","parent_name":"MMMAnimationHandle"},"Classes/MMMAnimationHandle.html#/c:objc(cs)MMMAnimationHandle(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMAnimationHandle"},"Classes/MMMAnimator.html#/c:objc(cs)MMMAnimator(cm)shared":{"name":"+shared","abstract":"

Undocumented

","parent_name":"MMMAnimator"},"Classes/MMMAnimator.html#/c:objc(cs)MMMAnimator(im)addAnimationWithDuration:updateBlock:doneBlock:":{"name":"-addAnimationWithDuration:updateBlock:doneBlock:","abstract":"

Schedules a new animation item.

","parent_name":"MMMAnimator"},"Classes/MMMAnimator.html#/c:objc(cs)MMMAnimator(im)addAnimationWithDuration:repeatCount:autoreverse:updateBlock:doneBlock:":{"name":"-addAnimationWithDuration:repeatCount:autoreverse:updateBlock:doneBlock:","abstract":"

Undocumented

","parent_name":"MMMAnimator"},"Classes/MMMAnimator.html#/c:objc(cs)MMMAnimator(im)init":{"name":"-init","abstract":"

Despite the +shared method defined above you can still create own instances of this class.

","parent_name":"MMMAnimator"},"Classes/MMMAnimator.html#/c:objc(cs)MMMAnimator(im)_testRunInNumberOfSteps:animations:forEachStep:":{"name":"-_testRunInNumberOfSteps:animations:forEachStep:","abstract":"

For unit tests only: will synchronously run all the animations already in the animator and the ones added within","parent_name":"MMMAnimator"},"Classes/MMMAnimation.html#/c:objc(cs)MMMAnimation(cm)curvedTimeForTime:curve:":{"name":"+curvedTimeForTime:curve:","abstract":"

Time obtained by curving the given normalized time (from [0; 1] range).

","parent_name":"MMMAnimation"},"Classes/MMMAnimation.html#/c:objc(cs)MMMAnimation(cm)timeForCurvedTime:curve:":{"name":"+timeForCurvedTime:curve:","abstract":"

Inverse function for curvedTimeForTime:curve:, i.e. when we know the value returned by curvedTimeForTime:curve:","parent_name":"MMMAnimation"},"Classes/MMMAnimation.html#/c:objc(cs)MMMAnimation(cm)curvedTimeForTime:startTime:duration:curve:":{"name":"+curvedTimeForTime:startTime:duration:curve:","abstract":"

Time obtained by clamping the given time into [startTime; startTime + duration], normalizing to [0; 1] range,","parent_name":"MMMAnimation"},"Classes/MMMAnimation.html#/c:objc(cs)MMMAnimation(cm)interpolateFrom:to:time:":{"name":"+interpolateFrom:to:time:","abstract":"

A float between ‘from’ and ‘to’ corresponding to already normalized and curved time.

","parent_name":"MMMAnimation"},"Classes/MMMAnimation.html#/c:objc(cs)MMMAnimation(cm)interpolateFrom:to:curvedTime:":{"name":"+interpolateFrom:to:curvedTime:","abstract":"

This has been renamed. Use the version above.

","parent_name":"MMMAnimation"},"Classes/MMMAnimation.html#/c:objc(cs)MMMAnimation(cm)interpolateFrom:to:time:startTime:duration:curve:":{"name":"+interpolateFrom:to:time:startTime:duration:curve:","abstract":"

Value between two floats corresponding to the given time and timing curve.","parent_name":"MMMAnimation"},"Classes/MMMAnimation.html#/c:objc(cs)MMMAnimation(cm)colorFrom:to:time:":{"name":"+colorFrom:to:time:","abstract":"

A color between ‘from’ and ‘to’ corresponding to already normalized and curved time.","parent_name":"MMMAnimation"},"Classes/MMMAnimation.html#/c:objc(cs)MMMAnimation(cm)pointFrom:to:time:":{"name":"+pointFrom:to:time:","abstract":"

A point on the line between given points corresponding to already normalized and curved time.

","parent_name":"MMMAnimation"},"Classes/MMMVelocityMeter.html#/c:objc(cs)MMMVelocityMeter(im)reset":{"name":"-reset","abstract":"

Resets the state of the meter, all values added before are forgotten.

","parent_name":"MMMVelocityMeter"},"Classes/MMMVelocityMeter.html#/c:objc(cs)MMMVelocityMeter(im)addValue:timestamp:":{"name":"-addValue:timestamp:","abstract":"

Adds a coordinate and a corresponding timestamp.

","parent_name":"MMMVelocityMeter"},"Classes/MMMVelocityMeter.html#/c:objc(cs)MMMVelocityMeter(im)addValue:":{"name":"-addValue:","abstract":"

Adds a coordinate with the current timstamp.

","parent_name":"MMMVelocityMeter"},"Classes/MMMVelocityMeter.html#/c:objc(cs)MMMVelocityMeter(im)calculateVelocity:acceleration:":{"name":"-calculateVelocity:acceleration:","abstract":"

Calculates velocity and acceleration based on recently added values.

","parent_name":"MMMVelocityMeter"},"Classes/MMMLayoutUtils.html#/c:objc(cs)MMMLayoutUtils(cm)rectWithSize:anchor:withinRect:anchor:":{"name":"+rectWithSize:anchor:withinRect:anchor:","abstract":"

A rect with the given size positioned inside of the target rect in such a way that anchor points of both rects align.

","parent_name":"MMMLayoutUtils"},"Classes/MMMLayoutUtils.html#/c:objc(cs)MMMLayoutUtils(cm)rectWithSize:withinRect:anchor:":{"name":"+rectWithSize:withinRect:anchor:","abstract":"

A shortcut for the above method with anchors being the same for both source and target rect.","parent_name":"MMMLayoutUtils"},"Classes/MMMLayoutUtils.html#/c:objc(cs)MMMLayoutUtils(cm)rectWithSize:withinRect:contentMode:":{"name":"+rectWithSize:withinRect:contentMode:","abstract":"

A frame for the sourceRect positioned within the targetRect according to standard UIViewContentMode flags","parent_name":"MMMLayoutUtils"},"Classes/MMMLayoutUtils.html#/c:objc(cs)MMMLayoutUtils(cm)rectWithSize:atPoint:anchor:":{"name":"+rectWithSize:atPoint:anchor:","abstract":"

A frame of the given size with its center at the specified point (assuming the center is defined by the given anchor","parent_name":"MMMLayoutUtils"},"Classes/MMMLayoutUtils.html#/c:objc(cs)MMMLayoutUtils(cm)rectWithSize:center:":{"name":"+rectWithSize:center:","abstract":"

Same as rectWithSize:center:anchor: with anchor set to (0.5, 0.5).

","parent_name":"MMMLayoutUtils"},"Classes/MMMContainerView.html#/c:objc(cs)MMMContainerView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMContainerView"},"Classes/MMMContainerView.html#/c:objc(cs)MMMContainerView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMContainerView"},"Classes/MMMContainerView.html#/c:objc(cs)MMMContainerView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMContainerView"},"Classes/MMMShadowView.html#/c:objc(cs)MMMShadowView(py)contentView":{"name":"contentView","abstract":"

View that can accepts and lay out subviews.

","parent_name":"MMMShadowView"},"Classes/MMMShadowView.html#/c:objc(cs)MMMShadowView(py)settings":{"name":"settings","abstract":"

Undocumented

","parent_name":"MMMShadowView"},"Classes/MMMShadowView.html#/c:objc(cs)MMMShadowView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMShadowView"},"Classes/MMMShadowView.html#/c:objc(cs)MMMShadowView(im)initWithSettings:":{"name":"-initWithSettings:","abstract":"

Undocumented

","parent_name":"MMMShadowView"},"Classes/MMMShadowView.html#/c:objc(cs)MMMShadowView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMShadowView"},"Classes/MMMShadowView.html#/c:objc(cs)MMMShadowView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMShadowView"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(py)color":{"name":"color","abstract":"

Default is black color.

","parent_name":"MMMShadowViewSetting"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(py)opacity":{"name":"opacity","abstract":"

Default is 0.

","parent_name":"MMMShadowViewSetting"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(py)offset":{"name":"offset","abstract":"

Default is zero.

","parent_name":"MMMShadowViewSetting"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(py)radius":{"name":"radius","abstract":"

Default is 0.

","parent_name":"MMMShadowViewSetting"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(py)insets":{"name":"insets","abstract":"

Default is zero.

","parent_name":"MMMShadowViewSetting"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(py)backgroundColor":{"name":"backgroundColor","abstract":"

Default is white color.

","parent_name":"MMMShadowViewSetting"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(py)cornerRadius":{"name":"cornerRadius","abstract":"

Default is 0.

","parent_name":"MMMShadowViewSetting"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMShadowViewSetting"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(im)initWithBlock:":{"name":"-initWithBlock:","abstract":"

Undocumented

","parent_name":"MMMShadowViewSetting"},"Classes/MMMTableView.html#/c:objc(cs)MMMTableView(im)initWithSettings:style:":{"name":"-initWithSettings:style:","parent_name":"MMMTableView"},"Classes/MMMTableView.html#/c:objc(cs)MMMTableView(im)initWithSettings:":{"name":"-initWithSettings:","abstract":"

Note that UITableViewStylePlain is used.

","parent_name":"MMMTableView"},"Classes/MMMTableView.html#/c:objc(cs)MMMTableView(im)initWithFrame:style:":{"name":"-initWithFrame:style:","abstract":"

Undocumented

","parent_name":"MMMTableView"},"Classes/MMMTableView.html#/c:objc(cs)MMMTableView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMTableView"},"Classes/MMMTableView.html#/c:objc(cs)MMMTableView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMTableView"},"Classes/MMMTableView.html#/c:objc(cs)MMMTableView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMTableView"},"Classes/MMMTableView.html#/c:objc(cs)MMMTableView(py)shouldHandlePotentialCellSizeChanges":{"name":"shouldHandlePotentialCellSizeChanges","abstract":"

When enabled, then reloadData is automatically called whenever any of the cells report potential size","parent_name":"MMMTableView"},"Classes/MMMNavigationStack.html#/c:objc(cs)MMMNavigationStack(cm)shared":{"name":"+shared","abstract":"

Undocumented

","parent_name":"MMMNavigationStack"},"Classes/MMMNavigationStack.html#/c:objc(cs)MMMNavigationStack(im)pushItemWithName:delegate:controller:":{"name":"-pushItemWithName:delegate:controller:","abstract":"

Notifies the stack about a new modal navigation context facing the user now, such as a modal view controller being presented or","parent_name":"MMMNavigationStack"},"Classes/MMMNavigationStack.html#/c:objc(cs)MMMNavigationStack(im)popAllAfterController:completion:":{"name":"-popAllAfterController:completion:","abstract":"

Undocumented

","parent_name":"MMMNavigationStack"},"Classes/MMMStubView.html#/c:objc(cs)MMMStubView(im)initWithText:index:":{"name":"-initWithText:index:","abstract":"

The text is optional, the index influences the background color.

","parent_name":"MMMStubView"},"Classes/MMMStubView.html#/c:objc(cs)MMMStubView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMStubView"},"Classes/MMMStubView.html#/c:objc(cs)MMMStubView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMStubView"},"Classes/MMMStubView.html#/c:objc(cs)MMMStubView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMStubView"},"Classes/MMMAutoLayoutScrollView.html#/c:objc(cs)MMMAutoLayoutScrollView(py)contentView":{"name":"contentView","abstract":"

This is where your content subviews should be added.

","parent_name":"MMMAutoLayoutScrollView"},"Classes/MMMAutoLayoutScrollView.html#/c:objc(cs)MMMAutoLayoutScrollView(im)initWithSettings:":{"name":"-initWithSettings:","abstract":"

Initializes with the given config.

","parent_name":"MMMAutoLayoutScrollView"},"Classes/MMMAutoLayoutScrollView.html#/c:objc(cs)MMMAutoLayoutScrollView(im)init":{"name":"-init","abstract":"

Initializes with default settings, a shortcut for initWithSettings:[[MMMScrollViewShadowsSettings alloc] init].

","parent_name":"MMMAutoLayoutScrollView"},"Classes/MMMAutoLayoutScrollView.html#/c:objc(cs)MMMAutoLayoutScrollView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMAutoLayoutScrollView"},"Classes/MMMAutoLayoutScrollView.html#/c:objc(cs)MMMAutoLayoutScrollView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMAutoLayoutScrollView"},"Classes/MMMImageView.html#/c:objc(cs)MMMImageView(py)image":{"name":"image","abstract":"

Undocumented

","parent_name":"MMMImageView"},"Classes/MMMImageView.html#/c:objc(cs)MMMImageView(py)highlightedImage":{"name":"highlightedImage","abstract":"

Undocumented

","parent_name":"MMMImageView"},"Classes/MMMImageView.html#/c:objc(cs)MMMImageView(py)highlighted":{"name":"highlighted","abstract":"

Undocumented

","parent_name":"MMMImageView"},"Classes/MMMImageView.html#/c:objc(cs)MMMImageView(im)initWithImage:highlightedImage:":{"name":"-initWithImage:highlightedImage:","abstract":"

Undocumented

","parent_name":"MMMImageView"},"Classes/MMMImageView.html#/c:objc(cs)MMMImageView(im)init":{"name":"-init","abstract":"

Convenience initializer.

","parent_name":"MMMImageView"},"Classes/MMMImageView.html#/c:objc(cs)MMMImageView(im)initWithImage:":{"name":"-initWithImage:","abstract":"

Convenience initializer.

","parent_name":"MMMImageView"},"Classes/MMMImageView.html#/c:objc(cs)MMMImageView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMImageView"},"Classes/MMMImageView.html#/c:objc(cs)MMMImageView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMImageView"},"Classes/MMMStubViewController.html#/c:objc(cs)MMMStubViewController(im)initWithText:index:":{"name":"-initWithText:index:","abstract":"

Undocumented

","parent_name":"MMMStubViewController"},"Classes/MMMStubViewController.html#/c:objc(cs)MMMStubViewController(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMStubViewController"},"Classes/MMMStubViewController.html#/c:objc(cs)MMMStubViewController(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMStubViewController"},"Classes/MMMStubViewController.html#/c:objc(cs)MMMStubViewController(im)initWithNibName:bundle:":{"name":"-initWithNibName:bundle:","abstract":"

Undocumented

","parent_name":"MMMStubViewController"},"Classes/MMMNavigationRequest.html#/c:objc(cs)MMMNavigationRequest(py)originalPath":{"name":"originalPath","abstract":"

A sequence of hops the request has started with. This is never changed during lifetime of the request.

","parent_name":"MMMNavigationRequest"},"Classes/MMMNavigationRequest.html#/c:objc(cs)MMMNavigationRequest(py)path":{"name":"path","abstract":"

The current sequence of hops to follow. Handlers can adjust this.

","parent_name":"MMMNavigationRequest"},"Classes/MMMNavigationRequest.html#/c:objc(cs)MMMNavigationRequest(im)didFinishSuccessfully:":{"name":"-didFinishSuccessfully:","abstract":"

Called by the handler when all the hops in the path were followed through.

","parent_name":"MMMNavigationRequest"},"Classes/MMMNavigationRequest.html#/c:objc(cs)MMMNavigationRequest(im)continueWithPath:handler:":{"name":"-continueWithPath:handler:","abstract":"

Called by the handler to indicate that the sequence of hops (possibly changed) should be continued by another handler.","parent_name":"MMMNavigationRequest"},"Classes/MMMNavigation.html#/c:objc(cs)MMMNavigation(cm)root":{"name":"+root","abstract":"

Undocumented

","parent_name":"MMMNavigation"},"Classes/MMMNavigation.html#/c:objc(cs)MMMNavigation(im)navigateTo:completion:":{"name":"-navigateTo:completion:","abstract":"

Starts the process of opening of the given path. Calls the completion block when done, the block receives ID of the","parent_name":"MMMNavigation"},"Classes/MMMNavigation.html#/c:objc(cs)MMMNavigation(im)addHandler:":{"name":"-addHandler:","abstract":"

Adds a handler and returns a cookie/ID object that can be later used to remove it.

","parent_name":"MMMNavigation"},"Classes/MMMNavigation.html#/c:objc(cs)MMMNavigation(im)removeHandlerWithId:":{"name":"-removeHandlerWithId:","abstract":"

Removes a handler by its ID assigned by addHandler.

","parent_name":"MMMNavigation"},"Classes/MMMNavigationPath.html#/c:objc(cs)MMMNavigationPath(py)hops":{"name":"hops","abstract":"

All the “hops” the link consists of.

","parent_name":"MMMNavigationPath"},"Classes/MMMNavigationPath.html#/c:objc(cs)MMMNavigationPath(im)pathWithoutFirstHop":{"name":"-pathWithoutFirstHop","abstract":"

A new path obtained from the current one by removing the first hop.

","parent_name":"MMMNavigationPath"},"Classes/MMMNavigationPath.html#/c:objc(cs)MMMNavigationPath(im)firstHop":{"name":"-firstHop","abstract":"

The first hop in the path or nil if the path is empty.

","parent_name":"MMMNavigationPath"},"Classes/MMMNavigationPath.html#/c:objc(cs)MMMNavigationPath(im)initWithHops:":{"name":"-initWithHops:","abstract":"

Undocumented

","parent_name":"MMMNavigationPath"},"Classes/MMMNavigationPath.html#/c:objc(cs)MMMNavigationPath(im)initWithURI:":{"name":"-initWithURI:","abstract":"

Convenience initializer. Allows to use URIs like “main/recipes”, to construct hops out of it.","parent_name":"MMMNavigationPath"},"Classes/MMMNavigationPath.html#/c:objc(cs)MMMNavigationPath(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMNavigationPath"},"Classes/MMMNavigationHop.html#/c:objc(cs)MMMNavigationHop(py)action":{"name":"action","abstract":"

Name/ID of the hop. Supposed to be a flat string, like ‘recipes’, not a path.

","parent_name":"MMMNavigationHop"},"Classes/MMMNavigationHop.html#/c:objc(cs)MMMNavigationHop(py)params":{"name":"params","abstract":"

Optional parameters for this hop only.

","parent_name":"MMMNavigationHop"},"Classes/MMMNavigationHop.html#/c:objc(cs)MMMNavigationHop(im)initWithAction:params:":{"name":"-initWithAction:params:","abstract":"

Undocumented

","parent_name":"MMMNavigationHop"},"Classes/MMMNavigationHop.html#/c:objc(cs)MMMNavigationHop(im)initWithAction:":{"name":"-initWithAction:","abstract":"

Undocumented

","parent_name":"MMMNavigationHop"},"Classes/MMMNavigationHop.html#/c:objc(cs)MMMNavigationHop(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMNavigationHop"},"Classes/MMMScrollViewShadowView.html#/c:objc(cs)MMMScrollViewShadowView(im)initWithAlignment:settings:":{"name":"-initWithAlignment:settings:","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadowView"},"Classes/MMMScrollViewShadowView.html#/c:objc(cs)MMMScrollViewShadowView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadowView"},"Classes/MMMScrollViewShadowView.html#/c:objc(cs)MMMScrollViewShadowView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadowView"},"Classes/MMMScrollViewShadowView.html#/c:objc(cs)MMMScrollViewShadowView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadowView"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)shadowAlpha":{"name":"shadowAlpha","abstract":"

The base shadow color is black with this amount of transparency applied to it.

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)shadowColor":{"name":"shadowColor","abstract":"

The base shadow color, ensure this is an RGB color. Note that the alpha channel is ignored, use shadowAlpha instead.

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)shadowCurvature":{"name":"shadowCurvature","abstract":"

The value between 0 and 1 telling how close to an elliptical curve the shadow’s border should be.

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)topShadowEnabled":{"name":"topShadowEnabled","abstract":"

Disabled by default.

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)topShadowHeight":{"name":"topShadowHeight","abstract":"

The height of the top shadow view. (5px by default.)

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)topShadowShouldUseContentInsets":{"name":"topShadowShouldUseContentInsets","abstract":"

YES, if the top shadow should be offset from the top edge of the scroll view by the top offset of content insets.

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)bottomShadowEnabled":{"name":"bottomShadowEnabled","abstract":"

Disabled by default.

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)bottomShadowHeight":{"name":"bottomShadowHeight","abstract":"

The height of the bottom shadow view. (10px by default.)

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)bottomShadowShouldUseContentInsets":{"name":"bottomShadowShouldUseContentInsets","abstract":"

YES, if the bottom shadow should be offset from the bottom edge of the scroll view by the bottom offset of content insets.

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadows.html#/c:objc(cs)MMMScrollViewShadows(im)initWithScrollView:settings:":{"name":"-initWithScrollView:settings:","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadows"},"Classes/MMMScrollViewShadows.html#/c:objc(cs)MMMScrollViewShadows(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadows"},"Classes/MMMScrollViewShadows.html#/c:objc(cs)MMMScrollViewShadows(im)layoutSubviews":{"name":"-layoutSubviews","abstract":"

Have to be called from layoutSubviews of our scroll view subclass to update the state of the shadows.

","parent_name":"MMMScrollViewShadows"},"Classes/MMMScrollViewShadows.html#/c:objc(cs)MMMScrollViewShadows(im)mightNeedClippingView":{"name":"-mightNeedClippingView","abstract":"

YES, if additional content view clipping might be needed for the current shadow settings.

","parent_name":"MMMScrollViewShadows"},"Classes/MMMScrollViewShadows.html#/c:objc(cs)MMMScrollViewShadows(im)layoutSubviewsWithClippingView:":{"name":"-layoutSubviewsWithClippingView:","abstract":"

Same as layoutSubviews above but also updates clipToBounds property of the given view in case there are visible

","parent_name":"MMMScrollViewShadows"},"Classes/MMMViewWrappingCell.html#/c:objc(cs)MMMViewWrappingCell(py)wrappedView":{"name":"wrappedView","abstract":"

The view this cell wraps. It is added into the contentView and is laid out to fully fill it.

","parent_name":"MMMViewWrappingCell"},"Classes/MMMViewWrappingCell.html#/c:objc(cs)MMMViewWrappingCell(im)initWithView:reuseIdentifier:":{"name":"-initWithView:reuseIdentifier:","abstract":"

Undocumented

","parent_name":"MMMViewWrappingCell"},"Classes/MMMViewWrappingCell.html#/c:objc(cs)MMMViewWrappingCell(im)initWithView:reuseIdentifier:inset:":{"name":"-initWithView:reuseIdentifier:inset:","abstract":"

Undocumented

","parent_name":"MMMViewWrappingCell"},"Classes/MMMViewWrappingCell.html#/c:objc(cs)MMMViewWrappingCell(im)initWithReuseIdentifier:":{"name":"-initWithReuseIdentifier:","abstract":"

Undocumented

","parent_name":"MMMViewWrappingCell"},"Classes/MMMTableViewCell.html#/c:objc(cs)MMMTableViewCell(im)initWithReuseIdentifier:":{"name":"-initWithReuseIdentifier:","abstract":"

Undocumented

","parent_name":"MMMTableViewCell"},"Classes/MMMTableViewCell.html#/c:objc(cs)MMMTableViewCell(im)initWithStyle:reuseIdentifier:":{"name":"-initWithStyle:reuseIdentifier:","abstract":"

Undocumented

","parent_name":"MMMTableViewCell"},"Classes/MMMTableViewCell.html#/c:objc(cs)MMMTableViewCell(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMTableViewCell"},"Classes/MMMTableViewCell.html#/c:objc(cs)MMMTableViewCell(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMTableViewCell"},"Classes/MMMTableViewCell.html#/c:objc(cs)MMMTableViewCell(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMTableViewCell"},"Classes/MMMTableViewCell.html":{"name":"MMMTableViewCell","abstract":"

A base for table view cells redeclareing the designated initializer into the one we typically use,"},"Classes/MMMViewWrappingCell.html":{"name":"MMMViewWrappingCell","abstract":"

A simple table view cell wrapping the given view.

"},"Classes/MMMScrollViewShadows.html":{"name":"MMMScrollViewShadows","abstract":"

A helper for adding top and bottom shadows into any UIScrollView-based class."},"Classes/MMMScrollViewShadowsSettings.html":{"name":"MMMScrollViewShadowsSettings","abstract":"

Holds configuration for MMMScrollViewShadows that can be set only on initialization time.

"},"Classes/MMMScrollViewShadowView.html":{"name":"MMMScrollViewShadowView","abstract":"

A view that’s used internally to render shadows in MMMAutoLayoutScrollView."},"Classes/MMMNavigationHop.html":{"name":"MMMNavigationHop","abstract":"

Opening a deep link can involve following through one or more steps, for example:

"},"Classes/MMMNavigationPath.html":{"name":"MMMNavigationPath","abstract":"

A navigation path is just a collection of one or more “hops”.

"},"Classes/MMMNavigation.html":{"name":"MMMNavigation","abstract":"

Manages switching between different sections of the app (kind of internal URL router)."},"Classes/MMMNavigationRequest.html":{"name":"MMMNavigationRequest","abstract":"

Info about a navigation request that is passed to handlers.

"},"Classes/MMMStubViewController.html":{"name":"MMMStubViewController","abstract":"

This is to be used during development to stub not ready yet parts of the app.

"},"Classes/MMMImageView.html":{"name":"MMMImageView","abstract":"

A limited replacement for UIImageView fixing its inability to properly work with images having"},"Classes/MMMAutoLayoutScrollView.html":{"name":"MMMAutoLayoutScrollView","abstract":"

A vertical scroll view with a content view and preconfigured constraints, so there is no need in creating"},"Classes.html#/c:objc(cs)MMMAutoLayoutScrollViewContentView":{"name":"MMMAutoLayoutScrollViewContentView","abstract":"

A subview of MMMAutoLayoutScrollView where all the subviews should be added.

"},"Classes/MMMStubView.html":{"name":"MMMStubView","abstract":"

To be used during development as a placeholder for not yet implemented views."},"Classes/MMMNavigationStack.html":{"name":"MMMNavigationStack","abstract":"

This is to track the navigation state of the app and have the possibility to programmatically return to registered points of"},"Classes/MMMTableView.html":{"name":"MMMTableView","abstract":"

A table view supporting top and bottom shadows.

"},"Classes/MMMShadowViewSetting.html":{"name":"MMMShadowViewSetting","abstract":"

Holds configuration for MMMShadowView.

"},"Classes/MMMShadowView.html":{"name":"MMMShadowView","abstract":"

Helper view for adding custom layer shadows, while taking the the shadow sizes in conserderation for its final frame.

"},"Classes/MMMContainerView.html":{"name":"MMMContainerView","abstract":"

Auto Layout does not support constraints against groups of items, so this is for the cases a normal UIView is"},"Classes/MMMLayoutUtils.html":{"name":"MMMLayoutUtils","abstract":"

This is to group a few simple layout helpers.

"},"Classes/MMMVelocityMeter.html":{"name":"MMMVelocityMeter","abstract":"

A little helper for velocity/acceleration calculations: you feed it values with timestamps and can get the most recent"},"Classes/MMMAnimation.html":{"name":"MMMAnimation","abstract":"

Minimalistic animation helpers.

"},"Classes/MMMAnimator.html":{"name":"MMMAnimator","abstract":"

Minimalistic animator object in the spirit of helpers defined in MMMAnimation.

"},"Classes/MMMAnimationHandle.html":{"name":"MMMAnimationHandle","abstract":"

Sort of a handle returned by MMMAnimator when a new animation is scheduled."},"Classes/MMMCollectionView.html":{"name":"MMMCollectionView","abstract":"

Collection view supporting top & bottom shadows.

"},"Classes/MMMSpacerView.html":{"name":"MMMSpacerView","abstract":"

Auto Layout does not support relationships between empty spaces, so we need to use spacer views and set such"},"Classes/MMMStackContainer.html":{"name":"MMMStackContainer","abstract":"

A container which lays out its subviews in certain direction one after another using fixed spacing between them."},"Classes/MMMVerticalStackContainer.html":{"name":"MMMVerticalStackContainer","abstract":"

Vertical version of MMMStackContainer.

"},"Classes/MMMHorizontalStackContainer.html":{"name":"MMMHorizontalStackContainer","abstract":"

Horizontal version of MMMStackContainer.

"},"Classes/MMMAutoLayoutIsolator.html":{"name":"MMMAutoLayoutIsolator","abstract":"

Wraps a view that uses Auto Layout into a manual layout view providing sizeThatFits: for the outside world."},"Classes/MMMPaddedView.html":{"name":"MMMPaddedView","abstract":"

Wraps a view padding it from all the sides.

"},"Classes/MMMVerticalGradientView.html":{"name":"MMMVerticalGradientView","abstract":"

A view displaying a gradient from top to bottom. The linearity of the gradient can be controlled."},"Classes/MMMStylesheet.html":{"name":"MMMStylesheet","abstract":"

A base for app-specific stylesheets: commonly used paddings, colors, fonts, etc in a single place.

"},"Classes/MMMStylesheetScaleConverter.html":{"name":"MMMStylesheetScaleConverter","abstract":"

Dimension converter that uses a table of scales.

"},"Categories/NSLayoutConstraint%28MMMTemple%29.html#/c:objc(cs)NSLayoutConstraint(cm)mmm_constraintsWithVisualFormat:options:metrics:views:":{"name":"+mmm_constraintsWithVisualFormat:options:metrics:views:","abstract":"

Our wrapper over the corresponding method of NSLayoutConstraint extending the visual layout language a bit to support","parent_name":"NSLayoutConstraint(MMMTemple)"},"Categories/NSLayoutConstraint%28MMMTemple%29.html#/c:objc(cs)NSLayoutConstraint(cm)mmm_activateConstraintsWithVisualFormat:options:metrics:views:":{"name":"+mmm_activateConstraintsWithVisualFormat:options:metrics:views:","abstract":"

A shortcut for [NSLayoutConstraint activateConstraints:[NSLayoutConstraint mmm_constraintsWithVisualFormat:....

","parent_name":"NSLayoutConstraint(MMMTemple)"},"Categories/NSLayoutConstraint%28MMMTemple%29.html#/c:objc(cs)NSLayoutConstraint(cm)activateConstraint:":{"name":"+activateConstraint:","abstract":"

Missing counterparts for (de)activateConstraints, so constraint activation code looks the same for individual constraints.

","parent_name":"NSLayoutConstraint(MMMTemple)"},"Categories/NSLayoutConstraint%28MMMTemple%29.html#/c:objc(cs)NSLayoutConstraint(cm)deactivateConstraint:":{"name":"+deactivateConstraint:","abstract":"

Undocumented

","parent_name":"NSLayoutConstraint(MMMTemple)"},"Categories/NSLayoutConstraint%28MMMTemple%29.html#/c:objc(cs)NSLayoutConstraint(cm)constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:priority:":{"name":"+constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:priority:","abstract":"

A missing convenience initializer including priority.

","parent_name":"NSLayoutConstraint(MMMTemple)"},"Categories/NSLayoutConstraint%28MMMTemple%29.html#/c:objc(cs)NSLayoutConstraint(cm)constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:identifier:":{"name":"+constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:identifier:","abstract":"

A missing convenience initializer allowing to set identifier for this constraint.

","parent_name":"NSLayoutConstraint(MMMTemple)"},"Categories/NSLayoutConstraint%28MMMTemple%29.html#/c:objc(cs)NSLayoutConstraint(cm)constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:priority:identifier:":{"name":"+constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:priority:identifier:","abstract":"

A missing convenience initializer allowing to set both priority and identifier for this constraint.

","parent_name":"NSLayoutConstraint(MMMTemple)"},"Categories/NSLayoutConstraint%28MMMTemple%29.html#/c:objc(cs)NSLayoutConstraint(cm)constraintsWithVisualFormat:options:metrics:views:identifier:":{"name":"+constraintsWithVisualFormat:options:metrics:views:identifier:","abstract":"

A missing convenience initializer allowing to tag a bunch of visual constraints with the same identifier.

","parent_name":"NSLayoutConstraint(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(py)mmm_rect":{"name":"mmm_rect","abstract":"

A wrapper for the center and bounds.size properties similar to ‘frame’, but not taking the current transform into account.

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(py)mmm_size":{"name":"mmm_size","abstract":"

A wrapper for the size component of bounds property.

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(py)mmm_safeAreaLayoutGuide":{"name":"mmm_safeAreaLayoutGuide","abstract":"

A safer version of safeAreaLayoutGuide that attempts to avoid layout loops happening when a view using it

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(py)mmm_safeAreaInsets":{"name":"mmm_safeAreaInsets","abstract":"

Effective safeAreaInsets as seen by mmm_safeAreaLayoutGuide.

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_constraintsAligningView:horizontally:vertically:insets:":{"name":"-mmm_constraintsAligningView:horizontally:vertically:insets:","abstract":"

Constraints anchoring the given view within the receiver according to horizontal and vertical alignment flags.","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_constraintsAligningView:horizontally:":{"name":"-mmm_constraintsAligningView:horizontally:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_constraintsAligningView:vertically:":{"name":"-mmm_constraintsAligningView:vertically:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_constraintsAligningGuide:horizontally:vertically:insets:":{"name":"-mmm_constraintsAligningGuide:horizontally:vertically:insets:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addConstraintsAligningView:horizontally:vertically:insets:":{"name":"-mmm_addConstraintsAligningView:horizontally:vertically:insets:","abstract":"

Adds contraints anchoring the given view within the receiver according to horizontal and vertical alignment flags.","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addConstraintsAligningView:horizontally:vertically:":{"name":"-mmm_addConstraintsAligningView:horizontally:vertically:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addConstraintsAligningView:horizontally:":{"name":"-mmm_addConstraintsAligningView:horizontally:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addConstraintsAligningView:vertically:":{"name":"-mmm_addConstraintsAligningView:vertically:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_constraintsHorizontallyCenteringView:minPadding:maxWidth:":{"name":"-mmm_constraintsHorizontallyCenteringView:minPadding:maxWidth:","abstract":"

Not yet activated constraints implementing a common layout idiom used with text:

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addConstraintsHorizontallyCenteringView:minPadding:maxWidth:":{"name":"-mmm_addConstraintsHorizontallyCenteringView:minPadding:maxWidth:","abstract":"

A shortcut activating constraints returned by mmm_constraintsHorizontallyCenteringView:minPadding:maxWidth:.

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addConstraintsHorizontallyCenteringView:minPadding:":{"name":"-mmm_addConstraintsHorizontallyCenteringView:minPadding:","abstract":"

A shortcut activating constraints returned by mmm_constraintsHorizontallyCenteringView:minPadding:maxWidth:

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addConstraintsForSubview:horizontalAlignment:verticalAlignment:insets:":{"name":"-mmm_addConstraintsForSubview:horizontalAlignment:verticalAlignment:insets:","abstract":"

Adds constraints anchoring the given subview within the receiver according to horizontal and vertical alignment flags.","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addConstraintsForSubview:horizontalAlignment:verticalAlignment:":{"name":"-mmm_addConstraintsForSubview:horizontalAlignment:verticalAlignment:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addVerticalSpaceRatioConstraintsForSubview:topItem:topAttribute:bottomItem:bottomAttribute:ratio:priority:":{"name":"-mmm_addVerticalSpaceRatioConstraintsForSubview:topItem:topAttribute:bottomItem:bottomAttribute:ratio:priority:","abstract":"

Adds constraints and two hidden auxiliary views ensuring that the space between the top of the subview and","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addVerticalSpaceRatioConstraintsForSubview:topItem:topAttribute:bottomItem:bottomAttribute:ratio:":{"name":"-mmm_addVerticalSpaceRatioConstraintsForSubview:topItem:topAttribute:bottomItem:bottomAttribute:ratio:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addVerticalSpaceRatioConstraintsForSubview:item:attribute:ratio:":{"name":"-mmm_addVerticalSpaceRatioConstraintsForSubview:item:attribute:ratio:","abstract":"

Adds constrains and a hidden auxiliary view ensuring that specified item / attribute vertically divides","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_setVerticalCompressionResistance:":{"name":"-mmm_setVerticalCompressionResistance:","abstract":"

Shortcuts for compression resistance and hugging priorities.

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_setHorizontalCompressionResistance:":{"name":"-mmm_setHorizontalCompressionResistance:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_setVerticalHuggingPriority:":{"name":"-mmm_setVerticalHuggingPriority:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_setHorizontalHuggingPriority:":{"name":"-mmm_setHorizontalHuggingPriority:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_setVerticalCompressionResistance:hugging:":{"name":"-mmm_setVerticalCompressionResistance:hugging:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_setHorizontalCompressionResistance:hugging:":{"name":"-mmm_setHorizontalCompressionResistance:hugging:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_setCompressionResistanceHorizontal:vertical:":{"name":"-mmm_setCompressionResistanceHorizontal:vertical:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_setHuggingHorizontal:vertical:":{"name":"-mmm_setHuggingHorizontal:vertical:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UILayoutGuide%28MMMTemple%29.html#/c:objc(cs)UILayoutGuide(im)initWithIdentifier:":{"name":"-initWithIdentifier:","abstract":"

Convenience initializer setting the guide’s identifier.

","parent_name":"UILayoutGuide(MMMTemple)"},"Categories/UILayoutGuide%28MMMTemple%29.html#/c:objc(cs)UILayoutGuide(im)mmm_constraintsAligningView:horizontally:vertically:insets:":{"name":"-mmm_constraintsAligningView:horizontally:vertically:insets:","abstract":"

Not yet activated constraints anchoring the given view within the receiver according to horizontal","parent_name":"UILayoutGuide(MMMTemple)"},"Categories/UILayoutGuide%28MMMTemple%29.html#/c:objc(cs)UILayoutGuide(im)mmm_constraintsAligningGuide:horizontally:vertically:insets:":{"name":"-mmm_constraintsAligningGuide:horizontally:vertically:insets:","abstract":"

Undocumented

","parent_name":"UILayoutGuide(MMMTemple)"},"Categories/UILayoutGuide%28MMMTemple%29.html#/c:objc(cs)UILayoutGuide(im)mmm_constraintsHorizontallyCenteringView:minPadding:maxWidth:":{"name":"-mmm_constraintsHorizontallyCenteringView:minPadding:maxWidth:","abstract":"

Not yet activated constraints implementing a common layout idiom used with text:

","parent_name":"UILayoutGuide(MMMTemple)"},"Categories/UIView%28MMMPreferredSizeChanges%29.html#/c:objc(cs)UIView(im)mmm_setPreferredSizeCouldChange":{"name":"-mmm_setPreferredSizeCouldChange","abstract":"

Signals to one of the interested parent views (supporting MMMPreferredSizeChanges)","parent_name":"UIView(MMMPreferredSizeChanges)"},"Categories/UIView%28MMMPreferredSizeChanges%29.html":{"name":"UIView(MMMPreferredSizeChanges)","abstract":"

Undocumented

"},"Categories/UILayoutGuide%28MMMTemple%29.html":{"name":"UILayoutGuide(MMMTemple)","abstract":"

Undocumented

"},"Categories/UIView%28MMMTemple%29.html":{"name":"UIView(MMMTemple)","abstract":"

A few shorthands for UIView.

"},"Categories/NSLayoutConstraint%28MMMTemple%29.html":{"name":"NSLayoutConstraint(MMMTemple)","abstract":"

Undocumented

"},"Categories.html":{"name":"Categories","abstract":"

The following categories are available globally.

"},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Constants.html":{"name":"Constants","abstract":"

The following constants are available globally.

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Type%20Definitions.html":{"name":"Type Definitions","abstract":"

The following type definitions are available globally.

"},"Functions.html":{"name":"Functions","abstract":"

The following functions are available globally.

"}} \ No newline at end of file +{} \ No newline at end of file diff --git a/docsets/MMMCommonUI.docset/Contents/Resources/docSet.dsidx b/docsets/MMMCommonUI.docset/Contents/Resources/docSet.dsidx index 81920c177df1bde1bfb66a9bb61903b20e2350cc..6bd527c5584a01b72e4a5f47f082d191886ad616 100644 GIT binary patch delta 54 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 diff --git a/docsets/MMMCommonUI.tgz b/docsets/MMMCommonUI.tgz index 2b467f1d44869bf94e4178750c4f4fd87bc70a52..746731da1c04449ba21c397d9c47bc3837325e10 100644 GIT binary patch literal 85498 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 s(_-zlk!rkbYd}9e4b?IpuyK= zRxjkc)TyGnPH(fy<-@eZSjae;wGYycQBOGs_2T7=S1;KjP`U8Ea;EoC7~{ObA?s1B ziolObhF>1RKbCvJ#@hu~K?6Mx$)=kE1qamL)*noHX}z2nN1DaSWQ{4jg1Xj}ii6VT z;WADxhhToBP_MA?z1Ev}67gWz@3J(5G5xzJO)?)~)_IKL3`T8+tsU*!fTEIC^Yy2F zaG+T8VVG~F>VG?dw|W?(*X4H(fNiw$zVWaS-!tDNarLUqR^4TY#)_IjNtM8MKdKmC zwcCM^_d0T<4Oa_5rd=T&2?Fno&@mowIuF)CzUjHDU)3;NOg4 z?=7NmR#$n|x_Q9#s-nwa7!e9`gZsi48F#9QLRaH>!vPVM?N%ujfHvUEp%T8^UF9*r zGj9Yd4a0{9M6uhd6~yO4$u9B%00#iZL_E$}(GO1Ab*L?8Ii1Ub`x=q5II7-N z)(qRrA+bYoq)yP5%9mj>a$LWPaFw8*Sh+)(*2oo&^;4(@DjU7IYeaRFx+5v-WR z;H4^Takxtda!QL*Fq8RLec9M7a~JpF@QI)eGHrI4e${Pu6?aGRJBYQO+g5%z^H*!p zsw!_bnMILJM;R8M3QesOgACQ)SJk_o*_yRr3aYkIHA^AQQ0`r5ZQgMA_~yLP(W<-& z!*D(gId7I=M0Le3Ek&OUw$vw9enq3mnFBEt)~Ss?F&oJ#n7Lxkt{fhyUf5UE=W2O7 zNH))=Ra{Y$j}DJa^(|aFSt;y~qL&MFvXe1I3>@5VPGwe6O_nGEUJ4TjXB-=I26gesaa|TZO+@P z#3^c~n^v>Ru1PB^97Tb&_lSrF)LV*?);-`Pn`4WZ^K(m_Xt@EOq84Q+m=E{_AT{_y z_G~oGt-1~-&>tA?k3O2QaujXE0~>2}m3V7T7a)zOenF;|= zjbP^P>l)Rn1Xrm$=v~Ghqj@E(rJ3B=kh}|8&IgZ@FiSATe-}@iri*XsRTIO1U++?^ z(pFCs5_)XB7#imKE)BOu9cyZ&H&@dHPguk>tCoc6={h_$=ErEB{Xn;V@He*@RAD*R zWSWb$v_vlTw%b8?odjB}b<4O+G-PVJt=b-o#x$o!55x;nz)DA5R*ezdc+Y%L`cKdV|3I|M6^29FM>M>lGMZMiLrkX^Hjccp^}`6BBqf)b~A z(T_}8gP$12NwscRQ|I~o0lFYcV+!o1beKiC->c;|@NGV?wtb!E;pHT|P|0*JTpG*G zo+q>F&XMdyG!sQ9`@%quUtLV${jKtMkNZLsON6Bm*9}91)QZT`1N^}MtD(T0CtZTV zOK#R>Ez+9xypUpHQx)Wp zCYRj;U=nTsXfwi(c`QY5o@J$Js;iU38x|0pYpMO-qup1rRZ6UJ(;a`LPg)8DrjR}o z(*qTV84xcQiFT9~1D%Z$1Eb1i!p@iCbN;@kBq`J2TDmcRsvB>#xUQmYGWRM68HdS} zJWHa0T{k)guV%F_rEvVF05;W;;d3_HTFk+b=2pYZWT>-XLk!AEvu+-(qOh!CUau^> z%P3vji(87$le7Falk!F!p+nEyY(8!SxvHe{C_bly;+Uncoy&6ZFe0gVhcl8aLGe z!BX{_Ma(@+v2?hJN*=AX5e|P%*Ljig9li886thKoALtsh^S2zj__qqXU4w04jaukk tLXxcpjcr%D)z&*P)F~(i$NrZCyZ`+A^Y72UKmRuT{eQ!G2p|9=1OSi=ah(7F literal 199186 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

N} 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

@@ -323,7 +84,7 @@

Usage

diff --git a/search.json b/search.json index c48681a..9e26dfe 100644 --- a/search.json +++ b/search.json @@ -1 +1 @@ -{"Functions.html#/c:MMMLayoutUtils.h@F@MMMCenterMultiplierForRatio":{"name":"MMMCenterMultiplierForRatio","abstract":"

Suppose you need to contrain a view so its center divides its container in certain ratio different from 1:1"},"Functions.html#/c:@F@MMMReverseAnimationCurve":{"name":"MMMReverseAnimationCurve","abstract":"

Animation curve opposite to the given one, e.g. EaseIn for EaseOut.

"},"Functions.html#/c:MMMLayout.h@F@MMMLayoutAlignmentFromHorizontalAlignment":{"name":"MMMLayoutAlignmentFromHorizontalAlignment","abstract":"

Undocumented

"},"Functions.html#/c:MMMLayout.h@F@MMMLayoutAlignmentFromVerticalAlignment":{"name":"MMMLayoutAlignmentFromVerticalAlignment","abstract":"

Undocumented

"},"Functions.html#/c:@F@MMMDictionaryFromUIEdgeInsets":{"name":"MMMDictionaryFromUIEdgeInsets","abstract":"

A dictionary built from UIEdgeInsets suitable for AutoLayout metrics."},"Type%20Definitions.html#/c:MMMNavigation.h@T@MMMNavigationRequestId":{"name":"MMMNavigationRequestId","abstract":"

Undocumented

"},"Type%20Definitions.html#/c:MMMNavigation.h@T@MMMNavigationCompletionBlock":{"name":"MMMNavigationCompletionBlock","abstract":"

Undocumented

"},"Type%20Definitions.html#/c:MMMNavigation.h@T@MMMNavigationHandlerId":{"name":"MMMNavigationHandlerId","abstract":"

Undocumented

"},"Type%20Definitions.html#/c:MMMNavigationStack.h@T@MMMNavigationStackCompletion":{"name":"MMMNavigationStackCompletion","abstract":"

Undocumented

"},"Type%20Definitions.html#/c:MMMShadowView.h@T@MMMShadowViewSettingBlock":{"name":"MMMShadowViewSettingBlock","abstract":"

Undocumented

"},"Type%20Definitions.html#/c:MMMAnimations.h@T@MMMAnimatorUpdateBlock":{"name":"MMMAnimatorUpdateBlock","abstract":"

Called on every update cycle of MMMAnimator for the given animation item.

"},"Type%20Definitions.html#/c:MMMAnimations.h@T@MMMAnimatorDoneBlock":{"name":"MMMAnimatorDoneBlock","abstract":"

Called when the animation item has been finished.

"},"Protocols/MMMStylesheetConverter.html#/c:objc(pl)MMMStylesheetConverter(im)convertFloat:fromSizeClass:":{"name":"-convertFloat:fromSizeClass:","abstract":"

Converts a dimension know for certain size class according to the rules of the converter.

","parent_name":"MMMStylesheetConverter"},"Protocols/MMMPreferredSizeChanges.html#/c:objc(pl)MMMPreferredSizeChanges(im)mmm_preferredSizeCouldChangeForSubview:":{"name":"-mmm_preferredSizeCouldChangeForSubview:","abstract":"

Undocumented

","parent_name":"MMMPreferredSizeChanges"},"Protocols/MMMNavigationStackItem.html#/c:objc(pl)MMMNavigationStackItem(im)didPop":{"name":"-didPop","abstract":"

Should be called by the item’s delegate when the navigation item has been popped as a result of user’s action","parent_name":"MMMNavigationStackItem"},"Protocols/MMMNavigationStackItem.html#/c:objc(pl)MMMNavigationStackItem(im)didFailToPop":{"name":"-didFailToPop","abstract":"

Should be called by the navigation item’s delegate in rare caes when the corresponding item cannot be popped.

","parent_name":"MMMNavigationStackItem"},"Protocols/MMMNavigationStackItem.html#/c:objc(pl)MMMNavigationStackItem(im)popAllAfterThisItemWithCompletion:":{"name":"-popAllAfterThisItemWithCompletion:","abstract":"

Pops all the items currently on the stack above this item, so this one becomes the top. This is an asynchronous operation","parent_name":"MMMNavigationStackItem"},"Protocols/MMMNavigationStackItemDelegate.html#/c:objc(pl)MMMNavigationStackItemDelegate(im)popNavigationStackItem:":{"name":"-popNavigationStackItem:","abstract":"

Should perform all the work necessary to pop the corresponding UI navigation item and must call didPop method","parent_name":"MMMNavigationStackItemDelegate"},"Protocols/MMMNavigationHandler.html#/c:objc(pl)MMMNavigationHandler(im)performNavigationRequest:":{"name":"-performNavigationRequest:","abstract":"

Returns NO, in case the handler is unable to perform the given request. (Another handler will be tried then.)","parent_name":"MMMNavigationHandler"},"Protocols/MMMNavigationHandler.html":{"name":"MMMNavigationHandler","abstract":"

Protocol for entities able to fulfill in-app navigation requests.

"},"Protocols/MMMNavigationStackItemDelegate.html":{"name":"MMMNavigationStackItemDelegate","abstract":"

This is the delegate corresponding to each navigation item in the stack."},"Protocols/MMMNavigationStackItem.html":{"name":"MMMNavigationStackItem","abstract":"

A token corresponding to a single node (item) of the current UI navigation path."},"Protocols/MMMPreferredSizeChanges.html":{"name":"MMMPreferredSizeChanges","abstract":"

A view supporting this will be notified when one of the child views indicates potential changes in its contents"},"Protocols/MMMStylesheetConverter.html":{"name":"MMMStylesheetConverter","abstract":"

Something that converts dimensions given for one size class (e.g. font sizes from the design made for iPhone 6)"},"Enums/MMMLayoutVerticalAlignment.html#/c:@E@MMMLayoutVerticalAlignment@MMMLayoutVerticalAlignmentNone":{"name":"MMMLayoutVerticalAlignmentNone","abstract":"

Undocumented

","parent_name":"MMMLayoutVerticalAlignment"},"Enums/MMMLayoutVerticalAlignment.html#/c:@E@MMMLayoutVerticalAlignment@MMMLayoutVerticalAlignmentTop":{"name":"MMMLayoutVerticalAlignmentTop","abstract":"

Undocumented

","parent_name":"MMMLayoutVerticalAlignment"},"Enums/MMMLayoutVerticalAlignment.html#/c:@E@MMMLayoutVerticalAlignment@MMMLayoutVerticalAlignmentGolden":{"name":"MMMLayoutVerticalAlignmentGolden","abstract":"

Undocumented

","parent_name":"MMMLayoutVerticalAlignment"},"Enums/MMMLayoutVerticalAlignment.html#/c:@E@MMMLayoutVerticalAlignment@MMMLayoutVerticalAlignmentCenter":{"name":"MMMLayoutVerticalAlignmentCenter","abstract":"

Undocumented

","parent_name":"MMMLayoutVerticalAlignment"},"Enums/MMMLayoutVerticalAlignment.html#/c:@E@MMMLayoutVerticalAlignment@MMMLayoutVerticalAlignmentBottom":{"name":"MMMLayoutVerticalAlignmentBottom","abstract":"

Undocumented

","parent_name":"MMMLayoutVerticalAlignment"},"Enums/MMMLayoutVerticalAlignment.html#/c:@E@MMMLayoutVerticalAlignment@MMMLayoutVerticalAlignmentFill":{"name":"MMMLayoutVerticalAlignmentFill","abstract":"

Undocumented

","parent_name":"MMMLayoutVerticalAlignment"},"Enums/MMMLayoutHorizontalAlignment.html#/c:@E@MMMLayoutHorizontalAlignment@MMMLayoutHorizontalAlignmentNone":{"name":"MMMLayoutHorizontalAlignmentNone","abstract":"

Undocumented

","parent_name":"MMMLayoutHorizontalAlignment"},"Enums/MMMLayoutHorizontalAlignment.html#/c:@E@MMMLayoutHorizontalAlignment@MMMLayoutHorizontalAlignmentLeft":{"name":"MMMLayoutHorizontalAlignmentLeft","abstract":"

Undocumented

","parent_name":"MMMLayoutHorizontalAlignment"},"Enums/MMMLayoutHorizontalAlignment.html#/c:@E@MMMLayoutHorizontalAlignment@MMMLayoutHorizontalAlignmentGolden":{"name":"MMMLayoutHorizontalAlignmentGolden","abstract":"

Undocumented

","parent_name":"MMMLayoutHorizontalAlignment"},"Enums/MMMLayoutHorizontalAlignment.html#/c:@E@MMMLayoutHorizontalAlignment@MMMLayoutHorizontalAlignmentCenter":{"name":"MMMLayoutHorizontalAlignmentCenter","abstract":"

Undocumented

","parent_name":"MMMLayoutHorizontalAlignment"},"Enums/MMMLayoutHorizontalAlignment.html#/c:@E@MMMLayoutHorizontalAlignment@MMMLayoutHorizontalAlignmentRight":{"name":"MMMLayoutHorizontalAlignmentRight","abstract":"

Undocumented

","parent_name":"MMMLayoutHorizontalAlignment"},"Enums/MMMLayoutHorizontalAlignment.html#/c:@E@MMMLayoutHorizontalAlignment@MMMLayoutHorizontalAlignmentFill":{"name":"MMMLayoutHorizontalAlignmentFill","abstract":"

Undocumented

","parent_name":"MMMLayoutHorizontalAlignment"},"Enums/MMMLayoutDirection.html#/c:@E@MMMLayoutDirection@MMMLayoutDirectionHorizontal":{"name":"MMMLayoutDirectionHorizontal","abstract":"

Undocumented

","parent_name":"MMMLayoutDirection"},"Enums/MMMLayoutDirection.html#/c:@E@MMMLayoutDirection@MMMLayoutDirectionVertical":{"name":"MMMLayoutDirectionVertical","abstract":"

Undocumented

","parent_name":"MMMLayoutDirection"},"Enums/MMMLayoutAlignment.html#/c:@E@MMMLayoutAlignment@MMMLayoutAlignmentNone":{"name":"MMMLayoutAlignmentNone","abstract":"

Undocumented

","parent_name":"MMMLayoutAlignment"},"Enums/MMMLayoutAlignment.html#/c:@E@MMMLayoutAlignment@MMMLayoutAlignmentLeading":{"name":"MMMLayoutAlignmentLeading","abstract":"

Undocumented

","parent_name":"MMMLayoutAlignment"},"Enums/MMMLayoutAlignment.html#/c:@E@MMMLayoutAlignment@MMMLayoutAlignmentGolden":{"name":"MMMLayoutAlignmentGolden","abstract":"

Undocumented

","parent_name":"MMMLayoutAlignment"},"Enums/MMMLayoutAlignment.html#/c:@E@MMMLayoutAlignment@MMMLayoutAlignmentCenter":{"name":"MMMLayoutAlignmentCenter","abstract":"

Undocumented

","parent_name":"MMMLayoutAlignment"},"Enums/MMMLayoutAlignment.html#/c:@E@MMMLayoutAlignment@MMMLayoutAlignmentTrailing":{"name":"MMMLayoutAlignmentTrailing","abstract":"

Undocumented

","parent_name":"MMMLayoutAlignment"},"Enums/MMMLayoutAlignment.html#/c:@E@MMMLayoutAlignment@MMMLayoutAlignmentFill":{"name":"MMMLayoutAlignmentFill","abstract":"

Undocumented

","parent_name":"MMMLayoutAlignment"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveLinear":{"name":"MMMAnimationCurveLinear","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseOut":{"name":"MMMAnimationCurveEaseOut","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseIn":{"name":"MMMAnimationCurveEaseIn","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInOut":{"name":"MMMAnimationCurveEaseInOut","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveSofterEaseIn":{"name":"MMMAnimationCurveSofterEaseIn","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveSofterEaseOut":{"name":"MMMAnimationCurveSofterEaseOut","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveSofterEaseInOut":{"name":"MMMAnimationCurveSofterEaseInOut","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInQuad":{"name":"MMMAnimationCurveEaseInQuad","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseOutQuad":{"name":"MMMAnimationCurveEaseOutQuad","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInOutQuad":{"name":"MMMAnimationCurveEaseInOutQuad","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInCubic":{"name":"MMMAnimationCurveEaseInCubic","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseOutCubic":{"name":"MMMAnimationCurveEaseOutCubic","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInOutCubic":{"name":"MMMAnimationCurveEaseInOutCubic","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInQuart":{"name":"MMMAnimationCurveEaseInQuart","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseOutQuart":{"name":"MMMAnimationCurveEaseOutQuart","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInOutQuart":{"name":"MMMAnimationCurveEaseInOutQuart","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInQuint":{"name":"MMMAnimationCurveEaseInQuint","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseOutQuint":{"name":"MMMAnimationCurveEaseOutQuint","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMAnimationCurve.html#/c:@E@MMMAnimationCurve@MMMAnimationCurveEaseInOutQuint":{"name":"MMMAnimationCurveEaseInOutQuint","abstract":"

Undocumented

","parent_name":"MMMAnimationCurve"},"Enums/MMMScrollViewShadowAlignment.html#/c:@E@MMMScrollViewShadowAlignment@MMMScrollViewShadowAlignmentTop":{"name":"MMMScrollViewShadowAlignmentTop","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadowAlignment"},"Enums/MMMScrollViewShadowAlignment.html#/c:@E@MMMScrollViewShadowAlignment@MMMScrollViewShadowAlignmentBottom":{"name":"MMMScrollViewShadowAlignmentBottom","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadowAlignment"},"Enums/MMMScrollViewShadowAlignment.html":{"name":"MMMScrollViewShadowAlignment","abstract":"

Undocumented

"},"Enums/MMMAnimationCurve.html":{"name":"MMMAnimationCurve","abstract":"

Undocumented

"},"Enums/MMMLayoutAlignment.html":{"name":"MMMLayoutAlignment","abstract":"

General alignment flags used when it’s not important which direction (vertical or horizontal) the alignment is for.

"},"Enums/MMMLayoutDirection.html":{"name":"MMMLayoutDirection","abstract":"

Undocumented

"},"Enums/MMMLayoutHorizontalAlignment.html":{"name":"MMMLayoutHorizontalAlignment","abstract":"

Undocumented

"},"Enums/MMMLayoutVerticalAlignment.html":{"name":"MMMLayoutVerticalAlignment","abstract":"

Undocumented

"},"Constants.html#/c:@MMMGolden":{"name":"MMMGolden","abstract":"

Golden ratio constant.

"},"Constants.html#/c:@MMMInverseGolden":{"name":"MMMInverseGolden","abstract":"

1 divided by golden ratio.

"},"Constants.html#/c:@MMMSizeClassic":{"name":"MMMSizeClassic","abstract":"

Small screen phones: iPhone 4/4s/5/5s/SE.

"},"Constants.html#/c:@MMMSize6":{"name":"MMMSize6","abstract":"

Regular phones: iPhone 6/6s/7/8 and X as well.

"},"Constants.html#/c:@MMMSize6Plus":{"name":"MMMSize6Plus","abstract":"

Pluse-sized phones: iPhone 6/7/8 Plus.

"},"Constants.html#/c:@MMMSizePad":{"name":"MMMSizePad","abstract":"

iPads: regular and pros.

"},"Constants.html#/c:@MMMSizeRest":{"name":"MMMSizeRest","abstract":"

Not the actual size class, but can be used as a key valueForCurrentSizeClass: and related methods for a fallback value.

"},"Classes/MMMStylesheetScaleConverter.html#/c:objc(cs)MMMStylesheetScaleConverter(im)initWithScales:":{"name":"-initWithScales:","abstract":"

Initializes the converter with an explicit table of scales.","parent_name":"MMMStylesheetScaleConverter"},"Classes/MMMStylesheetScaleConverter.html#/c:objc(cs)MMMStylesheetScaleConverter(im)initWithTargetSizeClass:dimensions:":{"name":"-initWithTargetSizeClass:dimensions:","abstract":"

Initializes the converter with a target size class and a table of dimensions associated with every size class","parent_name":"MMMStylesheetScaleConverter"},"Classes/MMMStylesheetScaleConverter.html#/c:objc(cs)MMMStylesheetScaleConverter(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMStylesheetScaleConverter"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(py)currentSizeClass":{"name":"currentSizeClass","abstract":"

The size class of the current device. See the MMSize* string constants below.

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)valueForCurrentSizeClass:":{"name":"-valueForCurrentSizeClass:","abstract":"

Allows to avoid code that picks values (fonts, sizes, etc) by explicitely matching currentSizeClass.","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)floatForCurrentSizeClass:":{"name":"-floatForCurrentSizeClass:","abstract":"

A version of valueForCurrentSizeClass: unwrapping the result as a float, which is handy for numeric values.

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)extrapolatedFloatForCurrentSizeClass:":{"name":"-extrapolatedFloatForCurrentSizeClass:","abstract":"

Deprecated.","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)extrapolatedFloatForCurrentSizeClass:except:":{"name":"-extrapolatedFloatForCurrentSizeClass:except:","abstract":"

Deprecated.","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(py)widthBasedConverter":{"name":"widthBasedConverter","abstract":"

Converts dimensions given for one size class into dimensions suitable for the current size class","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(py)extraExtraSmallPadding":{"name":"extraExtraSmallPadding","abstract":"

A standard set of paddings.","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(py)extraSmallPadding":{"name":"extraSmallPadding","abstract":"

Undocumented

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(py)smallPadding":{"name":"smallPadding","abstract":"

Undocumented

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(py)normalPadding":{"name":"normalPadding","abstract":"

Undocumented

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(py)largePadding":{"name":"largePadding","abstract":"

Undocumented

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(py)extraLargePadding":{"name":"extraLargePadding","abstract":"

Undocumented

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)insetsFromRelativeInsets:":{"name":"-insetsFromRelativeInsets:","abstract":"

Actual insets from relative ones.

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)paddingFromRelativePadding:":{"name":"-paddingFromRelativePadding:","abstract":"

This is what insetsFromRelativeInsets: is using internally. Might be useful when making similar methods.

","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)dictionaryWithPaddings":{"name":"-dictionaryWithPaddings","abstract":"

A metrics dictionary that can be used with Auto Layout with keys/values corresponding to all the paddings we support,","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)dictionaryFromRelativeInsets:keyPrefix:":{"name":"-dictionaryFromRelativeInsets:keyPrefix:","abstract":"

A dictionary with 4 values under keys “Top”, “Bottom”, “Left”, “Right”","parent_name":"MMMStylesheet"},"Classes/MMMStylesheet.html#/c:objc(cs)MMMStylesheet(im)paddingDictionaryFromRelativeInsets:":{"name":"-paddingDictionaryFromRelativeInsets:","abstract":"

A dictionary with 4 values obtained from the insets returned by insetsFromRelativeInsets:insets","parent_name":"MMMStylesheet"},"Classes/MMMVerticalGradientView.html#/c:objc(cs)MMMVerticalGradientView(im)initWithTopColor:bottomColor:curve:":{"name":"-initWithTopColor:bottomColor:curve:","abstract":"

Undocumented

","parent_name":"MMMVerticalGradientView"},"Classes/MMMVerticalGradientView.html#/c:objc(cs)MMMVerticalGradientView(im)initWithTopColor:bottomColor:":{"name":"-initWithTopColor:bottomColor:","abstract":"

Undocumented

","parent_name":"MMMVerticalGradientView"},"Classes/MMMVerticalGradientView.html#/c:objc(cs)MMMVerticalGradientView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMVerticalGradientView"},"Classes/MMMVerticalGradientView.html#/c:objc(cs)MMMVerticalGradientView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMVerticalGradientView"},"Classes/MMMVerticalGradientView.html#/c:objc(cs)MMMVerticalGradientView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMVerticalGradientView"},"Classes/MMMPaddedView.html#/c:objc(cs)MMMPaddedView(py)view":{"name":"view","abstract":"

The view being wrapped.

","parent_name":"MMMPaddedView"},"Classes/MMMPaddedView.html#/c:objc(cs)MMMPaddedView(py)insets":{"name":"insets","abstract":"

Undocumented

","parent_name":"MMMPaddedView"},"Classes/MMMPaddedView.html#/c:objc(cs)MMMPaddedView(im)initWithView:insets:":{"name":"-initWithView:insets:","abstract":"

Undocumented

","parent_name":"MMMPaddedView"},"Classes/MMMPaddedView.html#/c:objc(cs)MMMPaddedView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMPaddedView"},"Classes/MMMPaddedView.html#/c:objc(cs)MMMPaddedView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMPaddedView"},"Classes/MMMPaddedView.html#/c:objc(cs)MMMPaddedView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMPaddedView"},"Classes/MMMAutoLayoutIsolator.html#/c:objc(cs)MMMAutoLayoutIsolator(py)view":{"name":"view","abstract":"

The view being wrapped.

","parent_name":"MMMAutoLayoutIsolator"},"Classes/MMMAutoLayoutIsolator.html#/c:objc(cs)MMMAutoLayoutIsolator(im)initWithView:":{"name":"-initWithView:","abstract":"

Undocumented

","parent_name":"MMMAutoLayoutIsolator"},"Classes/MMMAutoLayoutIsolator.html#/c:objc(cs)MMMAutoLayoutIsolator(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMAutoLayoutIsolator"},"Classes/MMMAutoLayoutIsolator.html#/c:objc(cs)MMMAutoLayoutIsolator(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMAutoLayoutIsolator"},"Classes/MMMAutoLayoutIsolator.html#/c:objc(cs)MMMAutoLayoutIsolator(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMAutoLayoutIsolator"},"Classes/MMMHorizontalStackContainer.html#/c:objc(cs)MMMHorizontalStackContainer(im)initWithInsets:alignment:spacing:":{"name":"-initWithInsets:alignment:spacing:","abstract":"

Undocumented

","parent_name":"MMMHorizontalStackContainer"},"Classes/MMMHorizontalStackContainer.html#/c:objc(cs)MMMHorizontalStackContainer(im)initWithDirection:insets:alignment:spacing:":{"name":"-initWithDirection:insets:alignment:spacing:","abstract":"

Undocumented

","parent_name":"MMMHorizontalStackContainer"},"Classes/MMMVerticalStackContainer.html#/c:objc(cs)MMMVerticalStackContainer(im)initWithInsets:alignment:spacing:":{"name":"-initWithInsets:alignment:spacing:","abstract":"

Undocumented

","parent_name":"MMMVerticalStackContainer"},"Classes/MMMVerticalStackContainer.html#/c:objc(cs)MMMVerticalStackContainer(im)initWithDirection:insets:alignment:spacing:":{"name":"-initWithDirection:insets:alignment:spacing:","abstract":"

Undocumented

","parent_name":"MMMVerticalStackContainer"},"Classes/MMMStackContainer.html#/c:objc(cs)MMMStackContainer(im)setSubviews:":{"name":"-setSubviews:","abstract":"

Sets subviews to be laid out. Previously set subviews will be removed from this container first.

","parent_name":"MMMStackContainer"},"Classes/MMMStackContainer.html#/c:objc(cs)MMMStackContainer(im)initWithDirection:insets:alignment:spacing:":{"name":"-initWithDirection:insets:alignment:spacing:","abstract":"

Insets define the padding around all the subviews.","parent_name":"MMMStackContainer"},"Classes/MMMStackContainer.html#/c:objc(cs)MMMStackContainer(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMStackContainer"},"Classes/MMMStackContainer.html#/c:objc(cs)MMMStackContainer(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMStackContainer"},"Classes/MMMStackContainer.html#/c:objc(cs)MMMStackContainer(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMStackContainer"},"Classes/MMMSpacerView.html#/c:objc(cs)MMMSpacerView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMSpacerView"},"Classes/MMMSpacerView.html#/c:objc(cs)MMMSpacerView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMSpacerView"},"Classes/MMMSpacerView.html#/c:objc(cs)MMMSpacerView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMSpacerView"},"Classes/MMMCollectionView.html#/c:objc(cs)MMMCollectionView(im)initWithSettings:":{"name":"-initWithSettings:","abstract":"

Uses UICollectionViewFlowLayout by default.

","parent_name":"MMMCollectionView"},"Classes/MMMCollectionView.html#/c:objc(cs)MMMCollectionView(im)initWithFrame:collectionViewLayout:":{"name":"-initWithFrame:collectionViewLayout:","abstract":"

Undocumented

","parent_name":"MMMCollectionView"},"Classes/MMMCollectionView.html#/c:objc(cs)MMMCollectionView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMCollectionView"},"Classes/MMMCollectionView.html#/c:objc(cs)MMMCollectionView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMCollectionView"},"Classes/MMMCollectionView.html#/c:objc(cs)MMMCollectionView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMCollectionView"},"Classes/MMMAnimationHandle.html#/c:objc(cs)MMMAnimationHandle(py)inProgress":{"name":"inProgress","abstract":"

YES, if the animation has not been finished yet.

","parent_name":"MMMAnimationHandle"},"Classes/MMMAnimationHandle.html#/c:objc(cs)MMMAnimationHandle(im)cancel":{"name":"-cancel","abstract":"

Finishes animation before its designated end time.

","parent_name":"MMMAnimationHandle"},"Classes/MMMAnimationHandle.html#/c:objc(cs)MMMAnimationHandle(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMAnimationHandle"},"Classes/MMMAnimator.html#/c:objc(cs)MMMAnimator(cm)shared":{"name":"+shared","abstract":"

Undocumented

","parent_name":"MMMAnimator"},"Classes/MMMAnimator.html#/c:objc(cs)MMMAnimator(im)addAnimationWithDuration:updateBlock:doneBlock:":{"name":"-addAnimationWithDuration:updateBlock:doneBlock:","abstract":"

Schedules a new animation item.

","parent_name":"MMMAnimator"},"Classes/MMMAnimator.html#/c:objc(cs)MMMAnimator(im)addAnimationWithDuration:repeatCount:autoreverse:updateBlock:doneBlock:":{"name":"-addAnimationWithDuration:repeatCount:autoreverse:updateBlock:doneBlock:","abstract":"

Undocumented

","parent_name":"MMMAnimator"},"Classes/MMMAnimator.html#/c:objc(cs)MMMAnimator(im)init":{"name":"-init","abstract":"

Despite the +shared method defined above you can still create own instances of this class.

","parent_name":"MMMAnimator"},"Classes/MMMAnimator.html#/c:objc(cs)MMMAnimator(im)_testRunInNumberOfSteps:animations:forEachStep:":{"name":"-_testRunInNumberOfSteps:animations:forEachStep:","abstract":"

For unit tests only: will synchronously run all the animations already in the animator and the ones added within","parent_name":"MMMAnimator"},"Classes/MMMAnimation.html#/c:objc(cs)MMMAnimation(cm)curvedTimeForTime:curve:":{"name":"+curvedTimeForTime:curve:","abstract":"

Time obtained by curving the given normalized time (from [0; 1] range).

","parent_name":"MMMAnimation"},"Classes/MMMAnimation.html#/c:objc(cs)MMMAnimation(cm)timeForCurvedTime:curve:":{"name":"+timeForCurvedTime:curve:","abstract":"

Inverse function for curvedTimeForTime:curve:, i.e. when we know the value returned by curvedTimeForTime:curve:","parent_name":"MMMAnimation"},"Classes/MMMAnimation.html#/c:objc(cs)MMMAnimation(cm)curvedTimeForTime:startTime:duration:curve:":{"name":"+curvedTimeForTime:startTime:duration:curve:","abstract":"

Time obtained by clamping the given time into [startTime; startTime + duration], normalizing to [0; 1] range,","parent_name":"MMMAnimation"},"Classes/MMMAnimation.html#/c:objc(cs)MMMAnimation(cm)interpolateFrom:to:time:":{"name":"+interpolateFrom:to:time:","abstract":"

A float between ‘from’ and ‘to’ corresponding to already normalized and curved time.

","parent_name":"MMMAnimation"},"Classes/MMMAnimation.html#/c:objc(cs)MMMAnimation(cm)interpolateFrom:to:curvedTime:":{"name":"+interpolateFrom:to:curvedTime:","abstract":"

This has been renamed. Use the version above.

","parent_name":"MMMAnimation"},"Classes/MMMAnimation.html#/c:objc(cs)MMMAnimation(cm)interpolateFrom:to:time:startTime:duration:curve:":{"name":"+interpolateFrom:to:time:startTime:duration:curve:","abstract":"

Value between two floats corresponding to the given time and timing curve.","parent_name":"MMMAnimation"},"Classes/MMMAnimation.html#/c:objc(cs)MMMAnimation(cm)colorFrom:to:time:":{"name":"+colorFrom:to:time:","abstract":"

A color between ‘from’ and ‘to’ corresponding to already normalized and curved time.","parent_name":"MMMAnimation"},"Classes/MMMAnimation.html#/c:objc(cs)MMMAnimation(cm)pointFrom:to:time:":{"name":"+pointFrom:to:time:","abstract":"

A point on the line between given points corresponding to already normalized and curved time.

","parent_name":"MMMAnimation"},"Classes/MMMVelocityMeter.html#/c:objc(cs)MMMVelocityMeter(im)reset":{"name":"-reset","abstract":"

Resets the state of the meter, all values added before are forgotten.

","parent_name":"MMMVelocityMeter"},"Classes/MMMVelocityMeter.html#/c:objc(cs)MMMVelocityMeter(im)addValue:timestamp:":{"name":"-addValue:timestamp:","abstract":"

Adds a coordinate and a corresponding timestamp.

","parent_name":"MMMVelocityMeter"},"Classes/MMMVelocityMeter.html#/c:objc(cs)MMMVelocityMeter(im)addValue:":{"name":"-addValue:","abstract":"

Adds a coordinate with the current timstamp.

","parent_name":"MMMVelocityMeter"},"Classes/MMMVelocityMeter.html#/c:objc(cs)MMMVelocityMeter(im)calculateVelocity:acceleration:":{"name":"-calculateVelocity:acceleration:","abstract":"

Calculates velocity and acceleration based on recently added values.

","parent_name":"MMMVelocityMeter"},"Classes/MMMLayoutUtils.html#/c:objc(cs)MMMLayoutUtils(cm)rectWithSize:anchor:withinRect:anchor:":{"name":"+rectWithSize:anchor:withinRect:anchor:","abstract":"

A rect with the given size positioned inside of the target rect in such a way that anchor points of both rects align.

","parent_name":"MMMLayoutUtils"},"Classes/MMMLayoutUtils.html#/c:objc(cs)MMMLayoutUtils(cm)rectWithSize:withinRect:anchor:":{"name":"+rectWithSize:withinRect:anchor:","abstract":"

A shortcut for the above method with anchors being the same for both source and target rect.","parent_name":"MMMLayoutUtils"},"Classes/MMMLayoutUtils.html#/c:objc(cs)MMMLayoutUtils(cm)rectWithSize:withinRect:contentMode:":{"name":"+rectWithSize:withinRect:contentMode:","abstract":"

A frame for the sourceRect positioned within the targetRect according to standard UIViewContentMode flags","parent_name":"MMMLayoutUtils"},"Classes/MMMLayoutUtils.html#/c:objc(cs)MMMLayoutUtils(cm)rectWithSize:atPoint:anchor:":{"name":"+rectWithSize:atPoint:anchor:","abstract":"

A frame of the given size with its center at the specified point (assuming the center is defined by the given anchor","parent_name":"MMMLayoutUtils"},"Classes/MMMLayoutUtils.html#/c:objc(cs)MMMLayoutUtils(cm)rectWithSize:center:":{"name":"+rectWithSize:center:","abstract":"

Same as rectWithSize:center:anchor: with anchor set to (0.5, 0.5).

","parent_name":"MMMLayoutUtils"},"Classes/MMMContainerView.html#/c:objc(cs)MMMContainerView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMContainerView"},"Classes/MMMContainerView.html#/c:objc(cs)MMMContainerView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMContainerView"},"Classes/MMMContainerView.html#/c:objc(cs)MMMContainerView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMContainerView"},"Classes/MMMShadowView.html#/c:objc(cs)MMMShadowView(py)contentView":{"name":"contentView","abstract":"

View that can accepts and lay out subviews.

","parent_name":"MMMShadowView"},"Classes/MMMShadowView.html#/c:objc(cs)MMMShadowView(py)settings":{"name":"settings","abstract":"

Undocumented

","parent_name":"MMMShadowView"},"Classes/MMMShadowView.html#/c:objc(cs)MMMShadowView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMShadowView"},"Classes/MMMShadowView.html#/c:objc(cs)MMMShadowView(im)initWithSettings:":{"name":"-initWithSettings:","abstract":"

Undocumented

","parent_name":"MMMShadowView"},"Classes/MMMShadowView.html#/c:objc(cs)MMMShadowView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMShadowView"},"Classes/MMMShadowView.html#/c:objc(cs)MMMShadowView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMShadowView"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(py)color":{"name":"color","abstract":"

Default is black color.

","parent_name":"MMMShadowViewSetting"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(py)opacity":{"name":"opacity","abstract":"

Default is 0.

","parent_name":"MMMShadowViewSetting"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(py)offset":{"name":"offset","abstract":"

Default is zero.

","parent_name":"MMMShadowViewSetting"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(py)radius":{"name":"radius","abstract":"

Default is 0.

","parent_name":"MMMShadowViewSetting"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(py)insets":{"name":"insets","abstract":"

Default is zero.

","parent_name":"MMMShadowViewSetting"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(py)backgroundColor":{"name":"backgroundColor","abstract":"

Default is white color.

","parent_name":"MMMShadowViewSetting"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(py)cornerRadius":{"name":"cornerRadius","abstract":"

Default is 0.

","parent_name":"MMMShadowViewSetting"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMShadowViewSetting"},"Classes/MMMShadowViewSetting.html#/c:objc(cs)MMMShadowViewSetting(im)initWithBlock:":{"name":"-initWithBlock:","abstract":"

Undocumented

","parent_name":"MMMShadowViewSetting"},"Classes/MMMTableView.html#/c:objc(cs)MMMTableView(im)initWithSettings:style:":{"name":"-initWithSettings:style:","parent_name":"MMMTableView"},"Classes/MMMTableView.html#/c:objc(cs)MMMTableView(im)initWithSettings:":{"name":"-initWithSettings:","abstract":"

Note that UITableViewStylePlain is used.

","parent_name":"MMMTableView"},"Classes/MMMTableView.html#/c:objc(cs)MMMTableView(im)initWithFrame:style:":{"name":"-initWithFrame:style:","abstract":"

Undocumented

","parent_name":"MMMTableView"},"Classes/MMMTableView.html#/c:objc(cs)MMMTableView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMTableView"},"Classes/MMMTableView.html#/c:objc(cs)MMMTableView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMTableView"},"Classes/MMMTableView.html#/c:objc(cs)MMMTableView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMTableView"},"Classes/MMMTableView.html#/c:objc(cs)MMMTableView(py)shouldHandlePotentialCellSizeChanges":{"name":"shouldHandlePotentialCellSizeChanges","abstract":"

When enabled, then reloadData is automatically called whenever any of the cells report potential size","parent_name":"MMMTableView"},"Classes/MMMNavigationStack.html#/c:objc(cs)MMMNavigationStack(cm)shared":{"name":"+shared","abstract":"

Undocumented

","parent_name":"MMMNavigationStack"},"Classes/MMMNavigationStack.html#/c:objc(cs)MMMNavigationStack(im)pushItemWithName:delegate:controller:":{"name":"-pushItemWithName:delegate:controller:","abstract":"

Notifies the stack about a new modal navigation context facing the user now, such as a modal view controller being presented or","parent_name":"MMMNavigationStack"},"Classes/MMMNavigationStack.html#/c:objc(cs)MMMNavigationStack(im)popAllAfterController:completion:":{"name":"-popAllAfterController:completion:","abstract":"

Undocumented

","parent_name":"MMMNavigationStack"},"Classes/MMMStubView.html#/c:objc(cs)MMMStubView(im)initWithText:index:":{"name":"-initWithText:index:","abstract":"

The text is optional, the index influences the background color.

","parent_name":"MMMStubView"},"Classes/MMMStubView.html#/c:objc(cs)MMMStubView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMStubView"},"Classes/MMMStubView.html#/c:objc(cs)MMMStubView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMStubView"},"Classes/MMMStubView.html#/c:objc(cs)MMMStubView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMStubView"},"Classes/MMMAutoLayoutScrollView.html#/c:objc(cs)MMMAutoLayoutScrollView(py)contentView":{"name":"contentView","abstract":"

This is where your content subviews should be added.

","parent_name":"MMMAutoLayoutScrollView"},"Classes/MMMAutoLayoutScrollView.html#/c:objc(cs)MMMAutoLayoutScrollView(im)initWithSettings:":{"name":"-initWithSettings:","abstract":"

Initializes with the given config.

","parent_name":"MMMAutoLayoutScrollView"},"Classes/MMMAutoLayoutScrollView.html#/c:objc(cs)MMMAutoLayoutScrollView(im)init":{"name":"-init","abstract":"

Initializes with default settings, a shortcut for initWithSettings:[[MMMScrollViewShadowsSettings alloc] init].

","parent_name":"MMMAutoLayoutScrollView"},"Classes/MMMAutoLayoutScrollView.html#/c:objc(cs)MMMAutoLayoutScrollView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMAutoLayoutScrollView"},"Classes/MMMAutoLayoutScrollView.html#/c:objc(cs)MMMAutoLayoutScrollView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMAutoLayoutScrollView"},"Classes/MMMImageView.html#/c:objc(cs)MMMImageView(py)image":{"name":"image","abstract":"

Undocumented

","parent_name":"MMMImageView"},"Classes/MMMImageView.html#/c:objc(cs)MMMImageView(py)highlightedImage":{"name":"highlightedImage","abstract":"

Undocumented

","parent_name":"MMMImageView"},"Classes/MMMImageView.html#/c:objc(cs)MMMImageView(py)highlighted":{"name":"highlighted","abstract":"

Undocumented

","parent_name":"MMMImageView"},"Classes/MMMImageView.html#/c:objc(cs)MMMImageView(im)initWithImage:highlightedImage:":{"name":"-initWithImage:highlightedImage:","abstract":"

Undocumented

","parent_name":"MMMImageView"},"Classes/MMMImageView.html#/c:objc(cs)MMMImageView(im)init":{"name":"-init","abstract":"

Convenience initializer.

","parent_name":"MMMImageView"},"Classes/MMMImageView.html#/c:objc(cs)MMMImageView(im)initWithImage:":{"name":"-initWithImage:","abstract":"

Convenience initializer.

","parent_name":"MMMImageView"},"Classes/MMMImageView.html#/c:objc(cs)MMMImageView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMImageView"},"Classes/MMMImageView.html#/c:objc(cs)MMMImageView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMImageView"},"Classes/MMMStubViewController.html#/c:objc(cs)MMMStubViewController(im)initWithText:index:":{"name":"-initWithText:index:","abstract":"

Undocumented

","parent_name":"MMMStubViewController"},"Classes/MMMStubViewController.html#/c:objc(cs)MMMStubViewController(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMStubViewController"},"Classes/MMMStubViewController.html#/c:objc(cs)MMMStubViewController(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMStubViewController"},"Classes/MMMStubViewController.html#/c:objc(cs)MMMStubViewController(im)initWithNibName:bundle:":{"name":"-initWithNibName:bundle:","abstract":"

Undocumented

","parent_name":"MMMStubViewController"},"Classes/MMMNavigationRequest.html#/c:objc(cs)MMMNavigationRequest(py)originalPath":{"name":"originalPath","abstract":"

A sequence of hops the request has started with. This is never changed during lifetime of the request.

","parent_name":"MMMNavigationRequest"},"Classes/MMMNavigationRequest.html#/c:objc(cs)MMMNavigationRequest(py)path":{"name":"path","abstract":"

The current sequence of hops to follow. Handlers can adjust this.

","parent_name":"MMMNavigationRequest"},"Classes/MMMNavigationRequest.html#/c:objc(cs)MMMNavigationRequest(im)didFinishSuccessfully:":{"name":"-didFinishSuccessfully:","abstract":"

Called by the handler when all the hops in the path were followed through.

","parent_name":"MMMNavigationRequest"},"Classes/MMMNavigationRequest.html#/c:objc(cs)MMMNavigationRequest(im)continueWithPath:handler:":{"name":"-continueWithPath:handler:","abstract":"

Called by the handler to indicate that the sequence of hops (possibly changed) should be continued by another handler.","parent_name":"MMMNavigationRequest"},"Classes/MMMNavigation.html#/c:objc(cs)MMMNavigation(cm)root":{"name":"+root","abstract":"

Undocumented

","parent_name":"MMMNavigation"},"Classes/MMMNavigation.html#/c:objc(cs)MMMNavigation(im)navigateTo:completion:":{"name":"-navigateTo:completion:","abstract":"

Starts the process of opening of the given path. Calls the completion block when done, the block receives ID of the","parent_name":"MMMNavigation"},"Classes/MMMNavigation.html#/c:objc(cs)MMMNavigation(im)addHandler:":{"name":"-addHandler:","abstract":"

Adds a handler and returns a cookie/ID object that can be later used to remove it.

","parent_name":"MMMNavigation"},"Classes/MMMNavigation.html#/c:objc(cs)MMMNavigation(im)removeHandlerWithId:":{"name":"-removeHandlerWithId:","abstract":"

Removes a handler by its ID assigned by addHandler.

","parent_name":"MMMNavigation"},"Classes/MMMNavigationPath.html#/c:objc(cs)MMMNavigationPath(py)hops":{"name":"hops","abstract":"

All the “hops” the link consists of.

","parent_name":"MMMNavigationPath"},"Classes/MMMNavigationPath.html#/c:objc(cs)MMMNavigationPath(im)pathWithoutFirstHop":{"name":"-pathWithoutFirstHop","abstract":"

A new path obtained from the current one by removing the first hop.

","parent_name":"MMMNavigationPath"},"Classes/MMMNavigationPath.html#/c:objc(cs)MMMNavigationPath(im)firstHop":{"name":"-firstHop","abstract":"

The first hop in the path or nil if the path is empty.

","parent_name":"MMMNavigationPath"},"Classes/MMMNavigationPath.html#/c:objc(cs)MMMNavigationPath(im)initWithHops:":{"name":"-initWithHops:","abstract":"

Undocumented

","parent_name":"MMMNavigationPath"},"Classes/MMMNavigationPath.html#/c:objc(cs)MMMNavigationPath(im)initWithURI:":{"name":"-initWithURI:","abstract":"

Convenience initializer. Allows to use URIs like “main/recipes”, to construct hops out of it.","parent_name":"MMMNavigationPath"},"Classes/MMMNavigationPath.html#/c:objc(cs)MMMNavigationPath(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMNavigationPath"},"Classes/MMMNavigationHop.html#/c:objc(cs)MMMNavigationHop(py)action":{"name":"action","abstract":"

Name/ID of the hop. Supposed to be a flat string, like ‘recipes’, not a path.

","parent_name":"MMMNavigationHop"},"Classes/MMMNavigationHop.html#/c:objc(cs)MMMNavigationHop(py)params":{"name":"params","abstract":"

Optional parameters for this hop only.

","parent_name":"MMMNavigationHop"},"Classes/MMMNavigationHop.html#/c:objc(cs)MMMNavigationHop(im)initWithAction:params:":{"name":"-initWithAction:params:","abstract":"

Undocumented

","parent_name":"MMMNavigationHop"},"Classes/MMMNavigationHop.html#/c:objc(cs)MMMNavigationHop(im)initWithAction:":{"name":"-initWithAction:","abstract":"

Undocumented

","parent_name":"MMMNavigationHop"},"Classes/MMMNavigationHop.html#/c:objc(cs)MMMNavigationHop(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMNavigationHop"},"Classes/MMMScrollViewShadowView.html#/c:objc(cs)MMMScrollViewShadowView(im)initWithAlignment:settings:":{"name":"-initWithAlignment:settings:","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadowView"},"Classes/MMMScrollViewShadowView.html#/c:objc(cs)MMMScrollViewShadowView(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadowView"},"Classes/MMMScrollViewShadowView.html#/c:objc(cs)MMMScrollViewShadowView(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadowView"},"Classes/MMMScrollViewShadowView.html#/c:objc(cs)MMMScrollViewShadowView(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadowView"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)shadowAlpha":{"name":"shadowAlpha","abstract":"

The base shadow color is black with this amount of transparency applied to it.

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)shadowColor":{"name":"shadowColor","abstract":"

The base shadow color, ensure this is an RGB color. Note that the alpha channel is ignored, use shadowAlpha instead.

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)shadowCurvature":{"name":"shadowCurvature","abstract":"

The value between 0 and 1 telling how close to an elliptical curve the shadow’s border should be.

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)topShadowEnabled":{"name":"topShadowEnabled","abstract":"

Disabled by default.

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)topShadowHeight":{"name":"topShadowHeight","abstract":"

The height of the top shadow view. (5px by default.)

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)topShadowShouldUseContentInsets":{"name":"topShadowShouldUseContentInsets","abstract":"

YES, if the top shadow should be offset from the top edge of the scroll view by the top offset of content insets.

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)bottomShadowEnabled":{"name":"bottomShadowEnabled","abstract":"

Disabled by default.

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)bottomShadowHeight":{"name":"bottomShadowHeight","abstract":"

The height of the bottom shadow view. (10px by default.)

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(py)bottomShadowShouldUseContentInsets":{"name":"bottomShadowShouldUseContentInsets","abstract":"

YES, if the bottom shadow should be offset from the bottom edge of the scroll view by the bottom offset of content insets.

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadowsSettings.html#/c:objc(cs)MMMScrollViewShadowsSettings(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadowsSettings"},"Classes/MMMScrollViewShadows.html#/c:objc(cs)MMMScrollViewShadows(im)initWithScrollView:settings:":{"name":"-initWithScrollView:settings:","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadows"},"Classes/MMMScrollViewShadows.html#/c:objc(cs)MMMScrollViewShadows(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMScrollViewShadows"},"Classes/MMMScrollViewShadows.html#/c:objc(cs)MMMScrollViewShadows(im)layoutSubviews":{"name":"-layoutSubviews","abstract":"

Have to be called from layoutSubviews of our scroll view subclass to update the state of the shadows.

","parent_name":"MMMScrollViewShadows"},"Classes/MMMScrollViewShadows.html#/c:objc(cs)MMMScrollViewShadows(im)mightNeedClippingView":{"name":"-mightNeedClippingView","abstract":"

YES, if additional content view clipping might be needed for the current shadow settings.

","parent_name":"MMMScrollViewShadows"},"Classes/MMMScrollViewShadows.html#/c:objc(cs)MMMScrollViewShadows(im)layoutSubviewsWithClippingView:":{"name":"-layoutSubviewsWithClippingView:","abstract":"

Same as layoutSubviews above but also updates clipToBounds property of the given view in case there are visible

","parent_name":"MMMScrollViewShadows"},"Classes/MMMViewWrappingCell.html#/c:objc(cs)MMMViewWrappingCell(py)wrappedView":{"name":"wrappedView","abstract":"

The view this cell wraps. It is added into the contentView and is laid out to fully fill it.

","parent_name":"MMMViewWrappingCell"},"Classes/MMMViewWrappingCell.html#/c:objc(cs)MMMViewWrappingCell(im)initWithView:reuseIdentifier:":{"name":"-initWithView:reuseIdentifier:","abstract":"

Undocumented

","parent_name":"MMMViewWrappingCell"},"Classes/MMMViewWrappingCell.html#/c:objc(cs)MMMViewWrappingCell(im)initWithView:reuseIdentifier:inset:":{"name":"-initWithView:reuseIdentifier:inset:","abstract":"

Undocumented

","parent_name":"MMMViewWrappingCell"},"Classes/MMMViewWrappingCell.html#/c:objc(cs)MMMViewWrappingCell(im)initWithReuseIdentifier:":{"name":"-initWithReuseIdentifier:","abstract":"

Undocumented

","parent_name":"MMMViewWrappingCell"},"Classes/MMMTableViewCell.html#/c:objc(cs)MMMTableViewCell(im)initWithReuseIdentifier:":{"name":"-initWithReuseIdentifier:","abstract":"

Undocumented

","parent_name":"MMMTableViewCell"},"Classes/MMMTableViewCell.html#/c:objc(cs)MMMTableViewCell(im)initWithStyle:reuseIdentifier:":{"name":"-initWithStyle:reuseIdentifier:","abstract":"

Undocumented

","parent_name":"MMMTableViewCell"},"Classes/MMMTableViewCell.html#/c:objc(cs)MMMTableViewCell(im)initWithCoder:":{"name":"-initWithCoder:","abstract":"

Undocumented

","parent_name":"MMMTableViewCell"},"Classes/MMMTableViewCell.html#/c:objc(cs)MMMTableViewCell(im)initWithFrame:":{"name":"-initWithFrame:","abstract":"

Undocumented

","parent_name":"MMMTableViewCell"},"Classes/MMMTableViewCell.html#/c:objc(cs)MMMTableViewCell(im)init":{"name":"-init","abstract":"

Undocumented

","parent_name":"MMMTableViewCell"},"Classes/MMMTableViewCell.html":{"name":"MMMTableViewCell","abstract":"

A base for table view cells redeclareing the designated initializer into the one we typically use,"},"Classes/MMMViewWrappingCell.html":{"name":"MMMViewWrappingCell","abstract":"

A simple table view cell wrapping the given view.

"},"Classes/MMMScrollViewShadows.html":{"name":"MMMScrollViewShadows","abstract":"

A helper for adding top and bottom shadows into any UIScrollView-based class."},"Classes/MMMScrollViewShadowsSettings.html":{"name":"MMMScrollViewShadowsSettings","abstract":"

Holds configuration for MMMScrollViewShadows that can be set only on initialization time.

"},"Classes/MMMScrollViewShadowView.html":{"name":"MMMScrollViewShadowView","abstract":"

A view that’s used internally to render shadows in MMMAutoLayoutScrollView."},"Classes/MMMNavigationHop.html":{"name":"MMMNavigationHop","abstract":"

Opening a deep link can involve following through one or more steps, for example:

"},"Classes/MMMNavigationPath.html":{"name":"MMMNavigationPath","abstract":"

A navigation path is just a collection of one or more “hops”.

"},"Classes/MMMNavigation.html":{"name":"MMMNavigation","abstract":"

Manages switching between different sections of the app (kind of internal URL router)."},"Classes/MMMNavigationRequest.html":{"name":"MMMNavigationRequest","abstract":"

Info about a navigation request that is passed to handlers.

"},"Classes/MMMStubViewController.html":{"name":"MMMStubViewController","abstract":"

This is to be used during development to stub not ready yet parts of the app.

"},"Classes/MMMImageView.html":{"name":"MMMImageView","abstract":"

A limited replacement for UIImageView fixing its inability to properly work with images having"},"Classes/MMMAutoLayoutScrollView.html":{"name":"MMMAutoLayoutScrollView","abstract":"

A vertical scroll view with a content view and preconfigured constraints, so there is no need in creating"},"Classes.html#/c:objc(cs)MMMAutoLayoutScrollViewContentView":{"name":"MMMAutoLayoutScrollViewContentView","abstract":"

A subview of MMMAutoLayoutScrollView where all the subviews should be added.

"},"Classes/MMMStubView.html":{"name":"MMMStubView","abstract":"

To be used during development as a placeholder for not yet implemented views."},"Classes/MMMNavigationStack.html":{"name":"MMMNavigationStack","abstract":"

This is to track the navigation state of the app and have the possibility to programmatically return to registered points of"},"Classes/MMMTableView.html":{"name":"MMMTableView","abstract":"

A table view supporting top and bottom shadows.

"},"Classes/MMMShadowViewSetting.html":{"name":"MMMShadowViewSetting","abstract":"

Holds configuration for MMMShadowView.

"},"Classes/MMMShadowView.html":{"name":"MMMShadowView","abstract":"

Helper view for adding custom layer shadows, while taking the the shadow sizes in conserderation for its final frame.

"},"Classes/MMMContainerView.html":{"name":"MMMContainerView","abstract":"

Auto Layout does not support constraints against groups of items, so this is for the cases a normal UIView is"},"Classes/MMMLayoutUtils.html":{"name":"MMMLayoutUtils","abstract":"

This is to group a few simple layout helpers.

"},"Classes/MMMVelocityMeter.html":{"name":"MMMVelocityMeter","abstract":"

A little helper for velocity/acceleration calculations: you feed it values with timestamps and can get the most recent"},"Classes/MMMAnimation.html":{"name":"MMMAnimation","abstract":"

Minimalistic animation helpers.

"},"Classes/MMMAnimator.html":{"name":"MMMAnimator","abstract":"

Minimalistic animator object in the spirit of helpers defined in MMMAnimation.

"},"Classes/MMMAnimationHandle.html":{"name":"MMMAnimationHandle","abstract":"

Sort of a handle returned by MMMAnimator when a new animation is scheduled."},"Classes/MMMCollectionView.html":{"name":"MMMCollectionView","abstract":"

Collection view supporting top & bottom shadows.

"},"Classes/MMMSpacerView.html":{"name":"MMMSpacerView","abstract":"

Auto Layout does not support relationships between empty spaces, so we need to use spacer views and set such"},"Classes/MMMStackContainer.html":{"name":"MMMStackContainer","abstract":"

A container which lays out its subviews in certain direction one after another using fixed spacing between them."},"Classes/MMMVerticalStackContainer.html":{"name":"MMMVerticalStackContainer","abstract":"

Vertical version of MMMStackContainer.

"},"Classes/MMMHorizontalStackContainer.html":{"name":"MMMHorizontalStackContainer","abstract":"

Horizontal version of MMMStackContainer.

"},"Classes/MMMAutoLayoutIsolator.html":{"name":"MMMAutoLayoutIsolator","abstract":"

Wraps a view that uses Auto Layout into a manual layout view providing sizeThatFits: for the outside world."},"Classes/MMMPaddedView.html":{"name":"MMMPaddedView","abstract":"

Wraps a view padding it from all the sides.

"},"Classes/MMMVerticalGradientView.html":{"name":"MMMVerticalGradientView","abstract":"

A view displaying a gradient from top to bottom. The linearity of the gradient can be controlled."},"Classes/MMMStylesheet.html":{"name":"MMMStylesheet","abstract":"

A base for app-specific stylesheets: commonly used paddings, colors, fonts, etc in a single place.

"},"Classes/MMMStylesheetScaleConverter.html":{"name":"MMMStylesheetScaleConverter","abstract":"

Dimension converter that uses a table of scales.

"},"Categories/NSLayoutConstraint%28MMMTemple%29.html#/c:objc(cs)NSLayoutConstraint(cm)mmm_constraintsWithVisualFormat:options:metrics:views:":{"name":"+mmm_constraintsWithVisualFormat:options:metrics:views:","abstract":"

Our wrapper over the corresponding method of NSLayoutConstraint extending the visual layout language a bit to support","parent_name":"NSLayoutConstraint(MMMTemple)"},"Categories/NSLayoutConstraint%28MMMTemple%29.html#/c:objc(cs)NSLayoutConstraint(cm)mmm_activateConstraintsWithVisualFormat:options:metrics:views:":{"name":"+mmm_activateConstraintsWithVisualFormat:options:metrics:views:","abstract":"

A shortcut for [NSLayoutConstraint activateConstraints:[NSLayoutConstraint mmm_constraintsWithVisualFormat:....

","parent_name":"NSLayoutConstraint(MMMTemple)"},"Categories/NSLayoutConstraint%28MMMTemple%29.html#/c:objc(cs)NSLayoutConstraint(cm)activateConstraint:":{"name":"+activateConstraint:","abstract":"

Missing counterparts for (de)activateConstraints, so constraint activation code looks the same for individual constraints.

","parent_name":"NSLayoutConstraint(MMMTemple)"},"Categories/NSLayoutConstraint%28MMMTemple%29.html#/c:objc(cs)NSLayoutConstraint(cm)deactivateConstraint:":{"name":"+deactivateConstraint:","abstract":"

Undocumented

","parent_name":"NSLayoutConstraint(MMMTemple)"},"Categories/NSLayoutConstraint%28MMMTemple%29.html#/c:objc(cs)NSLayoutConstraint(cm)constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:priority:":{"name":"+constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:priority:","abstract":"

A missing convenience initializer including priority.

","parent_name":"NSLayoutConstraint(MMMTemple)"},"Categories/NSLayoutConstraint%28MMMTemple%29.html#/c:objc(cs)NSLayoutConstraint(cm)constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:identifier:":{"name":"+constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:identifier:","abstract":"

A missing convenience initializer allowing to set identifier for this constraint.

","parent_name":"NSLayoutConstraint(MMMTemple)"},"Categories/NSLayoutConstraint%28MMMTemple%29.html#/c:objc(cs)NSLayoutConstraint(cm)constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:priority:identifier:":{"name":"+constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:priority:identifier:","abstract":"

A missing convenience initializer allowing to set both priority and identifier for this constraint.

","parent_name":"NSLayoutConstraint(MMMTemple)"},"Categories/NSLayoutConstraint%28MMMTemple%29.html#/c:objc(cs)NSLayoutConstraint(cm)constraintsWithVisualFormat:options:metrics:views:identifier:":{"name":"+constraintsWithVisualFormat:options:metrics:views:identifier:","abstract":"

A missing convenience initializer allowing to tag a bunch of visual constraints with the same identifier.

","parent_name":"NSLayoutConstraint(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(py)mmm_rect":{"name":"mmm_rect","abstract":"

A wrapper for the center and bounds.size properties similar to ‘frame’, but not taking the current transform into account.

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(py)mmm_size":{"name":"mmm_size","abstract":"

A wrapper for the size component of bounds property.

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(py)mmm_safeAreaLayoutGuide":{"name":"mmm_safeAreaLayoutGuide","abstract":"

A safer version of safeAreaLayoutGuide that attempts to avoid layout loops happening when a view using it

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(py)mmm_safeAreaInsets":{"name":"mmm_safeAreaInsets","abstract":"

Effective safeAreaInsets as seen by mmm_safeAreaLayoutGuide.

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_constraintsAligningView:horizontally:vertically:insets:":{"name":"-mmm_constraintsAligningView:horizontally:vertically:insets:","abstract":"

Constraints anchoring the given view within the receiver according to horizontal and vertical alignment flags.","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_constraintsAligningView:horizontally:":{"name":"-mmm_constraintsAligningView:horizontally:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_constraintsAligningView:vertically:":{"name":"-mmm_constraintsAligningView:vertically:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_constraintsAligningGuide:horizontally:vertically:insets:":{"name":"-mmm_constraintsAligningGuide:horizontally:vertically:insets:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addConstraintsAligningView:horizontally:vertically:insets:":{"name":"-mmm_addConstraintsAligningView:horizontally:vertically:insets:","abstract":"

Adds contraints anchoring the given view within the receiver according to horizontal and vertical alignment flags.","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addConstraintsAligningView:horizontally:vertically:":{"name":"-mmm_addConstraintsAligningView:horizontally:vertically:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addConstraintsAligningView:horizontally:":{"name":"-mmm_addConstraintsAligningView:horizontally:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addConstraintsAligningView:vertically:":{"name":"-mmm_addConstraintsAligningView:vertically:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_constraintsHorizontallyCenteringView:minPadding:maxWidth:":{"name":"-mmm_constraintsHorizontallyCenteringView:minPadding:maxWidth:","abstract":"

Not yet activated constraints implementing a common layout idiom used with text:

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addConstraintsHorizontallyCenteringView:minPadding:maxWidth:":{"name":"-mmm_addConstraintsHorizontallyCenteringView:minPadding:maxWidth:","abstract":"

A shortcut activating constraints returned by mmm_constraintsHorizontallyCenteringView:minPadding:maxWidth:.

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addConstraintsHorizontallyCenteringView:minPadding:":{"name":"-mmm_addConstraintsHorizontallyCenteringView:minPadding:","abstract":"

A shortcut activating constraints returned by mmm_constraintsHorizontallyCenteringView:minPadding:maxWidth:

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addConstraintsForSubview:horizontalAlignment:verticalAlignment:insets:":{"name":"-mmm_addConstraintsForSubview:horizontalAlignment:verticalAlignment:insets:","abstract":"

Adds constraints anchoring the given subview within the receiver according to horizontal and vertical alignment flags.","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addConstraintsForSubview:horizontalAlignment:verticalAlignment:":{"name":"-mmm_addConstraintsForSubview:horizontalAlignment:verticalAlignment:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addVerticalSpaceRatioConstraintsForSubview:topItem:topAttribute:bottomItem:bottomAttribute:ratio:priority:":{"name":"-mmm_addVerticalSpaceRatioConstraintsForSubview:topItem:topAttribute:bottomItem:bottomAttribute:ratio:priority:","abstract":"

Adds constraints and two hidden auxiliary views ensuring that the space between the top of the subview and","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addVerticalSpaceRatioConstraintsForSubview:topItem:topAttribute:bottomItem:bottomAttribute:ratio:":{"name":"-mmm_addVerticalSpaceRatioConstraintsForSubview:topItem:topAttribute:bottomItem:bottomAttribute:ratio:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_addVerticalSpaceRatioConstraintsForSubview:item:attribute:ratio:":{"name":"-mmm_addVerticalSpaceRatioConstraintsForSubview:item:attribute:ratio:","abstract":"

Adds constrains and a hidden auxiliary view ensuring that specified item / attribute vertically divides","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_setVerticalCompressionResistance:":{"name":"-mmm_setVerticalCompressionResistance:","abstract":"

Shortcuts for compression resistance and hugging priorities.

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_setHorizontalCompressionResistance:":{"name":"-mmm_setHorizontalCompressionResistance:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_setVerticalHuggingPriority:":{"name":"-mmm_setVerticalHuggingPriority:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_setHorizontalHuggingPriority:":{"name":"-mmm_setHorizontalHuggingPriority:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_setVerticalCompressionResistance:hugging:":{"name":"-mmm_setVerticalCompressionResistance:hugging:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_setHorizontalCompressionResistance:hugging:":{"name":"-mmm_setHorizontalCompressionResistance:hugging:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_setCompressionResistanceHorizontal:vertical:":{"name":"-mmm_setCompressionResistanceHorizontal:vertical:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UIView%28MMMTemple%29.html#/c:objc(cs)UIView(im)mmm_setHuggingHorizontal:vertical:":{"name":"-mmm_setHuggingHorizontal:vertical:","abstract":"

Undocumented

","parent_name":"UIView(MMMTemple)"},"Categories/UILayoutGuide%28MMMTemple%29.html#/c:objc(cs)UILayoutGuide(im)initWithIdentifier:":{"name":"-initWithIdentifier:","abstract":"

Convenience initializer setting the guide’s identifier.

","parent_name":"UILayoutGuide(MMMTemple)"},"Categories/UILayoutGuide%28MMMTemple%29.html#/c:objc(cs)UILayoutGuide(im)mmm_constraintsAligningView:horizontally:vertically:insets:":{"name":"-mmm_constraintsAligningView:horizontally:vertically:insets:","abstract":"

Not yet activated constraints anchoring the given view within the receiver according to horizontal","parent_name":"UILayoutGuide(MMMTemple)"},"Categories/UILayoutGuide%28MMMTemple%29.html#/c:objc(cs)UILayoutGuide(im)mmm_constraintsAligningGuide:horizontally:vertically:insets:":{"name":"-mmm_constraintsAligningGuide:horizontally:vertically:insets:","abstract":"

Undocumented

","parent_name":"UILayoutGuide(MMMTemple)"},"Categories/UILayoutGuide%28MMMTemple%29.html#/c:objc(cs)UILayoutGuide(im)mmm_constraintsHorizontallyCenteringView:minPadding:maxWidth:":{"name":"-mmm_constraintsHorizontallyCenteringView:minPadding:maxWidth:","abstract":"

Not yet activated constraints implementing a common layout idiom used with text:

","parent_name":"UILayoutGuide(MMMTemple)"},"Categories/UIView%28MMMPreferredSizeChanges%29.html#/c:objc(cs)UIView(im)mmm_setPreferredSizeCouldChange":{"name":"-mmm_setPreferredSizeCouldChange","abstract":"

Signals to one of the interested parent views (supporting MMMPreferredSizeChanges)","parent_name":"UIView(MMMPreferredSizeChanges)"},"Categories/UIView%28MMMPreferredSizeChanges%29.html":{"name":"UIView(MMMPreferredSizeChanges)","abstract":"

Undocumented

"},"Categories/UILayoutGuide%28MMMTemple%29.html":{"name":"UILayoutGuide(MMMTemple)","abstract":"

Undocumented

"},"Categories/UIView%28MMMTemple%29.html":{"name":"UIView(MMMTemple)","abstract":"

A few shorthands for UIView.

"},"Categories/NSLayoutConstraint%28MMMTemple%29.html":{"name":"NSLayoutConstraint(MMMTemple)","abstract":"

Undocumented

"},"Categories.html":{"name":"Categories","abstract":"

The following categories are available globally.

"},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Constants.html":{"name":"Constants","abstract":"

The following constants are available globally.

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Type%20Definitions.html":{"name":"Type Definitions","abstract":"

The following type definitions are available globally.

"},"Functions.html":{"name":"Functions","abstract":"

The following functions are available globally.

"}} \ No newline at end of file +{} \ No newline at end of file diff --git a/undocumented.json b/undocumented.json index b03e7ac..0e5bdb9 100644 --- a/undocumented.json +++ b/undocumented.json @@ -1,1573 +1,6 @@ { "warnings": [ - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 30, - "symbol": "MMMAnimationCurve", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enum", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 30, - "symbol": "MMMAnimationCurve", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enum", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 30, - "symbol": "MMMAnimationCurve", - "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 30, - "symbol": "MMMAnimationCurve", - "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 32, - "symbol": "MMMAnimationCurve.MMMAnimationCurveLinear", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 32, - "symbol": "MMMAnimationCurve.MMMAnimationCurveLinear", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 33, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseOut", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 33, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseOut", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 34, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseIn", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 34, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseIn", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 35, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInOut", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 35, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInOut", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 38, - "symbol": "MMMAnimationCurve.MMMAnimationCurveSofterEaseIn", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 38, - "symbol": "MMMAnimationCurve.MMMAnimationCurveSofterEaseIn", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 39, - "symbol": "MMMAnimationCurve.MMMAnimationCurveSofterEaseOut", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 39, - "symbol": "MMMAnimationCurve.MMMAnimationCurveSofterEaseOut", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 40, - "symbol": "MMMAnimationCurve.MMMAnimationCurveSofterEaseInOut", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 40, - "symbol": "MMMAnimationCurve.MMMAnimationCurveSofterEaseInOut", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 43, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInQuad", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 43, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInQuad", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 44, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseOutQuad", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 44, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseOutQuad", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 45, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInOutQuad", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 45, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInOutQuad", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 48, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInCubic", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 48, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInCubic", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 49, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseOutCubic", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 49, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseOutCubic", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 50, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInOutCubic", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 50, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInOutCubic", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 53, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInQuart", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 53, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInQuart", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 54, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseOutQuart", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 54, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseOutQuart", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 55, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInOutQuart", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 55, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInOutQuart", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 58, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInQuint", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 58, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInQuint", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 59, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseOutQuint", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 59, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseOutQuint", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 60, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInOutQuint", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 60, - "symbol": "MMMAnimationCurve.MMMAnimationCurveEaseInOutQuint", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 149, - "symbol": "MMMAnimator.+shared", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 149, - "symbol": "MMMAnimator.+shared", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 177, - "symbol": "MMMAnimator.-addAnimationWithDuration:repeatCount:autoreverse:updateBlock:doneBlock:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 177, - "symbol": "MMMAnimator.-addAnimationWithDuration:repeatCount:autoreverse:updateBlock:doneBlock:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 189, - "symbol": "MMMAnimator()", - "symbol_kind": "sourcekitten.source.lang.objc.decl.category", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 189, - "symbol": "MMMAnimator()", - "symbol_kind": "sourcekitten.source.lang.objc.decl.category", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 219, - "symbol": "MMMAnimationHandle.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAnimations.h", - "line": 219, - "symbol": "MMMAnimationHandle.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAutoLayoutScrollView.h", - "line": 43, - "symbol": "MMMAutoLayoutScrollView.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMAutoLayoutScrollView.h", - "line": 44, - "symbol": "MMMAutoLayoutScrollView.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMCollectionView.h", - "line": 20, - "symbol": "MMMCollectionView.-initWithFrame:collectionViewLayout:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMCollectionView.h", - "line": 21, - "symbol": "MMMCollectionView.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMCollectionView.h", - "line": 22, - "symbol": "MMMCollectionView.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMCollectionView.h", - "line": 23, - "symbol": "MMMCollectionView.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMContainerView.h", - "line": 18, - "symbol": "MMMContainerView.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMContainerView.h", - "line": 20, - "symbol": "MMMContainerView.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMContainerView.h", - "line": 21, - "symbol": "MMMContainerView.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMImageView.h", - "line": 19, - "symbol": "MMMImageView.image", - "symbol_kind": "sourcekitten.source.lang.objc.decl.property", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMImageView.h", - "line": 20, - "symbol": "MMMImageView.highlightedImage", - "symbol_kind": "sourcekitten.source.lang.objc.decl.property", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMImageView.h", - "line": 22, - "symbol": "MMMImageView.highlighted", - "symbol_kind": "sourcekitten.source.lang.objc.decl.property", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMImageView.h", - "line": 24, - "symbol": "MMMImageView.-initWithImage:highlightedImage:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMImageView.h", - "line": 32, - "symbol": "MMMImageView.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMImageView.h", - "line": 33, - "symbol": "MMMImageView.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 18, - "symbol": "MMMSpacerView.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 20, - "symbol": "MMMSpacerView.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 21, - "symbol": "MMMSpacerView.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 27, - "symbol": "MMMLayoutAlignment.MMMLayoutAlignmentNone", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 28, - "symbol": "MMMLayoutAlignment.MMMLayoutAlignmentLeading", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 29, - "symbol": "MMMLayoutAlignment.MMMLayoutAlignmentGolden", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 30, - "symbol": "MMMLayoutAlignment.MMMLayoutAlignmentCenter", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 31, - "symbol": "MMMLayoutAlignment.MMMLayoutAlignmentTrailing", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 32, - "symbol": "MMMLayoutAlignment.MMMLayoutAlignmentFill", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 35, - "symbol": "MMMLayoutDirection", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enum", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 35, - "symbol": "MMMLayoutDirection", - "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 36, - "symbol": "MMMLayoutDirection.MMMLayoutDirectionHorizontal", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 37, - "symbol": "MMMLayoutDirection.MMMLayoutDirectionVertical", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 40, - "symbol": "MMMLayoutHorizontalAlignment", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enum", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 40, - "symbol": "MMMLayoutHorizontalAlignment", - "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 41, - "symbol": "MMMLayoutHorizontalAlignment.MMMLayoutHorizontalAlignmentNone", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 42, - "symbol": "MMMLayoutHorizontalAlignment.MMMLayoutHorizontalAlignmentLeft", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 43, - "symbol": "MMMLayoutHorizontalAlignment.MMMLayoutHorizontalAlignmentGolden", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 44, - "symbol": "MMMLayoutHorizontalAlignment.MMMLayoutHorizontalAlignmentCenter", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 45, - "symbol": "MMMLayoutHorizontalAlignment.MMMLayoutHorizontalAlignmentRight", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 46, - "symbol": "MMMLayoutHorizontalAlignment.MMMLayoutHorizontalAlignmentFill", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 49, - "symbol": "MMMLayoutVerticalAlignment", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enum", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 49, - "symbol": "MMMLayoutVerticalAlignment", - "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 50, - "symbol": "MMMLayoutVerticalAlignment.MMMLayoutVerticalAlignmentNone", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 51, - "symbol": "MMMLayoutVerticalAlignment.MMMLayoutVerticalAlignmentTop", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 52, - "symbol": "MMMLayoutVerticalAlignment.MMMLayoutVerticalAlignmentGolden", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 53, - "symbol": "MMMLayoutVerticalAlignment.MMMLayoutVerticalAlignmentCenter", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 54, - "symbol": "MMMLayoutVerticalAlignment.MMMLayoutVerticalAlignmentBottom", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 55, - "symbol": "MMMLayoutVerticalAlignment.MMMLayoutVerticalAlignmentFill", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 58, - "symbol": "MMMLayoutAlignmentFromHorizontalAlignment", - "symbol_kind": "sourcekitten.source.lang.objc.decl.function", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 62, - "symbol": "MMMLayoutAlignmentFromVerticalAlignment", - "symbol_kind": "sourcekitten.source.lang.objc.decl.function", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 69, - "symbol": "UILayoutGuide(MMMTemple)", - "symbol_kind": "sourcekitten.source.lang.objc.decl.category", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 83, - "symbol": "UILayoutGuide(MMMTemple).-mmm_constraintsAligningGuide:horizontally:vertically:insets:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 129, - "symbol": "UIView(MMMTemple).-mmm_constraintsAligningView:horizontally:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 132, - "symbol": "UIView(MMMTemple).-mmm_constraintsAligningView:vertically:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 135, - "symbol": "UIView(MMMTemple).-mmm_constraintsAligningGuide:horizontally:vertically:insets:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 149, - "symbol": "UIView(MMMTemple).-mmm_addConstraintsAligningView:horizontally:vertically:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 153, - "symbol": "UIView(MMMTemple).-mmm_addConstraintsAligningView:horizontally:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 156, - "symbol": "UIView(MMMTemple).-mmm_addConstraintsAligningView:vertically:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 191, - "symbol": "UIView(MMMTemple).-mmm_addConstraintsForSubview:horizontalAlignment:verticalAlignment:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 216, - "symbol": "UIView(MMMTemple).-mmm_addVerticalSpaceRatioConstraintsForSubview:topItem:topAttribute:bottomItem:bottomAttribute:ratio:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 236, - "symbol": "UIView(MMMTemple).-mmm_setHorizontalCompressionResistance:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 238, - "symbol": "UIView(MMMTemple).-mmm_setVerticalHuggingPriority:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 239, - "symbol": "UIView(MMMTemple).-mmm_setHorizontalHuggingPriority:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 241, - "symbol": "UIView(MMMTemple).-mmm_setVerticalCompressionResistance:hugging:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 242, - "symbol": "UIView(MMMTemple).-mmm_setHorizontalCompressionResistance:hugging:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 244, - "symbol": "UIView(MMMTemple).-mmm_setCompressionResistanceHorizontal:vertical:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 247, - "symbol": "UIView(MMMTemple).-mmm_setHuggingHorizontal:vertical:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 254, - "symbol": "NSLayoutConstraint(MMMTemple)", - "symbol_kind": "sourcekitten.source.lang.objc.decl.category", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 299, - "symbol": "NSLayoutConstraint(MMMTemple).+deactivateConstraint:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 360, - "symbol": "MMMStackContainer.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 361, - "symbol": "MMMStackContainer.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 362, - "symbol": "MMMStackContainer.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 371, - "symbol": "MMMVerticalStackContainer.-initWithInsets:alignment:spacing:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 375, - "symbol": "MMMVerticalStackContainer.-initWithDirection:insets:alignment:spacing:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 387, - "symbol": "MMMHorizontalStackContainer.-initWithInsets:alignment:spacing:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 391, - "symbol": "MMMHorizontalStackContainer.-initWithDirection:insets:alignment:spacing:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 407, - "symbol": "MMMAutoLayoutIsolator.-initWithView:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 409, - "symbol": "MMMAutoLayoutIsolator.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 410, - "symbol": "MMMAutoLayoutIsolator.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 411, - "symbol": "MMMAutoLayoutIsolator.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 423, - "symbol": "MMMPaddedView.insets", - "symbol_kind": "sourcekitten.source.lang.objc.decl.property", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 425, - "symbol": "MMMPaddedView.-initWithView:insets:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 427, - "symbol": "MMMPaddedView.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 428, - "symbol": "MMMPaddedView.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMLayout.h", - "line": 429, - "symbol": "MMMPaddedView.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMNavigation.h", - "line": 28, - "symbol": "MMMNavigationHop.-initWithAction:params:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMNavigation.h", - "line": 30, - "symbol": "MMMNavigationHop.-initWithAction:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMNavigation.h", - "line": 32, - "symbol": "MMMNavigationHop.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMNavigation.h", - "line": 50, - "symbol": "MMMNavigationPath.-initWithHops:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMNavigation.h", - "line": 58, - "symbol": "MMMNavigationPath.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMNavigation.h", - "line": 62, - "symbol": "MMMNavigationRequestId", - "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMNavigation.h", - "line": 64, - "symbol": "MMMNavigationCompletionBlock", - "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMNavigation.h", - "line": 73, - "symbol": "MMMNavigation.+root", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMNavigation.h", - "line": 86, - "symbol": "MMMNavigationHandlerId", - "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMNavigation.h", - "line": 88, - "symbol": "MMMNavigation(Handlers)", - "symbol_kind": "sourcekitten.source.lang.objc.decl.category", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMNavigationStack.h", - "line": 10, - "symbol": "MMMNavigationStackCompletion", - "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMNavigationStack.h", - "line": 30, - "symbol": "MMMNavigationStack.+shared", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMNavigationStack.h", - "line": 54, - "symbol": "MMMNavigationStack.-popAllAfterController:completion:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMPreferredSizeChanges.h", - "line": 19, - "symbol": "MMMPreferredSizeChanges.-mmm_preferredSizeCouldChangeForSubview:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMPreferredSizeChanges.h", - "line": 19, - "symbol": "MMMPreferredSizeChanges.-mmm_preferredSizeCouldChangeForSubview:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMPreferredSizeChanges.h", - "line": 23, - "symbol": "UIView(MMMPreferredSizeChanges)", - "symbol_kind": "sourcekitten.source.lang.objc.decl.category", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMPreferredSizeChanges.h", - "line": 23, - "symbol": "UIView(MMMPreferredSizeChanges)", - "symbol_kind": "sourcekitten.source.lang.objc.decl.category", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 18, - "symbol": "MMMScrollViewShadows.-initWithScrollView:settings:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 18, - "symbol": "MMMScrollViewShadows.-initWithScrollView:settings:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 18, - "symbol": "MMMScrollViewShadows.-initWithScrollView:settings:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 21, - "symbol": "MMMScrollViewShadows.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 21, - "symbol": "MMMScrollViewShadows.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 21, - "symbol": "MMMScrollViewShadows.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 81, - "symbol": "MMMScrollViewShadowsSettings.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 81, - "symbol": "MMMScrollViewShadowsSettings.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 81, - "symbol": "MMMScrollViewShadowsSettings.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 87, - "symbol": "MMMScrollViewShadowAlignment", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enum", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 87, - "symbol": "MMMScrollViewShadowAlignment", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enum", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 87, - "symbol": "MMMScrollViewShadowAlignment", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enum", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 87, - "symbol": "MMMScrollViewShadowAlignment", - "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 87, - "symbol": "MMMScrollViewShadowAlignment", - "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 87, - "symbol": "MMMScrollViewShadowAlignment", - "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 88, - "symbol": "MMMScrollViewShadowAlignment.MMMScrollViewShadowAlignmentTop", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 88, - "symbol": "MMMScrollViewShadowAlignment.MMMScrollViewShadowAlignmentTop", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 88, - "symbol": "MMMScrollViewShadowAlignment.MMMScrollViewShadowAlignmentTop", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 89, - "symbol": "MMMScrollViewShadowAlignment.MMMScrollViewShadowAlignmentBottom", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 89, - "symbol": "MMMScrollViewShadowAlignment.MMMScrollViewShadowAlignmentBottom", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 89, - "symbol": "MMMScrollViewShadowAlignment.MMMScrollViewShadowAlignmentBottom", - "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 97, - "symbol": "MMMScrollViewShadowView.-initWithAlignment:settings:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 97, - "symbol": "MMMScrollViewShadowView.-initWithAlignment:settings:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 97, - "symbol": "MMMScrollViewShadowView.-initWithAlignment:settings:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 100, - "symbol": "MMMScrollViewShadowView.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 100, - "symbol": "MMMScrollViewShadowView.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 100, - "symbol": "MMMScrollViewShadowView.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 101, - "symbol": "MMMScrollViewShadowView.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 101, - "symbol": "MMMScrollViewShadowView.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 101, - "symbol": "MMMScrollViewShadowView.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 102, - "symbol": "MMMScrollViewShadowView.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 102, - "symbol": "MMMScrollViewShadowView.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMScrollViewShadows.h", - "line": 102, - "symbol": "MMMScrollViewShadowView.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMShadowView.h", - "line": 12, - "symbol": "MMMShadowViewSettingBlock", - "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMShadowView.h", - "line": 42, - "symbol": "MMMShadowViewSetting.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMShadowView.h", - "line": 44, - "symbol": "MMMShadowViewSetting.-initWithBlock:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMShadowView.h", - "line": 58, - "symbol": "MMMShadowView.settings", - "symbol_kind": "sourcekitten.source.lang.objc.decl.property", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMShadowView.h", - "line": 60, - "symbol": "MMMShadowView.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMShadowView.h", - "line": 61, - "symbol": "MMMShadowView.-initWithSettings:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMShadowView.h", - "line": 63, - "symbol": "MMMShadowView.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMShadowView.h", - "line": 64, - "symbol": "MMMShadowView.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMStubView.h", - "line": 20, - "symbol": "MMMStubView.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMStubView.h", - "line": 21, - "symbol": "MMMStubView.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMStubView.h", - "line": 22, - "symbol": "MMMStubView.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMStubViewController.h", - "line": 15, - "symbol": "MMMStubViewController.-initWithText:index:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMStubViewController.h", - "line": 17, - "symbol": "MMMStubViewController.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMStubViewController.h", - "line": 18, - "symbol": "MMMStubViewController.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMStubViewController.h", - "line": 19, - "symbol": "MMMStubViewController.-initWithNibName:bundle:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMStylesheet.h", - "line": 82, - "symbol": "MMMStylesheet.extraSmallPadding", - "symbol_kind": "sourcekitten.source.lang.objc.decl.property", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMStylesheet.h", - "line": 83, - "symbol": "MMMStylesheet.smallPadding", - "symbol_kind": "sourcekitten.source.lang.objc.decl.property", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMStylesheet.h", - "line": 84, - "symbol": "MMMStylesheet.normalPadding", - "symbol_kind": "sourcekitten.source.lang.objc.decl.property", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMStylesheet.h", - "line": 85, - "symbol": "MMMStylesheet.largePadding", - "symbol_kind": "sourcekitten.source.lang.objc.decl.property", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMStylesheet.h", - "line": 86, - "symbol": "MMMStylesheet.extraLargePadding", - "symbol_kind": "sourcekitten.source.lang.objc.decl.property", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMStylesheet.h", - "line": 207, - "symbol": "MMMStylesheetScaleConverter.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMTableView.h", - "line": 24, - "symbol": "MMMTableView.-initWithFrame:style:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMTableView.h", - "line": 25, - "symbol": "MMMTableView.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMTableView.h", - "line": 26, - "symbol": "MMMTableView.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMTableView.h", - "line": 27, - "symbol": "MMMTableView.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMTableViewCell.h", - "line": 14, - "symbol": "MMMTableViewCell.-initWithReuseIdentifier:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMTableViewCell.h", - "line": 14, - "symbol": "MMMTableViewCell.-initWithReuseIdentifier:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMTableViewCell.h", - "line": 16, - "symbol": "MMMTableViewCell.-initWithStyle:reuseIdentifier:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMTableViewCell.h", - "line": 16, - "symbol": "MMMTableViewCell.-initWithStyle:reuseIdentifier:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMTableViewCell.h", - "line": 17, - "symbol": "MMMTableViewCell.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMTableViewCell.h", - "line": 17, - "symbol": "MMMTableViewCell.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMTableViewCell.h", - "line": 18, - "symbol": "MMMTableViewCell.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMTableViewCell.h", - "line": 18, - "symbol": "MMMTableViewCell.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMTableViewCell.h", - "line": 19, - "symbol": "MMMTableViewCell.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMTableViewCell.h", - "line": 19, - "symbol": "MMMTableViewCell.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMVerticalGradientView.h", - "line": 18, - "symbol": "MMMVerticalGradientView.-initWithTopColor:bottomColor:curve:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMVerticalGradientView.h", - "line": 20, - "symbol": "MMMVerticalGradientView.-initWithTopColor:bottomColor:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMVerticalGradientView.h", - "line": 22, - "symbol": "MMMVerticalGradientView.-init", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMVerticalGradientView.h", - "line": 23, - "symbol": "MMMVerticalGradientView.-initWithCoder:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMVerticalGradientView.h", - "line": 24, - "symbol": "MMMVerticalGradientView.-initWithFrame:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMViewWrappingCell.h", - "line": 23, - "symbol": "MMMViewWrappingCell.-initWithView:reuseIdentifier:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMViewWrappingCell.h", - "line": 24, - "symbol": "MMMViewWrappingCell.-initWithView:reuseIdentifier:inset:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/runner/work/MMMCommonUI/MMMCommonUI/Sources/MMMCommonUIObjC/MMMViewWrappingCell.h", - "line": 26, - "symbol": "MMMViewWrappingCell.-initWithReuseIdentifier:", - "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", - "warning": "undocumented" - } + ], "source_directory": "/Users/runner/work/MMMCommonUI/MMMCommonUI" } \ No newline at end of file

V(!g|~GVY}Wg)Yw~%-7kT(1uFc$jJ`_CL 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 LbwA({fB1g@)Hu-^ diff --git a/index.html b/index.html index c818eb9..450b0a6 100644 --- a/index.html +++ b/index.html @@ -42,245 +42,6 @@