Hibit_iOS/Pods/HWPanModal/Sources/Presenter/UIViewController+PanModalPresenter.m
2024-06-07 11:41:02 +08:00

65 lines
2.7 KiB
Objective-C

//
// UIViewController+PanModalPresenter.m
// HWPanModal
//
// Created by heath wang on 2019/4/29.
//
#import "UIViewController+PanModalPresenter.h"
#import "HWPanModalPresentationDelegate.h"
#import <objc/runtime.h>
@implementation UIViewController (PanModalPresenter)
- (BOOL)isPanModalPresented {
return [self.transitioningDelegate isKindOfClass:HWPanModalPresentationDelegate.class];
}
- (void)presentPanModal:(UIViewController<HWPanModalPresentable> *)viewControllerToPresent sourceView:(UIView *)sourceView sourceRect:(CGRect)rect completion:(void (^)(void))completion {
HWPanModalPresentationDelegate *delegate = [HWPanModalPresentationDelegate new];
viewControllerToPresent.hw_panModalPresentationDelegate = delegate;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad &&
(sourceView && !CGRectEqualToRect(rect, CGRectZero))) {
viewControllerToPresent.modalPresentationStyle = UIModalPresentationPopover;
viewControllerToPresent.popoverPresentationController.sourceRect = rect;
viewControllerToPresent.popoverPresentationController.sourceView = sourceView;
viewControllerToPresent.popoverPresentationController.delegate = delegate;
} else {
viewControllerToPresent.modalPresentationStyle = UIModalPresentationCustom;
viewControllerToPresent.modalPresentationCapturesStatusBarAppearance = YES;
viewControllerToPresent.transitioningDelegate = delegate;
}
// fix for iOS 8 issue: the present action will delay.
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:viewControllerToPresent animated:YES completion:completion];
});
}
- (void)presentPanModal:(UIViewController <HWPanModalPresentable> *)viewControllerToPresent sourceView:(nullable UIView *)sourceView sourceRect:(CGRect)rect {
[self presentPanModal:viewControllerToPresent sourceView:sourceView sourceRect:rect completion:nil];
}
- (void)presentPanModal:(UIViewController <HWPanModalPresentable> *)viewControllerToPresent {
[self presentPanModal:viewControllerToPresent sourceView:nil sourceRect:CGRectZero];
}
- (void)presentPanModal:(UIViewController<HWPanModalPresentable> *)viewControllerToPresent completion:(void (^)(void))completion {
[self presentPanModal:viewControllerToPresent sourceView:nil sourceRect:CGRectZero completion:completion];
}
- (HWPanModalPresentationDelegate *)hw_panModalPresentationDelegate {
return objc_getAssociatedObject(self, _cmd);
}
- (void)setHw_panModalPresentationDelegate:(HWPanModalPresentationDelegate *)hw_panModalPresentationDelegate {
objc_setAssociatedObject(self, @selector(hw_panModalPresentationDelegate), hw_panModalPresentationDelegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end