A masked transition reveals content from a source view using a view controller transition.
To add this component to your Xcode project using CocoaPods, add the following to your Podfile:
pod 'MaterialComponents/MaskedTransition'
Then, run the following command:
pod install
A masked transition is a UIViewController transition that can be used to present a contextual expansion from a circular source view. This transition follows the motion timing defined by the section on Radial transformations in the Material Design guidelines.
Before using Masked Transition, you'll need to import it:
import MaterialComponents.MaterialMaskedTransition
#import "MaterialMaskedTransition.h"
Create an instance of MDCMaskedTransitionController and assign it to the view controller's transitioningDelegate property prior to presenting the view controller:
let transitionController = MDCMaskedTransitionController(sourceView: button) vc.transitioningDelegate = transitionController // Must keep a reference to the transition controller self.transitionController = transitionController present(vc, animated: true)
MDCMaskedTransitionController *transitionController = [[MDCMaskedTransitionController alloc] initWithSourceView:button]; vc.transitioningDelegate = transitionController; // Must keep a reference to the transition controller self.transitionController = transitionController; [self presentViewController:vc animated:YES completion:nil];
You can customize the presented frame of the view controller by assigning a calculateFrameOfPresentedView block on the transition controller instance. For example, to present a modal dialog centered in the screen you can use the following examples:
let transitionController = MDCMaskedTransitionController(sourceView: button) transitionController.calculateFrameOfPresentedView = { info in let size = CGSize(width: 200, height: 200) return CGRect(x: (info.containerView!.bounds.width - size.width) / 2, y: (info.containerView!.bounds.height - size.height) / 2, width: size.width, height: size.height) } vc.transitioningDelegate = transitionController vc.modalPresentationStyle = UIModalPresentationCustom; // Must keep a reference to the transition controller self.transitionController = transitionController present(vc, animated: true)
MDCMaskedTransitionController *transitionController = [[MDCMaskedTransitionController alloc] initWithSourceView:button]; transitionController.calculateFrameOfPresentedView = ^(UIPresentationController *info) { CGSize size = CGSizeMake(200, 200); return CGRectMake((info.containerView.bounds.size.width - size.width) / 2, (info.containerView.bounds.size.height - size.height) / 2, size.width, size.height); }; vc.transitioningDelegate = transitionController; vc.modalPresentationStyle = .custom // Must keep a reference to the transition controller self.transitionController = transitionController; [self presentViewController:vc animated:YES completion:nil];