| #import "BottomSheetPresenterViewController.h" | |
| #import "MaterialBottomSheet.h" | |
| #import "MaterialButtons.h" | |
| /** | |
| Demonstrates the use of MDCBottomSheetTransitionController. | |
| */ | |
| @interface BottomSheetPresentationControllerDelegateExamplePresentedSheetController | |
| : UIViewController | |
| @end | |
| @implementation BottomSheetPresentationControllerDelegateExamplePresentedSheetController { | |
| id<UIViewControllerAnimatedTransitioning, UIViewControllerTransitioningDelegate> | |
| _transitionController; | |
| } | |
| - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { | |
| self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; | |
| if (self) { | |
| MDCBottomSheetTransitionController *transitionController = | |
| [[MDCBottomSheetTransitionController alloc] init]; | |
| transitionController.dismissOnBackgroundTap = YES; | |
| _transitionController = transitionController; | |
| self.transitioningDelegate = _transitionController; | |
| self.modalPresentationStyle = UIModalPresentationCustom; | |
| self.view.backgroundColor = UIColor.purpleColor; | |
| self.view.isAccessibilityElement = YES; | |
| self.view.accessibilityLabel = @"Example content"; | |
| self.view.accessibilityIdentifier = | |
| @"BottomSheetPresentationControllerDelegateExamplePresentedSheetController.view"; | |
| } | |
| return self; | |
| } | |
| @end | |
| /** | |
| Demonstrates use of MDCBottomSheetPresentationController functionality. | |
| */ | |
| @interface BottomSheetPresentationControllerDelegateExample | |
| : BottomSheetPresenterViewController <MDCBottomSheetPresentationControllerDelegate> | |
| @property(nonatomic, strong) | |
| UILabel *bottomSheetPresentationControllerDidDismissBottomSheetCalledLabel; | |
| @property(nonatomic, strong) | |
| UILabel *bottomSheetPresentationControllerDismissalAnimationCompletedCalledLabel; | |
| @end | |
| @implementation BottomSheetPresentationControllerDelegateExample | |
| - (void)viewDidLoad { | |
| [super viewDidLoad]; | |
| [self.button setTitle:@"Present Custom Controller" forState:UIControlStateNormal]; | |
| UIStackView *stackView = [[UIStackView alloc] init]; | |
| stackView.axis = UILayoutConstraintAxisVertical; | |
| stackView.translatesAutoresizingMaskIntoConstraints = NO; | |
| [self.view addSubview:stackView]; | |
| self.bottomSheetPresentationControllerDidDismissBottomSheetCalledLabel = [[UILabel alloc] init]; | |
| self.bottomSheetPresentationControllerDidDismissBottomSheetCalledLabel.accessibilityIdentifier = | |
| @"BottomSheetPresentationControllerDelegateExample." | |
| @"bottomSheetPresentationControllerDidDismissBottomSheetCalledLabel"; | |
| self.bottomSheetPresentationControllerDidDismissBottomSheetCalledLabel.text = | |
| @"bottomSheetPresentationControllerDidDismissBottomSheet called!"; | |
| self.bottomSheetPresentationControllerDidDismissBottomSheetCalledLabel.numberOfLines = 0; | |
| self.bottomSheetPresentationControllerDidDismissBottomSheetCalledLabel.hidden = YES; | |
| [stackView | |
| addArrangedSubview:self.bottomSheetPresentationControllerDidDismissBottomSheetCalledLabel]; | |
| self.bottomSheetPresentationControllerDismissalAnimationCompletedCalledLabel = | |
| [[UILabel alloc] init]; | |
| self.bottomSheetPresentationControllerDismissalAnimationCompletedCalledLabel | |
| .accessibilityIdentifier = | |
| @"BottomSheetPresentationControllerDelegateExample." | |
| @"bottomSheetPresentationControllerDismissalAnimationCompletedCalledLabel"; | |
| self.bottomSheetPresentationControllerDismissalAnimationCompletedCalledLabel.text = | |
| @"bottomSheetPresentationControllerDidDismissBottomSheet called!"; | |
| self.bottomSheetPresentationControllerDismissalAnimationCompletedCalledLabel.numberOfLines = 0; | |
| self.bottomSheetPresentationControllerDismissalAnimationCompletedCalledLabel.hidden = YES; | |
| [stackView addArrangedSubview: | |
| self.bottomSheetPresentationControllerDismissalAnimationCompletedCalledLabel]; | |
| if (@available(iOS 11.0, *)) { | |
| [stackView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor].active = | |
| YES; | |
| [stackView.leadingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.leadingAnchor] | |
| .active = YES; | |
| [stackView.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor] | |
| .active = YES; | |
| } else { | |
| [stackView.topAnchor constraintEqualToAnchor:self.topLayoutGuide.bottomAnchor].active = YES; | |
| [stackView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor].active = YES; | |
| [stackView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor].active = YES; | |
| } | |
| } | |
| - (void)presentBottomSheet { | |
| BottomSheetPresentationControllerDelegateExamplePresentedSheetController *sheetController = | |
| [[BottomSheetPresentationControllerDelegateExamplePresentedSheetController alloc] init]; | |
| MDCBottomSheetPresentationController *presentationController = | |
| (MDCBottomSheetPresentationController *)sheetController.presentationController; | |
| presentationController.delegate = self; | |
| [self presentViewController:sheetController animated:YES completion:nil]; | |
| } | |
| - (void)exit { | |
| [self dismissViewControllerAnimated:YES completion:nil]; | |
| } | |
| - (void)showBottomSheetPresentationControllerDidDismissBottomSheetCalledLabel { | |
| self.bottomSheetPresentationControllerDidDismissBottomSheetCalledLabel.hidden = NO; | |
| dispatch_after( | |
| dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ | |
| self.bottomSheetPresentationControllerDidDismissBottomSheetCalledLabel.hidden = YES; | |
| }); | |
| } | |
| - (void)showBottomSheetDismissalAnimationCompletedCalledLabel { | |
| self.bottomSheetPresentationControllerDismissalAnimationCompletedCalledLabel.hidden = NO; | |
| dispatch_after( | |
| dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ | |
| self.bottomSheetPresentationControllerDismissalAnimationCompletedCalledLabel.hidden = YES; | |
| }); | |
| } | |
| #pragma mark - MDCBottomSheetPresentationControllerDelegate | |
| - (void)bottomSheetDidChangeYOffset:(MDCBottomSheetPresentationController *)bottomSheet | |
| yOffset:(CGFloat)yOffset { | |
| NSLog(@"%@", NSStringFromSelector(_cmd)); | |
| } | |
| - (void)bottomSheetPresentationControllerDidDismissBottomSheet: | |
| (MDCBottomSheetPresentationController *)bottomSheet { | |
| NSLog(@"%@", NSStringFromSelector(_cmd)); | |
| [self showBottomSheetPresentationControllerDidDismissBottomSheetCalledLabel]; | |
| } | |
| - (void)bottomSheetPresentationControllerDismissalAnimationCompleted: | |
| (MDCBottomSheetPresentationController *)bottomSheet { | |
| NSLog(@"%@", NSStringFromSelector(_cmd)); | |
| [self showBottomSheetDismissalAnimationCompletedCalledLabel]; | |
| } | |
| - (void)bottomSheetWillChangeState:(MDCBottomSheetPresentationController *)bottomSheet | |
| sheetState:(MDCSheetState)sheetState { | |
| NSLog(@"%@", NSStringFromSelector(_cmd)); | |
| } | |
| @end | |
| @implementation BottomSheetPresentationControllerDelegateExample (CatalogByConvention) | |
| + (NSDictionary *)catalogMetadata { | |
| return @{ | |
| @"breadcrumbs" : @[ @"Bottom Sheet", @"Presentation Controller with Custom View Controller" ], | |
| @"primaryDemo" : @NO, | |
| @"presentable" : @NO, | |
| }; | |
| } | |
| @end |