Giter Site home page Giter Site logo

quintgao / gkphotobrowser Goto Github PK

View Code? Open in Web Editor NEW
1.2K 26.0 216.0 72.3 MB

iOS仿微信、今日头条等图片浏览器

License: MIT License

Objective-C 95.53% Ruby 0.93% HTML 1.68% Swift 1.86%
photobrowser imageviewer cocoapods yywebimage sdwebimage

gkphotobrowser's People

Contributors

chimingzi avatar coderas7 avatar iamnanyi avatar lisonfan avatar liupengkun1993 avatar parkerjj avatar pepsikirk avatar quintgao avatar recherst avatar robinchanme avatar wangteng2021 avatar yangguanghei avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gkphotobrowser's Issues

手势冲突

集成之后,tableView的下拉就会失效,拉不动
你这样写category操作系统级别的api,很容易出问题啊

解决全屏滑动会导致不能直接下拉scrollview

UIScrollView+GKGestureHandle.m

第 24行 #pragma mark - 解决全屏滑动

  • (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    、、、、
    }
    这个方法会导致其他的scrollview 在原始offset的时候不能下拉
    要往上拉一点才能下拉
    改为 return YES 就ok

请问

isScrollViewOnTopOrBottom 为何要返回NO

内存泄漏

显示GIF 内存占用高达一个G多 CPU一百多

GKPhoto是否考虑添加PHAsset

GKPhoto是否考虑添加PHAsset
GKPhotoView的loadImageWithPhoto:添加PHAsset方法异步加载图片的,

这样在选择相册图片,浏览图片可以先不要同步获取图片URL信息,

通过本地直接加载的图片,浏览时不能双击放大

双击放大手势的操作里面有一个判断:

- (void)handleDoubleTap:(UITapGestureRecognizer *)tap {
    GKPhotoView *photoView = [self photoViewForIndex:self.currentIndex];
    GKPhoto *photo = self.photos[self.currentIndex];
    
    if (!photo.finished) return;

但是直接通过本地加载图片设置GKPhoto时,finished总是为NO:

GKPhoto *photo  = [GKPhoto new];
photo.image  = [UIImage imageNamed:obj];

所以造成此问题。需要优化下

关于GKWebImageProtocol强引用

您好,GKWebImageProtocol为什么一定要强引用(一般代理都是弱引用,这里的区别对比),我尝试了改为弱引用,图片就会一直在加载中

pod install 问题

'FLAnimatedImage/FLAnimatedImage.h' file not found 最新版不会自动导入 FLAnimatedImage,pod 'GKPhotoBrowser', '~> 1.2.2' 就可以

缩放返回背景不透明问题

作者,你好!
我修改以下方法,变成导航控制器,缩放返回的时候,背景不透明了

  • (void)showFromVC:(UIViewController *)vc {

    self.fromVC = vc;

// if (self.showStyle == GKPhotoBrowserShowStylePush) {
// [vc.navigationController pushViewController:self animated:YES];
// }else {
// self.modalPresentationCapturesStatusBarAppearance = YES;
// [vc presentViewController:self animated:NO completion:nil];
// }
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self];
[vc presentViewController:nav animated:NO completion:nil];
}

GKPhotoBrowser showFromVC

showFromVC 这个方法需要获取某controller
若是直接在window上加的图 就无法触发了 [UIApplication sharedApplication].keyWindow.viewController 也是nil

当把gif只缓存到内存中,点击gif图片的问题。

你好,首先感谢提供这么好用的图片浏览库。

不过我们在使用的时候遇到了一共问题,就是因为gif图片都比较大,所以我们从网络获取到gif,然后加载之后,不把他存到本地,而是只放到内存了,用到了SDWebImage的这个属性SDWebImageCacheMemoryOnly。

然后配合这个库的话,就会发现当第一次的时候点击gif是会动的,而关闭再打开就静止了,不知这个库对于这种情况有什么解决办法吗?

zoom 之后恢复原图大小,无法上滑/下滑 淡出

我在使用本库时发现支持上下滑动淡出视图的功能会在zoom之后失效,通过修改源码修复了此问题, 在您的demo “tableviewcell多图zoom” 进行如下操作:即可复现

  1. 点击开大图
  2. zoom 放大图片
  3. zoom 恢复原图
  4. 上滑/下滑 尝试淡出视图

这个库限制了SDWebImage的版本吧?

作者你好,我项目中的SD版本是pod 'SDWebImage', '~> 4.4.1',手动导入你的库。
似乎pod上面你的库是1.2.8版本,最新这边是1.3.4?
然后在GKPhotoView.m中,- (void)loadImageWithPhoto:(GKPhoto *)photo 这个方法下面
NSData *imageData = [[SDImageCache sharedImageCache] diskImageDataForKey:photo.url.absoluteString];
[strongSelf setupPhotoWithData:imageData image:image];
也就是186行左右,默认会报错,因为SDW里面找不到这个方法了。
作者是否可以尝试一下?4.4.1的SDW是我这边pod里搜到最新的了。

- (void)setupPhoto:(GKPhoto *)photo

- (void)setupPhoto:(GKPhoto *)photo 方法会执行两次

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    GKPhoto *photo          = [self currentPhoto];
    GKPhotoView *photoView  = [self currentPhotoView];

    if ([_imageProtocol imageFromMemoryForURL:photo.url] || photo.image) {
        [photoView setupPhoto:photo];
    }else {
        photoView.imageView.image = photo.placeholderImage ? photo.placeholderImage : 
photo.sourceImageView.image;
        [photoView adjustFrame];
    }

    switch (self.showStyle) {
        case GKPhotoBrowserShowStyleNone:
            [self browserNoneShow];
            break;
        case GKPhotoBrowserShowStylePush:
            [self browserPushShow];
           break;
        case GKPhotoBrowserShowStyleZoom:{
            [self browserZoomShow];
        }
            break;
        
        default:
            break;
    }
}

