QMUIImagePreviewViewController+RQExtension.m 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. //
  2. // QMUIImagePreviewViewController+RQExtension.m
  3. // jiaPei
  4. //
  5. // Created by 张嵘 on 2022/9/14.
  6. // Copyright © 2022 JCZ. All rights reserved.
  7. //
  8. #import "QMUIImagePreviewViewController+RQExtension.h"
  9. #import <objc/runtime.h>
  10. @implementation QMUIImagePreviewViewController (RQExtension)
  11. + (void)load {
  12. // 方法交换,为的是当系统调用viewDidLoad时候,调用的是我们的my_viewDidLoad方法
  13. static dispatch_once_t onceToken;
  14. dispatch_once(&onceToken, ^{
  15. Class class = [self class];
  16. SEL originalSelector = @selector(cancelDismissingGesture);
  17. SEL swizzledSelector = @selector(my_cancelDismissingGesture);
  18. Method originalMethod = class_getInstanceMethod(class, originalSelector);
  19. Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
  20. BOOL success = class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod));
  21. if (success) {
  22. class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
  23. } else {
  24. method_exchangeImplementations(originalMethod, swizzledMethod);
  25. }
  26. });
  27. }
  28. // 手势判定失败,恢复到手势前的状态
  29. - (void)my_cancelDismissingGesture {
  30. @weakify(self)
  31. self.statusBarHidden = YES;
  32. [UIView animateWithDuration:.2 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
  33. @strongify(self)
  34. [self setNeedsStatusBarAppearanceUpdate];
  35. [self resetDismissingGesture];
  36. } completion:NULL];
  37. }
  38. @end