// // CheckoutSelectionController.m // Checkout // // Created by Shopify. // Copyright (c) 2015 Shopify. All rights reserved. // #import "CheckoutSelectionController.h" #import "CheckoutSelectionView.h" #define kCheckoutAnimationTime 0.3f @interface CheckoutSelectionController () <UIViewControllerTransitioningDelegate, UIViewControllerAnimatedTransitioning> @end @implementation CheckoutSelectionController { CheckoutSelectionView *_selectionView; } - (instancetype)init { self = [super init]; if (self) { self.modalPresentationStyle = UIModalPresentationCustom; self.transitioningDelegate = self; } return self; } - (void)loadView { UIView *background = [[UIView alloc] init]; background.backgroundColor = [UIColor clearColor]; self.view = background; PAYButton *applePayButton = [PAYButton buttonWithType:UIButtonTypeCustom]; applePayButton.paymentImageView.image = [UIImage imageNamed:@"ApplePayMark"]; applePayButton.paymentLabel.text = @"Complete with Apple Pay"; PAYButton *checkoutButton = [PAYButton buttonWithType:UIButtonTypeCustom]; checkoutButton.paymentImageView.image = [UIImage imageNamed:@"credit"]; checkoutButton.paymentLabel.text = @"Continue Checkout"; PAYButton *cancelButton = [PAYButton buttonWithType:UIButtonTypeCustom]; cancelButton.paymentImageView.image = [UIImage imageNamed:@"cancel"]; cancelButton.paymentLabel.text = @"Cancel"; _selectionView = [[CheckoutSelectionView alloc] initWithFrame:self.view.bounds buttons:@[applePayButton, checkoutButton, cancelButton]]; _selectionView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [self.view addSubview:_selectionView]; [applePayButton addTarget:self action:@selector(applePayPressed:) forControlEvents:UIControlEventTouchUpInside]; [checkoutButton addTarget:self action:@selector(checkoutPressed:) forControlEvents:UIControlEventTouchUpInside]; [cancelButton addTarget:self action:@selector(cancelPressed:) forControlEvents:UIControlEventTouchUpInside]; } #pragma mark - Button Presses - (void)applePayPressed:(id)sender { [_delegate checkoutSelectionController:self selectedCheckoutType:CheckoutTypeApplePay]; } - (void)checkoutPressed:(id)sender { [_delegate checkoutSelectionController:self selectedCheckoutType:CheckoutTypeNormal]; } - (void)cancelPressed:(id)sender { [_delegate checkoutSelectionControllerCancelled:self]; } #pragma mark - Transitioning Delegate Methods - (id <UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source { return self; } - (id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed { return self; } #pragma mark - Animated Transitioning Methods - (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext { return kCheckoutAnimationTime; } - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext { BOOL appearing = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey] == self; BOOL animated = [transitionContext isAnimated]; UIView *containerView = [transitionContext containerView]; self.view.frame = [containerView bounds]; self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; if (appearing) { [containerView addSubview:self.view]; [_selectionView showButtons:animated ? kCheckoutAnimationTime : 0.0f completion:^(BOOL complete) { [transitionContext completeTransition:YES]; }]; } else { [_selectionView hideButtons:animated ? kCheckoutAnimationTime : 0.0f completion:^(BOOL complete) { [self.view removeFromSuperview]; [transitionContext completeTransition:YES]; }]; } } @end