这个里面会走两次

GKPhotoBrowser添加其他视图手势发生冲突

执行下面代码添加view,如view中添加scrollView、button等控件,操作时会发生手势冲突

[browser setupCoverViews:@[view] layoutBlock:^(GKPhotoBrowser *photoBrowser, CGRect superFrame) {
    [self resetCoverFrame:superFrame index:photoBrowser.currentIndex];
}];

CALayer position contains NaN: [nan nan]

0 CoreFoundation ___exceptionPreprocess + 228
1 libobjc.A.dylib objc_exception_throw + 56
2 CoreFoundation -[NSCache init]
3 QuartzCore 0x00000001a5615000 + 1354148
4 QuartzCore 0x00000001a5615000 + 1290436
5 QuartzCore 0x00000001a5615000 + 1292332
6 UIKitCore -[UIView(Geometry) setFrame:] + 356
7 UIKitCore -[UIImageView _setViewGeometry:forMetric:] + 172
8 ManagePlus 0x0000000102d18000 + 9189636
9 ManagePlus 0x0000000102d18000 + 9188608
10 UIKitCore -[UIGestureRecognizerTarget _sendActionWithGestureRecognizer:] + 64
11 UIKitCore __UIGestureRecognizerSendTargetActions + 124
12 UIKitCore __UIGestureRecognizerSendActions + 320
13 UIKitCore -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 764
14 UIKitCore __UIGestureEnvironmentUpdate + 1096
15 UIKitCore -[UIGestureEnvironment _deliverEvent:toGestureRecognizers:usingBlock:] + 384
16 UIKitCore -[UIGestureEnvironment _updateForEvent:window:] + 204
17 UIKitCore -[UIWindow sendEvent:] + 3128
18 UIKitCore -[UIApplication sendEvent:] + 340
19 UIKitCore ___dispatchPreprocessedEventFromEventQueue + 1620
20 UIKitCore ___handleEventQueueInternal + 4740
21 UIKitCore ___handleHIDEventFetcherDrain + 152
22 CoreFoundation _CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 24
23 CoreFoundation ___CFRunLoopDoSource0 + 88
24 CoreFoundation ___CFRunLoopDoSources0 + 176
25 CoreFoundation ___CFRunLoopRun + 1040
26 CoreFoundation CFRunLoopRunSpecific + 436
27 GraphicsServices GSEventRunModal + 100
28 UIKitCore UIApplicationMain + 212
29 ManagePlus 0x0000000102d18000 + 9485528
30 libdyld.dylib 0x00000001a0ba2000 + 2996

内存泄露

GKPhotoBrowser.m中, zoomEnded中使用self, 造成循环引用, 改成weak即可

最新版本内存泄漏

GKPhotoBrowser (1.5.1)
GKPhotoBrowser.m的setupPhotoViews方法中 在block中使用了self,循环引用内存泄漏了

image

删除一张图片 更新数据浏览器

多张图片选择 ,当我点进浏览器 ,显示大图中我在这个长按收拾上增加一个删除图片的 操作,这样这图片的数据源就出现问题了

removePhotoAtIndex功能不完善

用此方法删除指定索引的图片,会出现已删除图片和新的该位置上的图片叠加(图片大小不一时一眼就能看到,大小一样是可以通过视图调试看到),而且已删除图片仍然占着位置(浏览器末尾有黑色页,删除几张就有几页)。我在resetPhotoBrowserWithPhotos方法中增加了将self.reusablePhotoViews和self.visiblePhotoViews中的[view removeFromSuperview],并在[self setupPhotoViews]后调用[self layoutSubviews],才规避。希望作者能有更好的解决方法处理此问题。

图片有相机方向参数 有UI BUG

如果JPG文件带有相机方向参数。
在从全屏缩小时 过渡动画的Animation会出现图片原地旋转的BUG。

BUG复现如下:
uibug 2018-12-29 15_39_37

已经提交修复的Merge Request。 如没问题请通过

GKPhoto不设置sourceImageView,设置sourceFrame效果有问题

GKTest02ViewController的代码
NSMutableArray *photoArrs = [NSMutableArray new];

    [photos enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        GKPhoto *photo        = [GKPhoto new];
        if ([obj hasPrefix:@"http"]) {
            photo.url         = [NSURL URLWithString:obj];
        }else {
            photo.image       = [UIImage imageNamed:obj];
        }

// photo.sourceImageView = containerView.subviews[idx];
UIWindow * window=[[[UIApplication sharedApplication] delegate] window];
UIView *v = containerView.subviews[idx];
photo.sourceFrame = [v convertRect:v.bounds toView:window];
[photoArrs addObject:photo];
}];

    GKPhotoBrowser *browser = [GKPhotoBrowser photoBrowserWithPhotos:photoArrs currentIndex:index];
    browser.showStyle    = GKPhotoBrowserShowStyleZoom;
    browser.hideStyle    = GKPhotoBrowserHideStyleZoomScale;
    browser.isLowGifMemory = YES;
    
    [browser showFromVC:weakSelf];

关于showStyle的问题

GKPhotoBrowserShowStyleZoom这个方式,我发现每次show的时候.photo.imageView的frame都是从CGRectZero开始的,但是打印却是我们想要的结果,是sourceFrame,我用慢放验证了,确实是从最小开始变大的,而不是sourceImageView的位置和大小,请教是什么问题呢?
另外,建议增加一行代码:
photoView.imageView.contentMode = photo.sourceImageView.contentMode;
这样在隐藏的最后一刻不会因为原图设置的Fill的模式造成闪动,影响效果

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.