LZImageBrowserManger.m 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. //
  2. // LZImageBrowserManger.m
  3. // LZImageDetail
  4. //
  5. // Created by shenzhenshihua on 2018/7/16.
  6. // Copyright © 2018年 shenzhenshihua. All rights reserved.
  7. //
  8. #import "LZImageBrowserManger.h"
  9. #import "LZImageBrowserForceTouchViewController.h"
  10. #import "LZImageBrowserViewController.h"
  11. #import "LZImageBrowserHeader.h"
  12. @interface LZImageBrowserManger ()<UIViewControllerPreviewingDelegate>
  13. @property(nonatomic,copy)NSArray * imageUrls;
  14. @property(nonatomic,copy)NSArray * originImageViews;
  15. @property(nonatomic,weak)UIViewController * controller;
  16. @property(nonatomic,copy)ForceTouchActionBlock forceTouchActionBlock;
  17. @property(nonatomic,copy)NSArray * previewActionTitls;
  18. @end
  19. @implementation LZImageBrowserManger
  20. + (id)imageBrowserMangerWithUrlStr:(NSArray<NSString *>*)imageUrls originImageViews:(NSArray<UIImageView *>*)originImageViews originController:(UIViewController *)controller forceTouch:(BOOL)forceTouchCapability forceTouchActionTitles:(nullable NSArray <NSString *>*)titles forceTouchActionComplete:(nullable ForceTouchActionBlock)forceTouchActionBlock {
  21. LZImageBrowserManger *imageBrowserManger = [[LZImageBrowserManger alloc] init];
  22. imageBrowserManger.imageUrls = imageUrls;
  23. imageBrowserManger.originImageViews = originImageViews;
  24. imageBrowserManger.controller = controller;
  25. if (forceTouchCapability) {
  26. [imageBrowserManger initForceTouch];
  27. }
  28. if (forceTouchCapability && titles.count) {
  29. imageBrowserManger.previewActionTitls = titles;
  30. imageBrowserManger.forceTouchActionBlock = forceTouchActionBlock;
  31. }
  32. return imageBrowserManger;
  33. }
  34. - (void)showImageBrowser {
  35. LZImageBrowserViewController * imageBrowserViewController = [[LZImageBrowserViewController alloc] initWithUrlStr:self.imageUrls originImageViews:self.originImageViews selectPage:self.selectPage];
  36. [self.controller presentViewController:imageBrowserViewController animated:YES completion:nil];
  37. }
  38. - (void)initForceTouch {
  39. if ([self.controller respondsToSelector:@selector(traitCollection)]) {
  40. if ([self.controller.traitCollection respondsToSelector:@selector(forceTouchCapability)]) {
  41. if (self.controller.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
  42. //1.注册3Dtouch事件
  43. for (UIView * view in self.originImageViews) {
  44. [self.controller registerForPreviewingWithDelegate:self sourceView:view];
  45. }
  46. }
  47. }
  48. }
  49. }
  50. #pragma mark --UIViewControllerPreviewingDelegate
  51. - (nullable UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location {
  52. NSInteger selectPage = [self.originImageViews indexOfObject:[previewingContext sourceView]];
  53. self.selectPage = selectPage;
  54. UIImage * showOriginForceImage = (UIImage *)[self.originImageViews[selectPage] image];
  55. NSString * showForceImageUrl = self.imageUrls[selectPage];
  56. LZImageBrowserForceTouchViewController * forceTouchController = [[LZImageBrowserForceTouchViewController alloc] init];
  57. forceTouchController.showOriginForceImage = showOriginForceImage;
  58. forceTouchController.showForceImageUrl = showForceImageUrl;
  59. if (self.previewActionTitls.count) {
  60. forceTouchController.previewActionTitls = self.previewActionTitls;
  61. forceTouchController.forceTouchActionBlock = self.forceTouchActionBlock;
  62. }
  63. CGFloat showImageViewW;
  64. CGFloat showImageViewH;
  65. CGFloat showImageW = showOriginForceImage.size.width;
  66. CGFloat showImageH = showOriginForceImage.size.height;
  67. if (showImageH/showImageW > Screen_Height/Screen_Width) {
  68. showImageViewH = Screen_Height;
  69. showImageViewW = Screen_Height * showImageW/showImageH;
  70. } else {
  71. showImageViewW = Screen_Width;
  72. showImageViewH = Screen_Width * showImageH/showImageW;
  73. }
  74. //设置展示大小
  75. forceTouchController.preferredContentSize = CGSizeMake((showImageViewW-2)/1, (showImageViewH-2)/1);
  76. return forceTouchController;
  77. }
  78. - (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
  79. LZImageBrowserViewController * imageBrowserViewController = [[LZImageBrowserViewController alloc] initWithUrlStr:self.imageUrls originImageViews:self.originImageViews selectPage:self.selectPage];
  80. [self.controller presentViewController:imageBrowserViewController animated:NO completion:nil];
  81. }
  82. @end