mirror of
https://github.com/zydeco/minivmac4ios.git
synced 2024-11-25 07:32:30 +00:00
animate presentation of setting/disk panel from swipe side
This commit is contained in:
parent
5f236b2a29
commit
eeda15e20e
@ -28,11 +28,14 @@ static AppDelegate *sharedAppDelegate = nil;
|
|||||||
NSString * const MNVMDidInsertDiskNotification = @"MNVMDidInsertDisk";
|
NSString * const MNVMDidInsertDiskNotification = @"MNVMDidInsertDisk";
|
||||||
NSString * const MNVMDidEjectDiskNotification = @"MNVMDidEjectDisk";
|
NSString * const MNVMDidEjectDiskNotification = @"MNVMDidEjectDisk";
|
||||||
|
|
||||||
@interface AppDelegate ()
|
@interface AppDelegate () <UIViewControllerTransitioningDelegate, UIViewControllerAnimatedTransitioning>
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation AppDelegate
|
@implementation AppDelegate
|
||||||
|
{
|
||||||
|
UISwipeGestureRecognizerDirection modalPanePresentationDirection;
|
||||||
|
}
|
||||||
|
|
||||||
+ (instancetype)sharedInstance {
|
+ (instancetype)sharedInstance {
|
||||||
return sharedAppDelegate;
|
return sharedAppDelegate;
|
||||||
@ -93,6 +96,8 @@ NSString * const MNVMDidEjectDiskNotification = @"MNVMDidEjectDisk";
|
|||||||
[controller presentViewController:alert animated:YES completion:nil];
|
[controller presentViewController:alert animated:YES completion:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - Settings / Insert Disk panels
|
||||||
|
|
||||||
- (void)showSettings:(id)sender {
|
- (void)showSettings:(id)sender {
|
||||||
[self showModalPanel:@"settings" sender:sender];
|
[self showModalPanel:@"settings" sender:sender];
|
||||||
}
|
}
|
||||||
@ -116,6 +121,7 @@ NSString * const MNVMDidEjectDiskNotification = @"MNVMDidEjectDisk";
|
|||||||
UIViewController *presentedTopViewController = [presentedViewController isKindOfClass:[UINavigationController class]] ? [(UINavigationController*)presentedViewController topViewController] : nil;
|
UIViewController *presentedTopViewController = [presentedViewController isKindOfClass:[UINavigationController class]] ? [(UINavigationController*)presentedViewController topViewController] : nil;
|
||||||
|
|
||||||
if ([presentedTopViewController isKindOfClass:classToShow]) {
|
if ([presentedTopViewController isKindOfClass:classToShow]) {
|
||||||
|
[presentedViewController dismissViewControllerAnimated:YES completion:nil];
|
||||||
return;
|
return;
|
||||||
} else if ([presentedTopViewController isKindOfClass:otherClass]) {
|
} else if ([presentedTopViewController isKindOfClass:otherClass]) {
|
||||||
// flip
|
// flip
|
||||||
@ -141,8 +147,49 @@ NSString * const MNVMDidEjectDiskNotification = @"MNVMDidEjectDisk";
|
|||||||
}];
|
}];
|
||||||
}];
|
}];
|
||||||
} else {
|
} else {
|
||||||
[self.window.rootViewController performSegueWithIdentifier:name sender:sender];
|
UIViewController *viewController = [rootViewController.storyboard instantiateViewControllerWithIdentifier:name];
|
||||||
|
viewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
|
||||||
|
viewController.modalPresentationStyle = UIModalPresentationFormSheet;
|
||||||
|
if ([sender isKindOfClass:[UISwipeGestureRecognizer class]]) {
|
||||||
|
modalPanePresentationDirection = [(UISwipeGestureRecognizer*)sender direction];
|
||||||
|
viewController.transitioningDelegate = self;
|
||||||
}
|
}
|
||||||
|
[rootViewController presentViewController:viewController animated:YES completion:nil];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source {
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext {
|
||||||
|
return 0.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
|
||||||
|
UIView *containerView = [transitionContext containerView];
|
||||||
|
UIView *toView = [transitionContext viewForKey:UITransitionContextToViewKey];
|
||||||
|
|
||||||
|
[containerView addSubview:toView];
|
||||||
|
switch (modalPanePresentationDirection) {
|
||||||
|
case UISwipeGestureRecognizerDirectionLeft:
|
||||||
|
toView.transform = CGAffineTransformMakeTranslation(containerView.bounds.size.width, 0);
|
||||||
|
break;
|
||||||
|
case UISwipeGestureRecognizerDirectionRight:
|
||||||
|
toView.transform = CGAffineTransformMakeTranslation(-containerView.bounds.size.width, 0);
|
||||||
|
break;
|
||||||
|
case UISwipeGestureRecognizerDirectionDown:
|
||||||
|
toView.transform = CGAffineTransformMakeTranslation(0, -containerView.bounds.size.height);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
toView.transform = CGAffineTransformMakeTranslation(0, containerView.bounds.size.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
|
||||||
|
toView.transform = CGAffineTransformIdentity;
|
||||||
|
} completion:^(BOOL finished) {
|
||||||
|
[transitionContext completeTransition:finished];
|
||||||
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Files
|
#pragma mark - Files
|
||||||
|
Loading…
Reference in New Issue
Block a user