HWPanModal is used to present controller and drag to dismiss.
Inspired by PanModal, thanks.
My another project for pop controller:HWPopController 中文文档说明
- Supports any type of
UIViewController
- Seamless transition between modal and content
- Support two kinds of GestureRecognizer
- UIPanGestureRecognizer, direction is UP & Down.
- UIScreenEdgePanGestureRecognizer, you can swipe on screen edge to dismiss controller.
- Support write your own animation for presenting VC.
- Support config animation
Duration
,AnimationOptions
,springDamping
. - Support config background alpha or
blur
background. Note: Dynamic change blur effect ONLY works on iOS9.0+. - Show / hide corner, indicator.
- Auto handle UIKeyboard show/hide.
More config pls see HWPanModalPresentable.h declare.
- Handle keyboard show&dismiss.
Touch event can response to presenting VC.
iOS 8.0+, support Objective-C & Swift.
Because Objective-C KVO is hard to use, so I use KVOController = =
pod 'HWPanModal', '~> 0.2.9.5'
Your UIViewController need to conform HWPanModalPresentable
. If you use default, nothing more will be written.
#import <HWPanModal/HWPanModal.h>
@interface HWBaseViewController () <HWPanModalPresentable>
@end
@implementation HWBaseViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
#pragma mark - HWPanModalPresentable
- (PanModalHeight)longFormHeight {
return PanModalHeightMake(PanModalHeightTypeMaxTopInset, 44);
}
@end
Where you need to present this Controller.
#import <HWPanModal/HWPanModal.h>
[self presentPanModal:[HWBaseViewController new]];
yeah! Easy.
When You present you Controller, you can change the UI.
Refer to UIViewController+Presentation.h
.
- Change the state between short and long form. call
- (void)hw_panModalTransitionTo:(PresentationState)state;
- Change ScrollView ContentOffset. call
- (void)hw_panModalSetContentOffset:(CGPoint)offset;
- Reload layout. call
- (void)hw_panModalSetNeedsLayoutUpdate;
Some guys want to animate Presenting VC when present/dismiss.
-
Create object conforms
HWPresentingViewControllerAnimatedTransitioning
.@interface HWMyCustomAnimation : NSObject <HWPresentingViewControllerAnimatedTransitioning> @end @implementation HWMyCustomAnimation - (void)presentAnimateTransition:(id<HWPresentingViewControllerContextTransitioning>)transitionContext { NSTimeInterval duration = [transitionContext mainTransitionDuration]; UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; // replace it. [UIView animateWithDuration:duration delay:0 usingSpringWithDamping:0.8 initialSpringVelocity:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ fromVC.view.transform = CGAffineTransformMakeScale(0.95, 0.95); } completion:^(BOOL finished) { }]; } - (void)dismissAnimateTransition:(id<HWPresentingViewControllerContextTransitioning>)transitionContext { NSTimeInterval duration = [transitionContext mainTransitionDuration]; UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; // replace it. [UIView animateWithDuration:duration animations:^{ toVC.view.transform = CGAffineTransformIdentity; }]; } @end
-
Overwrite below two method.
- (BOOL)shouldAnimatePresentingVC { return YES; } - (id<HWPresentingViewControllerAnimatedTransitioning>)customPresentingVCAnimation { return self.customAnimation; } - (HWMyCustomAnimation *)customAnimation { if (!_customAnimation) { _customAnimation = [HWMyCustomAnimation new]; } return _customAnimation; }
- Clone this git.
- open the terminal, go to the
Example
Folder. pod install --verbose
- Double click HWPanModal.xcworkspace, and run.
Heath Wang [email protected]
HWPanModal is released under a MIT License. See LICENSE file for details.