AFTPhotoScroller 0.1.8

AFTPhotoScroller 0.1.8

测试已测试
语言语言 Objective-CObjective C
许可证 MIT
发布日期上次发布日期2017年7月

huang-kun 维护。



屏幕截图

分页和缩放            网络图片

视差滚动1     视差滚动2

介绍


AFTPhotoScroller 是一种简单灵活的实现 iOS 相册基本功能的照片滚动解决方案。

它的灵感来源于 WWDC 2010 的视频 使用滚动视图设计应用,其中解释了嵌套滚动视图技术的精髓以实现照片滚动。有一些优秀的开源项目封装了所有内容,使得照片滚动代码易于实现,但 AFTPhotoScroller 是不同的。

与经典的照片滚动器类似,AFTPhotoScroller 可以实现从左到右的分页滚动和单张照片的缩放。以下是 AFTPhotoScroller 的特性:

无控制器设计

UIPageViewController 不同,AFTPhotoScroller 没有控制器类。这是一个基于视图的公开接口,唯一需要的类是 AFTPagingScrollView,这意味着您可以为不同的情境实现大量定制的控制器,例如直接使用 UITableView 而不是 UITableViewController。它像 UIPageViewController 一样处理页面重用、填充计算和最小图像缓存概念,只是没有页面翻页效果和书脊位置。

自定义

有许多细节可以为您自定义:

  • 页面之间的填充
  • 启用/禁用双击手势缩放图片
  • 设置缩放进度以确定双击可以缩放到多远。
  • 支持垂直分页方向
  • 视差滚动 支持(如 iOS 10 中的相册应用。如果您喜欢,可以在维基百科上查看 视差滚动 的概念)

有大量的控制流程供您自定义

  • 您可以选择是否显示单页
  • 您可以直接跳转到指定页
  • 您可以重新加载单页(与图片网络获取配合良好)
  • 您可以在分页、缩放、触摸的开始状态获取回调
  • 在新页即将完全显示在屏幕上时获取回调(当新页占屏幕超过一半时)

演示

Objective-C

首先,安装 AFTPhotoScroller。然后在您的 UIViewController 子类中 #import <AFTPhotoScroller/AFTPhotoScroller.h>,您可以简单地这样做。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.automaticallyAdjustsScrollViewInsets = NO;
    
    self.pagingView = [[AFTPagingScrollView alloc] initWithFrame:self.view.bounds];
    self.pagingView.dataSource = self;
    self.pagingView.paddingBetweenPages = 6;
    [self.view addSubview:self.pagingView];
    
    self.images = ... // load images
    [self.pagingView reloadData]; // build UI and load required data
}

#pragma mark - AFTPagingScrollViewDataSource

- (NSInteger)numberOfPagesInPagingScrollView:(AFTPagingScrollView *)pagingScrollView {
    return self.images.count;
}

- (UIImage *)pagingScrollView:(AFTPagingScrollView *)pagingScrollView imageForPageAtIndex:(NSInteger)pageIndex {
    return self.images[pageIndex];
}

Swift

首先,安装 AFTPhotoScroller (请在 Podfile 中 务必使用 use_frameworks!)然后 import AFTPhotoScroller 在您的 UIViewController 子类中,您可以简单地这样做。

import UIKit
import AFTPhotoScroller

class ViewController: UIViewController, AFTPagingScrollViewDataSource {
    
    var pagingView: AFTPagingScrollView!
    var images: [UIImage]!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        pagingView = AFTPagingScrollView(frame:view.bounds)
        pagingView.isParallaxScrollingEnabled = true
        pagingView.dataSource = self
        view.addSubview(pagingView)
        
        images = loadAllImages()
        pagingView.reloadData()
    }

    public func numberOfPages(in pagingScrollView: AFTPagingScrollView) -> Int {
        return images.count
    }
    
    public func pagingScrollView(_ pagingScrollView: AFTPagingScrollView, imageForPageAt pageIndex: Int) -> UIImage {
        return images[pageIndex]
    }

    func loadAllImages() -> [UIImage] {
        ....
    }
}

示例应用可供下载。它展示了如何通过 AFTPhotoScroller 构建不同的照片滚动器。与自定义底部页码栏等 UI 组件配合良好。此示例使用带有推送动画的弹出导航栏,而不是真实的 UINavigationController

与示例应用不同,我们不建议在真实项目中一次性将所有图像资源加载到内存中。

要求

iOS 6+

安装

AFTPhotoScroller 可以通过 CocoaPods 使用。要安装它,只需将以下行添加到您的 Podfile 中

pod "AFTPhotoScroller"

感谢

作者

huangkun, [email protected]

许可证

AFTPhotoScroller 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。