Commit 534b960ea7b113ef5d71645bdbbec529ccf48c9b

Authored by yinqiaojuan
1 parent e60cf8c2

0.0.1

Showing 41 changed files with 4861 additions and 0 deletions

Too many changes to show.

To preserve performance only 41 of 166 files are displayed.

.gitignore 0 → 100644
  1 +# OS X
  2 +.DS_Store
  3 +
  4 +# Xcode
  5 +build/
  6 +Products/
  7 +*.pbxuser
  8 +!default.pbxuser
  9 +*.mode1v3
  10 +!default.mode1v3
  11 +*.mode2v3
  12 +!default.mode2v3
  13 +*.perspectivev3
  14 +!default.perspectivev3
  15 +xcuserdata/
  16 +*.xccheckout
  17 +profile
  18 +*.moved-aside
  19 +DerivedData
  20 +*.hmap
  21 +*.ipa
  22 +
  23 +# Bundler
  24 +.bundle
  25 +
  26 +# Add this line if you want to avoid checking in source code from Carthage dependencies.
  27 +# Carthage/Checkouts
  28 +
  29 +Carthage/Build
  30 +
  31 +# We recommend against adding the Pods directory to your .gitignore. However
  32 +# you should judge for yourself, the pros and cons are mentioned at:
  33 +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
  34 +#
  35 +# Note: if you ignore the Pods directory, make sure to uncomment
  36 +# `pod install` in .travis.yml
  37 +#
  38 +# Pods/
.travis.yml 0 → 100644
  1 +# references:
  2 +# * https://www.objc.io/issues/6-build-tools/travis-ci/
  3 +# * https://github.com/supermarin/xcpretty#usage
  4 +
  5 +osx_image: xcode7.3
  6 +language: objective-c
  7 +# cache: cocoapods
  8 +# podfile: Example/Podfile
  9 +# before_install:
  10 +# - gem install cocoapods # Since Travis is not always on latest version
  11 +# - pod install --project-directory=Example
  12 +script:
  13 +- set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/CNLiveCycleScrollView.xcworkspace -scheme CNLiveCycleScrollView-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty
  14 +- pod lib lint
CNLiveCycleScrollView.podspec 0 → 100644
  1 +
  2 +Pod::Spec.new do |s|
  3 + s.name = 'CNLiveCycleScrollView'
  4 + s.version = '0.0.1'
  5 + s.summary = '放大缩小轮播图封装'
  6 +
  7 +
  8 +
  9 + s.description = <<-DESC
  10 +TODO: Add long description of the pod here.
  11 + DESC
  12 +
  13 + s.homepage = 'http://bj.gitlab.cnlive.com/ios-team/CNLiveCycleScrollView'
  14 + # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  15 + s.license = { :type => 'MIT', :file => 'LICENSE' }
  16 + s.author = { '殷巧娟' => '1427945373@qq.com' }
  17 + s.source = { :git => 'http://bj.gitlab.cnlive.com/ios-team/CNLiveCycleScrollView.git', :tag => s.version.to_s }
  18 + # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
  19 +
  20 + s.ios.deployment_target = '9.0'
  21 +
  22 + s.source_files = 'CNLiveCycleScrollView/Classes/**/*.{h,m}'
  23 +
  24 + # s.resource_bundles = {
  25 + # 'CNLiveCycleScrollView' => ['CNLiveCycleScrollView/Assets/*.png']
  26 + # }
  27 +
  28 + # s.public_header_files = 'Pod/Classes/**/*.h'
  29 + # s.frameworks = 'UIKit', 'Foundation'
  30 + s.dependency 'SDWebImage', '~> 5.0.0-beta3'
  31 +end
CNLiveCycleScrollView/Classes/CNCycleScrollView.h 0 → 100644
  1 +//
  2 +// CNCycleScrollView.h
  3 +// CNLiveNetAdd
  4 +//
  5 +// Created by 殷巧娟 on 2018/10/31.
  6 +// Copyright © 2018年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import <UIKit/UIKit.h>
  10 +
  11 +@class CNCycleScrollView;
  12 +
  13 +NS_ASSUME_NONNULL_BEGIN
  14 +@protocol CNCycleScrollViewDelegate <NSObject>
  15 +/** 点击图片回调 */
  16 +- (void)cycleScrollView:(CNCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index;
  17 +@end
  18 +@interface CNCycleScrollView : UIView
  19 +
  20 +/**是否缩放,默认不缩放*/
  21 +@property (nonatomic,assign) BOOL isZoom;
  22 +//*自动滚动间隔时间,默认2s
  23 +@property (nonatomic,assign) CGFloat autoScrollTimeInterval;
  24 +//cell宽度
  25 +@property (nonatomic,assign) CGFloat itemWidth;
  26 +//cell间距
  27 +@property (nonatomic,assign) CGFloat itemSpace;
  28 +//imagView圆角,默认为0;
  29 +@property (nonatomic,assign) CGFloat imgCornerRadius;
  30 +/** 轮播图片的ContentMode,默认为 UIViewContentModeScaleToFill */
  31 +@property (nonatomic, assign) UIViewContentMode bannerImageViewContentMode;
  32 +//代理方法
  33 +@property (nonatomic,weak) id<CNCycleScrollViewDelegate> delegate;
  34 +
  35 +
  36 +//初始化方法
  37 ++(instancetype)cycleScrollViewWithFrame:(CGRect)frame imageGroups:(NSArray<NSString *> *)imageGroups;
  38 +@end
  39 +
  40 +NS_ASSUME_NONNULL_END
CNLiveCycleScrollView/Classes/CNCycleScrollView.m 0 → 100644
  1 +//
  2 +// CNCycleScrollView.m
  3 +// CNLiveNetAdd
  4 +//
  5 +// Created by 殷巧娟 on 2018/10/31.
  6 +// Copyright © 2018年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import "CNCycleScrollView.h"
  10 +#import "CNCycleScrollViewCell.h"
  11 +#import "CNCycleScrollViewFlowLayout.h"
  12 +#import "SDWebImageManager.h"
  13 +#import "UIImageView+WebCache.h"
  14 +
  15 +#define kScreenWidth [UIScreen mainScreen].bounds.size.width
  16 +// 取色值相关的方法
  17 +#define RGB(r,g,b) [UIColor colorWithRed:(r)/255.f \
  18 + green:(g)/255.f \
  19 + blue:(b)/255.f \
  20 + alpha:1.f]
  21 +#define kNavigationBarHeight ((int)[UIApplication sharedApplication].statusBarFrame.size.height+44) //x88 非x64
  22 +@interface CNCycleScrollView ()<UICollectionViewDataSource,UICollectionViewDelegate>
  23 +
  24 +@property (nonatomic,strong) UIImageView *backgroundImageView;
  25 +@property (nonatomic,strong) CNCycleScrollViewFlowLayout *flowLayout;
  26 +@property (nonatomic,strong) UICollectionView *collectionView;
  27 +@property (nonatomic,strong) NSArray *imgArr;//图片数组
  28 +@property (nonatomic,assign) NSInteger totalItems;//item总数
  29 +@property (nonatomic,strong) NSTimer *timer;
  30 +@property (nonatomic,assign) NSUInteger currentpage;//当前页
  31 +//分页控制器
  32 +@property (nonatomic,strong) UIPageControl *pageControl;
  33 +/** 占位图,用于网络未加载到图片时 */
  34 +@property (nonatomic, strong) UIImage *placeholderImage;
  35 +/** cell的占位图,用于网络未加载到图片时*/
  36 +@property (nonatomic,strong) UIImage *cellPlaceholderImage;
  37 +//*是否无线循环,默认yes
  38 +@property (nonatomic,assign) BOOL infiniteLoop;
  39 +//*是否自动滑动,默认yes
  40 +@property (nonatomic,assign) BOOL autoScroll;
  41 +@end
  42 +static NSString *const cellID = @"cellID";
  43 +
  44 +@implementation CNCycleScrollView
  45 +{
  46 + float _oldPoint;
  47 + NSInteger _dragDirection;
  48 +}
  49 +#pragma mark - life cycle
  50 ++(instancetype)cycleScrollViewWithFrame:(CGRect)frame imageGroups:(NSArray *)imageGroups
  51 +{
  52 + CNCycleScrollView *cycleScrollView;
  53 + CGFloat scaleW = kScreenWidth;
  54 + CGFloat scaleH = scaleW * 143 / 288;
  55 + if (imageGroups.count > 1) {
  56 + cycleScrollView = [[CNCycleScrollView alloc]initWithFrame:frame];
  57 + cycleScrollView.infiniteLoop = YES;
  58 + cycleScrollView.autoScroll = YES;
  59 + }else {
  60 + if (imageGroups.count > 0) {
  61 + cycleScrollView = [[CNCycleScrollView alloc]initWithFrame:CGRectMake(50, kNavigationBarHeight + 20, scaleW, scaleH)];
  62 + cycleScrollView.infiniteLoop = NO;
  63 + cycleScrollView.autoScroll = NO;
  64 + }
  65 + }
  66 +
  67 + cycleScrollView.imgArr = imageGroups;
  68 + return cycleScrollView;
  69 +}
  70 +-(instancetype)initWithFrame:(CGRect)frame
  71 +{
  72 + if(self = [super initWithFrame:frame])
  73 + {
  74 + [self initialization];
  75 + [self addSubview:self.collectionView];
  76 + [self addSubview:self.pageControl];
  77 +
  78 + }
  79 + return self;
  80 +}
  81 +
  82 +-(void)initialization
  83 +{
  84 + //初始化
  85 +// _infiniteLoop = YES;
  86 +// _autoScroll = YES;
  87 + _isZoom = NO;
  88 + _itemWidth = self.bounds.size.width;
  89 + _itemSpace = 0;
  90 + _imgCornerRadius = 0;
  91 + _autoScrollTimeInterval = 2;
  92 + _pageControl.currentPage = 0;
  93 + _bannerImageViewContentMode = UIViewContentModeScaleToFill;
  94 +}
  95 +-(CGFloat )defaultSpace
  96 +{
  97 + return (kScreenWidth - self.itemWidth)/2;
  98 +}
  99 +-(void)layoutSubviews
  100 +{
  101 + [super layoutSubviews];
  102 +
  103 + self.collectionView.frame = self.bounds;
  104 + self.pageControl.frame = CGRectMake(0, self.bounds.size.height - 20, self.bounds.size.width, 10);
  105 + self.flowLayout.itemSize = CGSizeMake(_itemWidth, self.bounds.size.height);
  106 + self.flowLayout.minimumLineSpacing = self.itemSpace;
  107 +
  108 + if(self.collectionView.contentOffset.x == 0 && _totalItems > 0)
  109 + {
  110 + NSInteger targeIndex = 0;
  111 + if(self.infiniteLoop)
  112 + {//无线循环
  113 + // 如果是无限循环,应该默认把 collection 的 item 滑动到 中间位置。
  114 + // 注意:此处 totalItems 的数值,其实是图片数组数量的 100 倍。
  115 + // 乘以 0.5 ,正好是取得中间位置的 item 。图片也恰好是图片数组里面的第 0 个。
  116 + targeIndex = _totalItems * 0.5;
  117 + }else
  118 + {
  119 + targeIndex = 0;
  120 + }
  121 + //设置图片默认位置
  122 + [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:targeIndex inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO];
  123 + _oldPoint = self.collectionView.contentOffset.x;
  124 + self.collectionView.userInteractionEnabled = YES;
  125 +
  126 + }
  127 +}
  128 +#pragma mark - event
  129 +
  130 +#pragma mark - delegate
  131 +#pragma mark - UIScrollViewDelegate
  132 +
  133 +- (void)scrollViewDidScroll:(UIScrollView *)scrollView
  134 +{
  135 + self.collectionView.userInteractionEnabled = NO;
  136 + if (!self.imgArr.count) return; // 解决清除timer时偶尔会出现的问题
  137 + self.pageControl.currentPage = [self currentIndex] % self.imgArr.count;
  138 +}
  139 +
  140 +- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
  141 +{
  142 + _oldPoint = scrollView.contentOffset.x;
  143 + if (self.autoScroll) {
  144 + [self invalidateTimer];
  145 + }
  146 +}
  147 +
  148 +- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
  149 +{
  150 + if (self.autoScroll) {
  151 + [self setupTimer];
  152 + }
  153 +}
  154 +
  155 +- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
  156 +{
  157 + [self scrollViewDidEndScrollingAnimation:self.collectionView];
  158 +}
  159 +
  160 +- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
  161 +{
  162 + self.collectionView.userInteractionEnabled = YES;
  163 + if (!self.imgArr.count) return; // 解决清除timer时偶尔会出现的问题
  164 +}
  165 +
  166 +//手离开屏幕的时候
  167 +- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
  168 + //如果是向右滑或者滑动距离大于item的一半,则像右移动一个item+space的距离,反之向左
  169 + float currentPoint = scrollView.contentOffset.x;
  170 + float moveWidth = currentPoint-_oldPoint;
  171 + int shouldPage = moveWidth/(self.itemWidth/2);
  172 + if (velocity.x>0 || shouldPage > 0) {
  173 + _dragDirection = 1;
  174 + }else if (velocity.x<0 || shouldPage < 0){
  175 + _dragDirection = -1;
  176 + }else{
  177 + _dragDirection = 0;
  178 + }
  179 + self.collectionView.userInteractionEnabled = NO;
  180 + //
  181 + NSInteger currentIndex = (_oldPoint + (self.itemWidth + self.itemSpace) * 0.5) / (self.itemSpace + self.itemWidth);
  182 +
  183 + [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:currentIndex + _dragDirection inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
  184 +
  185 +}
  186 +//开始减速的时候
  187 +- (void)scrollViewWillBeginDecelerating: (UIScrollView *)scrollView{
  188 + //松开手指滑动开始减速的时候,设置滑动动画
  189 + NSInteger currentIndex = (_oldPoint + (self.itemWidth + self.itemSpace) * 0.5) / (self.itemSpace + self.itemWidth);
  190 +
  191 + [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:currentIndex + _dragDirection inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
  192 +}
  193 +
  194 +- (float)nextPointCurrentPoint:(int)shouldPage{
  195 + return (shouldPage+1)/2*self.itemWidth+self.itemSpace;
  196 +}
  197 +- (float)lastPointCurrentPoint:(int)shouldPage{
  198 + shouldPage = -shouldPage;
  199 + return -(shouldPage+1)/2*self.itemWidth-self.itemSpace;
  200 +}
  201 +#pragma mark - 数据源方法
  202 +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
  203 +{
  204 + return _totalItems;
  205 +}
  206 +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
  207 +{
  208 + CNCycleScrollViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
  209 + long itemIndex = (int) indexPath.item % self.imgArr.count;
  210 + NSString *imagePath = self.imgArr[itemIndex];
  211 +
  212 + if ([imagePath hasPrefix:@"http"]|| [imagePath hasPrefix:@"https"]) {
  213 + [cell.imageViewShow sd_setImageWithURL:[NSURL URLWithString:imagePath] placeholderImage:self.cellPlaceholderImage];
  214 + } else {
  215 + UIImage *image = [UIImage imageNamed:imagePath];
  216 + if (!image) {
  217 + [UIImage imageWithContentsOfFile:imagePath];
  218 + }
  219 + cell.imageViewShow.image = image;
  220 + }
  221 + cell.imageViewShow.contentMode = self.bannerImageViewContentMode;
  222 + cell.imgCornerRadius = self.imgCornerRadius;
  223 + return cell;
  224 +}
  225 +#pragma mark - 代理方法
  226 +-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
  227 +{
  228 + if ([self.delegate respondsToSelector:@selector(cycleScrollView:didSelectItemAtIndex:)]) {
  229 + [self.delegate cycleScrollView:self didSelectItemAtIndex:[self currentIndex] % self.imgArr.count];
  230 + }
  231 +}
  232 +#pragma mark - notification
  233 +
  234 +#pragma mark - private
  235 +- (void)setupTimer
  236 +{
  237 + [self invalidateTimer]; // 创建定时器前先停止定时器,不然会出现僵尸定时器,导致轮播频率错误
  238 + NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:self.autoScrollTimeInterval target:self selector:@selector(automaticScroll) userInfo:nil repeats:YES];
  239 + [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
  240 + _timer = timer;
  241 +
  242 +}
  243 +- (void)invalidateTimer
  244 +{
  245 + [_timer invalidate];
  246 + _timer = nil;
  247 +}
  248 +-(void)automaticScroll
  249 +{
  250 + if(_totalItems == 0) return;
  251 +
  252 + NSInteger currentIndex = [self currentIndex];
  253 +
  254 + NSInteger targetIndex = currentIndex + 1;
  255 +
  256 + [self scrollToIndex:targetIndex];
  257 +}
  258 +-(NSInteger)currentIndex
  259 +{
  260 + if(self.collectionView.frame.size.width == 0 || self.collectionView.frame.size.height == 0)
  261 + return 0;
  262 + NSInteger index = 0;
  263 +
  264 + if (_flowLayout.scrollDirection == UICollectionViewScrollDirectionHorizontal) {//水平滑动
  265 + index = (self.collectionView.contentOffset.x + (self.itemWidth + self.itemSpace) * 0.5) / (self.itemSpace + self.itemWidth);
  266 + }else{
  267 + index = (self.collectionView.contentOffset.y + _flowLayout.itemSize.height * 0.5)/ _flowLayout.itemSize.height;
  268 + }
  269 + return MAX(0,index);
  270 +
  271 +}
  272 +-(void)scrollToIndex:(NSInteger)index
  273 +{
  274 + if(index >= _totalItems) //滑到最后则调到中间
  275 + {
  276 + if(self.infiniteLoop)
  277 + {
  278 + index = _totalItems * 0.5;
  279 + [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO];
  280 + }
  281 + return;
  282 + }
  283 + [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
  284 +
  285 +
  286 +}
  287 +#pragma mark - public
  288 +#pragma mark - public
  289 +/**设置分页滑动属性(如果infiniteLoop属性为yes,则设置无效)*/
  290 +-(void)setCollectionViewPagingEnabled:(BOOL)pagingEnabled
  291 +{
  292 +
  293 + if(self.infiniteLoop == NO)
  294 + {
  295 + self.collectionView.pagingEnabled = pagingEnabled;
  296 + }
  297 +}
  298 +#pragma mark - setter or getter
  299 +- (void)setPlaceholderImage:(UIImage *)placeholderImage
  300 +{
  301 + _placeholderImage = placeholderImage;
  302 +
  303 + if (!self.backgroundImageView) {
  304 + UIImageView *bgImageView = [UIImageView new];
  305 + bgImageView.frame = self.collectionView.frame;
  306 + bgImageView.contentMode = UIViewContentModeScaleToFill;
  307 + [self addSubview:bgImageView];
  308 + [self insertSubview:bgImageView belowSubview:self.collectionView];
  309 + self.backgroundImageView = bgImageView;
  310 + }
  311 +
  312 + self.backgroundImageView.image = placeholderImage;
  313 +
  314 +}
  315 +-(void)setItemWidth:(CGFloat)itemWidth
  316 +{
  317 + _itemWidth = itemWidth;
  318 + self.flowLayout.itemSize = CGSizeMake(itemWidth, self.bounds.size.height);
  319 +}
  320 +-(void)setItemSpace:(CGFloat)itemSpace
  321 +{
  322 + _itemSpace = itemSpace;
  323 + self.flowLayout.minimumLineSpacing = itemSpace;
  324 +}
  325 +-(void)setIsZoom:(BOOL)isZoom
  326 +{
  327 + _isZoom = isZoom;
  328 + self.flowLayout.isZoom = isZoom;
  329 +}
  330 +-(void)setImgArr:(NSArray *)imgArr
  331 +{
  332 + _imgArr = imgArr;
  333 + self.pageControl.numberOfPages = imgArr.count;
  334 + //如果循环则100倍,
  335 + _totalItems = self.infiniteLoop?imgArr.count * 100:imgArr.count;
  336 + if(_imgArr.count > 1)
  337 + {
  338 + self.collectionView.scrollEnabled = YES;
  339 + [self setAutoScroll:self.autoScroll];
  340 + }else
  341 + {
  342 + //不循环
  343 + self.collectionView.scrollEnabled = NO;
  344 + [self invalidateTimer];
  345 + }
  346 +
  347 + [self.collectionView reloadData];
  348 +
  349 +}
  350 +-(void)setAutoScroll:(BOOL)autoScroll
  351 +{
  352 + if(self.imgArr.count > 1)
  353 + {
  354 + _autoScroll = autoScroll;
  355 + //创建之前,停止定时器
  356 + [self invalidateTimer];
  357 +
  358 + if (_autoScroll) {
  359 + [self setupTimer];
  360 + }
  361 + }else
  362 + {
  363 + _autoScroll = NO;
  364 + }
  365 +
  366 +}
  367 +-(UICollectionView *)collectionView
  368 +{
  369 + if(_collectionView == nil)
  370 + {
  371 + _collectionView = [[UICollectionView alloc]initWithFrame:self.bounds collectionViewLayout:self.flowLayout];
  372 + _collectionView.delegate = self;
  373 + _collectionView.dataSource = self;
  374 + _collectionView.scrollsToTop = NO;
  375 + _collectionView.showsVerticalScrollIndicator = NO;
  376 + _collectionView.showsHorizontalScrollIndicator = NO;
  377 + _collectionView.backgroundColor = [UIColor clearColor];
  378 +
  379 + //注册cell
  380 + [_collectionView registerClass:[CNCycleScrollViewCell class] forCellWithReuseIdentifier:cellID];
  381 +
  382 + }
  383 + return _collectionView;
  384 +}
  385 +-(UIPageControl *)pageControl
  386 +{
  387 + if(_pageControl == nil)
  388 + {
  389 + _pageControl = [[UIPageControl alloc]init];
  390 + _pageControl.currentPageIndicatorTintColor = RGB(0, 194, 0);
  391 + _pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
  392 + }
  393 + return _pageControl;
  394 +}
  395 +-(CNCycleScrollViewFlowLayout *)flowLayout
  396 +{
  397 + if(_flowLayout == nil)
  398 + {
  399 + _flowLayout = [[CNCycleScrollViewFlowLayout alloc]init];
  400 + _flowLayout.isZoom = self.isZoom;
  401 + _flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
  402 + _flowLayout.minimumLineSpacing = 0;
  403 +
  404 + }
  405 + return _flowLayout;
  406 +}
  407 +
  408 +@end
CNLiveCycleScrollView/Classes/CNCycleScrollViewCell.h 0 → 100644
  1 +//
  2 +// CNCycleScrollViewCell.h
  3 +// CNLiveNetAdd
  4 +//
  5 +// Created by 殷巧娟 on 2018/10/31.
  6 +// Copyright © 2018年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import <UIKit/UIKit.h>
  10 +
  11 +NS_ASSUME_NONNULL_BEGIN
  12 +
  13 +@interface CNCycleScrollViewCell : UICollectionViewCell
  14 +@property (nonatomic,strong) UIImageView *imageViewShow;
  15 +@property (nonatomic,assign) CGFloat imgCornerRadius;
  16 +
  17 +@end
  18 +
  19 +NS_ASSUME_NONNULL_END
CNLiveCycleScrollView/Classes/CNCycleScrollViewCell.m 0 → 100644
  1 +//
  2 +// CNCycleScrollViewCell.m
  3 +// CNLiveNetAdd
  4 +//
  5 +// Created by 殷巧娟 on 2018/10/31.
  6 +// Copyright © 2018年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import "CNCycleScrollViewCell.h"
  10 +#import <AVFoundation/AVFoundation.h>
  11 +@implementation CNCycleScrollViewCell
  12 +-(instancetype)initWithFrame:(CGRect)frame
  13 +{
  14 + if(self = [super initWithFrame:frame])
  15 + {
  16 + [self.contentView addSubview:self.imageViewShow];
  17 + }
  18 + return self;
  19 +}
  20 +-(void)layoutSubviews
  21 +{
  22 + [super layoutSubviews];
  23 + self.imageViewShow.frame = self.bounds;
  24 +
  25 + UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.imageViewShow.bounds cornerRadius:self.imgCornerRadius];
  26 + CAShapeLayer *maskLayer = [[CAShapeLayer alloc]init];
  27 + //设置大小
  28 + maskLayer.frame = self.bounds;
  29 + //设置图形样子
  30 + maskLayer.path = maskPath.CGPath;
  31 + _imageViewShow.layer.mask = maskLayer;
  32 +}
  33 +
  34 +-(UIImageView *)imageViewShow
  35 +{
  36 + if(_imageViewShow == nil)
  37 + {
  38 + _imageViewShow= [[UIImageView alloc]init];
  39 + }
  40 + return _imageViewShow;
  41 +}
  42 +@end
CNLiveCycleScrollView/Classes/CNCycleScrollViewFlowLayout.h 0 → 100644
  1 +//
  2 +// CNCycleScrollViewFlowLayout.h
  3 +// CNLiveNetAdd
  4 +//
  5 +// Created by 殷巧娟 on 2018/10/31.
  6 +// Copyright © 2018年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import <UIKit/UIKit.h>
  10 +
  11 +NS_ASSUME_NONNULL_BEGIN
  12 +
  13 +@interface CNCycleScrollViewFlowLayout : UICollectionViewFlowLayout
  14 +@property (nonatomic,assign) BOOL isZoom;
  15 +@end
  16 +
  17 +NS_ASSUME_NONNULL_END
CNLiveCycleScrollView/Classes/CNCycleScrollViewFlowLayout.m 0 → 100644
  1 +//
  2 +// CNCycleScrollViewFlowLayout.m
  3 +// CNLiveNetAdd
  4 +//
  5 +// Created by 殷巧娟 on 2018/10/31.
  6 +// Copyright © 2018年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import "CNCycleScrollViewFlowLayout.h"
  10 +
  11 +@implementation CNCycleScrollViewFlowLayout
  12 +//重写方法
  13 +// 这个方法返回所有的布局所需对象,瀑布流也可以重写这个方法实现.
  14 +//1.返回rect中的所有的元素的布局属性
  15 +//2.返回的是包含UICollectionViewLayoutAttributes的NSArray
  16 +//3.UICollectionViewLayoutAttributes可以是cell,追加视图或装饰视图的信息,通过不同的UICollectionViewLayoutAttributes初始化方法可以得到不同类型的UICollectionViewLayoutAttributes:
  17 +//1)layoutAttributesForCellWithIndexPath:
  18 +//2)layoutAttributesForSupplementaryViewOfKind:withIndexPath:
  19 +//3)layoutAttributesForDecorationViewOfKind:withIndexPath:
  20 +
  21 +- (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect {
  22 + // 1.获取cell对应的attributes对象
  23 + NSArray* arrayAttrs = [[NSArray alloc] initWithArray:[super layoutAttributesForElementsInRect:rect] copyItems:YES];
  24 + // NSArray *arrayAttrs = [super layoutAttributesForElementsInRect:rect];
  25 +
  26 + if(!self.isZoom) return arrayAttrs;
  27 +
  28 +
  29 + // 2.计算整体的中心点的x值
  30 + CGFloat centerX = self.collectionView.contentOffset.x + self.collectionView.bounds.size.width * 0.5;
  31 +
  32 + // 3.修改一下attributes对象
  33 + for (UICollectionViewLayoutAttributes *attr in arrayAttrs) {
  34 + // 3.1 计算每个cell的中心点距离
  35 + CGFloat distance = ABS(attr.center.x - centerX);
  36 +
  37 + // 3.2 距离越大,缩放比越小,距离越小,缩放比越大
  38 + CGFloat factor = 0.001;
  39 + CGFloat scale = 1 / (1 + distance * factor);
  40 + attr.transform = CGAffineTransformMakeScale(scale, scale);
  41 + }
  42 + return arrayAttrs;
  43 +}
  44 +
  45 +/*!
  46 + * 多次调用 只要滑出范围就会 调用
  47 + * 当CollectionView的显示范围发生改变的时候,是否重新发生布局
  48 + * 一旦重新刷新 布局,就会重新调用
  49 + * 1.layoutAttributesForElementsInRect:方法
  50 + * 2.preparelayout方法
  51 + */
  52 +
  53 +- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds {
  54 + return true;
  55 +}
  56 +
  57 +@end
Example/CNLiveCycleScrollView.xcodeproj/project.pbxproj 0 → 100644
  1 +// !$*UTF8*$!
  2 +{
  3 + archiveVersion = 1;
  4 + classes = {
  5 + };
  6 + objectVersion = 46;
  7 + objects = {
  8 +
  9 +/* Begin PBXBuildFile section */
  10 + 1B931364F61A01CD2143A321 /* Pods_CNLiveCycleScrollView_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D843C224630DEF1307D33EAF /* Pods_CNLiveCycleScrollView_Tests.framework */; };
  11 + 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; };
  12 + 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58F195388D20070C39A /* CoreGraphics.framework */; };
  13 + 6003F592195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; };
  14 + 6003F598195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F596195388D20070C39A /* InfoPlist.strings */; };
  15 + 6003F59A195388D20070C39A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F599195388D20070C39A /* main.m */; };
  16 + 6003F59E195388D20070C39A /* CNLiveAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F59D195388D20070C39A /* CNLiveAppDelegate.m */; };
  17 + 6003F5A7195388D20070C39A /* CNLiveViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5A6195388D20070C39A /* CNLiveViewController.m */; };
  18 + 6003F5A9195388D20070C39A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5A8195388D20070C39A /* Images.xcassets */; };
  19 + 6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F5AF195388D20070C39A /* XCTest.framework */; };
  20 + 6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; };
  21 + 6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; };
  22 + 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5B8195388D20070C39A /* InfoPlist.strings */; };
  23 + 6003F5BC195388D20070C39A /* Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5BB195388D20070C39A /* Tests.m */; };
  24 + 71719F9F1E33DC2100824A3D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */; };
  25 + 873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */; };
  26 + B69B5AF128EF6F033D9AAA37 /* Pods_CNLiveCycleScrollView_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E783EE32A5CD66279A4ADFC /* Pods_CNLiveCycleScrollView_Example.framework */; };
  27 +/* End PBXBuildFile section */
  28 +
  29 +/* Begin PBXContainerItemProxy section */
  30 + 6003F5B3195388D20070C39A /* PBXContainerItemProxy */ = {
  31 + isa = PBXContainerItemProxy;
  32 + containerPortal = 6003F582195388D10070C39A /* Project object */;
  33 + proxyType = 1;
  34 + remoteGlobalIDString = 6003F589195388D20070C39A;
  35 + remoteInfo = CNLiveCycleScrollView;
  36 + };
  37 +/* End PBXContainerItemProxy section */
  38 +
  39 +/* Begin PBXFileReference section */
  40 + 3F301D86C12DBA4F2A5633CB /* Pods-CNLiveCycleScrollView_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CNLiveCycleScrollView_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-CNLiveCycleScrollView_Example/Pods-CNLiveCycleScrollView_Example.release.xcconfig"; sourceTree = "<group>"; };
  41 + 6003F58A195388D20070C39A /* CNLiveCycleScrollView_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CNLiveCycleScrollView_Example.app; sourceTree = BUILT_PRODUCTS_DIR; };
  42 + 6003F58D195388D20070C39A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
  43 + 6003F58F195388D20070C39A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
  44 + 6003F591195388D20070C39A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
  45 + 6003F595195388D20070C39A /* CNLiveCycleScrollView-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CNLiveCycleScrollView-Info.plist"; sourceTree = "<group>"; };
  46 + 6003F597195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
  47 + 6003F599195388D20070C39A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
  48 + 6003F59B195388D20070C39A /* CNLiveCycleScrollView-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CNLiveCycleScrollView-Prefix.pch"; sourceTree = "<group>"; };
  49 + 6003F59C195388D20070C39A /* CNLiveAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CNLiveAppDelegate.h; sourceTree = "<group>"; };
  50 + 6003F59D195388D20070C39A /* CNLiveAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CNLiveAppDelegate.m; sourceTree = "<group>"; };
  51 + 6003F5A5195388D20070C39A /* CNLiveViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CNLiveViewController.h; sourceTree = "<group>"; };
  52 + 6003F5A6195388D20070C39A /* CNLiveViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CNLiveViewController.m; sourceTree = "<group>"; };
  53 + 6003F5A8195388D20070C39A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
  54 + 6003F5AE195388D20070C39A /* CNLiveCycleScrollView_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CNLiveCycleScrollView_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
  55 + 6003F5AF195388D20070C39A /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
  56 + 6003F5B7195388D20070C39A /* Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Tests-Info.plist"; sourceTree = "<group>"; };
  57 + 6003F5B9195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
  58 + 6003F5BB195388D20070C39A /* Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Tests.m; sourceTree = "<group>"; };
  59 + 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tests-Prefix.pch"; sourceTree = "<group>"; };
  60 + 71719F9E1E33DC2100824A3D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
  61 + 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = Main.storyboard; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
  62 + 9DB6A9C9C4259AC26A96898D /* CNLiveCycleScrollView.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = CNLiveCycleScrollView.podspec; path = ../CNLiveCycleScrollView.podspec; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
  63 + 9E783EE32A5CD66279A4ADFC /* Pods_CNLiveCycleScrollView_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CNLiveCycleScrollView_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
  64 + B3A949DE7EBA6EB3CD5C3B06 /* Pods-CNLiveCycleScrollView_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CNLiveCycleScrollView_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-CNLiveCycleScrollView_Example/Pods-CNLiveCycleScrollView_Example.debug.xcconfig"; sourceTree = "<group>"; };
  65 + C9E67608D17D6199D40F4F80 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = "<group>"; };
  66 + D07B6B421CF925906CA04FF4 /* Pods-CNLiveCycleScrollView_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CNLiveCycleScrollView_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-CNLiveCycleScrollView_Tests/Pods-CNLiveCycleScrollView_Tests.debug.xcconfig"; sourceTree = "<group>"; };
  67 + D843C224630DEF1307D33EAF /* Pods_CNLiveCycleScrollView_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CNLiveCycleScrollView_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
  68 + E3089C97CD8F5F817EEC73C9 /* Pods-CNLiveCycleScrollView_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CNLiveCycleScrollView_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-CNLiveCycleScrollView_Tests/Pods-CNLiveCycleScrollView_Tests.release.xcconfig"; sourceTree = "<group>"; };
  69 + FCB76F799C47FF5EA1C9773E /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = "<group>"; };
  70 +/* End PBXFileReference section */
  71 +
  72 +/* Begin PBXFrameworksBuildPhase section */
  73 + 6003F587195388D20070C39A /* Frameworks */ = {
  74 + isa = PBXFrameworksBuildPhase;
  75 + buildActionMask = 2147483647;
  76 + files = (
  77 + 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */,
  78 + 6003F592195388D20070C39A /* UIKit.framework in Frameworks */,
  79 + 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */,
  80 + B69B5AF128EF6F033D9AAA37 /* Pods_CNLiveCycleScrollView_Example.framework in Frameworks */,
  81 + );
  82 + runOnlyForDeploymentPostprocessing = 0;
  83 + };
  84 + 6003F5AB195388D20070C39A /* Frameworks */ = {
  85 + isa = PBXFrameworksBuildPhase;
  86 + buildActionMask = 2147483647;
  87 + files = (
  88 + 6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */,
  89 + 6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */,
  90 + 6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */,
  91 + 1B931364F61A01CD2143A321 /* Pods_CNLiveCycleScrollView_Tests.framework in Frameworks */,
  92 + );
  93 + runOnlyForDeploymentPostprocessing = 0;
  94 + };
  95 +/* End PBXFrameworksBuildPhase section */
  96 +
  97 +/* Begin PBXGroup section */
  98 + 6003F581195388D10070C39A = {
  99 + isa = PBXGroup;
  100 + children = (
  101 + 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */,
  102 + 6003F593195388D20070C39A /* Example for CNLiveCycleScrollView */,
  103 + 6003F5B5195388D20070C39A /* Tests */,
  104 + 6003F58C195388D20070C39A /* Frameworks */,
  105 + 6003F58B195388D20070C39A /* Products */,
  106 + 97379037CD92B3C0111DD998 /* Pods */,
  107 + );
  108 + sourceTree = "<group>";
  109 + };
  110 + 6003F58B195388D20070C39A /* Products */ = {
  111 + isa = PBXGroup;
  112 + children = (
  113 + 6003F58A195388D20070C39A /* CNLiveCycleScrollView_Example.app */,
  114 + 6003F5AE195388D20070C39A /* CNLiveCycleScrollView_Tests.xctest */,
  115 + );
  116 + name = Products;
  117 + sourceTree = "<group>";
  118 + };
  119 + 6003F58C195388D20070C39A /* Frameworks */ = {
  120 + isa = PBXGroup;
  121 + children = (
  122 + 6003F58D195388D20070C39A /* Foundation.framework */,
  123 + 6003F58F195388D20070C39A /* CoreGraphics.framework */,
  124 + 6003F591195388D20070C39A /* UIKit.framework */,
  125 + 6003F5AF195388D20070C39A /* XCTest.framework */,
  126 + 9E783EE32A5CD66279A4ADFC /* Pods_CNLiveCycleScrollView_Example.framework */,
  127 + D843C224630DEF1307D33EAF /* Pods_CNLiveCycleScrollView_Tests.framework */,
  128 + );
  129 + name = Frameworks;
  130 + sourceTree = "<group>";
  131 + };
  132 + 6003F593195388D20070C39A /* Example for CNLiveCycleScrollView */ = {
  133 + isa = PBXGroup;
  134 + children = (
  135 + 6003F59C195388D20070C39A /* CNLiveAppDelegate.h */,
  136 + 6003F59D195388D20070C39A /* CNLiveAppDelegate.m */,
  137 + 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */,
  138 + 6003F5A5195388D20070C39A /* CNLiveViewController.h */,
  139 + 6003F5A6195388D20070C39A /* CNLiveViewController.m */,
  140 + 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */,
  141 + 6003F5A8195388D20070C39A /* Images.xcassets */,
  142 + 6003F594195388D20070C39A /* Supporting Files */,
  143 + );
  144 + name = "Example for CNLiveCycleScrollView";
  145 + path = CNLiveCycleScrollView;
  146 + sourceTree = "<group>";
  147 + };
  148 + 6003F594195388D20070C39A /* Supporting Files */ = {
  149 + isa = PBXGroup;
  150 + children = (
  151 + 6003F595195388D20070C39A /* CNLiveCycleScrollView-Info.plist */,
  152 + 6003F596195388D20070C39A /* InfoPlist.strings */,
  153 + 6003F599195388D20070C39A /* main.m */,
  154 + 6003F59B195388D20070C39A /* CNLiveCycleScrollView-Prefix.pch */,
  155 + );
  156 + name = "Supporting Files";
  157 + sourceTree = "<group>";
  158 + };
  159 + 6003F5B5195388D20070C39A /* Tests */ = {
  160 + isa = PBXGroup;
  161 + children = (
  162 + 6003F5BB195388D20070C39A /* Tests.m */,
  163 + 6003F5B6195388D20070C39A /* Supporting Files */,
  164 + );
  165 + path = Tests;
  166 + sourceTree = "<group>";
  167 + };
  168 + 6003F5B6195388D20070C39A /* Supporting Files */ = {
  169 + isa = PBXGroup;
  170 + children = (
  171 + 6003F5B7195388D20070C39A /* Tests-Info.plist */,
  172 + 6003F5B8195388D20070C39A /* InfoPlist.strings */,
  173 + 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */,
  174 + );
  175 + name = "Supporting Files";
  176 + sourceTree = "<group>";
  177 + };
  178 + 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */ = {
  179 + isa = PBXGroup;
  180 + children = (
  181 + 9DB6A9C9C4259AC26A96898D /* CNLiveCycleScrollView.podspec */,
  182 + C9E67608D17D6199D40F4F80 /* README.md */,
  183 + FCB76F799C47FF5EA1C9773E /* LICENSE */,
  184 + );
  185 + name = "Podspec Metadata";
  186 + sourceTree = "<group>";
  187 + };
  188 + 97379037CD92B3C0111DD998 /* Pods */ = {
  189 + isa = PBXGroup;
  190 + children = (
  191 + B3A949DE7EBA6EB3CD5C3B06 /* Pods-CNLiveCycleScrollView_Example.debug.xcconfig */,
  192 + 3F301D86C12DBA4F2A5633CB /* Pods-CNLiveCycleScrollView_Example.release.xcconfig */,
  193 + D07B6B421CF925906CA04FF4 /* Pods-CNLiveCycleScrollView_Tests.debug.xcconfig */,
  194 + E3089C97CD8F5F817EEC73C9 /* Pods-CNLiveCycleScrollView_Tests.release.xcconfig */,
  195 + );
  196 + name = Pods;
  197 + sourceTree = "<group>";
  198 + };
  199 +/* End PBXGroup section */
  200 +
  201 +/* Begin PBXNativeTarget section */
  202 + 6003F589195388D20070C39A /* CNLiveCycleScrollView_Example */ = {
  203 + isa = PBXNativeTarget;
  204 + buildConfigurationList = 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "CNLiveCycleScrollView_Example" */;
  205 + buildPhases = (
  206 + EB265EFDFC67F11A3966B5B0 /* [CP] Check Pods Manifest.lock */,
  207 + 6003F586195388D20070C39A /* Sources */,
  208 + 6003F587195388D20070C39A /* Frameworks */,
  209 + 6003F588195388D20070C39A /* Resources */,
  210 + 31C903597A8C327826265FB9 /* [CP] Embed Pods Frameworks */,
  211 + );
  212 + buildRules = (
  213 + );
  214 + dependencies = (
  215 + );
  216 + name = CNLiveCycleScrollView_Example;
  217 + productName = CNLiveCycleScrollView;
  218 + productReference = 6003F58A195388D20070C39A /* CNLiveCycleScrollView_Example.app */;
  219 + productType = "com.apple.product-type.application";
  220 + };
  221 + 6003F5AD195388D20070C39A /* CNLiveCycleScrollView_Tests */ = {
  222 + isa = PBXNativeTarget;
  223 + buildConfigurationList = 6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget "CNLiveCycleScrollView_Tests" */;
  224 + buildPhases = (
  225 + D8C21DFB1C8203441C4E2C72 /* [CP] Check Pods Manifest.lock */,
  226 + 6003F5AA195388D20070C39A /* Sources */,
  227 + 6003F5AB195388D20070C39A /* Frameworks */,
  228 + 6003F5AC195388D20070C39A /* Resources */,
  229 + B8AB8D1A7B44A0FA5C919FCA /* [CP] Embed Pods Frameworks */,
  230 + );
  231 + buildRules = (
  232 + );
  233 + dependencies = (
  234 + 6003F5B4195388D20070C39A /* PBXTargetDependency */,
  235 + );
  236 + name = CNLiveCycleScrollView_Tests;
  237 + productName = CNLiveCycleScrollViewTests;
  238 + productReference = 6003F5AE195388D20070C39A /* CNLiveCycleScrollView_Tests.xctest */;
  239 + productType = "com.apple.product-type.bundle.unit-test";
  240 + };
  241 +/* End PBXNativeTarget section */
  242 +
  243 +/* Begin PBXProject section */
  244 + 6003F582195388D10070C39A /* Project object */ = {
  245 + isa = PBXProject;
  246 + attributes = {
  247 + CLASSPREFIX = CNLive;
  248 + LastUpgradeCheck = 0720;
  249 + ORGANIZATIONNAME = "殷巧娟";
  250 + TargetAttributes = {
  251 + 6003F589195388D20070C39A = {
  252 + DevelopmentTeam = 94X49GG3ZW;
  253 + };
  254 + 6003F5AD195388D20070C39A = {
  255 + TestTargetID = 6003F589195388D20070C39A;
  256 + };
  257 + };
  258 + };
  259 + buildConfigurationList = 6003F585195388D10070C39A /* Build configuration list for PBXProject "CNLiveCycleScrollView" */;
  260 + compatibilityVersion = "Xcode 3.2";
  261 + developmentRegion = English;
  262 + hasScannedForEncodings = 0;
  263 + knownRegions = (
  264 + en,
  265 + Base,
  266 + );
  267 + mainGroup = 6003F581195388D10070C39A;
  268 + productRefGroup = 6003F58B195388D20070C39A /* Products */;
  269 + projectDirPath = "";
  270 + projectRoot = "";
  271 + targets = (
  272 + 6003F589195388D20070C39A /* CNLiveCycleScrollView_Example */,
  273 + 6003F5AD195388D20070C39A /* CNLiveCycleScrollView_Tests */,
  274 + );
  275 + };
  276 +/* End PBXProject section */
  277 +
  278 +/* Begin PBXResourcesBuildPhase section */
  279 + 6003F588195388D20070C39A /* Resources */ = {
  280 + isa = PBXResourcesBuildPhase;
  281 + buildActionMask = 2147483647;
  282 + files = (
  283 + 873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */,
  284 + 71719F9F1E33DC2100824A3D /* LaunchScreen.storyboard in Resources */,
  285 + 6003F5A9195388D20070C39A /* Images.xcassets in Resources */,
  286 + 6003F598195388D20070C39A /* InfoPlist.strings in Resources */,
  287 + );
  288 + runOnlyForDeploymentPostprocessing = 0;
  289 + };
  290 + 6003F5AC195388D20070C39A /* Resources */ = {
  291 + isa = PBXResourcesBuildPhase;
  292 + buildActionMask = 2147483647;
  293 + files = (
  294 + 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */,
  295 + );
  296 + runOnlyForDeploymentPostprocessing = 0;
  297 + };
  298 +/* End PBXResourcesBuildPhase section */
  299 +
  300 +/* Begin PBXShellScriptBuildPhase section */
  301 + 31C903597A8C327826265FB9 /* [CP] Embed Pods Frameworks */ = {
  302 + isa = PBXShellScriptBuildPhase;
  303 + buildActionMask = 2147483647;
  304 + files = (
  305 + );
  306 + inputFileListPaths = (
  307 + );
  308 + inputPaths = (
  309 + "${SRCROOT}/Pods/Target Support Files/Pods-CNLiveCycleScrollView_Example/Pods-CNLiveCycleScrollView_Example-frameworks.sh",
  310 + "${BUILT_PRODUCTS_DIR}/CNLiveCycleScrollView/CNLiveCycleScrollView.framework",
  311 + "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
  312 + );
  313 + name = "[CP] Embed Pods Frameworks";
  314 + outputFileListPaths = (
  315 + );
  316 + outputPaths = (
  317 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCycleScrollView.framework",
  318 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
  319 + );
  320 + runOnlyForDeploymentPostprocessing = 0;
  321 + shellPath = /bin/sh;
  322 + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CNLiveCycleScrollView_Example/Pods-CNLiveCycleScrollView_Example-frameworks.sh\"\n";
  323 + showEnvVarsInLog = 0;
  324 + };
  325 + B8AB8D1A7B44A0FA5C919FCA /* [CP] Embed Pods Frameworks */ = {
  326 + isa = PBXShellScriptBuildPhase;
  327 + buildActionMask = 2147483647;
  328 + files = (
  329 + );
  330 + inputFileListPaths = (
  331 + );
  332 + inputPaths = (
  333 + "${SRCROOT}/Pods/Target Support Files/Pods-CNLiveCycleScrollView_Tests/Pods-CNLiveCycleScrollView_Tests-frameworks.sh",
  334 + "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
  335 + );
  336 + name = "[CP] Embed Pods Frameworks";
  337 + outputFileListPaths = (
  338 + );
  339 + outputPaths = (
  340 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
  341 + );
  342 + runOnlyForDeploymentPostprocessing = 0;
  343 + shellPath = /bin/sh;
  344 + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CNLiveCycleScrollView_Tests/Pods-CNLiveCycleScrollView_Tests-frameworks.sh\"\n";
  345 + showEnvVarsInLog = 0;
  346 + };
  347 + D8C21DFB1C8203441C4E2C72 /* [CP] Check Pods Manifest.lock */ = {
  348 + isa = PBXShellScriptBuildPhase;
  349 + buildActionMask = 2147483647;
  350 + files = (
  351 + );
  352 + inputFileListPaths = (
  353 + );
  354 + inputPaths = (
  355 + "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
  356 + "${PODS_ROOT}/Manifest.lock",
  357 + );
  358 + name = "[CP] Check Pods Manifest.lock";
  359 + outputFileListPaths = (
  360 + );
  361 + outputPaths = (
  362 + "$(DERIVED_FILE_DIR)/Pods-CNLiveCycleScrollView_Tests-checkManifestLockResult.txt",
  363 + );
  364 + runOnlyForDeploymentPostprocessing = 0;
  365 + shellPath = /bin/sh;
  366 + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
  367 + showEnvVarsInLog = 0;
  368 + };
  369 + EB265EFDFC67F11A3966B5B0 /* [CP] Check Pods Manifest.lock */ = {
  370 + isa = PBXShellScriptBuildPhase;
  371 + buildActionMask = 2147483647;
  372 + files = (
  373 + );
  374 + inputFileListPaths = (
  375 + );
  376 + inputPaths = (
  377 + "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
  378 + "${PODS_ROOT}/Manifest.lock",
  379 + );
  380 + name = "[CP] Check Pods Manifest.lock";
  381 + outputFileListPaths = (
  382 + );
  383 + outputPaths = (
  384 + "$(DERIVED_FILE_DIR)/Pods-CNLiveCycleScrollView_Example-checkManifestLockResult.txt",
  385 + );
  386 + runOnlyForDeploymentPostprocessing = 0;
  387 + shellPath = /bin/sh;
  388 + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
  389 + showEnvVarsInLog = 0;
  390 + };
  391 +/* End PBXShellScriptBuildPhase section */
  392 +
  393 +/* Begin PBXSourcesBuildPhase section */
  394 + 6003F586195388D20070C39A /* Sources */ = {
  395 + isa = PBXSourcesBuildPhase;
  396 + buildActionMask = 2147483647;
  397 + files = (
  398 + 6003F59E195388D20070C39A /* CNLiveAppDelegate.m in Sources */,
  399 + 6003F5A7195388D20070C39A /* CNLiveViewController.m in Sources */,
  400 + 6003F59A195388D20070C39A /* main.m in Sources */,
  401 + );
  402 + runOnlyForDeploymentPostprocessing = 0;
  403 + };
  404 + 6003F5AA195388D20070C39A /* Sources */ = {
  405 + isa = PBXSourcesBuildPhase;
  406 + buildActionMask = 2147483647;
  407 + files = (
  408 + 6003F5BC195388D20070C39A /* Tests.m in Sources */,
  409 + );
  410 + runOnlyForDeploymentPostprocessing = 0;
  411 + };
  412 +/* End PBXSourcesBuildPhase section */
  413 +
  414 +/* Begin PBXTargetDependency section */
  415 + 6003F5B4195388D20070C39A /* PBXTargetDependency */ = {
  416 + isa = PBXTargetDependency;
  417 + target = 6003F589195388D20070C39A /* CNLiveCycleScrollView_Example */;
  418 + targetProxy = 6003F5B3195388D20070C39A /* PBXContainerItemProxy */;
  419 + };
  420 +/* End PBXTargetDependency section */
  421 +
  422 +/* Begin PBXVariantGroup section */
  423 + 6003F596195388D20070C39A /* InfoPlist.strings */ = {
  424 + isa = PBXVariantGroup;
  425 + children = (
  426 + 6003F597195388D20070C39A /* en */,
  427 + );
  428 + name = InfoPlist.strings;
  429 + sourceTree = "<group>";
  430 + };
  431 + 6003F5B8195388D20070C39A /* InfoPlist.strings */ = {
  432 + isa = PBXVariantGroup;
  433 + children = (
  434 + 6003F5B9195388D20070C39A /* en */,
  435 + );
  436 + name = InfoPlist.strings;
  437 + sourceTree = "<group>";
  438 + };
  439 + 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */ = {
  440 + isa = PBXVariantGroup;
  441 + children = (
  442 + 71719F9E1E33DC2100824A3D /* Base */,
  443 + );
  444 + name = LaunchScreen.storyboard;
  445 + sourceTree = "<group>";
  446 + };
  447 +/* End PBXVariantGroup section */
  448 +
  449 +/* Begin XCBuildConfiguration section */
  450 + 6003F5BD195388D20070C39A /* Debug */ = {
  451 + isa = XCBuildConfiguration;
  452 + buildSettings = {
  453 + ALWAYS_SEARCH_USER_PATHS = NO;
  454 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  455 + CLANG_CXX_LIBRARY = "libc++";
  456 + CLANG_ENABLE_MODULES = YES;
  457 + CLANG_ENABLE_OBJC_ARC = YES;
  458 + CLANG_WARN_BOOL_CONVERSION = YES;
  459 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  460 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  461 + CLANG_WARN_EMPTY_BODY = YES;
  462 + CLANG_WARN_ENUM_CONVERSION = YES;
  463 + CLANG_WARN_INT_CONVERSION = YES;
  464 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  465 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  466 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  467 + COPY_PHASE_STRIP = NO;
  468 + ENABLE_TESTABILITY = YES;
  469 + GCC_C_LANGUAGE_STANDARD = gnu99;
  470 + GCC_DYNAMIC_NO_PIC = NO;
  471 + GCC_OPTIMIZATION_LEVEL = 0;
  472 + GCC_PREPROCESSOR_DEFINITIONS = (
  473 + "DEBUG=1",
  474 + "$(inherited)",
  475 + );
  476 + GCC_SYMBOLS_PRIVATE_EXTERN = NO;
  477 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  478 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  479 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  480 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  481 + GCC_WARN_UNUSED_FUNCTION = YES;
  482 + GCC_WARN_UNUSED_VARIABLE = YES;
  483 + IPHONEOS_DEPLOYMENT_TARGET = 9.3;
  484 + ONLY_ACTIVE_ARCH = YES;
  485 + SDKROOT = iphoneos;
  486 + TARGETED_DEVICE_FAMILY = "1,2";
  487 + };
  488 + name = Debug;
  489 + };
  490 + 6003F5BE195388D20070C39A /* Release */ = {
  491 + isa = XCBuildConfiguration;
  492 + buildSettings = {
  493 + ALWAYS_SEARCH_USER_PATHS = NO;
  494 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  495 + CLANG_CXX_LIBRARY = "libc++";
  496 + CLANG_ENABLE_MODULES = YES;
  497 + CLANG_ENABLE_OBJC_ARC = YES;
  498 + CLANG_WARN_BOOL_CONVERSION = YES;
  499 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  500 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  501 + CLANG_WARN_EMPTY_BODY = YES;
  502 + CLANG_WARN_ENUM_CONVERSION = YES;
  503 + CLANG_WARN_INT_CONVERSION = YES;
  504 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  505 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  506 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  507 + COPY_PHASE_STRIP = YES;
  508 + ENABLE_NS_ASSERTIONS = NO;
  509 + GCC_C_LANGUAGE_STANDARD = gnu99;
  510 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  511 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  512 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  513 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  514 + GCC_WARN_UNUSED_FUNCTION = YES;
  515 + GCC_WARN_UNUSED_VARIABLE = YES;
  516 + IPHONEOS_DEPLOYMENT_TARGET = 9.3;
  517 + SDKROOT = iphoneos;
  518 + TARGETED_DEVICE_FAMILY = "1,2";
  519 + VALIDATE_PRODUCT = YES;
  520 + };
  521 + name = Release;
  522 + };
  523 + 6003F5C0195388D20070C39A /* Debug */ = {
  524 + isa = XCBuildConfiguration;
  525 + baseConfigurationReference = B3A949DE7EBA6EB3CD5C3B06 /* Pods-CNLiveCycleScrollView_Example.debug.xcconfig */;
  526 + buildSettings = {
  527 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  528 + DEVELOPMENT_TEAM = 94X49GG3ZW;
  529 + GCC_PRECOMPILE_PREFIX_HEADER = YES;
  530 + GCC_PREFIX_HEADER = "CNLiveCycleScrollView/CNLiveCycleScrollView-Prefix.pch";
  531 + INFOPLIST_FILE = "CNLiveCycleScrollView/CNLiveCycleScrollView-Info.plist";
  532 + MODULE_NAME = ExampleApp;
  533 + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}";
  534 + PRODUCT_NAME = "$(TARGET_NAME)";
  535 + WRAPPER_EXTENSION = app;
  536 + };
  537 + name = Debug;
  538 + };
  539 + 6003F5C1195388D20070C39A /* Release */ = {
  540 + isa = XCBuildConfiguration;
  541 + baseConfigurationReference = 3F301D86C12DBA4F2A5633CB /* Pods-CNLiveCycleScrollView_Example.release.xcconfig */;
  542 + buildSettings = {
  543 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  544 + DEVELOPMENT_TEAM = 94X49GG3ZW;
  545 + GCC_PRECOMPILE_PREFIX_HEADER = YES;
  546 + GCC_PREFIX_HEADER = "CNLiveCycleScrollView/CNLiveCycleScrollView-Prefix.pch";
  547 + INFOPLIST_FILE = "CNLiveCycleScrollView/CNLiveCycleScrollView-Info.plist";
  548 + MODULE_NAME = ExampleApp;
  549 + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}";
  550 + PRODUCT_NAME = "$(TARGET_NAME)";
  551 + WRAPPER_EXTENSION = app;
  552 + };
  553 + name = Release;
  554 + };
  555 + 6003F5C3195388D20070C39A /* Debug */ = {
  556 + isa = XCBuildConfiguration;
  557 + baseConfigurationReference = D07B6B421CF925906CA04FF4 /* Pods-CNLiveCycleScrollView_Tests.debug.xcconfig */;
  558 + buildSettings = {
  559 + BUNDLE_LOADER = "$(TEST_HOST)";
  560 + FRAMEWORK_SEARCH_PATHS = (
  561 + "$(SDKROOT)/Developer/Library/Frameworks",
  562 + "$(inherited)",
  563 + "$(DEVELOPER_FRAMEWORKS_DIR)",
  564 + );
  565 + GCC_PRECOMPILE_PREFIX_HEADER = YES;
  566 + GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch";
  567 + GCC_PREPROCESSOR_DEFINITIONS = (
  568 + "DEBUG=1",
  569 + "$(inherited)",
  570 + );
  571 + INFOPLIST_FILE = "Tests/Tests-Info.plist";
  572 + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}";
  573 + PRODUCT_NAME = "$(TARGET_NAME)";
  574 + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CNLiveCycleScrollView_Example.app/CNLiveCycleScrollView_Example";
  575 + WRAPPER_EXTENSION = xctest;
  576 + };
  577 + name = Debug;
  578 + };
  579 + 6003F5C4195388D20070C39A /* Release */ = {
  580 + isa = XCBuildConfiguration;
  581 + baseConfigurationReference = E3089C97CD8F5F817EEC73C9 /* Pods-CNLiveCycleScrollView_Tests.release.xcconfig */;
  582 + buildSettings = {
  583 + BUNDLE_LOADER = "$(TEST_HOST)";
  584 + FRAMEWORK_SEARCH_PATHS = (
  585 + "$(SDKROOT)/Developer/Library/Frameworks",
  586 + "$(inherited)",
  587 + "$(DEVELOPER_FRAMEWORKS_DIR)",
  588 + );
  589 + GCC_PRECOMPILE_PREFIX_HEADER = YES;
  590 + GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch";
  591 + INFOPLIST_FILE = "Tests/Tests-Info.plist";
  592 + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}";
  593 + PRODUCT_NAME = "$(TARGET_NAME)";
  594 + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CNLiveCycleScrollView_Example.app/CNLiveCycleScrollView_Example";
  595 + WRAPPER_EXTENSION = xctest;
  596 + };
  597 + name = Release;
  598 + };
  599 +/* End XCBuildConfiguration section */
  600 +
  601 +/* Begin XCConfigurationList section */
  602 + 6003F585195388D10070C39A /* Build configuration list for PBXProject "CNLiveCycleScrollView" */ = {
  603 + isa = XCConfigurationList;
  604 + buildConfigurations = (
  605 + 6003F5BD195388D20070C39A /* Debug */,
  606 + 6003F5BE195388D20070C39A /* Release */,
  607 + );
  608 + defaultConfigurationIsVisible = 0;
  609 + defaultConfigurationName = Release;
  610 + };
  611 + 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "CNLiveCycleScrollView_Example" */ = {
  612 + isa = XCConfigurationList;
  613 + buildConfigurations = (
  614 + 6003F5C0195388D20070C39A /* Debug */,
  615 + 6003F5C1195388D20070C39A /* Release */,
  616 + );
  617 + defaultConfigurationIsVisible = 0;
  618 + defaultConfigurationName = Release;
  619 + };
  620 + 6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget "CNLiveCycleScrollView_Tests" */ = {
  621 + isa = XCConfigurationList;
  622 + buildConfigurations = (
  623 + 6003F5C3195388D20070C39A /* Debug */,
  624 + 6003F5C4195388D20070C39A /* Release */,
  625 + );
  626 + defaultConfigurationIsVisible = 0;
  627 + defaultConfigurationName = Release;
  628 + };
  629 +/* End XCConfigurationList section */
  630 + };
  631 + rootObject = 6003F582195388D10070C39A /* Project object */;
  632 +}
Example/CNLiveCycleScrollView.xcodeproj/project.xcworkspace/contents.xcworkspacedata 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "self:CNLiveCycleScrollView.xcodeproj">
  6 + </FileRef>
  7 +</Workspace>
Example/CNLiveCycleScrollView.xcodeproj/xcshareddata/xcschemes/CNLiveCycleScrollView-Example.xcscheme 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Scheme
  3 + LastUpgradeVersion = "0720"
  4 + version = "1.3">
  5 + <BuildAction
  6 + parallelizeBuildables = "YES"
  7 + buildImplicitDependencies = "YES">
  8 + <BuildActionEntries>
  9 + <BuildActionEntry
  10 + buildForTesting = "YES"
  11 + buildForRunning = "YES"
  12 + buildForProfiling = "YES"
  13 + buildForArchiving = "YES"
  14 + buildForAnalyzing = "YES">
  15 + <BuildableReference
  16 + BuildableIdentifier = "primary"
  17 + BlueprintIdentifier = "6003F589195388D20070C39A"
  18 + BuildableName = "CNLiveCycleScrollView_Example.app"
  19 + BlueprintName = "CNLiveCycleScrollView_Example"
  20 + ReferencedContainer = "container:CNLiveCycleScrollView.xcodeproj">
  21 + </BuildableReference>
  22 + </BuildActionEntry>
  23 + </BuildActionEntries>
  24 + </BuildAction>
  25 + <TestAction
  26 + buildConfiguration = "Debug"
  27 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  28 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  29 + shouldUseLaunchSchemeArgsEnv = "YES">
  30 + <Testables>
  31 + <TestableReference
  32 + skipped = "NO">
  33 + <BuildableReference
  34 + BuildableIdentifier = "primary"
  35 + BlueprintIdentifier = "6003F5AD195388D20070C39A"
  36 + BuildableName = "CNLiveCycleScrollView_Tests.xctest"
  37 + BlueprintName = "CNLiveCycleScrollView_Tests"
  38 + ReferencedContainer = "container:CNLiveCycleScrollView.xcodeproj">
  39 + </BuildableReference>
  40 + </TestableReference>
  41 + </Testables>
  42 + <MacroExpansion>
  43 + <BuildableReference
  44 + BuildableIdentifier = "primary"
  45 + BlueprintIdentifier = "6003F589195388D20070C39A"
  46 + BuildableName = "CNLiveCycleScrollView_Example.app"
  47 + BlueprintName = "CNLiveCycleScrollView_Example"
  48 + ReferencedContainer = "container:CNLiveCycleScrollView.xcodeproj">
  49 + </BuildableReference>
  50 + </MacroExpansion>
  51 + <AdditionalOptions>
  52 + </AdditionalOptions>
  53 + </TestAction>
  54 + <LaunchAction
  55 + buildConfiguration = "Debug"
  56 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  57 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  58 + launchStyle = "0"
  59 + useCustomWorkingDirectory = "NO"
  60 + ignoresPersistentStateOnLaunch = "NO"
  61 + debugDocumentVersioning = "YES"
  62 + debugServiceExtension = "internal"
  63 + allowLocationSimulation = "YES">
  64 + <BuildableProductRunnable
  65 + runnableDebuggingMode = "0">
  66 + <BuildableReference
  67 + BuildableIdentifier = "primary"
  68 + BlueprintIdentifier = "6003F589195388D20070C39A"
  69 + BuildableName = "CNLiveCycleScrollView_Example.app"
  70 + BlueprintName = "CNLiveCycleScrollView_Example"
  71 + ReferencedContainer = "container:CNLiveCycleScrollView.xcodeproj">
  72 + </BuildableReference>
  73 + </BuildableProductRunnable>
  74 + <AdditionalOptions>
  75 + </AdditionalOptions>
  76 + </LaunchAction>
  77 + <ProfileAction
  78 + buildConfiguration = "Release"
  79 + shouldUseLaunchSchemeArgsEnv = "YES"
  80 + savedToolIdentifier = ""
  81 + useCustomWorkingDirectory = "NO"
  82 + debugDocumentVersioning = "YES">
  83 + <BuildableProductRunnable
  84 + runnableDebuggingMode = "0">
  85 + <BuildableReference
  86 + BuildableIdentifier = "primary"
  87 + BlueprintIdentifier = "6003F589195388D20070C39A"
  88 + BuildableName = "CNLiveCycleScrollView_Example.app"
  89 + BlueprintName = "CNLiveCycleScrollView_Example"
  90 + ReferencedContainer = "container:CNLiveCycleScrollView.xcodeproj">
  91 + </BuildableReference>
  92 + </BuildableProductRunnable>
  93 + </ProfileAction>
  94 + <AnalyzeAction
  95 + buildConfiguration = "Debug">
  96 + </AnalyzeAction>
  97 + <ArchiveAction
  98 + buildConfiguration = "Release"
  99 + revealArchiveInOrganizer = "YES">
  100 + </ArchiveAction>
  101 +</Scheme>
Example/CNLiveCycleScrollView.xcworkspace/contents.xcworkspacedata 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "group:CNLiveCycleScrollView.xcodeproj">
  6 + </FileRef>
  7 + <FileRef
  8 + location = "group:Pods/Pods.xcodeproj">
  9 + </FileRef>
  10 +</Workspace>
Example/CNLiveCycleScrollView.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
Example/CNLiveCycleScrollView/Base.lproj/LaunchScreen.storyboard 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
  3 + <device id="retina4_7" orientation="portrait">
  4 + <adaptation id="fullscreen"/>
  5 + </device>
  6 + <dependencies>
  7 + <deployment identifier="iOS"/>
  8 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/>
  9 + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
  10 + </dependencies>
  11 + <scenes>
  12 + <!--View Controller-->
  13 + <scene sceneID="EHf-IW-A2E">
  14 + <objects>
  15 + <viewController id="01J-lp-oVM" sceneMemberID="viewController">
  16 + <layoutGuides>
  17 + <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
  18 + <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
  19 + </layoutGuides>
  20 + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
  21 + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
  22 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  23 + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
  24 + </view>
  25 + </viewController>
  26 + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
  27 + </objects>
  28 + <point key="canvasLocation" x="53" y="375"/>
  29 + </scene>
  30 + </scenes>
  31 +</document>
Example/CNLiveCycleScrollView/Base.lproj/Main.storyboard 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="whP-gf-Uak">
  3 + <device id="retina4_7" orientation="portrait">
  4 + <adaptation id="fullscreen"/>
  5 + </device>
  6 + <dependencies>
  7 + <deployment identifier="iOS"/>
  8 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/>
  9 + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
  10 + </dependencies>
  11 + <scenes>
  12 + <!--View Controller-->
  13 + <scene sceneID="wQg-tq-qST">
  14 + <objects>
  15 + <viewController id="whP-gf-Uak" customClass="CNLiveViewController" sceneMemberID="viewController">
  16 + <layoutGuides>
  17 + <viewControllerLayoutGuide type="top" id="uEw-UM-LJ8"/>
  18 + <viewControllerLayoutGuide type="bottom" id="Mvr-aV-6Um"/>
  19 + </layoutGuides>
  20 + <view key="view" contentMode="scaleToFill" id="TpU-gO-2f1">
  21 + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
  22 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  23 + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
  24 + </view>
  25 + </viewController>
  26 + <placeholder placeholderIdentifier="IBFirstResponder" id="tc2-Qw-aMS" userLabel="First Responder" sceneMemberID="firstResponder"/>
  27 + </objects>
  28 + <point key="canvasLocation" x="305" y="433"/>
  29 + </scene>
  30 + </scenes>
  31 +</document>
Example/CNLiveCycleScrollView/CNLiveAppDelegate.h 0 → 100644
  1 +//
  2 +// CNLiveAppDelegate.h
  3 +// CNLiveCycleScrollView
  4 +//
  5 +// Created by 殷巧娟 on 12/11/2018.
  6 +// Copyright (c) 2018 殷巧娟. All rights reserved.
  7 +//
  8 +
  9 +@import UIKit;
  10 +
  11 +@interface CNLiveAppDelegate : UIResponder <UIApplicationDelegate>
  12 +
  13 +@property (strong, nonatomic) UIWindow *window;
  14 +
  15 +@end
Example/CNLiveCycleScrollView/CNLiveAppDelegate.m 0 → 100644
  1 +//
  2 +// CNLiveAppDelegate.m
  3 +// CNLiveCycleScrollView
  4 +//
  5 +// Created by 殷巧娟 on 12/11/2018.
  6 +// Copyright (c) 2018 殷巧娟. All rights reserved.
  7 +//
  8 +
  9 +#import "CNLiveAppDelegate.h"
  10 +
  11 +@implementation CNLiveAppDelegate
  12 +
  13 +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  14 +{
  15 + // Override point for customization after application launch.
  16 + return YES;
  17 +}
  18 +
  19 +- (void)applicationWillResignActive:(UIApplication *)application
  20 +{
  21 + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
  22 + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
  23 +}
  24 +
  25 +- (void)applicationDidEnterBackground:(UIApplication *)application
  26 +{
  27 + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
  28 + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
  29 +}
  30 +
  31 +- (void)applicationWillEnterForeground:(UIApplication *)application
  32 +{
  33 + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
  34 +}
  35 +
  36 +- (void)applicationDidBecomeActive:(UIApplication *)application
  37 +{
  38 + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
  39 +}
  40 +
  41 +- (void)applicationWillTerminate:(UIApplication *)application
  42 +{
  43 + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
  44 +}
  45 +
  46 +@end
Example/CNLiveCycleScrollView/CNLiveCycleScrollView-Info.plist 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>en</string>
  7 + <key>CFBundleDisplayName</key>
  8 + <string>${PRODUCT_NAME}</string>
  9 + <key>CFBundleExecutable</key>
  10 + <string>${EXECUTABLE_NAME}</string>
  11 + <key>CFBundleIdentifier</key>
  12 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
  13 + <key>CFBundleInfoDictionaryVersion</key>
  14 + <string>6.0</string>
  15 + <key>CFBundleName</key>
  16 + <string>${PRODUCT_NAME}</string>
  17 + <key>CFBundlePackageType</key>
  18 + <string>APPL</string>
  19 + <key>CFBundleShortVersionString</key>
  20 + <string>1.0</string>
  21 + <key>CFBundleSignature</key>
  22 + <string>????</string>
  23 + <key>CFBundleVersion</key>
  24 + <string>1.0</string>
  25 + <key>LSRequiresIPhoneOS</key>
  26 + <true/>
  27 + <key>UILaunchStoryboardName</key>
  28 + <string>LaunchScreen</string>
  29 + <key>UIMainStoryboardFile</key>
  30 + <string>Main</string>
  31 + <key>UIRequiredDeviceCapabilities</key>
  32 + <array>
  33 + <string>armv7</string>
  34 + </array>
  35 + <key>UISupportedInterfaceOrientations</key>
  36 + <array>
  37 + <string>UIInterfaceOrientationPortrait</string>
  38 + <string>UIInterfaceOrientationLandscapeLeft</string>
  39 + <string>UIInterfaceOrientationLandscapeRight</string>
  40 + </array>
  41 + <key>UISupportedInterfaceOrientations~ipad</key>
  42 + <array>
  43 + <string>UIInterfaceOrientationPortrait</string>
  44 + <string>UIInterfaceOrientationPortraitUpsideDown</string>
  45 + <string>UIInterfaceOrientationLandscapeLeft</string>
  46 + <string>UIInterfaceOrientationLandscapeRight</string>
  47 + </array>
  48 +</dict>
  49 +</plist>
Example/CNLiveCycleScrollView/CNLiveCycleScrollView-Prefix.pch 0 → 100644
  1 +//
  2 +// Prefix header
  3 +//
  4 +// The contents of this file are implicitly included at the beginning of every source file.
  5 +//
  6 +
  7 +#import <Availability.h>
  8 +
  9 +#ifndef __IPHONE_5_0
  10 +#warning "This project uses features only available in iOS SDK 5.0 and later."
  11 +#endif
  12 +
  13 +#ifdef __OBJC__
  14 + @import UIKit;
  15 + @import Foundation;
  16 +#endif
Example/CNLiveCycleScrollView/CNLiveViewController.h 0 → 100644
  1 +//
  2 +// CNLiveViewController.h
  3 +// CNLiveCycleScrollView
  4 +//
  5 +// Created by 殷巧娟 on 12/11/2018.
  6 +// Copyright (c) 2018 殷巧娟. All rights reserved.
  7 +//
  8 +
  9 +@import UIKit;
  10 +
  11 +@interface CNLiveViewController : UIViewController
  12 +
  13 +@end
Example/CNLiveCycleScrollView/CNLiveViewController.m 0 → 100644
  1 +//
  2 +// CNLiveViewController.m
  3 +// CNLiveCycleScrollView
  4 +//
  5 +// Created by 殷巧娟 on 12/11/2018.
  6 +// Copyright (c) 2018 殷巧娟. All rights reserved.
  7 +//
  8 +
  9 +#import "CNLiveViewController.h"
  10 +
  11 +@interface CNLiveViewController ()
  12 +
  13 +@end
  14 +
  15 +@implementation CNLiveViewController
  16 +
  17 +- (void)viewDidLoad
  18 +{
  19 + [super viewDidLoad];
  20 + // Do any additional setup after loading the view, typically from a nib.
  21 +}
  22 +
  23 +- (void)didReceiveMemoryWarning
  24 +{
  25 + [super didReceiveMemoryWarning];
  26 + // Dispose of any resources that can be recreated.
  27 +}
  28 +
  29 +@end
Example/CNLiveCycleScrollView/Images.xcassets/AppIcon.appiconset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "iphone",
  5 + "size" : "20x20",
  6 + "scale" : "2x"
  7 + },
  8 + {
  9 + "idiom" : "iphone",
  10 + "size" : "20x20",
  11 + "scale" : "3x"
  12 + },
  13 + {
  14 + "idiom" : "iphone",
  15 + "size" : "29x29",
  16 + "scale" : "2x"
  17 + },
  18 + {
  19 + "idiom" : "iphone",
  20 + "size" : "29x29",
  21 + "scale" : "3x"
  22 + },
  23 + {
  24 + "idiom" : "iphone",
  25 + "size" : "40x40",
  26 + "scale" : "2x"
  27 + },
  28 + {
  29 + "idiom" : "iphone",
  30 + "size" : "40x40",
  31 + "scale" : "3x"
  32 + },
  33 + {
  34 + "idiom" : "iphone",
  35 + "size" : "60x60",
  36 + "scale" : "2x"
  37 + },
  38 + {
  39 + "idiom" : "iphone",
  40 + "size" : "60x60",
  41 + "scale" : "3x"
  42 + },
  43 + {
  44 + "idiom" : "ipad",
  45 + "size" : "20x20",
  46 + "scale" : "1x"
  47 + },
  48 + {
  49 + "idiom" : "ipad",
  50 + "size" : "20x20",
  51 + "scale" : "2x"
  52 + },
  53 + {
  54 + "idiom" : "ipad",
  55 + "size" : "29x29",
  56 + "scale" : "1x"
  57 + },
  58 + {
  59 + "idiom" : "ipad",
  60 + "size" : "29x29",
  61 + "scale" : "2x"
  62 + },
  63 + {
  64 + "idiom" : "ipad",
  65 + "size" : "40x40",
  66 + "scale" : "1x"
  67 + },
  68 + {
  69 + "idiom" : "ipad",
  70 + "size" : "40x40",
  71 + "scale" : "2x"
  72 + },
  73 + {
  74 + "idiom" : "ipad",
  75 + "size" : "76x76",
  76 + "scale" : "1x"
  77 + },
  78 + {
  79 + "idiom" : "ipad",
  80 + "size" : "76x76",
  81 + "scale" : "2x"
  82 + },
  83 + {
  84 + "idiom" : "ipad",
  85 + "size" : "83.5x83.5",
  86 + "scale" : "2x"
  87 + },
  88 + {
  89 + "idiom" : "ios-marketing",
  90 + "size" : "1024x1024",
  91 + "scale" : "1x"
  92 + }
  93 + ],
  94 + "info" : {
  95 + "version" : 1,
  96 + "author" : "xcode"
  97 + }
  98 +}
Example/CNLiveCycleScrollView/en.lproj/InfoPlist.strings 0 → 100644
  1 +/* Localized versions of Info.plist keys */
  2 +
Example/CNLiveCycleScrollView/main.m 0 → 100644
  1 +//
  2 +// main.m
  3 +// CNLiveCycleScrollView
  4 +//
  5 +// Created by 殷巧娟 on 12/11/2018.
  6 +// Copyright (c) 2018 殷巧娟. All rights reserved.
  7 +//
  8 +
  9 +@import UIKit;
  10 +#import "CNLiveAppDelegate.h"
  11 +
  12 +int main(int argc, char * argv[])
  13 +{
  14 + @autoreleasepool {
  15 + return UIApplicationMain(argc, argv, nil, NSStringFromClass([CNLiveAppDelegate class]));
  16 + }
  17 +}
Example/Podfile 0 → 100644
  1 +use_frameworks!
  2 +
  3 +platform :ios, '9.0'
  4 +
  5 +target 'CNLiveCycleScrollView_Example' do
  6 + pod 'CNLiveCycleScrollView', :path => '../'
  7 + pod 'SDWebImage', '~> 5.0.0-beta3'
  8 + target 'CNLiveCycleScrollView_Tests' do
  9 + inherit! :search_paths
  10 + pod 'SDWebImage', '~> 5.0.0-beta3'
  11 + end
  12 +end
Example/Podfile.lock 0 → 100644
  1 +PODS:
  2 + - CNLiveCycleScrollView (0.0.1):
  3 + - SDWebImage (~> 5.0.0-beta3)
  4 + - SDWebImage (5.0.0-beta3):
  5 + - SDWebImage/Core (= 5.0.0-beta3)
  6 + - SDWebImage/Core (5.0.0-beta3)
  7 +
  8 +DEPENDENCIES:
  9 + - CNLiveCycleScrollView (from `../`)
  10 + - SDWebImage (~> 5.0.0-beta3)
  11 +
  12 +SPEC REPOS:
  13 + https://github.com/cocoapods/specs.git:
  14 + - SDWebImage
  15 +
  16 +EXTERNAL SOURCES:
  17 + CNLiveCycleScrollView:
  18 + :path: "../"
  19 +
  20 +SPEC CHECKSUMS:
  21 + CNLiveCycleScrollView: 2942635facb1bd9ec76ad6a0ccf88232885551bc
  22 + SDWebImage: e52654ceef9fdc19f4c612d64a5b6d3f05dd81a4
  23 +
  24 +PODFILE CHECKSUM: 0d0f5c9b97d5aa948d85dcf21b716e764eaabc1d
  25 +
  26 +COCOAPODS: 1.5.3
Example/Pods/Local Podspecs/CNLiveCycleScrollView.podspec.json 0 → 100644
  1 +{
  2 + "name": "CNLiveCycleScrollView",
  3 + "version": "0.0.1",
  4 + "summary": "放大缩小轮播图封装",
  5 + "description": "TODO: Add long description of the pod here.",
  6 + "homepage": "http://bj.gitlab.cnlive.com/ios-team/CNLiveCycleScrollView",
  7 + "license": {
  8 + "type": "MIT",
  9 + "file": "LICENSE"
  10 + },
  11 + "authors": {
  12 + "殷巧娟": "1427945373@qq.com"
  13 + },
  14 + "source": {
  15 + "git": "http://bj.gitlab.cnlive.com/ios-team/CNLiveCycleScrollView.git",
  16 + "tag": "0.0.1"
  17 + },
  18 + "platforms": {
  19 + "ios": "9.0"
  20 + },
  21 + "source_files": "CNLiveCycleScrollView/Classes/**/*.{h,m}",
  22 + "dependencies": {
  23 + "SDWebImage": [
  24 + "~> 5.0.0-beta3"
  25 + ]
  26 + }
  27 +}
Example/Pods/Manifest.lock 0 → 100644
  1 +PODS:
  2 + - CNLiveCycleScrollView (0.0.1):
  3 + - SDWebImage (~> 5.0.0-beta3)
  4 + - SDWebImage (5.0.0-beta3):
  5 + - SDWebImage/Core (= 5.0.0-beta3)
  6 + - SDWebImage/Core (5.0.0-beta3)
  7 +
  8 +DEPENDENCIES:
  9 + - CNLiveCycleScrollView (from `../`)
  10 + - SDWebImage (~> 5.0.0-beta3)
  11 +
  12 +SPEC REPOS:
  13 + https://github.com/cocoapods/specs.git:
  14 + - SDWebImage
  15 +
  16 +EXTERNAL SOURCES:
  17 + CNLiveCycleScrollView:
  18 + :path: "../"
  19 +
  20 +SPEC CHECKSUMS:
  21 + CNLiveCycleScrollView: 2942635facb1bd9ec76ad6a0ccf88232885551bc
  22 + SDWebImage: e52654ceef9fdc19f4c612d64a5b6d3f05dd81a4
  23 +
  24 +PODFILE CHECKSUM: 0d0f5c9b97d5aa948d85dcf21b716e764eaabc1d
  25 +
  26 +COCOAPODS: 1.5.3
Example/Pods/Pods.xcodeproj/project.pbxproj 0 → 100644
  1 +// !$*UTF8*$!
  2 +{
  3 + archiveVersion = 1;
  4 + classes = {
  5 + };
  6 + objectVersion = 46;
  7 + objects = {
  8 +
  9 +/* Begin PBXBuildFile section */
  10 + 01707BE89ACE5A8FC42C875B3141359E /* SDImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = B8A2774AE23EF5A3ED5EF1838485E0EC /* SDImageLoader.h */; settings = {ATTRIBUTES = (Public, ); }; };
  11 + 0A531194FCC41108187477E35DCD0BEF /* CNCycleScrollViewFlowLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = EC21AC28C765B57EA70E2B2C47B66EF8 /* CNCycleScrollViewFlowLayout.h */; settings = {ATTRIBUTES = (Public, ); }; };
  12 + 0EA8EE0298C845E976FDC330D8E254E0 /* CNCycleScrollViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 21EF71E33E087B148C03D291BCC5CCBA /* CNCycleScrollViewCell.m */; };
  13 + 0EAC7D723312416C1D039ADF4FC0F4A1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C4DD8F9856C9D17828941D39C59185F /* Foundation.framework */; };
  14 + 10B62E1C38D737BF805CC9231977BED1 /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 5500884A618DB976441C4792ED977CC3 /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Public, ); }; };
  15 + 1133CD72DC1B8435C9B14F7C20D5795E /* SDImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 92C3386B8473EE0F91A5C7862E3DEAF8 /* SDImageCoder.h */; settings = {ATTRIBUTES = (Public, ); }; };
  16 + 1461E9FEECB111E7D9C79FFD8F0305F4 /* SDImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 5260B1E46F69E02F24D7A81CCC95C1C7 /* SDImageFrame.m */; };
  17 + 17419BD3B8EA6ED4DFBBA2E40A4B5DF0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C4DD8F9856C9D17828941D39C59185F /* Foundation.framework */; };
  18 + 18B9859DFFAE9305AB06999550EEE862 /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = C35AACE588C6EE672358A10ED41DED9D /* UIImage+ForceDecode.m */; };
  19 + 1A868B53942522A0C93E245A76C16F65 /* NSImage+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 95D4B64F214EF26F6F3615CA5AD6F2BA /* NSImage+Compatibility.h */; settings = {ATTRIBUTES = (Public, ); }; };
  20 + 1DC48CDDB69AA3BCD5F2FDFFA538D5A2 /* CNCycleScrollViewFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A7B703BA28EA3EF2B198FAF6993ABFE /* CNCycleScrollViewFlowLayout.m */; };
  21 + 1E0EC4E226E62F7AA19E585716DDE44B /* SDWebImageError.m in Sources */ = {isa = PBXBuildFile; fileRef = C9FDE06B682CDDEC68B266B43B6B5EAA /* SDWebImageError.m */; };
  22 + 1FC4623A81FD551CADCECB06BB6BD5D1 /* SDWebImageDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ED08441A76441E722AC812609F8925B /* SDWebImageDefine.h */; settings = {ATTRIBUTES = (Public, ); }; };
  23 + 2043EC3998F1AAAAC628D3C2A8AC4F7C /* SDImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = C44EF0F17C75E557A61FA9F89ED8BE83 /* SDImageIOCoder.h */; settings = {ATTRIBUTES = (Public, ); }; };
  24 + 204C783BE21DFBDF9A877D82C6CFFCA6 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 84858C6D287D202211A3A58F9015FC17 /* UIView+WebCacheOperation.m */; };
  25 + 21C79DA50BA672056E90AE69598DF6C1 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 771D815F46C2B23467B2D4FBD77D3A68 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; };
  26 + 24092795EA1994D159BE282029A97300 /* SDWebImageDownloaderRequestModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C3D8252BFC00F8AB140C3AFEDF4E753 /* SDWebImageDownloaderRequestModifier.m */; };
  27 + 2465FF04592D0383AB7E2D320DE6B785 /* SDImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = F57DDC1D4A846B870B969A1A549C1E23 /* SDImageIOCoder.m */; };
  28 + 25312B3DAE079DC2A1BB94459C5673EF /* SDImageLoadersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AFE85BFECDD6B9D85D67803017EC5BB /* SDImageLoadersManager.m */; };
  29 + 2787EA6C028DAA2871D19E4B8888229D /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 398DB80F0AB09436E27A6BE8318AA02B /* SDWebImageCompat.m */; };
  30 + 28EE5AEDD88A5E92265C7677EAAEB700 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C9DDED56BBF21C09BCDF11FCBCE4EF3B /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
  31 + 2BCBB726BA8B802ED411D5F1AC0D5829 /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BE29F2D7265FF738E35EB2715ABF792 /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Public, ); }; };
  32 + 2BD78AB21851CF3F97CE1AE8A8EA78FE /* CNCycleScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CCAA907AA9E9194E43652F4B65D33FC /* CNCycleScrollView.m */; };
  33 + 2D524FA9F7909CCE8F1E2B367D195981 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C4DD8F9856C9D17828941D39C59185F /* Foundation.framework */; };
  34 + 2FC43A78A362E8C40E5304F5E0C6F8D0 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 79416D684AE09E145DAC9B276F8CE2B5 /* SDWebImageManager.m */; };
  35 + 35D57FE441612FE980BB9592034980C7 /* SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDD28DE4B5A3CDD8490B711D49329B7 /* SDWebImage.h */; settings = {ATTRIBUTES = (Public, ); }; };
  36 + 3AED56B1D4D876C50D7D0995AF5AF831 /* SDDiskCache.m in Sources */ = {isa = PBXBuildFile; fileRef = B739458937D5D694897D68BB64E83288 /* SDDiskCache.m */; };
  37 + 3D709632DB7675DD11C8B83B448240CE /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ED8DA2C210AEE66F8556431112BE726 /* UIView+WebCache.m */; };
  38 + 3E8C232457BBE6FE8367F782873ADA43 /* SDWebImageDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 344C52E65963151882C2118B6D33102D /* SDWebImageDefine.m */; };
  39 + 43098CCAAB85DE0DF95BC6D4A7793A39 /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CA11F09DEA1DC76AE937EF6F23904AD /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Public, ); }; };
  40 + 44A6EDB61F67EFAE4FD89B49446710FD /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = E6DB719BE1EF9065F3DEA4DB6BB1C1A5 /* SDWebImagePrefetcher.m */; };
  41 + 47DDE87745AD1F465ABC287C1F36C3CB /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = D86E222265E6B6844345F809BECCE92A /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; };
  42 + 4C51222E86C130B3CA1E751A607A6207 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 74F56758F04C5FDA04AFE770857EDB96 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; };
  43 + 4CBDF16E8DE16206049375506184D941 /* SDDiskCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CAAE7C97B5B5CF120D3D7232AA6FFDDC /* SDDiskCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
  44 + 4CFC6AF0B1B39D8BF6B949B9B942F00D /* SDAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D7448E1DCFAAADCB39E609F4A6E2971 /* SDAnimatedImageView.m */; };
  45 + 4D3C1AC9514808450E0B48482ECCB321 /* SDWebImageIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = BE06AADAB925E91A9F8B5B030862F7A5 /* SDWebImageIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; };
  46 + 50085FDD22EB94626BE89499D34FB8E0 /* SDWebImageDownloaderConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BDE328ED1A8DE17C2D7C6DDDE549E33 /* SDWebImageDownloaderConfig.m */; };
  47 + 52F66B89892A38AA25C5597BBB35E927 /* SDAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = C57B518577D684D8549A86981C25438C /* SDAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; };
  48 + 53F4912742BF16810F2F1D78D5A1396C /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E62F1A2A185F64A5595D411199AE25E /* UIImageView+WebCache.m */; };
  49 + 5D668EE124AAD7BDCD98575EDB03D7FD /* CNLiveCycleScrollView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C2458049F0D15201C021580A2B18347 /* CNLiveCycleScrollView-dummy.m */; };
  50 + 60E501D4D39EE7DBA2CC98F37ABAAD82 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC37E97689499592AD3714B41810C56 /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
  51 + 63C4795441BEA3647CE1509B346EEC60 /* SDImageAPNGCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 28ACBB6619EAD2D83FA8D615CDFB4FCA /* SDImageAPNGCoder.h */; settings = {ATTRIBUTES = (Public, ); }; };
  52 + 67C61885977B12F2FA0D896A276B1088 /* SDImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 47C327AA3AEF67F672B2AFAC891C0D90 /* SDImageCoder.m */; };
  53 + 69659DB585E97CAF95137AC015B5BC61 /* Pods-CNLiveCycleScrollView_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BFCD82B06177F1A2A55C740371DD5E14 /* Pods-CNLiveCycleScrollView_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
  54 + 6BFC1A1575F600F6646C7CCBFD5B6743 /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 8378677374FA00ED1BC382F27CBC9E32 /* NSButton+WebCache.m */; };
  55 + 6D71A9CD762F2E8E8F4972D0C2881D10 /* SDImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DF21B074432AF179609FD231CB131EE /* SDImageCoderHelper.h */; settings = {ATTRIBUTES = (Public, ); }; };
  56 + 72022D0C3FDF6F6C0CF3CADEDD6E28ED /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C27DBC2ECE10847E26D8338412A37DBA /* ImageIO.framework */; };
  57 + 7432D14C4E5A984A934EEC48829667DB /* SDAnimatedImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 120ECDC84F8FFCE29C85E31F5DEF1F4B /* SDAnimatedImageView+WebCache.m */; };
  58 + 7631849B58FA54D4699F1A4F013AC07E /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 74CE736B0F6EEAE39D5C398D4B8EF899 /* NSData+ImageContentType.m */; };
  59 + 7806FD60A1AC05DB2311E0E4523C0DDA /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 314338985A617C2721490E9EB28870B7 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; };
  60 + 7825BA1FEBB787C6DE5B331D12B03B4B /* SDImageAPNGCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = ED0FB37DC721A3E9DE1DC9C58BF6AD8B /* SDImageAPNGCoder.m */; };
  61 + 7B05F3776076F51214FC8D2D894C17AB /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CB6B38615A3DB9B02123436E6FFDDCC4 /* SDImageCache.m */; };
  62 + 7BB832CD694369709AD349C74763E5C4 /* SDAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 68E78F59DDAB448491B4F734AC77495C /* SDAnimatedImage.h */; settings = {ATTRIBUTES = (Public, ); }; };
  63 + 7D7CFC4A7BA7E54A57A9D3DAA7E2FB9E /* UIImage+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = E2E0CB6CD2D37F075BCFA28B6C6859F8 /* UIImage+Transform.h */; settings = {ATTRIBUTES = (Public, ); }; };
  64 + 7EBEE8A0D36C0B88907F1D39213E1E98 /* CNCycleScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = F19B6E0ADD112B1BC5CDE461134A91C5 /* CNCycleScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; };
  65 + 7F31E1DABCE9B922466D2E1E52040049 /* SDImageCacheDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 25D4FCF223003B3E4CF02F918694B22F /* SDImageCacheDefine.m */; };
  66 + 80EAFE547645FF363E5CA3C43281C91E /* SDMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F645625BA5D3DE1EAA87D55A7906C983 /* SDMemoryCache.m */; };
  67 + 8111DF2583489D131D76D84E57EA4B15 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 831066CE15410863313A4EFD1246AD82 /* SDImageCacheConfig.m */; };
  68 + 832B387944E86B2807DBCCA99E57BDA1 /* UIImage+Metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C7A2591D7B260E5BF9A84976DB5F6BD /* UIImage+Metadata.h */; settings = {ATTRIBUTES = (Public, ); }; };
  69 + 834AF25C75C6B545370C4A0F7C262B3C /* SDWebImageDownloaderConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C8284567840BDB171FE4BD18227137D /* SDWebImageDownloaderConfig.h */; settings = {ATTRIBUTES = (Public, ); }; };
  70 + 885B1032B8883BFAFFB2B371118B396C /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D420BBD709B8AB304CB25F73A7480A8 /* SDWebImageTransition.m */; };
  71 + 892ABC4D0D0EA3C4FEE2F4877560348A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C4DD8F9856C9D17828941D39C59185F /* Foundation.framework */; };
  72 + 8B886C698FBCA0A96E69A10FA930110C /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CE6367912E3C5B40FB288DEE9D6E3BCF /* SDWebImage-dummy.m */; };
  73 + 9543E3FB8AF37D10EC4A5F796472B1CC /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = ADE4690003AD1D63BBBED1F4FEDA954A /* UIImageView+HighlightedWebCache.m */; };
  74 + 9849F85B2F871DFD943BA3B9C4730596 /* SDImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = D6C32CCD1371AB87AAFC12781ACAAAF1 /* SDImageGIFCoder.m */; };
  75 + 9923242880224853CD41128415E98B11 /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E4969A8C1BC8603CCF7D9118CC2C092 /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
  76 + 99459312B9917B307D2C1E96ECDD0A41 /* SDImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F9FDBDF7E7EA312B7B94DA69FCD47561 /* SDImageCoderHelper.m */; };
  77 + 9E3672F03432E65F0E83545F4F0A202D /* SDWebImageError.h in Headers */ = {isa = PBXBuildFile; fileRef = 379C84D9A8F444D6C065578BE711E969 /* SDWebImageError.h */; settings = {ATTRIBUTES = (Public, ); }; };
  78 + 9E9C80AE54C8A4EB08C1D00629351ECF /* SDWebImageCacheSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D780E5FF1A755384EC433AE8E7F4AF3 /* SDWebImageCacheSerializer.h */; settings = {ATTRIBUTES = (Public, ); }; };
  79 + 9FC0B5EE57977C9049F48E3E68342815 /* SDWebImageCacheSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = D5896F84C316CA501D4019AEF2FD684E /* SDWebImageCacheSerializer.m */; };
  80 + A132E62F40CE366BFC2B0E546A4B27F4 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = A54CFCD082B9C0E2D9BC32227C69C6AC /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; };
  81 + A2A2DA190DFE2DE6F4005B9132743F3A /* UIImage+Transform.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF6226B920BDAC07318BC38F0F552D7 /* UIImage+Transform.m */; };
  82 + A809BCC2C4B2A88E704CA5C79878837F /* SDImageCachesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5348F20CF9783CEE44BF25538651581B /* SDImageCachesManager.m */; };
  83 + A8868894FA611B5C64431EE98420F0DA /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = B4E5ABAFFF9D9DC6F77D3CFBEEC6A92B /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
  84 + A9396805B1B050BAA7D97DB27178B533 /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A7C0C644855A98C5DA8D72F8A036482 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Public, ); }; };
  85 + A99EA390A45E26C030FBA05D11DB5DE3 /* SDImageTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BB6428C6EE0717C1C34AFB637F33CF7 /* SDImageTransformer.m */; };
  86 + AC8B9AB7ADE5E8F0C687A988AC1F45B8 /* CNCycleScrollViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D175722A2A82D89DD02391C9F5E2B47 /* CNCycleScrollViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
  87 + ACE4FA4A16C55986AAF05828123E69D6 /* Pods-CNLiveCycleScrollView_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F9FC57828643DE3282A5A3F71239921 /* Pods-CNLiveCycleScrollView_Example-dummy.m */; };
  88 + AD027F9509EA5C3239378736F798621A /* SDImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A172CFEEC59514C62865122ACBD5D45 /* SDImageFrame.h */; settings = {ATTRIBUTES = (Public, ); }; };
  89 + B28DABDCDCEBB7013C81F5E62B2E8B16 /* SDMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EFCEBCC8648D07CB6FBD4CB58D45603 /* SDMemoryCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
  90 + B3AB0C634F58968910C1E69B95F1ACE5 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C2AA8335956D5811EDE9C97F3824E006 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; };
  91 + B74C2A1B70515A4542FC5B20AFA7168C /* SDImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = C94D92661DF1376B4FFF63FE21AD0E13 /* SDImageLoader.m */; };
  92 + B9B97427099A8B5ACA504645A46A03E2 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3265BFE5BA441A33AAE2BEE9A038B82 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; };
  93 + BB0F7539FBD90012B199B57E86FE24A1 /* SDWebImageCacheKeyFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 17E53C33268306BEA1C25DB7F38D13C6 /* SDWebImageCacheKeyFilter.m */; };
  94 + BCE6035F2BE0B86D1E117CB13924B8E6 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 071791CA5B1948946A8E7AD94EA92198 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; };
  95 + BDAC35EE0BE323C438629EB4F2C27C8F /* SDImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = C6104400D25F7B28C7C5731D28814245 /* SDImageGIFCoder.h */; settings = {ATTRIBUTES = (Public, ); }; };
  96 + C23AE8459D93448EFC4284519B05BC90 /* SDAnimatedImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = EDCF6F309F40C661E8A03E978567BD9D /* SDAnimatedImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
  97 + C4E83FD37D59B9D29996E8124B014D6C /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = CC285E8ECEFD80C7F1C862167CD0061E /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Public, ); }; };
  98 + C545A21539E122C083C5B7D7D108D593 /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A06990F9BF90C59C3A8F732B9BC61A1 /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
  99 + C596BD904BE630FD09E202EA83C97F3A /* NSImage+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 81A57602A313881C335A0794FD04A7AC /* NSImage+Compatibility.m */; };
  100 + C79A70F433850D1CA4EAF2E6C8DE0B64 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 4113868B35FD534A0392484A8C4BDB03 /* UIImage+MultiFormat.m */; };
  101 + C9DD69CD0A07ACC4356486833484F247 /* CNLiveCycleScrollView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 94F98BD62F6C4B0ABD0EC1A53DD77C2B /* CNLiveCycleScrollView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
  102 + D076D84782EB124AFAEA2B88EFF91A10 /* UIImage+Metadata.m in Sources */ = {isa = PBXBuildFile; fileRef = A7001B7E65B741FFAF1A73F4D03133D8 /* UIImage+Metadata.m */; };
  103 + D33B51F5E88A31C2576F4A9197C4D6DC /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B3DEA4142F14DD865EB10B0DEC6E309 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
  104 + D608415674855E54B90C1B2290F93F3F /* SDImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C0A0E7539DD544E2A50C664D8FE23C2 /* SDImageCodersManager.m */; };
  105 + D8F90A1C3E7C879894C930A0BDD1A6DB /* SDImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1893F6137C263325E8FFE7209A152136 /* SDImageCodersManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
  106 + D9745A02C0E2E7E4A5569F6E8FC94C79 /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = FE017A70264BFCC4674915BF483C1993 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; };
  107 + DC2F7008921BF54642243183A5533FF6 /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = 2643EA13C21A336C1B4E8CF30834ADAE /* SDAnimatedImageRep.m */; };
  108 + E58C5275B3269AB1DA2F99D535AF101B /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EEA5346EFD3FAB9BBCFFD71968D87A8 /* SDWebImageDownloader.m */; };
  109 + E632B934B40FA40B68A3B5265A0778CB /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E320674C481A3BD08E6840AB537D92 /* SDWebImageDownloaderOperation.m */; };
  110 + E77E5E64CBA73E9AF8A53F4B4FF43100 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 82D7AA8C7E3599F2B40AD19C832EB019 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
  111 + EC79559336869E1CDC442CAB76444FC1 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 21669F27DE3FEB1D8082E625A0ED686D /* UIButton+WebCache.m */; };
  112 + EFB531764BC8C110901106FB89A2EDE8 /* SDImageLoadersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 79F2C0367D8A80FD846F2D79A674EB83 /* SDImageLoadersManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
  113 + F0670A7D70ED5422FDBBC0201969D920 /* SDWebImageCacheKeyFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B0473971F150B2404D33FEC501AAE6C /* SDWebImageCacheKeyFilter.h */; settings = {ATTRIBUTES = (Public, ); }; };
  114 + F0954989A4E5BE87E72CB557C9BA1B27 /* SDImageTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E935132326601BF1599C0F814EC6675 /* SDImageTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; };
  115 + F5D40DAD6A5DECF6CE997F05DFD77233 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = D64DCE5CE50CC63F5C997D00A0AA07DB /* UIImage+GIF.m */; };
  116 + F6001E164B02882663EFD69AAF1160E2 /* SDWebImageIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 12B241A0B11203F2F79589BA477ED4DE /* SDWebImageIndicator.m */; };
  117 + F7AE141DFD1358020719ABAEFBDADC61 /* SDAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BE94B262A772DAE653A665B7CD9107B /* SDAnimatedImage.m */; };
  118 + F978B162FA0FA26A963AE91715AB2100 /* SDWebImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D51263AEF33F8BF027FB9BD35AFF704B /* SDWebImage.framework */; };
  119 + F9A9F4E564102B87BF76691A17995D00 /* SDImageCacheDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B2F5BC8469ED69E548C7051FA31A815 /* SDImageCacheDefine.h */; settings = {ATTRIBUTES = (Public, ); }; };
  120 + FA4963E96B254D65ECABC97E733A101E /* Pods-CNLiveCycleScrollView_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B94BB78C194F144E7DE844217C014CB /* Pods-CNLiveCycleScrollView_Tests-dummy.m */; };
  121 + FD49266BC8508E90BBB72663B8121EB4 /* Pods-CNLiveCycleScrollView_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 753B2D15948E69C3DBE9D1208322292E /* Pods-CNLiveCycleScrollView_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
  122 + FDB9C5E0694B6797C356928ADB2CDA1A /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 023FBAAF773FC113824352D0171F0A1C /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
  123 +/* End PBXBuildFile section */
  124 +
  125 +/* Begin PBXContainerItemProxy section */
  126 + 1865CE000B6E8B3E629A37CD8BC9AA2D /* PBXContainerItemProxy */ = {
  127 + isa = PBXContainerItemProxy;
  128 + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
  129 + proxyType = 1;
  130 + remoteGlobalIDString = 2F75A3B13AF59763025EEF6825338F47;
  131 + remoteInfo = SDWebImage;
  132 + };
  133 + A45C362ACE9455889695F262C6C2E9B9 /* PBXContainerItemProxy */ = {
  134 + isa = PBXContainerItemProxy;
  135 + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
  136 + proxyType = 1;
  137 + remoteGlobalIDString = AB68A77528ABCD2AB5142BAE10AC5DC5;
  138 + remoteInfo = "Pods-CNLiveCycleScrollView_Example";
  139 + };
  140 + CD7E2C52E279B6BCFD2BBAA1327B8C9A /* PBXContainerItemProxy */ = {
  141 + isa = PBXContainerItemProxy;
  142 + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
  143 + proxyType = 1;
  144 + remoteGlobalIDString = 2F75A3B13AF59763025EEF6825338F47;
  145 + remoteInfo = SDWebImage;
  146 + };
  147 + DC50DD9E335BEB07213D92AEBDB736BC /* PBXContainerItemProxy */ = {
  148 + isa = PBXContainerItemProxy;
  149 + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
  150 + proxyType = 1;
  151 + remoteGlobalIDString = 2F75A3B13AF59763025EEF6825338F47;
  152 + remoteInfo = SDWebImage;
  153 + };
  154 + F666CECE9987C66F2969508E5017BECD /* PBXContainerItemProxy */ = {
  155 + isa = PBXContainerItemProxy;
  156 + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
  157 + proxyType = 1;
  158 + remoteGlobalIDString = 939F9F81E51E4B9FDE1C029BF2BBBFEE;
  159 + remoteInfo = CNLiveCycleScrollView;
  160 + };
  161 +/* End PBXContainerItemProxy section */
  162 +
  163 +/* Begin PBXFileReference section */
  164 + 023FBAAF773FC113824352D0171F0A1C /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = "<group>"; };
  165 + 04A6792FCB5BE72B76545C2DAAFFA906 /* Pods-CNLiveCycleScrollView_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CNLiveCycleScrollView_Example-resources.sh"; sourceTree = "<group>"; };
  166 + 071791CA5B1948946A8E7AD94EA92198 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = "<group>"; };
  167 + 0788A73F744BFEA123BA1F5E5A2B02DD /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = "<group>"; };
  168 + 085D450BFD08EBBBBA6A3BB3F975C30B /* CNLiveCycleScrollView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; path = CNLiveCycleScrollView.podspec; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
  169 + 0BDE328ED1A8DE17C2D7C6DDDE549E33 /* SDWebImageDownloaderConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderConfig.m; path = SDWebImage/SDWebImageDownloaderConfig.m; sourceTree = "<group>"; };
  170 + 0C4DD8F9856C9D17828941D39C59185F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
  171 + 0D175722A2A82D89DD02391C9F5E2B47 /* CNCycleScrollViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CNCycleScrollViewCell.h; path = CNLiveCycleScrollView/Classes/CNCycleScrollViewCell.h; sourceTree = "<group>"; };
  172 + 0D7448E1DCFAAADCB39E609F4A6E2971 /* SDAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageView.m; path = SDWebImage/SDAnimatedImageView.m; sourceTree = "<group>"; };
  173 + 0DD7ECF938CCB0C8A46BF9D192DD98AD /* Pods_CNLiveCycleScrollView_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_CNLiveCycleScrollView_Example.framework; path = "Pods-CNLiveCycleScrollView_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
  174 + 0E4969A8C1BC8603CCF7D9118CC2C092 /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/UIView+WebCache.h"; sourceTree = "<group>"; };
  175 + 0ED08441A76441E722AC812609F8925B /* SDWebImageDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDefine.h; path = SDWebImage/SDWebImageDefine.h; sourceTree = "<group>"; };
  176 + 0ED8DA2C210AEE66F8556431112BE726 /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/UIView+WebCache.m"; sourceTree = "<group>"; };
  177 + 102FEC8BE42D48B776C3B9C1DECFD8F0 /* Pods-CNLiveCycleScrollView_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-CNLiveCycleScrollView_Example.modulemap"; sourceTree = "<group>"; };
  178 + 11E320674C481A3BD08E6840AB537D92 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = "<group>"; };
  179 + 120ECDC84F8FFCE29C85E31F5DEF1F4B /* SDAnimatedImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SDAnimatedImageView+WebCache.m"; path = "SDWebImage/SDAnimatedImageView+WebCache.m"; sourceTree = "<group>"; };
  180 + 12B241A0B11203F2F79589BA477ED4DE /* SDWebImageIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageIndicator.m; path = SDWebImage/SDWebImageIndicator.m; sourceTree = "<group>"; };
  181 + 17E53C33268306BEA1C25DB7F38D13C6 /* SDWebImageCacheKeyFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheKeyFilter.m; path = SDWebImage/SDWebImageCacheKeyFilter.m; sourceTree = "<group>"; };
  182 + 1893F6137C263325E8FFE7209A152136 /* SDImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCodersManager.h; path = SDWebImage/SDImageCodersManager.h; sourceTree = "<group>"; };
  183 + 1A06990F9BF90C59C3A8F732B9BC61A1 /* SDImageCachesManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManager.h; path = SDWebImage/SDImageCachesManager.h; sourceTree = "<group>"; };
  184 + 1C7A2591D7B260E5BF9A84976DB5F6BD /* UIImage+Metadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Metadata.h"; path = "SDWebImage/UIImage+Metadata.h"; sourceTree = "<group>"; };
  185 + 1E935132326601BF1599C0F814EC6675 /* SDImageTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageTransformer.h; path = SDWebImage/SDImageTransformer.h; sourceTree = "<group>"; };
  186 + 201DDF620EB12684371BBA56090041EA /* Pods-CNLiveCycleScrollView_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CNLiveCycleScrollView_Tests.release.xcconfig"; sourceTree = "<group>"; };
  187 + 21669F27DE3FEB1D8082E625A0ED686D /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = "<group>"; };
  188 + 21EF71E33E087B148C03D291BCC5CCBA /* CNCycleScrollViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CNCycleScrollViewCell.m; path = CNLiveCycleScrollView/Classes/CNCycleScrollViewCell.m; sourceTree = "<group>"; };
  189 + 2367D0A51354F89F27A71C0969F45E0F /* CNLiveCycleScrollView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CNLiveCycleScrollView.framework; path = CNLiveCycleScrollView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
  190 + 25D4FCF223003B3E4CF02F918694B22F /* SDImageCacheDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheDefine.m; path = SDWebImage/SDImageCacheDefine.m; sourceTree = "<group>"; };
  191 + 2643EA13C21A336C1B4E8CF30834ADAE /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/SDAnimatedImageRep.m; sourceTree = "<group>"; };
  192 + 28ACBB6619EAD2D83FA8D615CDFB4FCA /* SDImageAPNGCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAPNGCoder.h; path = SDWebImage/SDImageAPNGCoder.h; sourceTree = "<group>"; };
  193 + 29E56C1A502731636E08DC8554AB5F6B /* Pods_CNLiveCycleScrollView_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_CNLiveCycleScrollView_Tests.framework; path = "Pods-CNLiveCycleScrollView_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
  194 + 2BDD28DE4B5A3CDD8490B711D49329B7 /* SDWebImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImage.h; path = WebImage/SDWebImage.h; sourceTree = "<group>"; };
  195 + 2C6125BBC33C86C7B630DCA45CE364F2 /* CNLiveCycleScrollView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CNLiveCycleScrollView.xcconfig; sourceTree = "<group>"; };
  196 + 2C8284567840BDB171FE4BD18227137D /* SDWebImageDownloaderConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderConfig.h; path = SDWebImage/SDWebImageDownloaderConfig.h; sourceTree = "<group>"; };
  197 + 2CCAA907AA9E9194E43652F4B65D33FC /* CNCycleScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CNCycleScrollView.m; path = CNLiveCycleScrollView/Classes/CNCycleScrollView.m; sourceTree = "<group>"; };
  198 + 2D420BBD709B8AB304CB25F73A7480A8 /* SDWebImageTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageTransition.m; path = SDWebImage/SDWebImageTransition.m; sourceTree = "<group>"; };
  199 + 2D780E5FF1A755384EC433AE8E7F4AF3 /* SDWebImageCacheSerializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheSerializer.h; path = SDWebImage/SDWebImageCacheSerializer.h; sourceTree = "<group>"; };
  200 + 314338985A617C2721490E9EB28870B7 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = "<group>"; };
  201 + 344C52E65963151882C2118B6D33102D /* SDWebImageDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDefine.m; path = SDWebImage/SDWebImageDefine.m; sourceTree = "<group>"; };
  202 + 379C84D9A8F444D6C065578BE711E969 /* SDWebImageError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageError.h; path = SDWebImage/SDWebImageError.h; sourceTree = "<group>"; };
  203 + 398DB80F0AB09436E27A6BE8318AA02B /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = "<group>"; };
  204 + 3BE29F2D7265FF738E35EB2715ABF792 /* SDWebImageDownloaderRequestModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderRequestModifier.h; path = SDWebImage/SDWebImageDownloaderRequestModifier.h; sourceTree = "<group>"; };
  205 + 3BE90E1EC60D72E78B47C94EC93B4C63 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
  206 + 3C0A0E7539DD544E2A50C664D8FE23C2 /* SDImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCodersManager.m; path = SDWebImage/SDImageCodersManager.m; sourceTree = "<group>"; };
  207 + 3C3D8252BFC00F8AB140C3AFEDF4E753 /* SDWebImageDownloaderRequestModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderRequestModifier.m; path = SDWebImage/SDWebImageDownloaderRequestModifier.m; sourceTree = "<group>"; };
  208 + 3DF21B074432AF179609FD231CB131EE /* SDImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoderHelper.h; path = SDWebImage/SDImageCoderHelper.h; sourceTree = "<group>"; };
  209 + 4113868B35FD534A0392484A8C4BDB03 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = "<group>"; };
  210 + 423B5B889483BD35316D83F223033118 /* Pods-CNLiveCycleScrollView_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-CNLiveCycleScrollView_Tests.modulemap"; sourceTree = "<group>"; };
  211 + 47C327AA3AEF67F672B2AFAC891C0D90 /* SDImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoder.m; path = SDWebImage/SDImageCoder.m; sourceTree = "<group>"; };
  212 + 485CCE6D55B7F66AE839692E17752D73 /* Pods-CNLiveCycleScrollView_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CNLiveCycleScrollView_Example.release.xcconfig"; sourceTree = "<group>"; };
  213 + 495B182CDA96857E593EF86A9D73A7B5 /* Pods-CNLiveCycleScrollView_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-CNLiveCycleScrollView_Tests-acknowledgements.markdown"; sourceTree = "<group>"; };
  214 + 4BC37E97689499592AD3714B41810C56 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = "<group>"; };
  215 + 4CA11F09DEA1DC76AE937EF6F23904AD /* SDAnimatedImageRep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageRep.h; path = SDWebImage/SDAnimatedImageRep.h; sourceTree = "<group>"; };
  216 + 4E211444CE8A1CB985F2002EA9192BA8 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = "<group>"; };
  217 + 5260B1E46F69E02F24D7A81CCC95C1C7 /* SDImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFrame.m; path = SDWebImage/SDImageFrame.m; sourceTree = "<group>"; };
  218 + 5348F20CF9783CEE44BF25538651581B /* SDImageCachesManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManager.m; path = SDWebImage/SDImageCachesManager.m; sourceTree = "<group>"; };
  219 + 538F5DBA895163894251FFD914A70323 /* Pods-CNLiveCycleScrollView_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-CNLiveCycleScrollView_Example-acknowledgements.markdown"; sourceTree = "<group>"; };
  220 + 5490CE7D32BAF3DFB8F266EC3D133ABA /* Pods-CNLiveCycleScrollView_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CNLiveCycleScrollView_Tests-acknowledgements.plist"; sourceTree = "<group>"; };
  221 + 5500884A618DB976441C4792ED977CC3 /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = SDWebImage/SDWebImageTransition.h; sourceTree = "<group>"; };
  222 + 55B162073D8C0B4EC2E47255ED833167 /* Pods-CNLiveCycleScrollView_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CNLiveCycleScrollView_Example.debug.xcconfig"; sourceTree = "<group>"; };
  223 + 5AFE85BFECDD6B9D85D67803017EC5BB /* SDImageLoadersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoadersManager.m; path = SDWebImage/SDImageLoadersManager.m; sourceTree = "<group>"; };
  224 + 5E62F1A2A185F64A5595D411199AE25E /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = "<group>"; };
  225 + 5EEA5346EFD3FAB9BBCFFD71968D87A8 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = "<group>"; };
  226 + 68E78F59DDAB448491B4F734AC77495C /* SDAnimatedImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImage.h; path = SDWebImage/SDAnimatedImage.h; sourceTree = "<group>"; };
  227 + 6B94BB78C194F144E7DE844217C014CB /* Pods-CNLiveCycleScrollView_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CNLiveCycleScrollView_Tests-dummy.m"; sourceTree = "<group>"; };
  228 + 73108EFCE451D20F0C3490D980655957 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = "<group>"; };
  229 + 74CE736B0F6EEAE39D5C398D4B8EF899 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = "<group>"; };
  230 + 74F56758F04C5FDA04AFE770857EDB96 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = "<group>"; };
  231 + 752C5A93D56772E30C0562DDFA480333 /* CNLiveCycleScrollView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CNLiveCycleScrollView-prefix.pch"; sourceTree = "<group>"; };
  232 + 753B2D15948E69C3DBE9D1208322292E /* Pods-CNLiveCycleScrollView_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-CNLiveCycleScrollView_Example-umbrella.h"; sourceTree = "<group>"; };
  233 + 771D815F46C2B23467B2D4FBD77D3A68 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = "<group>"; };
  234 + 7734EAEB23F6EA508890E634801651A4 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = "<group>"; };
  235 + 79416D684AE09E145DAC9B276F8CE2B5 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = "<group>"; };
  236 + 79F2C0367D8A80FD846F2D79A674EB83 /* SDImageLoadersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoadersManager.h; path = SDWebImage/SDImageLoadersManager.h; sourceTree = "<group>"; };
  237 + 81A57602A313881C335A0794FD04A7AC /* NSImage+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+Compatibility.m"; path = "SDWebImage/NSImage+Compatibility.m"; sourceTree = "<group>"; };
  238 + 82D7AA8C7E3599F2B40AD19C832EB019 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = "<group>"; };
  239 + 831066CE15410863313A4EFD1246AD82 /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/SDImageCacheConfig.m; sourceTree = "<group>"; };
  240 + 8378677374FA00ED1BC382F27CBC9E32 /* NSButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSButton+WebCache.m"; path = "SDWebImage/NSButton+WebCache.m"; sourceTree = "<group>"; };
  241 + 84858C6D287D202211A3A58F9015FC17 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = "<group>"; };
  242 + 89C0629B0FE5348E8633FB2B3E7B23FE /* CNLiveCycleScrollView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CNLiveCycleScrollView.modulemap; sourceTree = "<group>"; };
  243 + 8A172CFEEC59514C62865122ACBD5D45 /* SDImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFrame.h; path = SDWebImage/SDImageFrame.h; sourceTree = "<group>"; };
  244 + 8A7B703BA28EA3EF2B198FAF6993ABFE /* CNCycleScrollViewFlowLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CNCycleScrollViewFlowLayout.m; path = CNLiveCycleScrollView/Classes/CNCycleScrollViewFlowLayout.m; sourceTree = "<group>"; };
  245 + 8A7C0C644855A98C5DA8D72F8A036482 /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/UIImage+ForceDecode.h"; sourceTree = "<group>"; };
  246 + 8B0473971F150B2404D33FEC501AAE6C /* SDWebImageCacheKeyFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheKeyFilter.h; path = SDWebImage/SDWebImageCacheKeyFilter.h; sourceTree = "<group>"; };
  247 + 8BB6428C6EE0717C1C34AFB637F33CF7 /* SDImageTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageTransformer.m; path = SDWebImage/SDImageTransformer.m; sourceTree = "<group>"; };
  248 + 8BE94B262A772DAE653A665B7CD9107B /* SDAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImage.m; path = SDWebImage/SDAnimatedImage.m; sourceTree = "<group>"; };
  249 + 8C2458049F0D15201C021580A2B18347 /* CNLiveCycleScrollView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CNLiveCycleScrollView-dummy.m"; sourceTree = "<group>"; };
  250 + 8F9FC57828643DE3282A5A3F71239921 /* Pods-CNLiveCycleScrollView_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CNLiveCycleScrollView_Example-dummy.m"; sourceTree = "<group>"; };
  251 + 92C3386B8473EE0F91A5C7862E3DEAF8 /* SDImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoder.h; path = SDWebImage/SDImageCoder.h; sourceTree = "<group>"; };
  252 + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
  253 + 94F98BD62F6C4B0ABD0EC1A53DD77C2B /* CNLiveCycleScrollView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CNLiveCycleScrollView-umbrella.h"; sourceTree = "<group>"; };
  254 + 95D4B64F214EF26F6F3615CA5AD6F2BA /* NSImage+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+Compatibility.h"; path = "SDWebImage/NSImage+Compatibility.h"; sourceTree = "<group>"; };
  255 + 9B2F5BC8469ED69E548C7051FA31A815 /* SDImageCacheDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheDefine.h; path = SDWebImage/SDImageCacheDefine.h; sourceTree = "<group>"; };
  256 + 9B3DEA4142F14DD865EB10B0DEC6E309 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = "<group>"; };
  257 + 9E8FBD1154DD79DFE9A6463F6B631113 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage.framework; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
  258 + 9EFCEBCC8648D07CB6FBD4CB58D45603 /* SDMemoryCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDMemoryCache.h; path = SDWebImage/SDMemoryCache.h; sourceTree = "<group>"; };
  259 + A0952E37EF2F709D4AE58815FAD1928C /* Pods-CNLiveCycleScrollView_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CNLiveCycleScrollView_Example-frameworks.sh"; sourceTree = "<group>"; };
  260 + A3265BFE5BA441A33AAE2BEE9A038B82 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = "<group>"; };
  261 + A54CFCD082B9C0E2D9BC32227C69C6AC /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = "<group>"; };
  262 + A64B0538D46FA5663698541639DFC1D2 /* Pods-CNLiveCycleScrollView_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CNLiveCycleScrollView_Tests.debug.xcconfig"; sourceTree = "<group>"; };
  263 + A7001B7E65B741FFAF1A73F4D03133D8 /* UIImage+Metadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Metadata.m"; path = "SDWebImage/UIImage+Metadata.m"; sourceTree = "<group>"; };
  264 + ADE4690003AD1D63BBBED1F4FEDA954A /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = "<group>"; };
  265 + B057B7ADBE6A9F52AE484FC04B5E0EE6 /* SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.xcconfig; sourceTree = "<group>"; };
  266 + B27FF7F86B95BDA01F0AFC73F7633775 /* Pods-CNLiveCycleScrollView_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CNLiveCycleScrollView_Tests-resources.sh"; sourceTree = "<group>"; };
  267 + B4E5ABAFFF9D9DC6F77D3CFBEEC6A92B /* NSButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSButton+WebCache.h"; path = "SDWebImage/NSButton+WebCache.h"; sourceTree = "<group>"; };
  268 + B739458937D5D694897D68BB64E83288 /* SDDiskCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDiskCache.m; path = SDWebImage/SDDiskCache.m; sourceTree = "<group>"; };
  269 + B8A2774AE23EF5A3ED5EF1838485E0EC /* SDImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoader.h; path = SDWebImage/SDImageLoader.h; sourceTree = "<group>"; };
  270 + BD8F69112BD30B17AD206AB9DEF283D2 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
  271 + BE06AADAB925E91A9F8B5B030862F7A5 /* SDWebImageIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageIndicator.h; path = SDWebImage/SDWebImageIndicator.h; sourceTree = "<group>"; };
  272 + BE71EA5519023BABB0C1C4192592BEE1 /* Pods-CNLiveCycleScrollView_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CNLiveCycleScrollView_Example-acknowledgements.plist"; sourceTree = "<group>"; };
  273 + BFCD82B06177F1A2A55C740371DD5E14 /* Pods-CNLiveCycleScrollView_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-CNLiveCycleScrollView_Tests-umbrella.h"; sourceTree = "<group>"; };
  274 + C27DBC2ECE10847E26D8338412A37DBA /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; };
  275 + C2AA8335956D5811EDE9C97F3824E006 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = "<group>"; };
  276 + C35AACE588C6EE672358A10ED41DED9D /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "SDWebImage/UIImage+ForceDecode.m"; sourceTree = "<group>"; };
  277 + C44EF0F17C75E557A61FA9F89ED8BE83 /* SDImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOCoder.h; path = SDWebImage/SDImageIOCoder.h; sourceTree = "<group>"; };
  278 + C57B518577D684D8549A86981C25438C /* SDAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageView.h; path = SDWebImage/SDAnimatedImageView.h; sourceTree = "<group>"; };
  279 + C6104400D25F7B28C7C5731D28814245 /* SDImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGIFCoder.h; path = SDWebImage/SDImageGIFCoder.h; sourceTree = "<group>"; };
  280 + C94D92661DF1376B4FFF63FE21AD0E13 /* SDImageLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoader.m; path = SDWebImage/SDImageLoader.m; sourceTree = "<group>"; };
  281 + C9DDED56BBF21C09BCDF11FCBCE4EF3B /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = "<group>"; };
  282 + C9FDE06B682CDDEC68B266B43B6B5EAA /* SDWebImageError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageError.m; path = SDWebImage/SDWebImageError.m; sourceTree = "<group>"; };
  283 + CAAE7C97B5B5CF120D3D7232AA6FFDDC /* SDDiskCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDiskCache.h; path = SDWebImage/SDDiskCache.h; sourceTree = "<group>"; };
  284 + CB6B38615A3DB9B02123436E6FFDDCC4 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = "<group>"; };
  285 + CC285E8ECEFD80C7F1C862167CD0061E /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/SDImageCacheConfig.h; sourceTree = "<group>"; };
  286 + CE6367912E3C5B40FB288DEE9D6E3BCF /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = "<group>"; };
  287 + D51263AEF33F8BF027FB9BD35AFF704B /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
  288 + D5896F84C316CA501D4019AEF2FD684E /* SDWebImageCacheSerializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheSerializer.m; path = SDWebImage/SDWebImageCacheSerializer.m; sourceTree = "<group>"; };
  289 + D5B0BCEFCB6E09949FE588AB96DF90C2 /* Pods-CNLiveCycleScrollView_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CNLiveCycleScrollView_Tests-frameworks.sh"; sourceTree = "<group>"; };
  290 + D64DCE5CE50CC63F5C997D00A0AA07DB /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = "<group>"; };
  291 + D6660A6ECB539DEA66F45A2DBAC01DAA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
  292 + D6C32CCD1371AB87AAFC12781ACAAAF1 /* SDImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGIFCoder.m; path = SDWebImage/SDImageGIFCoder.m; sourceTree = "<group>"; };
  293 + D86E222265E6B6844345F809BECCE92A /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = "<group>"; };
  294 + E2E0CB6CD2D37F075BCFA28B6C6859F8 /* UIImage+Transform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Transform.h"; path = "SDWebImage/UIImage+Transform.h"; sourceTree = "<group>"; };
  295 + E6DB719BE1EF9065F3DEA4DB6BB1C1A5 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = "<group>"; };
  296 + E8C2AEE848A8B65B354B366FD0D889F9 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
  297 + EC21AC28C765B57EA70E2B2C47B66EF8 /* CNCycleScrollViewFlowLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CNCycleScrollViewFlowLayout.h; path = CNLiveCycleScrollView/Classes/CNCycleScrollViewFlowLayout.h; sourceTree = "<group>"; };
  298 + ED0FB37DC721A3E9DE1DC9C58BF6AD8B /* SDImageAPNGCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAPNGCoder.m; path = SDWebImage/SDImageAPNGCoder.m; sourceTree = "<group>"; };
  299 + EDCF6F309F40C661E8A03E978567BD9D /* SDAnimatedImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SDAnimatedImageView+WebCache.h"; path = "SDWebImage/SDAnimatedImageView+WebCache.h"; sourceTree = "<group>"; };
  300 + F19B6E0ADD112B1BC5CDE461134A91C5 /* CNCycleScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CNCycleScrollView.h; path = CNLiveCycleScrollView/Classes/CNCycleScrollView.h; sourceTree = "<group>"; };
  301 + F57DDC1D4A846B870B969A1A549C1E23 /* SDImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOCoder.m; path = SDWebImage/SDImageIOCoder.m; sourceTree = "<group>"; };
  302 + F645625BA5D3DE1EAA87D55A7906C983 /* SDMemoryCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDMemoryCache.m; path = SDWebImage/SDMemoryCache.m; sourceTree = "<group>"; };
  303 + F9FDBDF7E7EA312B7B94DA69FCD47561 /* SDImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoderHelper.m; path = SDWebImage/SDImageCoderHelper.m; sourceTree = "<group>"; };
  304 + FE017A70264BFCC4674915BF483C1993 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = "<group>"; };
  305 + FEF6226B920BDAC07318BC38F0F552D7 /* UIImage+Transform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Transform.m"; path = "SDWebImage/UIImage+Transform.m"; sourceTree = "<group>"; };
  306 +/* End PBXFileReference section */
  307 +
  308 +/* Begin PBXFrameworksBuildPhase section */
  309 + 6491831AF04D39287937FD4477F2F17F /* Frameworks */ = {
  310 + isa = PBXFrameworksBuildPhase;
  311 + buildActionMask = 2147483647;
  312 + files = (
  313 + 2D524FA9F7909CCE8F1E2B367D195981 /* Foundation.framework in Frameworks */,
  314 + );
  315 + runOnlyForDeploymentPostprocessing = 0;
  316 + };
  317 + 98D99A2266861520978DCA9A398A83DB /* Frameworks */ = {
  318 + isa = PBXFrameworksBuildPhase;
  319 + buildActionMask = 2147483647;
  320 + files = (
  321 + 0EAC7D723312416C1D039ADF4FC0F4A1 /* Foundation.framework in Frameworks */,
  322 + );
  323 + runOnlyForDeploymentPostprocessing = 0;
  324 + };
  325 + A0ADA4EB28AB8B4DEC7E8173212D796A /* Frameworks */ = {
  326 + isa = PBXFrameworksBuildPhase;
  327 + buildActionMask = 2147483647;
  328 + files = (
  329 + 17419BD3B8EA6ED4DFBBA2E40A4B5DF0 /* Foundation.framework in Frameworks */,
  330 + F978B162FA0FA26A963AE91715AB2100 /* SDWebImage.framework in Frameworks */,
  331 + );
  332 + runOnlyForDeploymentPostprocessing = 0;
  333 + };
  334 + AC9A06F9C446EE6563A4F85DA55E0B11 /* Frameworks */ = {
  335 + isa = PBXFrameworksBuildPhase;
  336 + buildActionMask = 2147483647;
  337 + files = (
  338 + 892ABC4D0D0EA3C4FEE2F4877560348A /* Foundation.framework in Frameworks */,
  339 + 72022D0C3FDF6F6C0CF3CADEDD6E28ED /* ImageIO.framework in Frameworks */,
  340 + );
  341 + runOnlyForDeploymentPostprocessing = 0;
  342 + };
  343 +/* End PBXFrameworksBuildPhase section */
  344 +
  345 +/* Begin PBXGroup section */
  346 + 23EAA5D571397353D4D311351A2D82BB /* Frameworks */ = {
  347 + isa = PBXGroup;
  348 + children = (
  349 + D51263AEF33F8BF027FB9BD35AFF704B /* SDWebImage.framework */,
  350 + 7F6FA47B5F3425BE871EE7C17AFBD076 /* iOS */,
  351 + );
  352 + name = Frameworks;
  353 + sourceTree = "<group>";
  354 + };
  355 + 349E9858F53A09EA45A5DA552C8C307A /* SDWebImage */ = {
  356 + isa = PBXGroup;
  357 + children = (
  358 + CFF69830BDEDCCA776B14330A4369EA6 /* Core */,
  359 + 9A398EBC82F6053E16DD34A468924990 /* Support Files */,
  360 + );
  361 + name = SDWebImage;
  362 + path = SDWebImage;
  363 + sourceTree = "<group>";
  364 + };
  365 + 4715BC2C16F3E23A315E544C9DE7F917 /* Targets Support Files */ = {
  366 + isa = PBXGroup;
  367 + children = (
  368 + 588A86A433F5F9ED3563A98192FD8EDA /* Pods-CNLiveCycleScrollView_Example */,
  369 + 6CC61AC55174988B297773299EFD084C /* Pods-CNLiveCycleScrollView_Tests */,
  370 + );
  371 + name = "Targets Support Files";
  372 + sourceTree = "<group>";
  373 + };
  374 + 588A86A433F5F9ED3563A98192FD8EDA /* Pods-CNLiveCycleScrollView_Example */ = {
  375 + isa = PBXGroup;
  376 + children = (
  377 + 3BE90E1EC60D72E78B47C94EC93B4C63 /* Info.plist */,
  378 + 102FEC8BE42D48B776C3B9C1DECFD8F0 /* Pods-CNLiveCycleScrollView_Example.modulemap */,
  379 + 538F5DBA895163894251FFD914A70323 /* Pods-CNLiveCycleScrollView_Example-acknowledgements.markdown */,
  380 + BE71EA5519023BABB0C1C4192592BEE1 /* Pods-CNLiveCycleScrollView_Example-acknowledgements.plist */,
  381 + 8F9FC57828643DE3282A5A3F71239921 /* Pods-CNLiveCycleScrollView_Example-dummy.m */,
  382 + A0952E37EF2F709D4AE58815FAD1928C /* Pods-CNLiveCycleScrollView_Example-frameworks.sh */,
  383 + 04A6792FCB5BE72B76545C2DAAFFA906 /* Pods-CNLiveCycleScrollView_Example-resources.sh */,
  384 + 753B2D15948E69C3DBE9D1208322292E /* Pods-CNLiveCycleScrollView_Example-umbrella.h */,
  385 + 55B162073D8C0B4EC2E47255ED833167 /* Pods-CNLiveCycleScrollView_Example.debug.xcconfig */,
  386 + 485CCE6D55B7F66AE839692E17752D73 /* Pods-CNLiveCycleScrollView_Example.release.xcconfig */,
  387 + );
  388 + name = "Pods-CNLiveCycleScrollView_Example";
  389 + path = "Target Support Files/Pods-CNLiveCycleScrollView_Example";
  390 + sourceTree = "<group>";
  391 + };
  392 + 6CC61AC55174988B297773299EFD084C /* Pods-CNLiveCycleScrollView_Tests */ = {
  393 + isa = PBXGroup;
  394 + children = (
  395 + E8C2AEE848A8B65B354B366FD0D889F9 /* Info.plist */,
  396 + 423B5B889483BD35316D83F223033118 /* Pods-CNLiveCycleScrollView_Tests.modulemap */,
  397 + 495B182CDA96857E593EF86A9D73A7B5 /* Pods-CNLiveCycleScrollView_Tests-acknowledgements.markdown */,
  398 + 5490CE7D32BAF3DFB8F266EC3D133ABA /* Pods-CNLiveCycleScrollView_Tests-acknowledgements.plist */,
  399 + 6B94BB78C194F144E7DE844217C014CB /* Pods-CNLiveCycleScrollView_Tests-dummy.m */,
  400 + D5B0BCEFCB6E09949FE588AB96DF90C2 /* Pods-CNLiveCycleScrollView_Tests-frameworks.sh */,
  401 + B27FF7F86B95BDA01F0AFC73F7633775 /* Pods-CNLiveCycleScrollView_Tests-resources.sh */,
  402 + BFCD82B06177F1A2A55C740371DD5E14 /* Pods-CNLiveCycleScrollView_Tests-umbrella.h */,
  403 + A64B0538D46FA5663698541639DFC1D2 /* Pods-CNLiveCycleScrollView_Tests.debug.xcconfig */,
  404 + 201DDF620EB12684371BBA56090041EA /* Pods-CNLiveCycleScrollView_Tests.release.xcconfig */,
  405 + );
  406 + name = "Pods-CNLiveCycleScrollView_Tests";
  407 + path = "Target Support Files/Pods-CNLiveCycleScrollView_Tests";
  408 + sourceTree = "<group>";
  409 + };
  410 + 76797542A036CEC568BCE79BA131CE93 /* Pod */ = {
  411 + isa = PBXGroup;
  412 + children = (
  413 + 085D450BFD08EBBBBA6A3BB3F975C30B /* CNLiveCycleScrollView.podspec */,
  414 + 0788A73F744BFEA123BA1F5E5A2B02DD /* LICENSE */,
  415 + 4E211444CE8A1CB985F2002EA9192BA8 /* README.md */,
  416 + );
  417 + name = Pod;
  418 + sourceTree = "<group>";
  419 + };
  420 + 7DB346D0F39D3F0E887471402A8071AB = {
  421 + isa = PBXGroup;
  422 + children = (
  423 + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */,
  424 + C8BD09C478E418032845E4B1F5DCEE04 /* Development Pods */,
  425 + 23EAA5D571397353D4D311351A2D82BB /* Frameworks */,
  426 + BF4B13718B20D23D5B220FA33C2583D8 /* Pods */,
  427 + 8656BA77CAA74501AA9292DE45D4EFF8 /* Products */,
  428 + 4715BC2C16F3E23A315E544C9DE7F917 /* Targets Support Files */,
  429 + );
  430 + sourceTree = "<group>";
  431 + };
  432 + 7F6FA47B5F3425BE871EE7C17AFBD076 /* iOS */ = {
  433 + isa = PBXGroup;
  434 + children = (
  435 + 0C4DD8F9856C9D17828941D39C59185F /* Foundation.framework */,
  436 + C27DBC2ECE10847E26D8338412A37DBA /* ImageIO.framework */,
  437 + );
  438 + name = iOS;
  439 + sourceTree = "<group>";
  440 + };
  441 + 8656BA77CAA74501AA9292DE45D4EFF8 /* Products */ = {
  442 + isa = PBXGroup;
  443 + children = (
  444 + 2367D0A51354F89F27A71C0969F45E0F /* CNLiveCycleScrollView.framework */,
  445 + 0DD7ECF938CCB0C8A46BF9D192DD98AD /* Pods_CNLiveCycleScrollView_Example.framework */,
  446 + 29E56C1A502731636E08DC8554AB5F6B /* Pods_CNLiveCycleScrollView_Tests.framework */,
  447 + 9E8FBD1154DD79DFE9A6463F6B631113 /* SDWebImage.framework */,
  448 + );
  449 + name = Products;
  450 + sourceTree = "<group>";
  451 + };
  452 + 8DE349C8CF865AC061E148D13D17C889 /* Support Files */ = {
  453 + isa = PBXGroup;
  454 + children = (
  455 + 89C0629B0FE5348E8633FB2B3E7B23FE /* CNLiveCycleScrollView.modulemap */,
  456 + 2C6125BBC33C86C7B630DCA45CE364F2 /* CNLiveCycleScrollView.xcconfig */,
  457 + 8C2458049F0D15201C021580A2B18347 /* CNLiveCycleScrollView-dummy.m */,
  458 + 752C5A93D56772E30C0562DDFA480333 /* CNLiveCycleScrollView-prefix.pch */,
  459 + 94F98BD62F6C4B0ABD0EC1A53DD77C2B /* CNLiveCycleScrollView-umbrella.h */,
  460 + D6660A6ECB539DEA66F45A2DBAC01DAA /* Info.plist */,
  461 + );
  462 + name = "Support Files";
  463 + path = "Example/Pods/Target Support Files/CNLiveCycleScrollView";
  464 + sourceTree = "<group>";
  465 + };
  466 + 9A398EBC82F6053E16DD34A468924990 /* Support Files */ = {
  467 + isa = PBXGroup;
  468 + children = (
  469 + BD8F69112BD30B17AD206AB9DEF283D2 /* Info.plist */,
  470 + 7734EAEB23F6EA508890E634801651A4 /* SDWebImage.modulemap */,
  471 + B057B7ADBE6A9F52AE484FC04B5E0EE6 /* SDWebImage.xcconfig */,
  472 + CE6367912E3C5B40FB288DEE9D6E3BCF /* SDWebImage-dummy.m */,
  473 + 73108EFCE451D20F0C3490D980655957 /* SDWebImage-prefix.pch */,
  474 + );
  475 + name = "Support Files";
  476 + path = "../Target Support Files/SDWebImage";
  477 + sourceTree = "<group>";
  478 + };
  479 + AADE0B798B1F7B1A40FACF279CA85A35 /* CNLiveCycleScrollView */ = {
  480 + isa = PBXGroup;
  481 + children = (
  482 + F19B6E0ADD112B1BC5CDE461134A91C5 /* CNCycleScrollView.h */,
  483 + 2CCAA907AA9E9194E43652F4B65D33FC /* CNCycleScrollView.m */,
  484 + 0D175722A2A82D89DD02391C9F5E2B47 /* CNCycleScrollViewCell.h */,
  485 + 21EF71E33E087B148C03D291BCC5CCBA /* CNCycleScrollViewCell.m */,
  486 + EC21AC28C765B57EA70E2B2C47B66EF8 /* CNCycleScrollViewFlowLayout.h */,
  487 + 8A7B703BA28EA3EF2B198FAF6993ABFE /* CNCycleScrollViewFlowLayout.m */,
  488 + 76797542A036CEC568BCE79BA131CE93 /* Pod */,
  489 + 8DE349C8CF865AC061E148D13D17C889 /* Support Files */,
  490 + );
  491 + name = CNLiveCycleScrollView;
  492 + path = ../..;
  493 + sourceTree = "<group>";
  494 + };
  495 + BF4B13718B20D23D5B220FA33C2583D8 /* Pods */ = {
  496 + isa = PBXGroup;
  497 + children = (
  498 + 349E9858F53A09EA45A5DA552C8C307A /* SDWebImage */,
  499 + );
  500 + name = Pods;
  501 + sourceTree = "<group>";
  502 + };
  503 + C8BD09C478E418032845E4B1F5DCEE04 /* Development Pods */ = {
  504 + isa = PBXGroup;
  505 + children = (
  506 + AADE0B798B1F7B1A40FACF279CA85A35 /* CNLiveCycleScrollView */,
  507 + );
  508 + name = "Development Pods";
  509 + sourceTree = "<group>";
  510 + };
  511 + CFF69830BDEDCCA776B14330A4369EA6 /* Core */ = {
  512 + isa = PBXGroup;
  513 + children = (
  514 + B4E5ABAFFF9D9DC6F77D3CFBEEC6A92B /* NSButton+WebCache.h */,
  515 + 8378677374FA00ED1BC382F27CBC9E32 /* NSButton+WebCache.m */,
  516 + A54CFCD082B9C0E2D9BC32227C69C6AC /* NSData+ImageContentType.h */,
  517 + 74CE736B0F6EEAE39D5C398D4B8EF899 /* NSData+ImageContentType.m */,
  518 + 95D4B64F214EF26F6F3615CA5AD6F2BA /* NSImage+Compatibility.h */,
  519 + 81A57602A313881C335A0794FD04A7AC /* NSImage+Compatibility.m */,
  520 + 68E78F59DDAB448491B4F734AC77495C /* SDAnimatedImage.h */,
  521 + 8BE94B262A772DAE653A665B7CD9107B /* SDAnimatedImage.m */,
  522 + 4CA11F09DEA1DC76AE937EF6F23904AD /* SDAnimatedImageRep.h */,
  523 + 2643EA13C21A336C1B4E8CF30834ADAE /* SDAnimatedImageRep.m */,
  524 + C57B518577D684D8549A86981C25438C /* SDAnimatedImageView.h */,
  525 + 0D7448E1DCFAAADCB39E609F4A6E2971 /* SDAnimatedImageView.m */,
  526 + EDCF6F309F40C661E8A03E978567BD9D /* SDAnimatedImageView+WebCache.h */,
  527 + 120ECDC84F8FFCE29C85E31F5DEF1F4B /* SDAnimatedImageView+WebCache.m */,
  528 + CAAE7C97B5B5CF120D3D7232AA6FFDDC /* SDDiskCache.h */,
  529 + B739458937D5D694897D68BB64E83288 /* SDDiskCache.m */,
  530 + 28ACBB6619EAD2D83FA8D615CDFB4FCA /* SDImageAPNGCoder.h */,
  531 + ED0FB37DC721A3E9DE1DC9C58BF6AD8B /* SDImageAPNGCoder.m */,
  532 + 4BC37E97689499592AD3714B41810C56 /* SDImageCache.h */,
  533 + CB6B38615A3DB9B02123436E6FFDDCC4 /* SDImageCache.m */,
  534 + CC285E8ECEFD80C7F1C862167CD0061E /* SDImageCacheConfig.h */,
  535 + 831066CE15410863313A4EFD1246AD82 /* SDImageCacheConfig.m */,
  536 + 9B2F5BC8469ED69E548C7051FA31A815 /* SDImageCacheDefine.h */,
  537 + 25D4FCF223003B3E4CF02F918694B22F /* SDImageCacheDefine.m */,
  538 + 1A06990F9BF90C59C3A8F732B9BC61A1 /* SDImageCachesManager.h */,
  539 + 5348F20CF9783CEE44BF25538651581B /* SDImageCachesManager.m */,
  540 + 92C3386B8473EE0F91A5C7862E3DEAF8 /* SDImageCoder.h */,
  541 + 47C327AA3AEF67F672B2AFAC891C0D90 /* SDImageCoder.m */,
  542 + 3DF21B074432AF179609FD231CB131EE /* SDImageCoderHelper.h */,
  543 + F9FDBDF7E7EA312B7B94DA69FCD47561 /* SDImageCoderHelper.m */,
  544 + 1893F6137C263325E8FFE7209A152136 /* SDImageCodersManager.h */,
  545 + 3C0A0E7539DD544E2A50C664D8FE23C2 /* SDImageCodersManager.m */,
  546 + 8A172CFEEC59514C62865122ACBD5D45 /* SDImageFrame.h */,
  547 + 5260B1E46F69E02F24D7A81CCC95C1C7 /* SDImageFrame.m */,
  548 + C6104400D25F7B28C7C5731D28814245 /* SDImageGIFCoder.h */,
  549 + D6C32CCD1371AB87AAFC12781ACAAAF1 /* SDImageGIFCoder.m */,
  550 + C44EF0F17C75E557A61FA9F89ED8BE83 /* SDImageIOCoder.h */,
  551 + F57DDC1D4A846B870B969A1A549C1E23 /* SDImageIOCoder.m */,
  552 + B8A2774AE23EF5A3ED5EF1838485E0EC /* SDImageLoader.h */,
  553 + C94D92661DF1376B4FFF63FE21AD0E13 /* SDImageLoader.m */,
  554 + 79F2C0367D8A80FD846F2D79A674EB83 /* SDImageLoadersManager.h */,
  555 + 5AFE85BFECDD6B9D85D67803017EC5BB /* SDImageLoadersManager.m */,
  556 + 1E935132326601BF1599C0F814EC6675 /* SDImageTransformer.h */,
  557 + 8BB6428C6EE0717C1C34AFB637F33CF7 /* SDImageTransformer.m */,
  558 + 9EFCEBCC8648D07CB6FBD4CB58D45603 /* SDMemoryCache.h */,
  559 + F645625BA5D3DE1EAA87D55A7906C983 /* SDMemoryCache.m */,
  560 + 2BDD28DE4B5A3CDD8490B711D49329B7 /* SDWebImage.h */,
  561 + 8B0473971F150B2404D33FEC501AAE6C /* SDWebImageCacheKeyFilter.h */,
  562 + 17E53C33268306BEA1C25DB7F38D13C6 /* SDWebImageCacheKeyFilter.m */,
  563 + 2D780E5FF1A755384EC433AE8E7F4AF3 /* SDWebImageCacheSerializer.h */,
  564 + D5896F84C316CA501D4019AEF2FD684E /* SDWebImageCacheSerializer.m */,
  565 + D86E222265E6B6844345F809BECCE92A /* SDWebImageCompat.h */,
  566 + 398DB80F0AB09436E27A6BE8318AA02B /* SDWebImageCompat.m */,
  567 + 0ED08441A76441E722AC812609F8925B /* SDWebImageDefine.h */,
  568 + 344C52E65963151882C2118B6D33102D /* SDWebImageDefine.m */,
  569 + 314338985A617C2721490E9EB28870B7 /* SDWebImageDownloader.h */,
  570 + 5EEA5346EFD3FAB9BBCFFD71968D87A8 /* SDWebImageDownloader.m */,
  571 + 2C8284567840BDB171FE4BD18227137D /* SDWebImageDownloaderConfig.h */,
  572 + 0BDE328ED1A8DE17C2D7C6DDDE549E33 /* SDWebImageDownloaderConfig.m */,
  573 + A3265BFE5BA441A33AAE2BEE9A038B82 /* SDWebImageDownloaderOperation.h */,
  574 + 11E320674C481A3BD08E6840AB537D92 /* SDWebImageDownloaderOperation.m */,
  575 + 3BE29F2D7265FF738E35EB2715ABF792 /* SDWebImageDownloaderRequestModifier.h */,
  576 + 3C3D8252BFC00F8AB140C3AFEDF4E753 /* SDWebImageDownloaderRequestModifier.m */,
  577 + 379C84D9A8F444D6C065578BE711E969 /* SDWebImageError.h */,
  578 + C9FDE06B682CDDEC68B266B43B6B5EAA /* SDWebImageError.m */,
  579 + BE06AADAB925E91A9F8B5B030862F7A5 /* SDWebImageIndicator.h */,
  580 + 12B241A0B11203F2F79589BA477ED4DE /* SDWebImageIndicator.m */,
  581 + 9B3DEA4142F14DD865EB10B0DEC6E309 /* SDWebImageManager.h */,
  582 + 79416D684AE09E145DAC9B276F8CE2B5 /* SDWebImageManager.m */,
  583 + 74F56758F04C5FDA04AFE770857EDB96 /* SDWebImageOperation.h */,
  584 + 771D815F46C2B23467B2D4FBD77D3A68 /* SDWebImagePrefetcher.h */,
  585 + E6DB719BE1EF9065F3DEA4DB6BB1C1A5 /* SDWebImagePrefetcher.m */,
  586 + 5500884A618DB976441C4792ED977CC3 /* SDWebImageTransition.h */,
  587 + 2D420BBD709B8AB304CB25F73A7480A8 /* SDWebImageTransition.m */,
  588 + C9DDED56BBF21C09BCDF11FCBCE4EF3B /* UIButton+WebCache.h */,
  589 + 21669F27DE3FEB1D8082E625A0ED686D /* UIButton+WebCache.m */,
  590 + 8A7C0C644855A98C5DA8D72F8A036482 /* UIImage+ForceDecode.h */,
  591 + C35AACE588C6EE672358A10ED41DED9D /* UIImage+ForceDecode.m */,
  592 + 071791CA5B1948946A8E7AD94EA92198 /* UIImage+GIF.h */,
  593 + D64DCE5CE50CC63F5C997D00A0AA07DB /* UIImage+GIF.m */,
  594 + 1C7A2591D7B260E5BF9A84976DB5F6BD /* UIImage+Metadata.h */,
  595 + A7001B7E65B741FFAF1A73F4D03133D8 /* UIImage+Metadata.m */,
  596 + FE017A70264BFCC4674915BF483C1993 /* UIImage+MultiFormat.h */,
  597 + 4113868B35FD534A0392484A8C4BDB03 /* UIImage+MultiFormat.m */,
  598 + E2E0CB6CD2D37F075BCFA28B6C6859F8 /* UIImage+Transform.h */,
  599 + FEF6226B920BDAC07318BC38F0F552D7 /* UIImage+Transform.m */,
  600 + 023FBAAF773FC113824352D0171F0A1C /* UIImageView+HighlightedWebCache.h */,
  601 + ADE4690003AD1D63BBBED1F4FEDA954A /* UIImageView+HighlightedWebCache.m */,
  602 + 82D7AA8C7E3599F2B40AD19C832EB019 /* UIImageView+WebCache.h */,
  603 + 5E62F1A2A185F64A5595D411199AE25E /* UIImageView+WebCache.m */,
  604 + 0E4969A8C1BC8603CCF7D9118CC2C092 /* UIView+WebCache.h */,
  605 + 0ED8DA2C210AEE66F8556431112BE726 /* UIView+WebCache.m */,
  606 + C2AA8335956D5811EDE9C97F3824E006 /* UIView+WebCacheOperation.h */,
  607 + 84858C6D287D202211A3A58F9015FC17 /* UIView+WebCacheOperation.m */,
  608 + );
  609 + name = Core;
  610 + sourceTree = "<group>";
  611 + };
  612 +/* End PBXGroup section */
  613 +
  614 +/* Begin PBXHeadersBuildPhase section */
  615 + 45DA442EA2BCA01E16DDDC3441872CB3 /* Headers */ = {
  616 + isa = PBXHeadersBuildPhase;
  617 + buildActionMask = 2147483647;
  618 + files = (
  619 + FD49266BC8508E90BBB72663B8121EB4 /* Pods-CNLiveCycleScrollView_Example-umbrella.h in Headers */,
  620 + );
  621 + runOnlyForDeploymentPostprocessing = 0;
  622 + };
  623 + 5FCB07BA951C72264A79E00352F85582 /* Headers */ = {
  624 + isa = PBXHeadersBuildPhase;
  625 + buildActionMask = 2147483647;
  626 + files = (
  627 + 7EBEE8A0D36C0B88907F1D39213E1E98 /* CNCycleScrollView.h in Headers */,
  628 + AC8B9AB7ADE5E8F0C687A988AC1F45B8 /* CNCycleScrollViewCell.h in Headers */,
  629 + 0A531194FCC41108187477E35DCD0BEF /* CNCycleScrollViewFlowLayout.h in Headers */,
  630 + C9DD69CD0A07ACC4356486833484F247 /* CNLiveCycleScrollView-umbrella.h in Headers */,
  631 + );
  632 + runOnlyForDeploymentPostprocessing = 0;
  633 + };
  634 + 8AC40ADC6D6619F24125FB326E58A0DF /* Headers */ = {
  635 + isa = PBXHeadersBuildPhase;
  636 + buildActionMask = 2147483647;
  637 + files = (
  638 + 69659DB585E97CAF95137AC015B5BC61 /* Pods-CNLiveCycleScrollView_Tests-umbrella.h in Headers */,
  639 + );
  640 + runOnlyForDeploymentPostprocessing = 0;
  641 + };
  642 + 9DF1DE0C56C1842D512C0E6FA9802268 /* Headers */ = {
  643 + isa = PBXHeadersBuildPhase;
  644 + buildActionMask = 2147483647;
  645 + files = (
  646 + A8868894FA611B5C64431EE98420F0DA /* NSButton+WebCache.h in Headers */,
  647 + A132E62F40CE366BFC2B0E546A4B27F4 /* NSData+ImageContentType.h in Headers */,
  648 + 1A868B53942522A0C93E245A76C16F65 /* NSImage+Compatibility.h in Headers */,
  649 + 7BB832CD694369709AD349C74763E5C4 /* SDAnimatedImage.h in Headers */,
  650 + 43098CCAAB85DE0DF95BC6D4A7793A39 /* SDAnimatedImageRep.h in Headers */,
  651 + C23AE8459D93448EFC4284519B05BC90 /* SDAnimatedImageView+WebCache.h in Headers */,
  652 + 52F66B89892A38AA25C5597BBB35E927 /* SDAnimatedImageView.h in Headers */,
  653 + 4CBDF16E8DE16206049375506184D941 /* SDDiskCache.h in Headers */,
  654 + 63C4795441BEA3647CE1509B346EEC60 /* SDImageAPNGCoder.h in Headers */,
  655 + 60E501D4D39EE7DBA2CC98F37ABAAD82 /* SDImageCache.h in Headers */,
  656 + C4E83FD37D59B9D29996E8124B014D6C /* SDImageCacheConfig.h in Headers */,
  657 + F9A9F4E564102B87BF76691A17995D00 /* SDImageCacheDefine.h in Headers */,
  658 + C545A21539E122C083C5B7D7D108D593 /* SDImageCachesManager.h in Headers */,
  659 + 1133CD72DC1B8435C9B14F7C20D5795E /* SDImageCoder.h in Headers */,
  660 + 6D71A9CD762F2E8E8F4972D0C2881D10 /* SDImageCoderHelper.h in Headers */,
  661 + D8F90A1C3E7C879894C930A0BDD1A6DB /* SDImageCodersManager.h in Headers */,
  662 + AD027F9509EA5C3239378736F798621A /* SDImageFrame.h in Headers */,
  663 + BDAC35EE0BE323C438629EB4F2C27C8F /* SDImageGIFCoder.h in Headers */,
  664 + 2043EC3998F1AAAAC628D3C2A8AC4F7C /* SDImageIOCoder.h in Headers */,
  665 + 01707BE89ACE5A8FC42C875B3141359E /* SDImageLoader.h in Headers */,
  666 + EFB531764BC8C110901106FB89A2EDE8 /* SDImageLoadersManager.h in Headers */,
  667 + F0954989A4E5BE87E72CB557C9BA1B27 /* SDImageTransformer.h in Headers */,
  668 + B28DABDCDCEBB7013C81F5E62B2E8B16 /* SDMemoryCache.h in Headers */,
  669 + 35D57FE441612FE980BB9592034980C7 /* SDWebImage.h in Headers */,
  670 + F0670A7D70ED5422FDBBC0201969D920 /* SDWebImageCacheKeyFilter.h in Headers */,
  671 + 9E9C80AE54C8A4EB08C1D00629351ECF /* SDWebImageCacheSerializer.h in Headers */,
  672 + 47DDE87745AD1F465ABC287C1F36C3CB /* SDWebImageCompat.h in Headers */,
  673 + 1FC4623A81FD551CADCECB06BB6BD5D1 /* SDWebImageDefine.h in Headers */,
  674 + 7806FD60A1AC05DB2311E0E4523C0DDA /* SDWebImageDownloader.h in Headers */,
  675 + 834AF25C75C6B545370C4A0F7C262B3C /* SDWebImageDownloaderConfig.h in Headers */,
  676 + B9B97427099A8B5ACA504645A46A03E2 /* SDWebImageDownloaderOperation.h in Headers */,
  677 + 2BCBB726BA8B802ED411D5F1AC0D5829 /* SDWebImageDownloaderRequestModifier.h in Headers */,
  678 + 9E3672F03432E65F0E83545F4F0A202D /* SDWebImageError.h in Headers */,
  679 + 4D3C1AC9514808450E0B48482ECCB321 /* SDWebImageIndicator.h in Headers */,
  680 + D33B51F5E88A31C2576F4A9197C4D6DC /* SDWebImageManager.h in Headers */,
  681 + 4C51222E86C130B3CA1E751A607A6207 /* SDWebImageOperation.h in Headers */,
  682 + 21C79DA50BA672056E90AE69598DF6C1 /* SDWebImagePrefetcher.h in Headers */,
  683 + 10B62E1C38D737BF805CC9231977BED1 /* SDWebImageTransition.h in Headers */,
  684 + 28EE5AEDD88A5E92265C7677EAAEB700 /* UIButton+WebCache.h in Headers */,
  685 + A9396805B1B050BAA7D97DB27178B533 /* UIImage+ForceDecode.h in Headers */,
  686 + BCE6035F2BE0B86D1E117CB13924B8E6 /* UIImage+GIF.h in Headers */,
  687 + 832B387944E86B2807DBCCA99E57BDA1 /* UIImage+Metadata.h in Headers */,
  688 + D9745A02C0E2E7E4A5569F6E8FC94C79 /* UIImage+MultiFormat.h in Headers */,
  689 + 7D7CFC4A7BA7E54A57A9D3DAA7E2FB9E /* UIImage+Transform.h in Headers */,
  690 + FDB9C5E0694B6797C356928ADB2CDA1A /* UIImageView+HighlightedWebCache.h in Headers */,
  691 + E77E5E64CBA73E9AF8A53F4B4FF43100 /* UIImageView+WebCache.h in Headers */,
  692 + 9923242880224853CD41128415E98B11 /* UIView+WebCache.h in Headers */,
  693 + B3AB0C634F58968910C1E69B95F1ACE5 /* UIView+WebCacheOperation.h in Headers */,
  694 + );
  695 + runOnlyForDeploymentPostprocessing = 0;
  696 + };
  697 +/* End PBXHeadersBuildPhase section */
  698 +
  699 +/* Begin PBXNativeTarget section */
  700 + 2F75A3B13AF59763025EEF6825338F47 /* SDWebImage */ = {
  701 + isa = PBXNativeTarget;
  702 + buildConfigurationList = B097827B8CFCB13866027CA565B61BA8 /* Build configuration list for PBXNativeTarget "SDWebImage" */;
  703 + buildPhases = (
  704 + 9DF1DE0C56C1842D512C0E6FA9802268 /* Headers */,
  705 + AF226862E69E2C0CF287D34220A2895B /* Sources */,
  706 + AC9A06F9C446EE6563A4F85DA55E0B11 /* Frameworks */,
  707 + 0CCABC2C18EC80E34DC22D1E833117D2 /* Resources */,
  708 + );
  709 + buildRules = (
  710 + );
  711 + dependencies = (
  712 + );
  713 + name = SDWebImage;
  714 + productName = SDWebImage;
  715 + productReference = 9E8FBD1154DD79DFE9A6463F6B631113 /* SDWebImage.framework */;
  716 + productType = "com.apple.product-type.framework";
  717 + };
  718 + 939F9F81E51E4B9FDE1C029BF2BBBFEE /* CNLiveCycleScrollView */ = {
  719 + isa = PBXNativeTarget;
  720 + buildConfigurationList = 00891B76D75FE17B0FFB9CAAE71BB4D1 /* Build configuration list for PBXNativeTarget "CNLiveCycleScrollView" */;
  721 + buildPhases = (
  722 + 5FCB07BA951C72264A79E00352F85582 /* Headers */,
  723 + 46D14FAE653F4FA80870672D4C005277 /* Sources */,
  724 + A0ADA4EB28AB8B4DEC7E8173212D796A /* Frameworks */,
  725 + 328C16C75D9383CE8B544E90203A48FB /* Resources */,
  726 + );
  727 + buildRules = (
  728 + );
  729 + dependencies = (
  730 + 72E1728840E057D4B0EA8A243DE734FB /* PBXTargetDependency */,
  731 + );
  732 + name = CNLiveCycleScrollView;
  733 + productName = CNLiveCycleScrollView;
  734 + productReference = 2367D0A51354F89F27A71C0969F45E0F /* CNLiveCycleScrollView.framework */;
  735 + productType = "com.apple.product-type.framework";
  736 + };
  737 + AB68A77528ABCD2AB5142BAE10AC5DC5 /* Pods-CNLiveCycleScrollView_Example */ = {
  738 + isa = PBXNativeTarget;
  739 + buildConfigurationList = C584AD89E6293B57E94E954E18773635 /* Build configuration list for PBXNativeTarget "Pods-CNLiveCycleScrollView_Example" */;
  740 + buildPhases = (
  741 + 45DA442EA2BCA01E16DDDC3441872CB3 /* Headers */,
  742 + EBBB26409312BDC852B3F06DD759099A /* Sources */,
  743 + 6491831AF04D39287937FD4477F2F17F /* Frameworks */,
  744 + 51F296169E1BD0A06B34EF84A67DB126 /* Resources */,
  745 + );
  746 + buildRules = (
  747 + );
  748 + dependencies = (
  749 + 703820D8E88472E9106C491710440C41 /* PBXTargetDependency */,
  750 + 01DB9BB4AF35D4F6DA2D92E4A74BD195 /* PBXTargetDependency */,
  751 + );
  752 + name = "Pods-CNLiveCycleScrollView_Example";
  753 + productName = "Pods-CNLiveCycleScrollView_Example";
  754 + productReference = 0DD7ECF938CCB0C8A46BF9D192DD98AD /* Pods_CNLiveCycleScrollView_Example.framework */;
  755 + productType = "com.apple.product-type.framework";
  756 + };
  757 + E8FAF1254D45E0DDB12840F2B536E287 /* Pods-CNLiveCycleScrollView_Tests */ = {
  758 + isa = PBXNativeTarget;
  759 + buildConfigurationList = 49B69F914653CF0D16630FCE285FD93B /* Build configuration list for PBXNativeTarget "Pods-CNLiveCycleScrollView_Tests" */;
  760 + buildPhases = (
  761 + 8AC40ADC6D6619F24125FB326E58A0DF /* Headers */,
  762 + 82EDB9F4012CA395A1E7CF61D3B7D2C5 /* Sources */,
  763 + 98D99A2266861520978DCA9A398A83DB /* Frameworks */,
  764 + 190CBA3C16A4ACF6392911D03E7E10B5 /* Resources */,
  765 + );
  766 + buildRules = (
  767 + );
  768 + dependencies = (
  769 + 47D5F0358DDF591B6DF32174D082C1F5 /* PBXTargetDependency */,
  770 + 865C74873ECBC5F41E1DC8CB5F3196AB /* PBXTargetDependency */,
  771 + );
  772 + name = "Pods-CNLiveCycleScrollView_Tests";
  773 + productName = "Pods-CNLiveCycleScrollView_Tests";
  774 + productReference = 29E56C1A502731636E08DC8554AB5F6B /* Pods_CNLiveCycleScrollView_Tests.framework */;
  775 + productType = "com.apple.product-type.framework";
  776 + };
  777 +/* End PBXNativeTarget section */
  778 +
  779 +/* Begin PBXProject section */
  780 + D41D8CD98F00B204E9800998ECF8427E /* Project object */ = {
  781 + isa = PBXProject;
  782 + attributes = {
  783 + LastSwiftUpdateCheck = 0930;
  784 + LastUpgradeCheck = 0930;
  785 + };
  786 + buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */;
  787 + compatibilityVersion = "Xcode 3.2";
  788 + developmentRegion = English;
  789 + hasScannedForEncodings = 0;
  790 + knownRegions = (
  791 + en,
  792 + );
  793 + mainGroup = 7DB346D0F39D3F0E887471402A8071AB;
  794 + productRefGroup = 8656BA77CAA74501AA9292DE45D4EFF8 /* Products */;
  795 + projectDirPath = "";
  796 + projectRoot = "";
  797 + targets = (
  798 + 939F9F81E51E4B9FDE1C029BF2BBBFEE /* CNLiveCycleScrollView */,
  799 + AB68A77528ABCD2AB5142BAE10AC5DC5 /* Pods-CNLiveCycleScrollView_Example */,
  800 + E8FAF1254D45E0DDB12840F2B536E287 /* Pods-CNLiveCycleScrollView_Tests */,
  801 + 2F75A3B13AF59763025EEF6825338F47 /* SDWebImage */,
  802 + );
  803 + };
  804 +/* End PBXProject section */
  805 +
  806 +/* Begin PBXResourcesBuildPhase section */
  807 + 0CCABC2C18EC80E34DC22D1E833117D2 /* Resources */ = {
  808 + isa = PBXResourcesBuildPhase;
  809 + buildActionMask = 2147483647;
  810 + files = (
  811 + );
  812 + runOnlyForDeploymentPostprocessing = 0;
  813 + };
  814 + 190CBA3C16A4ACF6392911D03E7E10B5 /* Resources */ = {
  815 + isa = PBXResourcesBuildPhase;
  816 + buildActionMask = 2147483647;
  817 + files = (
  818 + );
  819 + runOnlyForDeploymentPostprocessing = 0;
  820 + };
  821 + 328C16C75D9383CE8B544E90203A48FB /* Resources */ = {
  822 + isa = PBXResourcesBuildPhase;
  823 + buildActionMask = 2147483647;
  824 + files = (
  825 + );
  826 + runOnlyForDeploymentPostprocessing = 0;
  827 + };
  828 + 51F296169E1BD0A06B34EF84A67DB126 /* Resources */ = {
  829 + isa = PBXResourcesBuildPhase;
  830 + buildActionMask = 2147483647;
  831 + files = (
  832 + );
  833 + runOnlyForDeploymentPostprocessing = 0;
  834 + };
  835 +/* End PBXResourcesBuildPhase section */
  836 +
  837 +/* Begin PBXSourcesBuildPhase section */
  838 + 46D14FAE653F4FA80870672D4C005277 /* Sources */ = {
  839 + isa = PBXSourcesBuildPhase;
  840 + buildActionMask = 2147483647;
  841 + files = (
  842 + 2BD78AB21851CF3F97CE1AE8A8EA78FE /* CNCycleScrollView.m in Sources */,
  843 + 0EA8EE0298C845E976FDC330D8E254E0 /* CNCycleScrollViewCell.m in Sources */,
  844 + 1DC48CDDB69AA3BCD5F2FDFFA538D5A2 /* CNCycleScrollViewFlowLayout.m in Sources */,
  845 + 5D668EE124AAD7BDCD98575EDB03D7FD /* CNLiveCycleScrollView-dummy.m in Sources */,
  846 + );
  847 + runOnlyForDeploymentPostprocessing = 0;
  848 + };
  849 + 82EDB9F4012CA395A1E7CF61D3B7D2C5 /* Sources */ = {
  850 + isa = PBXSourcesBuildPhase;
  851 + buildActionMask = 2147483647;
  852 + files = (
  853 + FA4963E96B254D65ECABC97E733A101E /* Pods-CNLiveCycleScrollView_Tests-dummy.m in Sources */,
  854 + );
  855 + runOnlyForDeploymentPostprocessing = 0;
  856 + };
  857 + AF226862E69E2C0CF287D34220A2895B /* Sources */ = {
  858 + isa = PBXSourcesBuildPhase;
  859 + buildActionMask = 2147483647;
  860 + files = (
  861 + 6BFC1A1575F600F6646C7CCBFD5B6743 /* NSButton+WebCache.m in Sources */,
  862 + 7631849B58FA54D4699F1A4F013AC07E /* NSData+ImageContentType.m in Sources */,
  863 + C596BD904BE630FD09E202EA83C97F3A /* NSImage+Compatibility.m in Sources */,
  864 + F7AE141DFD1358020719ABAEFBDADC61 /* SDAnimatedImage.m in Sources */,
  865 + DC2F7008921BF54642243183A5533FF6 /* SDAnimatedImageRep.m in Sources */,
  866 + 7432D14C4E5A984A934EEC48829667DB /* SDAnimatedImageView+WebCache.m in Sources */,
  867 + 4CFC6AF0B1B39D8BF6B949B9B942F00D /* SDAnimatedImageView.m in Sources */,
  868 + 3AED56B1D4D876C50D7D0995AF5AF831 /* SDDiskCache.m in Sources */,
  869 + 7825BA1FEBB787C6DE5B331D12B03B4B /* SDImageAPNGCoder.m in Sources */,
  870 + 7B05F3776076F51214FC8D2D894C17AB /* SDImageCache.m in Sources */,
  871 + 8111DF2583489D131D76D84E57EA4B15 /* SDImageCacheConfig.m in Sources */,
  872 + 7F31E1DABCE9B922466D2E1E52040049 /* SDImageCacheDefine.m in Sources */,
  873 + A809BCC2C4B2A88E704CA5C79878837F /* SDImageCachesManager.m in Sources */,
  874 + 67C61885977B12F2FA0D896A276B1088 /* SDImageCoder.m in Sources */,
  875 + 99459312B9917B307D2C1E96ECDD0A41 /* SDImageCoderHelper.m in Sources */,
  876 + D608415674855E54B90C1B2290F93F3F /* SDImageCodersManager.m in Sources */,
  877 + 1461E9FEECB111E7D9C79FFD8F0305F4 /* SDImageFrame.m in Sources */,
  878 + 9849F85B2F871DFD943BA3B9C4730596 /* SDImageGIFCoder.m in Sources */,
  879 + 2465FF04592D0383AB7E2D320DE6B785 /* SDImageIOCoder.m in Sources */,
  880 + B74C2A1B70515A4542FC5B20AFA7168C /* SDImageLoader.m in Sources */,
  881 + 25312B3DAE079DC2A1BB94459C5673EF /* SDImageLoadersManager.m in Sources */,
  882 + A99EA390A45E26C030FBA05D11DB5DE3 /* SDImageTransformer.m in Sources */,
  883 + 80EAFE547645FF363E5CA3C43281C91E /* SDMemoryCache.m in Sources */,
  884 + 8B886C698FBCA0A96E69A10FA930110C /* SDWebImage-dummy.m in Sources */,
  885 + BB0F7539FBD90012B199B57E86FE24A1 /* SDWebImageCacheKeyFilter.m in Sources */,
  886 + 9FC0B5EE57977C9049F48E3E68342815 /* SDWebImageCacheSerializer.m in Sources */,
  887 + 2787EA6C028DAA2871D19E4B8888229D /* SDWebImageCompat.m in Sources */,
  888 + 3E8C232457BBE6FE8367F782873ADA43 /* SDWebImageDefine.m in Sources */,
  889 + E58C5275B3269AB1DA2F99D535AF101B /* SDWebImageDownloader.m in Sources */,
  890 + 50085FDD22EB94626BE89499D34FB8E0 /* SDWebImageDownloaderConfig.m in Sources */,
  891 + E632B934B40FA40B68A3B5265A0778CB /* SDWebImageDownloaderOperation.m in Sources */,
  892 + 24092795EA1994D159BE282029A97300 /* SDWebImageDownloaderRequestModifier.m in Sources */,
  893 + 1E0EC4E226E62F7AA19E585716DDE44B /* SDWebImageError.m in Sources */,
  894 + F6001E164B02882663EFD69AAF1160E2 /* SDWebImageIndicator.m in Sources */,
  895 + 2FC43A78A362E8C40E5304F5E0C6F8D0 /* SDWebImageManager.m in Sources */,
  896 + 44A6EDB61F67EFAE4FD89B49446710FD /* SDWebImagePrefetcher.m in Sources */,
  897 + 885B1032B8883BFAFFB2B371118B396C /* SDWebImageTransition.m in Sources */,
  898 + EC79559336869E1CDC442CAB76444FC1 /* UIButton+WebCache.m in Sources */,
  899 + 18B9859DFFAE9305AB06999550EEE862 /* UIImage+ForceDecode.m in Sources */,
  900 + F5D40DAD6A5DECF6CE997F05DFD77233 /* UIImage+GIF.m in Sources */,
  901 + D076D84782EB124AFAEA2B88EFF91A10 /* UIImage+Metadata.m in Sources */,
  902 + C79A70F433850D1CA4EAF2E6C8DE0B64 /* UIImage+MultiFormat.m in Sources */,
  903 + A2A2DA190DFE2DE6F4005B9132743F3A /* UIImage+Transform.m in Sources */,
  904 + 9543E3FB8AF37D10EC4A5F796472B1CC /* UIImageView+HighlightedWebCache.m in Sources */,
  905 + 53F4912742BF16810F2F1D78D5A1396C /* UIImageView+WebCache.m in Sources */,
  906 + 3D709632DB7675DD11C8B83B448240CE /* UIView+WebCache.m in Sources */,
  907 + 204C783BE21DFBDF9A877D82C6CFFCA6 /* UIView+WebCacheOperation.m in Sources */,
  908 + );
  909 + runOnlyForDeploymentPostprocessing = 0;
  910 + };
  911 + EBBB26409312BDC852B3F06DD759099A /* Sources */ = {
  912 + isa = PBXSourcesBuildPhase;
  913 + buildActionMask = 2147483647;
  914 + files = (
  915 + ACE4FA4A16C55986AAF05828123E69D6 /* Pods-CNLiveCycleScrollView_Example-dummy.m in Sources */,
  916 + );
  917 + runOnlyForDeploymentPostprocessing = 0;
  918 + };
  919 +/* End PBXSourcesBuildPhase section */
  920 +
  921 +/* Begin PBXTargetDependency section */
  922 + 01DB9BB4AF35D4F6DA2D92E4A74BD195 /* PBXTargetDependency */ = {
  923 + isa = PBXTargetDependency;
  924 + name = SDWebImage;
  925 + target = 2F75A3B13AF59763025EEF6825338F47 /* SDWebImage */;
  926 + targetProxy = 1865CE000B6E8B3E629A37CD8BC9AA2D /* PBXContainerItemProxy */;
  927 + };
  928 + 47D5F0358DDF591B6DF32174D082C1F5 /* PBXTargetDependency */ = {
  929 + isa = PBXTargetDependency;
  930 + name = "Pods-CNLiveCycleScrollView_Example";
  931 + target = AB68A77528ABCD2AB5142BAE10AC5DC5 /* Pods-CNLiveCycleScrollView_Example */;
  932 + targetProxy = A45C362ACE9455889695F262C6C2E9B9 /* PBXContainerItemProxy */;
  933 + };
  934 + 703820D8E88472E9106C491710440C41 /* PBXTargetDependency */ = {
  935 + isa = PBXTargetDependency;
  936 + name = CNLiveCycleScrollView;
  937 + target = 939F9F81E51E4B9FDE1C029BF2BBBFEE /* CNLiveCycleScrollView */;
  938 + targetProxy = F666CECE9987C66F2969508E5017BECD /* PBXContainerItemProxy */;
  939 + };
  940 + 72E1728840E057D4B0EA8A243DE734FB /* PBXTargetDependency */ = {
  941 + isa = PBXTargetDependency;
  942 + name = SDWebImage;
  943 + target = 2F75A3B13AF59763025EEF6825338F47 /* SDWebImage */;
  944 + targetProxy = DC50DD9E335BEB07213D92AEBDB736BC /* PBXContainerItemProxy */;
  945 + };
  946 + 865C74873ECBC5F41E1DC8CB5F3196AB /* PBXTargetDependency */ = {
  947 + isa = PBXTargetDependency;
  948 + name = SDWebImage;
  949 + target = 2F75A3B13AF59763025EEF6825338F47 /* SDWebImage */;
  950 + targetProxy = CD7E2C52E279B6BCFD2BBAA1327B8C9A /* PBXContainerItemProxy */;
  951 + };
  952 +/* End PBXTargetDependency section */
  953 +
  954 +/* Begin XCBuildConfiguration section */
  955 + 04F8B3068000BCA7AF6D5FE2CF2F6DB4 /* Debug */ = {
  956 + isa = XCBuildConfiguration;
  957 + baseConfigurationReference = 2C6125BBC33C86C7B630DCA45CE364F2 /* CNLiveCycleScrollView.xcconfig */;
  958 + buildSettings = {
  959 + CODE_SIGN_IDENTITY = "";
  960 + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
  961 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
  962 + "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
  963 + CURRENT_PROJECT_VERSION = 1;
  964 + DEFINES_MODULE = YES;
  965 + DYLIB_COMPATIBILITY_VERSION = 1;
  966 + DYLIB_CURRENT_VERSION = 1;
  967 + DYLIB_INSTALL_NAME_BASE = "@rpath";
  968 + GCC_PREFIX_HEADER = "Target Support Files/CNLiveCycleScrollView/CNLiveCycleScrollView-prefix.pch";
  969 + INFOPLIST_FILE = "Target Support Files/CNLiveCycleScrollView/Info.plist";
  970 + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
  971 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  972 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
  973 + MODULEMAP_FILE = "Target Support Files/CNLiveCycleScrollView/CNLiveCycleScrollView.modulemap";
  974 + PRODUCT_MODULE_NAME = CNLiveCycleScrollView;
  975 + PRODUCT_NAME = CNLiveCycleScrollView;
  976 + SDKROOT = iphoneos;
  977 + SKIP_INSTALL = YES;
  978 + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
  979 + TARGETED_DEVICE_FAMILY = "1,2";
  980 + VERSIONING_SYSTEM = "apple-generic";
  981 + VERSION_INFO_PREFIX = "";
  982 + };
  983 + name = Debug;
  984 + };
  985 + 0976552F93830CC71B3986E079EAD102 /* Release */ = {
  986 + isa = XCBuildConfiguration;
  987 + baseConfigurationReference = 201DDF620EB12684371BBA56090041EA /* Pods-CNLiveCycleScrollView_Tests.release.xcconfig */;
  988 + buildSettings = {
  989 + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
  990 + CODE_SIGN_IDENTITY = "";
  991 + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
  992 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
  993 + "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
  994 + CURRENT_PROJECT_VERSION = 1;
  995 + DEFINES_MODULE = YES;
  996 + DYLIB_COMPATIBILITY_VERSION = 1;
  997 + DYLIB_CURRENT_VERSION = 1;
  998 + DYLIB_INSTALL_NAME_BASE = "@rpath";
  999 + INFOPLIST_FILE = "Target Support Files/Pods-CNLiveCycleScrollView_Tests/Info.plist";
  1000 + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
  1001 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  1002 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
  1003 + MACH_O_TYPE = staticlib;
  1004 + MODULEMAP_FILE = "Target Support Files/Pods-CNLiveCycleScrollView_Tests/Pods-CNLiveCycleScrollView_Tests.modulemap";
  1005 + OTHER_LDFLAGS = "";
  1006 + OTHER_LIBTOOLFLAGS = "";
  1007 + PODS_ROOT = "$(SRCROOT)";
  1008 + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
  1009 + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
  1010 + SDKROOT = iphoneos;
  1011 + SKIP_INSTALL = YES;
  1012 + TARGETED_DEVICE_FAMILY = "1,2";
  1013 + VALIDATE_PRODUCT = YES;
  1014 + VERSIONING_SYSTEM = "apple-generic";
  1015 + VERSION_INFO_PREFIX = "";
  1016 + };
  1017 + name = Release;
  1018 + };
  1019 + 1AB5BEF1C10427837FB826539C272518 /* Release */ = {
  1020 + isa = XCBuildConfiguration;
  1021 + baseConfigurationReference = 485CCE6D55B7F66AE839692E17752D73 /* Pods-CNLiveCycleScrollView_Example.release.xcconfig */;
  1022 + buildSettings = {
  1023 + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
  1024 + CODE_SIGN_IDENTITY = "";
  1025 + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
  1026 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
  1027 + "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
  1028 + CURRENT_PROJECT_VERSION = 1;
  1029 + DEFINES_MODULE = YES;
  1030 + DYLIB_COMPATIBILITY_VERSION = 1;
  1031 + DYLIB_CURRENT_VERSION = 1;
  1032 + DYLIB_INSTALL_NAME_BASE = "@rpath";
  1033 + INFOPLIST_FILE = "Target Support Files/Pods-CNLiveCycleScrollView_Example/Info.plist";
  1034 + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
  1035 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  1036 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
  1037 + MACH_O_TYPE = staticlib;
  1038 + MODULEMAP_FILE = "Target Support Files/Pods-CNLiveCycleScrollView_Example/Pods-CNLiveCycleScrollView_Example.modulemap";
  1039 + OTHER_LDFLAGS = "";
  1040 + OTHER_LIBTOOLFLAGS = "";
  1041 + PODS_ROOT = "$(SRCROOT)";
  1042 + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
  1043 + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
  1044 + SDKROOT = iphoneos;
  1045 + SKIP_INSTALL = YES;
  1046 + TARGETED_DEVICE_FAMILY = "1,2";
  1047 + VALIDATE_PRODUCT = YES;
  1048 + VERSIONING_SYSTEM = "apple-generic";
  1049 + VERSION_INFO_PREFIX = "";
  1050 + };
  1051 + name = Release;
  1052 + };
  1053 + 2DB85E0194F1D0FF24444EB7EAA4799A /* Release */ = {
  1054 + isa = XCBuildConfiguration;
  1055 + baseConfigurationReference = B057B7ADBE6A9F52AE484FC04B5E0EE6 /* SDWebImage.xcconfig */;
  1056 + buildSettings = {
  1057 + CODE_SIGN_IDENTITY = "";
  1058 + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
  1059 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
  1060 + "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
  1061 + CURRENT_PROJECT_VERSION = 1;
  1062 + DEFINES_MODULE = YES;
  1063 + DYLIB_COMPATIBILITY_VERSION = 1;
  1064 + DYLIB_CURRENT_VERSION = 1;
  1065 + DYLIB_INSTALL_NAME_BASE = "@rpath";
  1066 + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch";
  1067 + INFOPLIST_FILE = "Target Support Files/SDWebImage/Info.plist";
  1068 + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
  1069 + IPHONEOS_DEPLOYMENT_TARGET = 8.0;
  1070 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
  1071 + MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap";
  1072 + PRODUCT_MODULE_NAME = SDWebImage;
  1073 + PRODUCT_NAME = SDWebImage;
  1074 + SDKROOT = iphoneos;
  1075 + SKIP_INSTALL = YES;
  1076 + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
  1077 + TARGETED_DEVICE_FAMILY = "1,2";
  1078 + VALIDATE_PRODUCT = YES;
  1079 + VERSIONING_SYSTEM = "apple-generic";
  1080 + VERSION_INFO_PREFIX = "";
  1081 + };
  1082 + name = Release;
  1083 + };
  1084 + 45E332C0C9F3B0714D5FDE3B4BFBBECA /* Debug */ = {
  1085 + isa = XCBuildConfiguration;
  1086 + baseConfigurationReference = 55B162073D8C0B4EC2E47255ED833167 /* Pods-CNLiveCycleScrollView_Example.debug.xcconfig */;
  1087 + buildSettings = {
  1088 + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
  1089 + CODE_SIGN_IDENTITY = "";
  1090 + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
  1091 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
  1092 + "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
  1093 + CURRENT_PROJECT_VERSION = 1;
  1094 + DEFINES_MODULE = YES;
  1095 + DYLIB_COMPATIBILITY_VERSION = 1;
  1096 + DYLIB_CURRENT_VERSION = 1;
  1097 + DYLIB_INSTALL_NAME_BASE = "@rpath";
  1098 + INFOPLIST_FILE = "Target Support Files/Pods-CNLiveCycleScrollView_Example/Info.plist";
  1099 + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
  1100 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  1101 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
  1102 + MACH_O_TYPE = staticlib;
  1103 + MODULEMAP_FILE = "Target Support Files/Pods-CNLiveCycleScrollView_Example/Pods-CNLiveCycleScrollView_Example.modulemap";
  1104 + OTHER_LDFLAGS = "";
  1105 + OTHER_LIBTOOLFLAGS = "";
  1106 + PODS_ROOT = "$(SRCROOT)";
  1107 + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
  1108 + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
  1109 + SDKROOT = iphoneos;
  1110 + SKIP_INSTALL = YES;
  1111 + TARGETED_DEVICE_FAMILY = "1,2";
  1112 + VERSIONING_SYSTEM = "apple-generic";
  1113 + VERSION_INFO_PREFIX = "";
  1114 + };
  1115 + name = Debug;
  1116 + };
  1117 + 4E76495BC02B25BA65B6B8CF77E673B1 /* Debug */ = {
  1118 + isa = XCBuildConfiguration;
  1119 + baseConfigurationReference = B057B7ADBE6A9F52AE484FC04B5E0EE6 /* SDWebImage.xcconfig */;
  1120 + buildSettings = {
  1121 + CODE_SIGN_IDENTITY = "";
  1122 + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
  1123 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
  1124 + "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
  1125 + CURRENT_PROJECT_VERSION = 1;
  1126 + DEFINES_MODULE = YES;
  1127 + DYLIB_COMPATIBILITY_VERSION = 1;
  1128 + DYLIB_CURRENT_VERSION = 1;
  1129 + DYLIB_INSTALL_NAME_BASE = "@rpath";
  1130 + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch";
  1131 + INFOPLIST_FILE = "Target Support Files/SDWebImage/Info.plist";
  1132 + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
  1133 + IPHONEOS_DEPLOYMENT_TARGET = 8.0;
  1134 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
  1135 + MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap";
  1136 + PRODUCT_MODULE_NAME = SDWebImage;
  1137 + PRODUCT_NAME = SDWebImage;
  1138 + SDKROOT = iphoneos;
  1139 + SKIP_INSTALL = YES;
  1140 + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
  1141 + TARGETED_DEVICE_FAMILY = "1,2";
  1142 + VERSIONING_SYSTEM = "apple-generic";
  1143 + VERSION_INFO_PREFIX = "";
  1144 + };
  1145 + name = Debug;
  1146 + };
  1147 + 5DE19CECB206ACCCACF04D62F93FFDA6 /* Release */ = {
  1148 + isa = XCBuildConfiguration;
  1149 + buildSettings = {
  1150 + ALWAYS_SEARCH_USER_PATHS = NO;
  1151 + CLANG_ANALYZER_NONNULL = YES;
  1152 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
  1153 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
  1154 + CLANG_CXX_LIBRARY = "libc++";
  1155 + CLANG_ENABLE_MODULES = YES;
  1156 + CLANG_ENABLE_OBJC_ARC = YES;
  1157 + CLANG_ENABLE_OBJC_WEAK = YES;
  1158 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  1159 + CLANG_WARN_BOOL_CONVERSION = YES;
  1160 + CLANG_WARN_COMMA = YES;
  1161 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  1162 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  1163 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  1164 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
  1165 + CLANG_WARN_EMPTY_BODY = YES;
  1166 + CLANG_WARN_ENUM_CONVERSION = YES;
  1167 + CLANG_WARN_INFINITE_RECURSION = YES;
  1168 + CLANG_WARN_INT_CONVERSION = YES;
  1169 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  1170 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  1171 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  1172 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  1173 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  1174 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  1175 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  1176 + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
  1177 + CLANG_WARN_UNREACHABLE_CODE = YES;
  1178 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  1179 + CODE_SIGNING_ALLOWED = NO;
  1180 + CODE_SIGNING_REQUIRED = NO;
  1181 + COPY_PHASE_STRIP = NO;
  1182 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  1183 + ENABLE_NS_ASSERTIONS = NO;
  1184 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  1185 + GCC_C_LANGUAGE_STANDARD = gnu11;
  1186 + GCC_NO_COMMON_BLOCKS = YES;
  1187 + GCC_PREPROCESSOR_DEFINITIONS = (
  1188 + "POD_CONFIGURATION_RELEASE=1",
  1189 + "$(inherited)",
  1190 + );
  1191 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  1192 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  1193 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  1194 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  1195 + GCC_WARN_UNUSED_FUNCTION = YES;
  1196 + GCC_WARN_UNUSED_VARIABLE = YES;
  1197 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  1198 + MTL_ENABLE_DEBUG_INFO = NO;
  1199 + MTL_FAST_MATH = YES;
  1200 + PRODUCT_NAME = "$(TARGET_NAME)";
  1201 + STRIP_INSTALLED_PRODUCT = NO;
  1202 + SWIFT_COMPILATION_MODE = wholemodule;
  1203 + SWIFT_OPTIMIZATION_LEVEL = "-O";
  1204 + SWIFT_VERSION = 4.2;
  1205 + SYMROOT = "${SRCROOT}/../build";
  1206 + };
  1207 + name = Release;
  1208 + };
  1209 + 858D01EEFE984249A9581D18DBEA53F1 /* Debug */ = {
  1210 + isa = XCBuildConfiguration;
  1211 + buildSettings = {
  1212 + ALWAYS_SEARCH_USER_PATHS = NO;
  1213 + CLANG_ANALYZER_NONNULL = YES;
  1214 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
  1215 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
  1216 + CLANG_CXX_LIBRARY = "libc++";
  1217 + CLANG_ENABLE_MODULES = YES;
  1218 + CLANG_ENABLE_OBJC_ARC = YES;
  1219 + CLANG_ENABLE_OBJC_WEAK = YES;
  1220 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  1221 + CLANG_WARN_BOOL_CONVERSION = YES;
  1222 + CLANG_WARN_COMMA = YES;
  1223 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  1224 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  1225 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  1226 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
  1227 + CLANG_WARN_EMPTY_BODY = YES;
  1228 + CLANG_WARN_ENUM_CONVERSION = YES;
  1229 + CLANG_WARN_INFINITE_RECURSION = YES;
  1230 + CLANG_WARN_INT_CONVERSION = YES;
  1231 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  1232 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  1233 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  1234 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  1235 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  1236 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  1237 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  1238 + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
  1239 + CLANG_WARN_UNREACHABLE_CODE = YES;
  1240 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  1241 + CODE_SIGNING_ALLOWED = NO;
  1242 + CODE_SIGNING_REQUIRED = NO;
  1243 + COPY_PHASE_STRIP = NO;
  1244 + DEBUG_INFORMATION_FORMAT = dwarf;
  1245 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  1246 + ENABLE_TESTABILITY = YES;
  1247 + GCC_C_LANGUAGE_STANDARD = gnu11;
  1248 + GCC_DYNAMIC_NO_PIC = NO;
  1249 + GCC_NO_COMMON_BLOCKS = YES;
  1250 + GCC_OPTIMIZATION_LEVEL = 0;
  1251 + GCC_PREPROCESSOR_DEFINITIONS = (
  1252 + "POD_CONFIGURATION_DEBUG=1",
  1253 + "DEBUG=1",
  1254 + "$(inherited)",
  1255 + );
  1256 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  1257 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  1258 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  1259 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  1260 + GCC_WARN_UNUSED_FUNCTION = YES;
  1261 + GCC_WARN_UNUSED_VARIABLE = YES;
  1262 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  1263 + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
  1264 + MTL_FAST_MATH = YES;
  1265 + ONLY_ACTIVE_ARCH = YES;
  1266 + PRODUCT_NAME = "$(TARGET_NAME)";
  1267 + STRIP_INSTALLED_PRODUCT = NO;
  1268 + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
  1269 + SWIFT_OPTIMIZATION_LEVEL = "-Onone";
  1270 + SWIFT_VERSION = 4.2;
  1271 + SYMROOT = "${SRCROOT}/../build";
  1272 + };
  1273 + name = Debug;
  1274 + };
  1275 + F31799AC6DF7226509CBC0D7E33DB797 /* Release */ = {
  1276 + isa = XCBuildConfiguration;
  1277 + baseConfigurationReference = 2C6125BBC33C86C7B630DCA45CE364F2 /* CNLiveCycleScrollView.xcconfig */;
  1278 + buildSettings = {
  1279 + CODE_SIGN_IDENTITY = "";
  1280 + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
  1281 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
  1282 + "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
  1283 + CURRENT_PROJECT_VERSION = 1;
  1284 + DEFINES_MODULE = YES;
  1285 + DYLIB_COMPATIBILITY_VERSION = 1;
  1286 + DYLIB_CURRENT_VERSION = 1;
  1287 + DYLIB_INSTALL_NAME_BASE = "@rpath";
  1288 + GCC_PREFIX_HEADER = "Target Support Files/CNLiveCycleScrollView/CNLiveCycleScrollView-prefix.pch";
  1289 + INFOPLIST_FILE = "Target Support Files/CNLiveCycleScrollView/Info.plist";
  1290 + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
  1291 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  1292 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
  1293 + MODULEMAP_FILE = "Target Support Files/CNLiveCycleScrollView/CNLiveCycleScrollView.modulemap";
  1294 + PRODUCT_MODULE_NAME = CNLiveCycleScrollView;
  1295 + PRODUCT_NAME = CNLiveCycleScrollView;
  1296 + SDKROOT = iphoneos;
  1297 + SKIP_INSTALL = YES;
  1298 + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
  1299 + TARGETED_DEVICE_FAMILY = "1,2";
  1300 + VALIDATE_PRODUCT = YES;
  1301 + VERSIONING_SYSTEM = "apple-generic";
  1302 + VERSION_INFO_PREFIX = "";
  1303 + };
  1304 + name = Release;
  1305 + };
  1306 + F82517E92CBA1442BAAEC10E4BB8EF3C /* Debug */ = {
  1307 + isa = XCBuildConfiguration;
  1308 + baseConfigurationReference = A64B0538D46FA5663698541639DFC1D2 /* Pods-CNLiveCycleScrollView_Tests.debug.xcconfig */;
  1309 + buildSettings = {
  1310 + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
  1311 + CODE_SIGN_IDENTITY = "";
  1312 + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
  1313 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
  1314 + "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
  1315 + CURRENT_PROJECT_VERSION = 1;
  1316 + DEFINES_MODULE = YES;
  1317 + DYLIB_COMPATIBILITY_VERSION = 1;
  1318 + DYLIB_CURRENT_VERSION = 1;
  1319 + DYLIB_INSTALL_NAME_BASE = "@rpath";
  1320 + INFOPLIST_FILE = "Target Support Files/Pods-CNLiveCycleScrollView_Tests/Info.plist";
  1321 + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
  1322 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  1323 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
  1324 + MACH_O_TYPE = staticlib;
  1325 + MODULEMAP_FILE = "Target Support Files/Pods-CNLiveCycleScrollView_Tests/Pods-CNLiveCycleScrollView_Tests.modulemap";
  1326 + OTHER_LDFLAGS = "";
  1327 + OTHER_LIBTOOLFLAGS = "";
  1328 + PODS_ROOT = "$(SRCROOT)";
  1329 + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
  1330 + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
  1331 + SDKROOT = iphoneos;
  1332 + SKIP_INSTALL = YES;
  1333 + TARGETED_DEVICE_FAMILY = "1,2";
  1334 + VERSIONING_SYSTEM = "apple-generic";
  1335 + VERSION_INFO_PREFIX = "";
  1336 + };
  1337 + name = Debug;
  1338 + };
  1339 +/* End XCBuildConfiguration section */
  1340 +
  1341 +/* Begin XCConfigurationList section */
  1342 + 00891B76D75FE17B0FFB9CAAE71BB4D1 /* Build configuration list for PBXNativeTarget "CNLiveCycleScrollView" */ = {
  1343 + isa = XCConfigurationList;
  1344 + buildConfigurations = (
  1345 + 04F8B3068000BCA7AF6D5FE2CF2F6DB4 /* Debug */,
  1346 + F31799AC6DF7226509CBC0D7E33DB797 /* Release */,
  1347 + );
  1348 + defaultConfigurationIsVisible = 0;
  1349 + defaultConfigurationName = Release;
  1350 + };
  1351 + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = {
  1352 + isa = XCConfigurationList;
  1353 + buildConfigurations = (
  1354 + 858D01EEFE984249A9581D18DBEA53F1 /* Debug */,
  1355 + 5DE19CECB206ACCCACF04D62F93FFDA6 /* Release */,
  1356 + );
  1357 + defaultConfigurationIsVisible = 0;
  1358 + defaultConfigurationName = Release;
  1359 + };
  1360 + 49B69F914653CF0D16630FCE285FD93B /* Build configuration list for PBXNativeTarget "Pods-CNLiveCycleScrollView_Tests" */ = {
  1361 + isa = XCConfigurationList;
  1362 + buildConfigurations = (
  1363 + F82517E92CBA1442BAAEC10E4BB8EF3C /* Debug */,
  1364 + 0976552F93830CC71B3986E079EAD102 /* Release */,
  1365 + );
  1366 + defaultConfigurationIsVisible = 0;
  1367 + defaultConfigurationName = Release;
  1368 + };
  1369 + B097827B8CFCB13866027CA565B61BA8 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = {
  1370 + isa = XCConfigurationList;
  1371 + buildConfigurations = (
  1372 + 4E76495BC02B25BA65B6B8CF77E673B1 /* Debug */,
  1373 + 2DB85E0194F1D0FF24444EB7EAA4799A /* Release */,
  1374 + );
  1375 + defaultConfigurationIsVisible = 0;
  1376 + defaultConfigurationName = Release;
  1377 + };
  1378 + C584AD89E6293B57E94E954E18773635 /* Build configuration list for PBXNativeTarget "Pods-CNLiveCycleScrollView_Example" */ = {
  1379 + isa = XCConfigurationList;
  1380 + buildConfigurations = (
  1381 + 45E332C0C9F3B0714D5FDE3B4BFBBECA /* Debug */,
  1382 + 1AB5BEF1C10427837FB826539C272518 /* Release */,
  1383 + );
  1384 + defaultConfigurationIsVisible = 0;
  1385 + defaultConfigurationName = Release;
  1386 + };
  1387 +/* End XCConfigurationList section */
  1388 + };
  1389 + rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
  1390 +}
Example/Pods/SDWebImage/LICENSE 0 → 100644
  1 +Copyright (c) 2009-2018 Olivier Poitrey rs@dailymotion.com
  2 +
  3 +Permission is hereby granted, free of charge, to any person obtaining a copy
  4 +of this software and associated documentation files (the "Software"), to deal
  5 +in the Software without restriction, including without limitation the rights
  6 +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  7 +copies of the Software, and to permit persons to whom the Software is furnished
  8 +to do so, subject to the following conditions:
  9 +
  10 +The above copyright notice and this permission notice shall be included in all
  11 +copies or substantial portions of the Software.
  12 +
  13 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  14 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  15 +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  16 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  17 +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  18 +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  19 +THE SOFTWARE.
  20 +
Example/Pods/SDWebImage/README.md 0 → 100644
  1 +<p align="center" >
  2 + <img src="SDWebImage_logo.png" title="SDWebImage logo" float=left>
  3 +</p>
  4 +
  5 +
  6 +[![Build Status](http://img.shields.io/travis/rs/SDWebImage/master.svg?style=flat)](https://travis-ci.org/rs/SDWebImage)
  7 +[![Pod Version](http://img.shields.io/cocoapods/v/SDWebImage.svg?style=flat)](http://cocoadocs.org/docsets/SDWebImage/)
  8 +[![Pod Platform](http://img.shields.io/cocoapods/p/SDWebImage.svg?style=flat)](http://cocoadocs.org/docsets/SDWebImage/)
  9 +[![Pod License](http://img.shields.io/cocoapods/l/SDWebImage.svg?style=flat)](https://www.apache.org/licenses/LICENSE-2.0.html)
  10 +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/rs/SDWebImage)
  11 +[![codecov](https://codecov.io/gh/rs/SDWebImage/branch/master/graph/badge.svg)](https://codecov.io/gh/rs/SDWebImage)
  12 +
  13 +This library provides an async image downloader with cache support. For convenience, we added categories for UI elements like `UIImageView`, `UIButton`, `MKAnnotationView`.
  14 +
  15 +## Features
  16 +
  17 +- [x] Categories for `UIImageView`, `UIButton`, `MKAnnotationView` adding web image and cache management
  18 +- [x] An asynchronous image downloader
  19 +- [x] An asynchronous memory + disk image caching with automatic cache expiration handling
  20 +- [x] A background image decompression
  21 +- [x] Improved [support for animated images](https://github.com/rs/SDWebImage/wiki/Advanced-Usage#animated-image-50)
  22 +- [x] [Customizable and composable transformations](https://github.com/rs/SDWebImage/wiki/Advanced-Usage#transformer-50) can be applied to the images right after download
  23 +- [x] [Custom cache control](https://github.com/rs/SDWebImage/wiki/Advanced-Usage#custom-cache-50)
  24 +- [x] Expand the image loading capabilites by adding your [own custom loaders](https://github.com/rs/SDWebImage/wiki/Advanced-Usage#custom-loader-50) or using prebuilt loaders like [FLAnimatedImage plugin](https://github.com/SDWebImage/SDWebImageFLPlugin) or [Photos Library plugin](https://github.com/SDWebImage/SDWebImagePhotosPlugin)
  25 +- [x] [Loading indicators](https://github.com/rs/SDWebImage/wiki/How-to-use#use-view-indicator-50)
  26 +- [x] A guarantee that the same URL won't be downloaded several times
  27 +- [x] A guarantee that bogus URLs won't be retried again and again
  28 +- [x] A guarantee that main thread will never be blocked
  29 +- [x] Performances!
  30 +- [x] Use GCD and ARC
  31 +
  32 +## Supported Image Formats
  33 +
  34 +- Image formats supported by UIImage (JPEG, PNG, ...), including GIF
  35 +- WebP format, including animated WebP (use the `WebP` subspec)
  36 +
  37 +## Requirements
  38 +
  39 +- iOS 8.0 or later
  40 +- tvOS 9.0 or later
  41 +- watchOS 2.0 or later
  42 +- macOS 10.10 or later
  43 +- Xcode 9.0 or later
  44 +
  45 +#### Backwards compatibility
  46 +
  47 +- For iOS 7, macOS 10.9 or Xcode < 8, use [any 4.x version up to 4.3.3](https://github.com/rs/SDWebImage/releases/tag/4.3.3)
  48 +- For macOS 10.8, use [any 4.x version up to 4.3.0](https://github.com/rs/SDWebImage/releases/tag/4.3.0)
  49 +- For iOS 5 and 6, use [any 3.x version up to 3.7.6](https://github.com/rs/SDWebImage/tag/3.7.6)
  50 +- For iOS < 5.0, please use the last [2.0 version](https://github.com/rs/SDWebImage/tree/2.0-compat).
  51 +
  52 +## Getting Started
  53 +
  54 +- Read this Readme doc
  55 +- Read the [How to use section](https://github.com/rs/SDWebImage#how-to-use)
  56 +- Read the [Documentation @ CocoaDocs](http://cocoadocs.org/docsets/SDWebImage/)
  57 +- Try the example by downloading the project from Github or even easier using CocoaPods try `pod try SDWebImage`
  58 +- Read the [Installation Guide](https://github.com/rs/SDWebImage/wiki/Installation-Guide)
  59 +- Read the [SDWebImage 5.0 Migration Guide](Docs/SDWebImage-5.0-Migration-guide.md) to get an idea of the changes from 4.x to 5.x
  60 +- Read the [SDWebImage 4.0 Migration Guide](Docs/SDWebImage-4.0-Migration-guide.md) to get an idea of the changes from 3.x to 4.x
  61 +- Read the [Common Problems](https://github.com/rs/SDWebImage/wiki/Common-Problems) to find the solution for common problems
  62 +- Go to the [Wiki Page](https://github.com/rs/SDWebImage/wiki) for more information such as [Advanced Usage](https://github.com/rs/SDWebImage/wiki/Advanced-Usage)
  63 +
  64 +## Who Uses It
  65 +- Find out [who uses SDWebImage](https://github.com/rs/SDWebImage/wiki/Who-Uses-SDWebImage) and add your app to the list.
  66 +
  67 +## Communication
  68 +
  69 +- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/sdwebimage). (Tag 'sdwebimage')
  70 +- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/sdwebimage).
  71 +- If you **found a bug**, open an issue.
  72 +- If you **have a feature request**, open an issue.
  73 +- If you **want to contribute**, submit a pull request.
  74 +
  75 +## How To Use
  76 +
  77 +* Objective-C
  78 +
  79 +```objective-c
  80 +#import <SDWebImage/UIImageView+WebCache.h>
  81 +...
  82 +[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
  83 + placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
  84 +```
  85 +
  86 +* Swift
  87 +
  88 +```swift
  89 +import SDWebImage
  90 +
  91 +imageView.sd_setImage(with: URL(string: "http://www.domain.com/path/to/image.jpg"), placeholderImage: UIImage(named: "placeholder.png"))
  92 +```
  93 +
  94 +- For details about how to use the library and clear examples, see [The detailed How to use](Docs/HowToUse.md)
  95 +
  96 +## Animated Images (GIF) support
  97 +
  98 +In 5.0, we introduced a brand new mechanism for supporting animated images. This includes animated image loading, rendering, decoding, and also supports customizations (for advanced users).
  99 +This animated image solution is available for `iOS`/`tvOS`/`macOS`. The `SDAnimatedImage` is subclass of `UIImage/NSImage`, and `SDAnimatedImageView` is subclass of `UIImageView/NSImageView`, to make them compatible with the common frameworks APIs. See [Animated Image](https://github.com/rs/SDWebImage/wiki/Advanced-Usage#animated-image-50) for more detailed information.
  100 +
  101 +#### FLAnimatedImage integration has its own dedicated repo
  102 +In order to clean up things and make our core project do less things, we decided that the `FLAnimatedImage` integration does not belong here. From 5.0, this will still be available, but under a dedicated repo [SDWebImageFLPlugin](https://github.com/SDWebImage/SDWebImageFLPlugin).
  103 +
  104 +## Installation
  105 +
  106 +There are three ways to use SDWebImage in your project:
  107 +- using CocoaPods
  108 +- using Carthage
  109 +- by cloning the project into your repository
  110 +
  111 +### Installation with CocoaPods
  112 +
  113 +[CocoaPods](http://cocoapods.org/) is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries in your projects. See the [Get Started](http://cocoapods.org/#get_started) section for more details.
  114 +
  115 +#### Podfile
  116 +```
  117 +platform :ios, '7.0'
  118 +pod 'SDWebImage', '~> 4.0'
  119 +```
  120 +
  121 +If you are using Swift, be sure to add `use_frameworks!` and set your target to iOS 8+:
  122 +```
  123 +platform :ios, '8.0'
  124 +use_frameworks!
  125 +```
  126 +
  127 +#### Subspecs
  128 +
  129 +There are 3 subspecs available now: `Core`, `MapKit` and `WebP` (this means you can install only some of the SDWebImage modules. By default, you get just `Core`, so if you need `WebP`, you need to specify it).
  130 +
  131 +Podfile example:
  132 +```
  133 +pod 'SDWebImage/WebP'
  134 +```
  135 +
  136 +### Installation with Carthage (iOS 8+)
  137 +
  138 +[Carthage](https://github.com/Carthage/Carthage) is a lightweight dependency manager for Swift and Objective-C. It leverages CocoaTouch modules and is less invasive than CocoaPods.
  139 +
  140 +To install with carthage, follow the instruction on [Carthage](https://github.com/Carthage/Carthage)
  141 +
  142 +#### Cartfile
  143 +```
  144 +github "rs/SDWebImage"
  145 +```
  146 +
  147 +### Installation by cloning the repository
  148 +- see [Manual install](Docs/ManualInstallation.md)
  149 +
  150 +### Import headers in your source files
  151 +
  152 +In the source files where you need to use the library, import the header file:
  153 +
  154 +```objective-c
  155 +#import <SDWebImage/UIImageView+WebCache.h>
  156 +```
  157 +
  158 +### Build Project
  159 +
  160 +At this point your workspace should build without error. If you are having problem, post to the Issue and the
  161 +community can help you solve it.
  162 +
  163 +## Author
  164 +- [Olivier Poitrey](https://github.com/rs)
  165 +
  166 +## Collaborators
  167 +- [Konstantinos K.](https://github.com/mythodeia)
  168 +- [Bogdan Poplauschi](https://github.com/bpoplauschi)
  169 +- [Chester Liu](https://github.com/skyline75489)
  170 +- [DreamPiggy](https://github.com/dreampiggy)
  171 +- [Wu Zhong](https://github.com/zhongwuzw)
  172 +
  173 +## Licenses
  174 +
  175 +All source code is licensed under the [MIT License](https://raw.github.com/rs/SDWebImage/master/LICENSE).
  176 +
  177 +## Architecture
  178 +
  179 +#### High Level Diagram
  180 +<p align="center" >
  181 + <img src="Docs/Diagrams/SDWebImageHighLevelDiagram.jpeg" title="SDWebImage high level diagram">
  182 +</p>
  183 +
  184 +#### Overall Class Diagram
  185 +<p align="center" >
  186 + <img src="Docs/Diagrams/SDWebImageClassDiagram.png" title="SDWebImage overall class diagram">
  187 +</p>
  188 +
  189 +#### Top Level API Diagram
  190 +<p align="center" >
  191 + <img src="Docs/Diagrams/SDWebImageTopLevelClassDiagram.png" title="SDWebImage top level API diagram">
  192 +</p>
  193 +
  194 +#### Main Sequence Diagram
  195 +<p align="center" >
  196 + <img src="Docs/Diagrams/SDWebImageSequenceDiagram.png" title="SDWebImage sequence diagram">
  197 +</p>
  198 +
  199 +#### More detailed diagrams
  200 +- [Manager API Diagram](Docs/Diagrams/SDWebImageManagerClassDiagram.png)
  201 +- [Coders API Diagram](Docs/Diagrams/SDWebImageCodersClassDiagram.png)
  202 +- [Loader API Diagram](Docs/Diagrams/SDWebImageLoaderClassDiagram.png)
  203 +- [Cache API Diagram](Docs/Diagrams/SDWebImageCacheClassDiagram.png)
0 \ No newline at end of file 204 \ No newline at end of file
Example/Pods/SDWebImage/SDWebImage/NSButton+WebCache.h 0 → 100644
  1 +/*
  2 + * This file is part of the SDWebImage package.
  3 + * (c) Olivier Poitrey <rs@dailymotion.com>
  4 + *
  5 + * For the full copyright and license information, please view the LICENSE
  6 + * file that was distributed with this source code.
  7 + */
  8 +
  9 +#import "SDWebImageCompat.h"
  10 +
  11 +#if SD_MAC
  12 +
  13 +#import "SDWebImageManager.h"
  14 +
  15 +@interface NSButton (WebCache)
  16 +
  17 +#pragma mark - Image
  18 +
  19 +/**
  20 + * Get the current image URL.
  21 + */
  22 +@property (nonatomic, strong, readonly, nullable) NSURL *sd_currentImageURL;
  23 +
  24 +/**
  25 + * Set the button `image` with an `url`.
  26 + *
  27 + * The download is asynchronous and cached.
  28 + *
  29 + * @param url The url for the image.
  30 + */
  31 +- (void)sd_setImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT;
  32 +
  33 +/**
  34 + * Set the button `image` with an `url` and a placeholder.
  35 + *
  36 + * The download is asynchronous and cached.
  37 + *
  38 + * @param url The url for the image.
  39 + * @param placeholder The image to be set initially, until the image request finishes.
  40 + * @see sd_setImageWithURL:placeholderImage:options:
  41 + */
  42 +- (void)sd_setImageWithURL:(nullable NSURL *)url
  43 + placeholderImage:(nullable UIImage *)placeholder NS_REFINED_FOR_SWIFT;
  44 +
  45 +/**
  46 + * Set the button `image` with an `url`, placeholder and custom options.
  47 + *
  48 + * The download is asynchronous and cached.
  49 + *
  50 + * @param url The url for the image.
  51 + * @param placeholder The image to be set initially, until the image request finishes.
  52 + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values.
  53 + */
  54 +- (void)sd_setImageWithURL:(nullable NSURL *)url
  55 + placeholderImage:(nullable UIImage *)placeholder
  56 + options:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT;
  57 +
  58 +/**
  59 + * Set the button `image` with an `url`, placeholder and custom options.
  60 + *
  61 + * The download is asynchronous and cached.
  62 + *
  63 + * @param url The url for the image.
  64 + * @param placeholder The image to be set initially, until the image request finishes.
  65 + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values.
  66 + * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold.
  67 + */
  68 +- (void)sd_setImageWithURL:(nullable NSURL *)url
  69 + placeholderImage:(nullable UIImage *)placeholder
  70 + options:(SDWebImageOptions)options
  71 + context:(nullable SDWebImageContext *)context;
  72 +
  73 +/**
  74 + * Set the button `image` with an `url`.
  75 + *
  76 + * The download is asynchronous and cached.
  77 + *
  78 + * @param url The url for the image.
  79 + * @param completedBlock A block called when operation has been completed. This block has no return value
  80 + * and takes the requested UIImage as first parameter. In case of error the image parameter
  81 + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean
  82 + * indicating if the image was retrieved from the local cache or from the network.
  83 + * The fourth parameter is the original image url.
  84 + */
  85 +- (void)sd_setImageWithURL:(nullable NSURL *)url
  86 + completed:(nullable SDExternalCompletionBlock)completedBlock;
  87 +
  88 +/**
  89 + * Set the button `image` with an `url`, placeholder.
  90 + *
  91 + * The download is asynchronous and cached.
  92 + *
  93 + * @param url The url for the image.
  94 + * @param placeholder The image to be set initially, until the image request finishes.
  95 + * @param completedBlock A block called when operation has been completed. This block has no return value
  96 + * and takes the requested UIImage as first parameter. In case of error the image parameter
  97 + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean
  98 + * indicating if the image was retrieved from the local cache or from the network.
  99 + * The fourth parameter is the original image url.
  100 + */
  101 +- (void)sd_setImageWithURL:(nullable NSURL *)url
  102 + placeholderImage:(nullable UIImage *)placeholder
  103 + completed:(nullable SDExternalCompletionBlock)completedBlock NS_REFINED_FOR_SWIFT;
  104 +
  105 +/**
  106 + * Set the button `image` with an `url`, placeholder and custom options.
  107 + *
  108 + * The download is asynchronous and cached.
  109 + *
  110 + * @param url The url for the image.
  111 + * @param placeholder The image to be set initially, until the image request finishes.
  112 + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values.
  113 + * @param completedBlock A block called when operation has been completed. This block has no return value
  114 + * and takes the requested UIImage as first parameter. In case of error the image parameter
  115 + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean
  116 + * indicating if the image was retrieved from the local cache or from the network.
  117 + * The fourth parameter is the original image url.
  118 + */
  119 +- (void)sd_setImageWithURL:(nullable NSURL *)url
  120 + placeholderImage:(nullable UIImage *)placeholder
  121 + options:(SDWebImageOptions)options
  122 + completed:(nullable SDExternalCompletionBlock)completedBlock;
  123 +
  124 +/**
  125 + * Set the button `image` with an `url`, placeholder and custom options.
  126 + *
  127 + * The download is asynchronous and cached.
  128 + *
  129 + * @param url The url for the image.
  130 + * @param placeholder The image to be set initially, until the image request finishes.
  131 + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values.
  132 + * @param progressBlock A block called while image is downloading
  133 + * @note the progress block is executed on a background queue
  134 + * @param completedBlock A block called when operation has been completed. This block has no return value
  135 + * and takes the requested UIImage as first parameter. In case of error the image parameter
  136 + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean
  137 + * indicating if the image was retrieved from the local cache or from the network.
  138 + * The fourth parameter is the original image url.
  139 + */
  140 +- (void)sd_setImageWithURL:(nullable NSURL *)url
  141 + placeholderImage:(nullable UIImage *)placeholder
  142 + options:(SDWebImageOptions)options
  143 + progress:(nullable SDImageLoaderProgressBlock)progressBlock
  144 + completed:(nullable SDExternalCompletionBlock)completedBlock;
  145 +
  146 +/**
  147 + * Set the button `image` with an `url`, placeholder and custom options.
  148 + *
  149 + * The download is asynchronous and cached.
  150 + *
  151 + * @param url The url for the image.
  152 + * @param placeholder The image to be set initially, until the image request finishes.
  153 + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values.
  154 + * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold.
  155 + * @param progressBlock A block called while image is downloading
  156 + * @note the progress block is executed on a background queue
  157 + * @param completedBlock A block called when operation has been completed. This block has no return value
  158 + * and takes the requested UIImage as first parameter. In case of error the image parameter
  159 + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean
  160 + * indicating if the image was retrieved from the local cache or from the network.
  161 + * The fourth parameter is the original image url.
  162 + */
  163 +- (void)sd_setImageWithURL:(nullable NSURL *)url
  164 + placeholderImage:(nullable UIImage *)placeholder
  165 + options:(SDWebImageOptions)options
  166 + context:(nullable SDWebImageContext *)context
  167 + progress:(nullable SDImageLoaderProgressBlock)progressBlock
  168 + completed:(nullable SDExternalCompletionBlock)completedBlock;
  169 +
  170 +#pragma mark - Alternate Image
  171 +
  172 +/**
  173 + * Get the current alternateImage URL.
  174 + */
  175 +@property (nonatomic, strong, readonly, nullable) NSURL *sd_currentAlternateImageURL;
  176 +
  177 +/**
  178 + * Set the button `alternateImage` with an `url`.
  179 + *
  180 + * The download is asynchronous and cached.
  181 + *
  182 + * @param url The url for the alternateImage.
  183 + */
  184 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT;
  185 +
  186 +/**
  187 + * Set the button `alternateImage` with an `url` and a placeholder.
  188 + *
  189 + * The download is asynchronous and cached.
  190 + *
  191 + * @param url The url for the alternateImage.
  192 + * @param placeholder The alternateImage to be set initially, until the alternateImage request finishes.
  193 + * @see sd_setAlternateImageWithURL:placeholderImage:options:
  194 + */
  195 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url
  196 + placeholderImage:(nullable UIImage *)placeholder NS_REFINED_FOR_SWIFT;
  197 +
  198 +/**
  199 + * Set the button `alternateImage` with an `url`, placeholder and custom options.
  200 + *
  201 + * The download is asynchronous and cached.
  202 + *
  203 + * @param url The url for the alternateImage.
  204 + * @param placeholder The alternateImage to be set initially, until the alternateImage request finishes.
  205 + * @param options The options to use when downloading the alternateImage. @see SDWebImageOptions for the possible values.
  206 + */
  207 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url
  208 + placeholderImage:(nullable UIImage *)placeholder
  209 + options:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT;
  210 +
  211 +/**
  212 + * Set the button `alternateImage` with an `url`, placeholder, custom options and context.
  213 + *
  214 + * The download is asynchronous and cached.
  215 + *
  216 + * @param url The url for the alternateImage.
  217 + * @param placeholder The alternateImage to be set initially, until the alternateImage request finishes.
  218 + * @param options The options to use when downloading the alternateImage. @see SDWebImageOptions for the possible values.
  219 + * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold.
  220 + */
  221 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url
  222 + placeholderImage:(nullable UIImage *)placeholder
  223 + options:(SDWebImageOptions)options
  224 + context:(nullable SDWebImageContext *)context;
  225 +
  226 +/**
  227 + * Set the button `alternateImage` with an `url`.
  228 + *
  229 + * The download is asynchronous and cached.
  230 + *
  231 + * @param url The url for the alternateImage.
  232 + * @param completedBlock A block called when operation has been completed. This block has no return value
  233 + * and takes the requested UIImage as first parameter. In case of error the alternateImage parameter
  234 + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean
  235 + * indicating if the alternateImage was retrieved from the local cache or from the network.
  236 + * The fourth parameter is the original alternateImage url.
  237 + */
  238 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url
  239 + completed:(nullable SDExternalCompletionBlock)completedBlock;
  240 +
  241 +/**
  242 + * Set the button `alternateImage` with an `url`, placeholder.
  243 + *
  244 + * The download is asynchronous and cached.
  245 + *
  246 + * @param url The url for the alternateImage.
  247 + * @param placeholder The alternateImage to be set initially, until the alternateImage request finishes.
  248 + * @param completedBlock A block called when operation has been completed. This block has no return value
  249 + * and takes the requested UIImage as first parameter. In case of error the alternateImage parameter
  250 + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean
  251 + * indicating if the alternateImage was retrieved from the local cache or from the network.
  252 + * The fourth parameter is the original alternateImage url.
  253 + */
  254 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url
  255 + placeholderImage:(nullable UIImage *)placeholder
  256 + completed:(nullable SDExternalCompletionBlock)completedBlock NS_REFINED_FOR_SWIFT;
  257 +
  258 +/**
  259 + * Set the button `alternateImage` with an `url`, placeholder and custom options.
  260 + *
  261 + * The download is asynchronous and cached.
  262 + *
  263 + * @param url The url for the alternateImage.
  264 + * @param placeholder The alternateImage to be set initially, until the alternateImage request finishes.
  265 + * @param options The options to use when downloading the alternateImage. @see SDWebImageOptions for the possible values.
  266 + * @param completedBlock A block called when operation has been completed. This block has no return value
  267 + * and takes the requested UIImage as first parameter. In case of error the alternateImage parameter
  268 + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean
  269 + * indicating if the alternateImage was retrieved from the local cache or from the network.
  270 + * The fourth parameter is the original alternateImage url.
  271 + */
  272 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url
  273 + placeholderImage:(nullable UIImage *)placeholder
  274 + options:(SDWebImageOptions)options
  275 + completed:(nullable SDExternalCompletionBlock)completedBlock;
  276 +
  277 +/**
  278 + * Set the button `alternateImage` with an `url`, placeholder and custom options.
  279 + *
  280 + * The download is asynchronous and cached.
  281 + *
  282 + * @param url The url for the alternateImage.
  283 + * @param placeholder The alternateImage to be set initially, until the alternateImage request finishes.
  284 + * @param options The options to use when downloading the alternateImage. @see SDWebImageOptions for the possible values.
  285 + * @param progressBlock A block called while alternateImage is downloading
  286 + * @note the progress block is executed on a background queue
  287 + * @param completedBlock A block called when operation has been completed. This block has no return value
  288 + * and takes the requested UIImage as first parameter. In case of error the alternateImage parameter
  289 + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean
  290 + * indicating if the alternateImage was retrieved from the local cache or from the network.
  291 + * The fourth parameter is the original alternateImage url.
  292 + */
  293 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url
  294 + placeholderImage:(nullable UIImage *)placeholder
  295 + options:(SDWebImageOptions)options
  296 + progress:(nullable SDImageLoaderProgressBlock)progressBlock
  297 + completed:(nullable SDExternalCompletionBlock)completedBlock;
  298 +
  299 +/**
  300 + * Set the button `alternateImage` with an `url`, placeholder, custom options and context.
  301 + *
  302 + * The download is asynchronous and cached.
  303 + *
  304 + * @param url The url for the alternateImage.
  305 + * @param placeholder The alternateImage to be set initially, until the alternateImage request finishes.
  306 + * @param options The options to use when downloading the alternateImage. @see SDWebImageOptions for the possible values.
  307 + * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold.
  308 + * @param progressBlock A block called while alternateImage is downloading
  309 + * @note the progress block is executed on a background queue
  310 + * @param completedBlock A block called when operation has been completed. This block has no return value
  311 + * and takes the requested UIImage as first parameter. In case of error the alternateImage parameter
  312 + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean
  313 + * indicating if the alternateImage was retrieved from the local cache or from the network.
  314 + * The fourth parameter is the original alternateImage url.
  315 + */
  316 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url
  317 + placeholderImage:(nullable UIImage *)placeholder
  318 + options:(SDWebImageOptions)options
  319 + context:(nullable SDWebImageContext *)context
  320 + progress:(nullable SDImageLoaderProgressBlock)progressBlock
  321 + completed:(nullable SDExternalCompletionBlock)completedBlock;
  322 +
  323 +#pragma mark - Cancel
  324 +
  325 +/**
  326 + * Cancel the current image download
  327 + */
  328 +- (void)sd_cancelCurrentImageLoad;
  329 +
  330 +/**
  331 + * Cancel the current alternateImage download
  332 + */
  333 +- (void)sd_cancelCurrentAlternateImageLoad;
  334 +
  335 +@end
  336 +
  337 +#endif
Example/Pods/SDWebImage/SDWebImage/NSButton+WebCache.m 0 → 100644
  1 +/*
  2 + * This file is part of the SDWebImage package.
  3 + * (c) Olivier Poitrey <rs@dailymotion.com>
  4 + *
  5 + * For the full copyright and license information, please view the LICENSE
  6 + * file that was distributed with this source code.
  7 + */
  8 +
  9 +#import "NSButton+WebCache.h"
  10 +
  11 +#if SD_MAC
  12 +
  13 +#import "objc/runtime.h"
  14 +#import "UIView+WebCacheOperation.h"
  15 +#import "UIView+WebCache.h"
  16 +
  17 +static NSString * const SDAlternateImageOperationKey = @"NSButtonAlternateImageOperation";
  18 +
  19 +@implementation NSButton (WebCache)
  20 +
  21 +#pragma mark - Image
  22 +
  23 +- (void)sd_setImageWithURL:(nullable NSURL *)url {
  24 + [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil];
  25 +}
  26 +
  27 +- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder {
  28 + [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil];
  29 +}
  30 +
  31 +- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options {
  32 + [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil];
  33 +}
  34 +
  35 +- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context {
  36 + [self sd_setImageWithURL:url placeholderImage:placeholder options:options context:context progress:nil completed:nil];
  37 +}
  38 +
  39 +- (void)sd_setImageWithURL:(nullable NSURL *)url completed:(nullable SDExternalCompletionBlock)completedBlock {
  40 + [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:completedBlock];
  41 +}
  42 +
  43 +- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder completed:(nullable SDExternalCompletionBlock)completedBlock {
  44 + [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:completedBlock];
  45 +}
  46 +
  47 +- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options completed:(nullable SDExternalCompletionBlock)completedBlock {
  48 + [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock];
  49 +}
  50 +
  51 +- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock {
  52 + [self sd_setImageWithURL:url placeholderImage:placeholder options:options context:nil progress:progressBlock completed:completedBlock];
  53 +}
  54 +
  55 +- (void)sd_setImageWithURL:(nullable NSURL *)url
  56 + placeholderImage:(nullable UIImage *)placeholder
  57 + options:(SDWebImageOptions)options
  58 + context:(nullable SDWebImageContext *)context
  59 + progress:(nullable SDImageLoaderProgressBlock)progressBlock
  60 + completed:(nullable SDExternalCompletionBlock)completedBlock {
  61 + self.sd_currentImageURL = url;
  62 + [self sd_internalSetImageWithURL:url
  63 + placeholderImage:placeholder
  64 + options:options
  65 + context:context
  66 + setImageBlock:nil
  67 + progress:progressBlock
  68 + completed:^(NSImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {
  69 + if (completedBlock) {
  70 + completedBlock(image, error, cacheType, imageURL);
  71 + }
  72 + }];
  73 +}
  74 +
  75 +#pragma mark - Alternate Image
  76 +
  77 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url {
  78 + [self sd_setAlternateImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil];
  79 +}
  80 +
  81 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder {
  82 + [self sd_setAlternateImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil];
  83 +}
  84 +
  85 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options {
  86 + [self sd_setAlternateImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil];
  87 +}
  88 +
  89 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context {
  90 + [self sd_setAlternateImageWithURL:url placeholderImage:placeholder options:options context:context progress:nil completed:nil];
  91 +}
  92 +
  93 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url completed:(nullable SDExternalCompletionBlock)completedBlock {
  94 + [self sd_setAlternateImageWithURL:url placeholderImage:nil options:0 progress:nil completed:completedBlock];
  95 +}
  96 +
  97 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder completed:(nullable SDExternalCompletionBlock)completedBlock {
  98 + [self sd_setAlternateImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:completedBlock];
  99 +}
  100 +
  101 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options completed:(nullable SDExternalCompletionBlock)completedBlock {
  102 + [self sd_setAlternateImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock];
  103 +}
  104 +
  105 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock {
  106 + [self sd_setAlternateImageWithURL:url placeholderImage:placeholder options:options context:nil progress:progressBlock completed:completedBlock];
  107 +}
  108 +
  109 +- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url
  110 + placeholderImage:(nullable UIImage *)placeholder
  111 + options:(SDWebImageOptions)options
  112 + context:(nullable SDWebImageContext *)context
  113 + progress:(nullable SDImageLoaderProgressBlock)progressBlock
  114 + completed:(nullable SDExternalCompletionBlock)completedBlock {
  115 + self.sd_currentAlternateImageURL = url;
  116 +
  117 + SDWebImageMutableContext *mutableContext;
  118 + if (context) {
  119 + mutableContext = [context mutableCopy];
  120 + } else {
  121 + mutableContext = [NSMutableDictionary dictionary];
  122 + }
  123 + mutableContext[SDWebImageContextSetImageOperationKey] = SDAlternateImageOperationKey;
  124 + __weak typeof(self)weakSelf = self;
  125 + [self sd_internalSetImageWithURL:url
  126 + placeholderImage:placeholder
  127 + options:options
  128 + context:mutableContext
  129 + setImageBlock:^(NSImage * _Nullable image, NSData * _Nullable imageData, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
  130 + weakSelf.alternateImage = image;
  131 + }
  132 + progress:progressBlock
  133 + completed:^(NSImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {
  134 + if (completedBlock) {
  135 + completedBlock(image, error, cacheType, imageURL);
  136 + }
  137 + }];
  138 +}
  139 +
  140 +#pragma mark - Cancel
  141 +
  142 +- (void)sd_cancelCurrentImageLoad {
  143 + [self sd_cancelImageLoadOperationWithKey:NSStringFromClass([self class])];
  144 +}
  145 +
  146 +- (void)sd_cancelCurrentAlternateImageLoad {
  147 + [self sd_cancelImageLoadOperationWithKey:SDAlternateImageOperationKey];
  148 +}
  149 +
  150 +#pragma mar - Private
  151 +
  152 +- (NSURL *)sd_currentImageURL {
  153 + return objc_getAssociatedObject(self, @selector(sd_currentImageURL));
  154 +}
  155 +
  156 +- (void)setSd_currentImageURL:(NSURL *)sd_currentImageURL {
  157 + objc_setAssociatedObject(self, @selector(sd_currentImageURL), sd_currentImageURL, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  158 +}
  159 +
  160 +- (NSURL *)sd_currentAlternateImageURL {
  161 + return objc_getAssociatedObject(self, @selector(sd_currentAlternateImageURL));
  162 +}
  163 +
  164 +- (void)setSd_currentAlternateImageURL:(NSURL *)sd_currentAlternateImageURL {
  165 + objc_setAssociatedObject(self, @selector(sd_currentAlternateImageURL), sd_currentAlternateImageURL, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  166 +}
  167 +
  168 +@end
  169 +
  170 +#endif
Example/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h 0 → 100644
  1 +/*
  2 + * This file is part of the SDWebImage package.
  3 + * (c) Olivier Poitrey <rs@dailymotion.com>
  4 + * (c) Fabrice Aneche
  5 + *
  6 + * For the full copyright and license information, please view the LICENSE
  7 + * file that was distributed with this source code.
  8 + */
  9 +
  10 +#import <Foundation/Foundation.h>
  11 +#import "SDWebImageCompat.h"
  12 +
  13 +/**
  14 + You can use switch case like normal enum. It's also recommended to add a default case. You should not assume anything about the raw value.
  15 + For custom coder plugin, it can also extern the enum for supported format. See `SDImageCoder` for more detailed information.
  16 + */
  17 +typedef NSInteger SDImageFormat NS_TYPED_EXTENSIBLE_ENUM;
  18 +static const SDImageFormat SDImageFormatUndefined = -1;
  19 +static const SDImageFormat SDImageFormatJPEG = 0;
  20 +static const SDImageFormat SDImageFormatPNG = 1;
  21 +static const SDImageFormat SDImageFormatGIF = 2;
  22 +static const SDImageFormat SDImageFormatTIFF = 3;
  23 +static const SDImageFormat SDImageFormatWebP = 4;
  24 +static const SDImageFormat SDImageFormatHEIC = 5;
  25 +static const SDImageFormat SDImageFormatHEIF = 6;
  26 +
  27 +@interface NSData (ImageContentType)
  28 +
  29 +/**
  30 + * Return image format
  31 + *
  32 + * @param data the input image data
  33 + *
  34 + * @return the image format as `SDImageFormat` (enum)
  35 + */
  36 ++ (SDImageFormat)sd_imageFormatForImageData:(nullable NSData *)data;
  37 +
  38 +/**
  39 + * Convert SDImageFormat to UTType
  40 + *
  41 + * @param format Format as SDImageFormat
  42 + * @return The UTType as CFStringRef
  43 + */
  44 ++ (nonnull CFStringRef)sd_UTTypeFromImageFormat:(SDImageFormat)format CF_RETURNS_NOT_RETAINED NS_SWIFT_NAME(sd_UTType(from:));
  45 +
  46 +/**
  47 + * Convert UTTyppe to SDImageFormat
  48 + *
  49 + * @param uttype The UTType as CFStringRef
  50 + * @return The Format as SDImageFormat
  51 + */
  52 ++ (SDImageFormat)sd_imageFormatFromUTType:(nonnull CFStringRef)uttype;
  53 +
  54 +@end
Example/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m 0 → 100644
  1 +/*
  2 + * This file is part of the SDWebImage package.
  3 + * (c) Olivier Poitrey <rs@dailymotion.com>
  4 + * (c) Fabrice Aneche
  5 + *
  6 + * For the full copyright and license information, please view the LICENSE
  7 + * file that was distributed with this source code.
  8 + */
  9 +
  10 +#import "NSData+ImageContentType.h"
  11 +#if SD_MAC
  12 +#import <CoreServices/CoreServices.h>
  13 +#else
  14 +#import <MobileCoreServices/MobileCoreServices.h>
  15 +#endif
  16 +
  17 +// Currently Image/IO does not support WebP
  18 +#define kSDUTTypeWebP ((__bridge CFStringRef)@"public.webp")
  19 +// AVFileTypeHEIC/AVFileTypeHEIF is defined in AVFoundation via iOS 11, we use this without import AVFoundation
  20 +#define kSDUTTypeHEIC ((__bridge CFStringRef)@"public.heic")
  21 +#define kSDUTTypeHEIF ((__bridge CFStringRef)@"public.heif")
  22 +
  23 +@implementation NSData (ImageContentType)
  24 +
  25 ++ (SDImageFormat)sd_imageFormatForImageData:(nullable NSData *)data {
  26 + if (!data) {
  27 + return SDImageFormatUndefined;
  28 + }
  29 +
  30 + // File signatures table: http://www.garykessler.net/library/file_sigs.html
  31 + uint8_t c;
  32 + [data getBytes:&c length:1];
  33 + switch (c) {
  34 + case 0xFF:
  35 + return SDImageFormatJPEG;
  36 + case 0x89:
  37 + return SDImageFormatPNG;
  38 + case 0x47:
  39 + return SDImageFormatGIF;
  40 + case 0x49:
  41 + case 0x4D:
  42 + return SDImageFormatTIFF;
  43 + case 0x52: {
  44 + if (data.length >= 12) {
  45 + //RIFF....WEBP
  46 + NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
  47 + if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) {
  48 + return SDImageFormatWebP;
  49 + }
  50 + }
  51 + break;
  52 + }
  53 + case 0x00: {
  54 + if (data.length >= 12) {
  55 + //....ftypheic ....ftypheix ....ftyphevc ....ftyphevx
  56 + NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(4, 8)] encoding:NSASCIIStringEncoding];
  57 + if ([testString isEqualToString:@"ftypheic"]
  58 + || [testString isEqualToString:@"ftypheix"]
  59 + || [testString isEqualToString:@"ftyphevc"]
  60 + || [testString isEqualToString:@"ftyphevx"]) {
  61 + return SDImageFormatHEIC;
  62 + }
  63 + //....ftypmif1 ....ftypmsf1
  64 + if ([testString isEqualToString:@"ftypmif1"] || [testString isEqualToString:@"ftypmsf1"]) {
  65 + return SDImageFormatHEIF;
  66 + }
  67 + }
  68 + break;
  69 + }
  70 + }
  71 + return SDImageFormatUndefined;
  72 +}
  73 +
  74 ++ (nonnull CFStringRef)sd_UTTypeFromImageFormat:(SDImageFormat)format {
  75 + CFStringRef UTType;
  76 + switch (format) {
  77 + case SDImageFormatJPEG:
  78 + UTType = kUTTypeJPEG;
  79 + break;
  80 + case SDImageFormatPNG:
  81 + UTType = kUTTypePNG;
  82 + break;
  83 + case SDImageFormatGIF:
  84 + UTType = kUTTypeGIF;
  85 + break;
  86 + case SDImageFormatTIFF:
  87 + UTType = kUTTypeTIFF;
  88 + break;
  89 + case SDImageFormatWebP:
  90 + UTType = kSDUTTypeWebP;
  91 + break;
  92 + case SDImageFormatHEIC:
  93 + UTType = kSDUTTypeHEIC;
  94 + break;
  95 + case SDImageFormatHEIF:
  96 + UTType = kSDUTTypeHEIF;
  97 + break;
  98 + default:
  99 + // default is kUTTypePNG
  100 + UTType = kUTTypePNG;
  101 + break;
  102 + }
  103 + return UTType;
  104 +}
  105 +
  106 ++ (SDImageFormat)sd_imageFormatFromUTType:(CFStringRef)uttype {
  107 + if (!uttype) {
  108 + return SDImageFormatUndefined;
  109 + }
  110 + SDImageFormat imageFormat;
  111 + if (CFStringCompare(uttype, kUTTypeJPEG, 0) == kCFCompareEqualTo) {
  112 + imageFormat = SDImageFormatJPEG;
  113 + } else if (CFStringCompare(uttype, kUTTypePNG, 0) == kCFCompareEqualTo) {
  114 + imageFormat = SDImageFormatPNG;
  115 + } else if (CFStringCompare(uttype, kUTTypeGIF, 0) == kCFCompareEqualTo) {
  116 + imageFormat = SDImageFormatGIF;
  117 + } else if (CFStringCompare(uttype, kUTTypeTIFF, 0) == kCFCompareEqualTo) {
  118 + imageFormat = SDImageFormatTIFF;
  119 + } else if (CFStringCompare(uttype, kSDUTTypeWebP, 0) == kCFCompareEqualTo) {
  120 + imageFormat = SDImageFormatWebP;
  121 + } else if (CFStringCompare(uttype, kSDUTTypeHEIC, 0) == kCFCompareEqualTo) {
  122 + imageFormat = SDImageFormatHEIC;
  123 + } else if (CFStringCompare(uttype, kSDUTTypeHEIF, 0) == kCFCompareEqualTo) {
  124 + imageFormat = SDImageFormatHEIF;
  125 + } else {
  126 + imageFormat = SDImageFormatUndefined;
  127 + }
  128 + return imageFormat;
  129 +}
  130 +
  131 +@end
Example/Pods/SDWebImage/SDWebImage/NSImage+Compatibility.h 0 → 100644
  1 +/*
  2 + * This file is part of the SDWebImage package.
  3 + * (c) Olivier Poitrey <rs@dailymotion.com>
  4 + *
  5 + * For the full copyright and license information, please view the LICENSE
  6 + * file that was distributed with this source code.
  7 + */
  8 +
  9 +#import "SDWebImageCompat.h"
  10 +
  11 +// This category is provided to easily write cross-platform(AppKit/UIKit) code. For common usage, see `UIImage+Metadata.h`.
  12 +
  13 +#if SD_MAC
  14 +
  15 +@interface NSImage (Compatibility)
  16 +
  17 +/**
  18 +The underlying Core Graphics image object. This will actually use `CGImageForProposedRect` with the image size.
  19 + */
  20 +@property (nonatomic, readonly, nullable) CGImageRef CGImage;
  21 +/**
  22 + The scale factor of the image. This wil actually use `bestRepresentationForRect` with image size and pixel size to calculate the scale factor. If failed, use the default value 1.0. Should be greater than or equal to 1.0.
  23 + */
  24 +@property (nonatomic, readonly) CGFloat scale;
  25 +
  26 +// These are convenience methods to make AppKit's `NSImage` match UIKit's `UIImage` behavior. The scale factor should be greater than or equal to 1.0.
  27 +
  28 +/**
  29 + Returns an image object with the scale factor and orientation. The representation is created from the Core Graphics image object.
  30 + @note The difference between this and `initWithCGImage:size` is that `initWithCGImage:size` will actually create a `NSCGImageSnapshotRep` representation and always use `backingScaleFactor` as scale factor. So we should avoid it and use `NSBitmapImageRep` with `initWithCGImage:` instead.
  31 + @note The difference between this and UIKit's `UIImage` equivalent method is the way to process orientation. If the provided image orientation is not equal to Up orientation, this method will firstly rotate the CGImage to the correct orientation to work compatible with `NSImageView`. However, UIKit will not actually rotate CGImage and just store it as `imageOrientation` property.
  32 +
  33 + @param cgImage A Core Graphics image object
  34 + @param scale The image scale factor
  35 + @param orientation The orientation of the image data
  36 + @return The image object
  37 + */
  38 +- (nonnull instancetype)initWithCGImage:(nonnull CGImageRef)cgImage scale:(CGFloat)scale orientation:(CGImagePropertyOrientation)orientation;
  39 +
  40 +/**
  41 + Returns an image object with the scale factor. The representation is created from the image data.
  42 + @note The difference between these this and `initWithData:` is that `initWithData:` will always use `backingScaleFactor` as scale factor.
  43 +
  44 + @param data The image data
  45 + @param scale The image scale factor
  46 + @return The image object
  47 + */
  48 +- (nullable instancetype)initWithData:(nonnull NSData *)data scale:(CGFloat)scale;
  49 +
  50 +@end
  51 +
  52 +#endif
Example/Pods/SDWebImage/SDWebImage/NSImage+Compatibility.m 0 → 100644
  1 +/*
  2 + * This file is part of the SDWebImage package.
  3 + * (c) Olivier Poitrey <rs@dailymotion.com>
  4 + *
  5 + * For the full copyright and license information, please view the LICENSE
  6 + * file that was distributed with this source code.
  7 + */
  8 +
  9 +#import "NSImage+Compatibility.h"
  10 +
  11 +#if SD_MAC
  12 +
  13 +#import "SDImageCoderHelper.h"
  14 +
  15 +@implementation NSImage (Compatibility)
  16 +
  17 +- (CGImageRef)CGImage {
  18 + NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height);
  19 + CGImageRef cgImage = [self CGImageForProposedRect:&imageRect context:nil hints:nil];
  20 + return cgImage;
  21 +}
  22 +
  23 +- (CGFloat)scale {
  24 + CGFloat scale = 1;
  25 + NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height);
  26 + NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil];
  27 + CGFloat width = imageRep.size.width;
  28 + CGFloat height = imageRep.size.height;
  29 + NSUInteger pixelWidth = imageRep.pixelsWide;
  30 + NSUInteger pixelHeight = imageRep.pixelsHigh;
  31 + if (width > 0 && height > 0) {
  32 + CGFloat widthScale = pixelWidth / width;
  33 + CGFloat heightScale = pixelHeight / height;
  34 + if (widthScale == heightScale && widthScale >= 1) {
  35 + // Protect because there may be `NSImageRepMatchesDevice` (0)
  36 + scale = widthScale;
  37 + }
  38 + }
  39 +
  40 + return scale;
  41 +}
  42 +
  43 +- (instancetype)initWithCGImage:(CGImageRef)cgImage scale:(CGFloat)scale orientation:(CGImagePropertyOrientation)orientation {
  44 + NSBitmapImageRep *imageRep;
  45 + if (orientation != kCGImagePropertyOrientationUp) {
  46 + // AppKit design is different from UIKit. Where CGImage based image rep does not respect to any orientation. Only data based image rep which contains the EXIF metadata can automatically detect orientation.
  47 + // This should be nonnull, until the memory is exhausted cause `CGBitmapContextCreate` failed.
  48 + CGImageRef rotatedCGImage = [SDImageCoderHelper CGImageCreateDecoded:cgImage orientation:orientation];
  49 + imageRep = [[NSBitmapImageRep alloc] initWithCGImage:rotatedCGImage];
  50 + CGImageRelease(rotatedCGImage);
  51 + } else {
  52 + imageRep = [[NSBitmapImageRep alloc] initWithCGImage:cgImage];
  53 + }
  54 + if (scale < 1) {
  55 + scale = 1;
  56 + }
  57 + CGFloat pixelWidth = imageRep.pixelsWide;
  58 + CGFloat pixelHeight = imageRep.pixelsHigh;
  59 + NSSize size = NSMakeSize(pixelWidth / scale, pixelHeight / scale);
  60 + self = [self initWithSize:size];
  61 + if (self) {
  62 + imageRep.size = size;
  63 + [self addRepresentation:imageRep];
  64 + }
  65 + return self;
  66 +}
  67 +
  68 +- (instancetype)initWithData:(NSData *)data scale:(CGFloat)scale {
  69 + NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithData:data];
  70 + if (!imageRep) {
  71 + return nil;
  72 + }
  73 + if (scale < 1) {
  74 + scale = 1;
  75 + }
  76 + CGFloat pixelWidth = imageRep.pixelsWide;
  77 + CGFloat pixelHeight = imageRep.pixelsHigh;
  78 + NSSize size = NSMakeSize(pixelWidth / scale, pixelHeight / scale);
  79 + self = [self initWithSize:size];
  80 + if (self) {
  81 + imageRep.size = size;
  82 + [self addRepresentation:imageRep];
  83 + }
  84 + return self;
  85 +}
  86 +
  87 +@end
  88 +
  89 +#endif
Example/Pods/SDWebImage/SDWebImage/SDAnimatedImage.h 0 → 100644
  1 +/*
  2 + * This file is part of the SDWebImage package.
  3 + * (c) Olivier Poitrey <rs@dailymotion.com>
  4 + *
  5 + * For the full copyright and license information, please view the LICENSE
  6 + * file that was distributed with this source code.
  7 + */
  8 +
  9 +#import "SDWebImageCompat.h"
  10 +#import "SDImageCoder.h"
  11 +
  12 +
  13 +/**
  14 + This is the protocol for SDAnimatedImage class only but not for SDAnimatedImageCoder. If you want to provide a custom animated image class with full advanced function, you can conform to this instead of the base protocol.
  15 + */
  16 +@protocol SDAnimatedImage <SDAnimatedImageProvider>
  17 +
  18 +@required
  19 +/**
  20 + Initializes and returns the image object with the specified data, scale factor and possible animation decoding options.
  21 + @note We use this to create animated image instance for normal animation decoding.
  22 +
  23 + @param data The data object containing the image data.
  24 + @param scale The scale factor to assume when interpreting the image data. Applying a scale factor of 1.0 results in an image whose size matches the pixel-based dimensions of the image. Applying a different scale factor changes the size of the image as reported by the `size` property.
  25 + @param options A dictionary containing any animation decoding options.
  26 + @return An initialized object
  27 + */
  28 +- (nullable instancetype)initWithData:(nonnull NSData *)data scale:(CGFloat)scale options:(nullable SDImageCoderOptions *)options;
  29 +
  30 +/**
  31 + Initializes the image with an animated coder. You can use the coder to decode the image frame later.
  32 + @note We use this with animated coder which conforms to `SDProgressiveImageCoder` for progressive animation decoding.
  33 +
  34 + @param animatedCoder An animated coder which conform `SDAnimatedImageCoder` protocol
  35 + @param scale The scale factor to assume when interpreting the image data. Applying a scale factor of 1.0 results in an image whose size matches the pixel-based dimensions of the image. Applying a different scale factor changes the size of the image as reported by the `size` property.
  36 + @return An initialized object
  37 + */
  38 +- (nullable instancetype)initWithAnimatedCoder:(nonnull id<SDAnimatedImageCoder>)animatedCoder scale:(CGFloat)scale;
  39 +
  40 +@optional
  41 +// These methods are used for optional advanced feature, like image frame preloading.
  42 +/**
  43 + Pre-load all animated image frame into memory. Then later frame image request can directly return the frame for index without decoding.
  44 + This method may be called on background thread.
  45 +
  46 + @note If one image instance is shared by lots of imageViews, the CPU performance for large animated image will drop down because the request frame index will be random (not in order) and the decoder should take extra effort to keep it re-entrant. You can use this to reduce CPU usage if need. Attention this will consume more memory usage.
  47 + */
  48 +- (void)preloadAllFrames;
  49 +
  50 +/**
  51 + Unload all animated image frame from memory if are already pre-loaded. Then later frame image request need decoding. You can use this to free up the memory usage if need.
  52 + */
  53 +- (void)unloadAllFrames;
  54 +
  55 +/**
  56 + Returns a Boolean value indicating whether all animated image frames are already pre-loaded into memory.
  57 + */
  58 +@property (nonatomic, assign, readonly, getter=isAllFramesLoaded) BOOL allFramesLoaded;
  59 +
  60 +@end
  61 +
  62 +@interface SDAnimatedImage : UIImage <SDAnimatedImage>
  63 +
  64 +// This class override these methods from UIImage(NSImage), and it supports NSSecureCoding.
  65 +// You should use these methods to create a new animated image. Use other methods just call super instead.
  66 ++ (nullable instancetype)imageNamed:(nonnull NSString *)name; // Cache in memory, no Asset Catalog support
  67 +#if __has_include(<UIKit/UITraitCollection.h>)
  68 ++ (nullable instancetype)imageNamed:(nonnull NSString *)name inBundle:(nullable NSBundle *)bundle compatibleWithTraitCollection:(nullable UITraitCollection *)traitCollection; // Cache in memory, no Asset Catalog support
  69 +#else
  70 ++ (nullable instancetype)imageNamed:(nonnull NSString *)name inBundle:(nullable NSBundle *)bundle; // Cache in memory, no Asset Catalog support
  71 +#endif
  72 ++ (nullable instancetype)imageWithContentsOfFile:(nonnull NSString *)path;
  73 ++ (nullable instancetype)imageWithData:(nonnull NSData *)data;
  74 ++ (nullable instancetype)imageWithData:(nonnull NSData *)data scale:(CGFloat)scale;
  75 +- (nullable instancetype)initWithContentsOfFile:(nonnull NSString *)path;
  76 +- (nullable instancetype)initWithData:(nonnull NSData *)data;
  77 +- (nullable instancetype)initWithData:(nonnull NSData *)data scale:(CGFloat)scale;
  78 +
  79 +/**
  80 + Current animated image format.
  81 + */
  82 +@property (nonatomic, assign, readonly) SDImageFormat animatedImageFormat;
  83 +
  84 +/**
  85 + Current animated image data, you can use this instead of CGImage to create another instance.
  86 + If the current image is not animated image, this value is nil.
  87 + */
  88 +@property (nonatomic, copy, readonly, nullable) NSData *animatedImageData;
  89 +
  90 +/**
  91 + The scale factor of the image.
  92 +
  93 + @note For UIKit, this just call super instead.
  94 + @note For AppKit, `NSImage` can contains multiple image representations with different scales. However, this class does not do that from the design. We processs the scale like UIKit. This wil actually be calculated from image size and pixel size.
  95 + */
  96 +@property (nonatomic, readonly) CGFloat scale;
  97 +
  98 +// By default, animated image frames are returned by decoding just in time without keeping into memory. But you can choose to preload them into memory as well, See the decsription in `SDAnimatedImage` protocol.
  99 +// After preloaded, there is no huge difference on performance between this and UIImage's `animatedImageWithImages:duration:`. But UIImage's animation have some issues such like blanking and pausing during segue when using in `UIImageView`. It's recommend to use only if need.
  100 +- (void)preloadAllFrames;
  101 +- (void)unloadAllFrames;
  102 +@property (nonatomic, assign, readonly, getter=isAllFramesLoaded) BOOL allFramesLoaded;
  103 +
  104 +@end
Example/Pods/SDWebImage/SDWebImage/SDAnimatedImage.m 0 → 100644
  1 +/*
  2 + * This file is part of the SDWebImage package.
  3 + * (c) Olivier Poitrey <rs@dailymotion.com>
  4 + *
  5 + * For the full copyright and license information, please view the LICENSE
  6 + * file that was distributed with this source code.
  7 + */
  8 +
  9 +#import "SDAnimatedImage.h"
  10 +#import "NSImage+Compatibility.h"
  11 +#import "SDImageCoder.h"
  12 +#import "SDImageCodersManager.h"
  13 +#import "SDImageFrame.h"
  14 +
  15 +static CGFloat SDImageScaleFromPath(NSString *string) {
  16 + if (string.length == 0 || [string hasSuffix:@"/"]) return 1;
  17 + NSString *name = string.stringByDeletingPathExtension;
  18 + __block CGFloat scale = 1;
  19 +
  20 + NSRegularExpression *pattern = [NSRegularExpression regularExpressionWithPattern:@"@[0-9]+\\.?[0-9]*x$" options:NSRegularExpressionAnchorsMatchLines error:nil];
  21 + [pattern enumerateMatchesInString:name options:kNilOptions range:NSMakeRange(0, name.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
  22 + if (result.range.location >= 3) {
  23 + scale = [string substringWithRange:NSMakeRange(result.range.location + 1, result.range.length - 2)].doubleValue;
  24 + }
  25 + }];
  26 +
  27 + return scale;
  28 +}
  29 +
  30 +static NSArray *SDBundlePreferredScales() {
  31 + static NSArray *scales;
  32 + static dispatch_once_t onceToken;
  33 + dispatch_once(&onceToken, ^{
  34 +#if SD_WATCH
  35 + CGFloat screenScale = [WKInterfaceDevice currentDevice].screenScale;
  36 +#elif SD_UIKIT
  37 + CGFloat screenScale = [UIScreen mainScreen].scale;
  38 +#elif SD_MAC
  39 + CGFloat screenScale = [NSScreen mainScreen].backingScaleFactor;
  40 +#endif
  41 + if (screenScale <= 1) {
  42 + scales = @[@1,@2,@3];
  43 + } else if (screenScale <= 2) {
  44 + scales = @[@2,@3,@1];
  45 + } else {
  46 + scales = @[@3,@2,@1];
  47 + }
  48 + });
  49 + return scales;
  50 +}
  51 +
  52 +#pragma mark - UIImage cache for bundle
  53 +
  54 +// Apple parse the Asset Catalog compiled file(`Assets.car`) by CoreUI.framework, however it's a private framework and there are no other ways to directly get the data. So we just process the normal bundle files :)
  55 +
  56 +@interface SDImageAssetManager : NSObject {
  57 + dispatch_semaphore_t _lock;
  58 +}
  59 +
  60 +@property (nonatomic, strong) NSMapTable<NSString *, UIImage *> *imageTable;
  61 +
  62 ++ (instancetype)sharedAssetManager;
  63 +- (nullable NSString *)getPathForName:(nonnull NSString *)name bundle:(nonnull NSBundle *)bundle preferredScale:(CGFloat *)scale;
  64 +- (nullable UIImage *)imageForName:(nonnull NSString *)name;
  65 +- (void)storeImage:(nonnull UIImage *)image forName:(nonnull NSString *)name;
  66 +
  67 +@end
  68 +
  69 +@implementation SDImageAssetManager
  70 +
  71 ++ (instancetype)sharedAssetManager {
  72 + static dispatch_once_t onceToken;
  73 + static SDImageAssetManager *assetManager;
  74 + dispatch_once(&onceToken, ^{
  75 + assetManager = [[SDImageAssetManager alloc] init];
  76 + });
  77 + return assetManager;
  78 +}
  79 +
  80 +- (instancetype)init {
  81 + self = [super init];
  82 + if (self) {
  83 + NSPointerFunctionsOptions valueOptions;
  84 +#if SD_MAC
  85 + // Apple says that NSImage use a weak reference to value
  86 + valueOptions = NSPointerFunctionsWeakMemory;
  87 +#else
  88 + // Apple says that UIImage use a strong reference to value
  89 + valueOptions = NSPointerFunctionsStrongMemory;
  90 +#endif
  91 + _imageTable = [NSMapTable mapTableWithKeyOptions:NSPointerFunctionsCopyIn valueOptions:valueOptions];
  92 + _lock = dispatch_semaphore_create(1);
  93 +#if SD_UIKIT
  94 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveMemoryWarning:) name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
  95 +#endif
  96 + }
  97 + return self;
  98 +}
  99 +
  100 +- (void)dealloc {
  101 +#if SD_UIKIT
  102 + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
  103 +#endif
  104 +}
  105 +
  106 +- (void)didReceiveMemoryWarning:(NSNotification *)notification {
  107 + LOCKBLOCK({
  108 + [self.imageTable removeAllObjects];
  109 + });
  110 +}
  111 +
  112 +- (NSString *)getPathForName:(NSString *)name bundle:(NSBundle *)bundle preferredScale:(CGFloat *)scale {
  113 + NSParameterAssert(name);
  114 + NSParameterAssert(bundle);
  115 + NSString *path;
  116 + if (name.length == 0) {
  117 + return path;
  118 + }
  119 + if ([name hasSuffix:@"/"]) {
  120 + return path;
  121 + }
  122 + NSString *extension = name.pathExtension;
  123 + if (extension.length == 0) {
  124 + // If no extension, follow Apple's doc, check PNG format
  125 + extension = @"png";
  126 + }
  127 + name = [name stringByDeletingPathExtension];
  128 +
  129 + CGFloat providedScale = *scale;
  130 + NSArray *scales = SDBundlePreferredScales();
  131 +
  132 + // Check if file name contains scale
  133 + for (size_t i = 0; i < scales.count; i++) {
  134 + NSNumber *scaleValue = scales[i];
  135 + if ([name hasSuffix:[NSString stringWithFormat:@"@%@x", scaleValue]]) {
  136 + path = [bundle pathForResource:name ofType:extension];
  137 + if (path) {
  138 + *scale = scaleValue.doubleValue; // override
  139 + return path;
  140 + }
  141 + }
  142 + }
  143 +
  144 + // Search with provided scale first
  145 + if (providedScale != 0) {
  146 + NSString *scaledName = [name stringByAppendingFormat:@"@%@x", @(providedScale)];
  147 + path = [bundle pathForResource:scaledName ofType:extension];
  148 + if (path) {
  149 + return path;
  150 + }
  151 + }
  152 +
  153 + // Search with preferred scale
  154 + for (size_t i = 0; i < scales.count; i++) {
  155 + NSNumber *scaleValue = scales[i];
  156 + if (scaleValue.doubleValue == providedScale) {
  157 + // Ignore provided scale
  158 + continue;
  159 + }
  160 + NSString *scaledName = [name stringByAppendingFormat:@"@%@x", scaleValue];
  161 + path = [bundle pathForResource:scaledName ofType:extension];
  162 + if (path) {
  163 + *scale = scaleValue.doubleValue; // override
  164 + return path;
  165 + }
  166 + }
  167 +
  168 + // Search without scale
  169 + path = [bundle pathForResource:name ofType:extension];
  170 +
  171 + return path;
  172 +}
  173 +
  174 +- (UIImage *)imageForName:(NSString *)name {
  175 + NSParameterAssert(name);
  176 + UIImage *image;
  177 + LOCKBLOCK({
  178 + image = [self.imageTable objectForKey:name];
  179 + });
  180 + return image;
  181 +}
  182 +
  183 +- (void)storeImage:(UIImage *)image forName:(NSString *)name {
  184 + NSParameterAssert(image);
  185 + NSParameterAssert(name);
  186 + LOCKBLOCK({
  187 + [self.imageTable setObject:image forKey:name];
  188 + });
  189 +}
  190 +
  191 +@end
  192 +
  193 +@interface SDAnimatedImage ()
  194 +
  195 +@property (nonatomic, strong) id<SDAnimatedImageCoder> coder;
  196 +@property (nonatomic, assign, readwrite) SDImageFormat animatedImageFormat;
  197 +@property (atomic, copy) NSArray<SDImageFrame *> *loadedAnimatedImageFrames; // Mark as atomic to keep thread-safe
  198 +@property (nonatomic, assign, getter=isAllFramesLoaded) BOOL allFramesLoaded;
  199 +
  200 +@end
  201 +
  202 +@implementation SDAnimatedImage
  203 +@dynamic scale; // call super
  204 +
  205 +#pragma mark - UIImage override method
  206 ++ (instancetype)imageNamed:(NSString *)name {
  207 +#if __has_include(<UIKit/UITraitCollection.h>)
  208 + return [self imageNamed:name inBundle:nil compatibleWithTraitCollection:nil];
  209 +#else
  210 + return [self imageNamed:name inBundle:nil];
  211 +#endif
  212 +}
  213 +
  214 +#if __has_include(<UIKit/UITraitCollection.h>)
  215 ++ (instancetype)imageNamed:(NSString *)name inBundle:(NSBundle *)bundle compatibleWithTraitCollection:(UITraitCollection *)traitCollection {
  216 + if (!traitCollection) {
  217 + traitCollection = UIScreen.mainScreen.traitCollection;
  218 + }
  219 + CGFloat scale = traitCollection.displayScale;
  220 + return [self imageNamed:name inBundle:bundle scale:scale];
  221 +}
  222 +#else
  223 ++ (instancetype)imageNamed:(NSString *)name inBundle:(NSBundle *)bundle {
  224 + return [self imageNamed:name inBundle:bundle scale:0];
  225 +}
  226 +#endif
  227 +
  228 +// 0 scale means automatically check
  229 ++ (instancetype)imageNamed:(NSString *)name inBundle:(NSBundle *)bundle scale:(CGFloat)scale {
  230 + if (!name) {
  231 + return nil;
  232 + }
  233 + if (!bundle) {
  234 + bundle = [NSBundle mainBundle];
  235 + }
  236 + SDImageAssetManager *assetManager = [SDImageAssetManager sharedAssetManager];
  237 + SDAnimatedImage *image = (SDAnimatedImage *)[assetManager imageForName:name];
  238 + if ([image isKindOfClass:[SDAnimatedImage class]]) {
  239 + return image;
  240 + }
  241 + NSString *path = [assetManager getPathForName:name bundle:bundle preferredScale:&scale];
  242 + if (!path) {
  243 + return image;
  244 + }
  245 + NSData *data = [NSData dataWithContentsOfFile:path];
  246 + if (!data) {
  247 + return image;
  248 + }
  249 + image = [[self alloc] initWithData:data scale:scale];
  250 + if (image) {
  251 + [assetManager storeImage:image forName:name];
  252 + }
  253 +
  254 + return image;
  255 +}
  256 +
  257 ++ (instancetype)imageWithContentsOfFile:(NSString *)path {
  258 + return [[self alloc] initWithContentsOfFile:path];
  259 +}
  260 +
  261 ++ (instancetype)imageWithData:(NSData *)data {
  262 + return [[self alloc] initWithData:data];
  263 +}
  264 +
  265 ++ (instancetype)imageWithData:(NSData *)data scale:(CGFloat)scale {
  266 + return [[self alloc] initWithData:data scale:scale];
  267 +}
  268 +
  269 +- (instancetype)initWithContentsOfFile:(NSString *)path {
  270 + NSData *data = [NSData dataWithContentsOfFile:path];
  271 + return [self initWithData:data scale:SDImageScaleFromPath(path)];
  272 +}
  273 +
  274 +- (instancetype)initWithData:(NSData *)data {
  275 + return [self initWithData:data scale:1];
  276 +}
  277 +
  278 +- (instancetype)initWithData:(NSData *)data scale:(CGFloat)scale {
  279 + return [self initWithData:data scale:scale options:nil];
  280 +}
  281 +
  282 +- (instancetype)initWithData:(NSData *)data scale:(CGFloat)scale options:(SDImageCoderOptions *)options {
  283 + if (!data || data.length == 0) {
  284 + return nil;
  285 + }
  286 + data = [data copy]; // avoid mutable data
  287 + id<SDAnimatedImageCoder> animatedCoder = nil;
  288 + for (id<SDImageCoder>coder in [SDImageCodersManager sharedManager].coders) {
  289 + if ([coder conformsToProtocol:@protocol(SDAnimatedImageCoder)]) {
  290 + if ([coder canDecodeFromData:data]) {
  291 + if (!options) {
  292 + options = @{SDImageCoderDecodeScaleFactor : @(scale)};
  293 + }
  294 + animatedCoder = [[[coder class] alloc] initWithAnimatedImageData:data options:options];
  295 + break;
  296 + }
  297 + }
  298 + }
  299 + if (!animatedCoder) {
  300 + return nil;
  301 + }
  302 + return [self initWithAnimatedCoder:animatedCoder scale:scale];
  303 +}
  304 +
  305 +- (instancetype)initWithAnimatedCoder:(id<SDAnimatedImageCoder>)animatedCoder scale:(CGFloat)scale {
  306 + if (!animatedCoder) {
  307 + return nil;
  308 + }
  309 + if (scale <= 0) {
  310 + scale = 1;
  311 + }
  312 + UIImage *image = [animatedCoder animatedImageFrameAtIndex:0];
  313 + if (!image) {
  314 + return nil;
  315 + }
  316 +#if SD_MAC
  317 + self = [super initWithCGImage:image.CGImage scale:scale orientation:kCGImagePropertyOrientationUp];
  318 +#else
  319 + self = [super initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation];
  320 +#endif
  321 + if (self) {
  322 + _coder = animatedCoder;
  323 + NSData *data = [animatedCoder animatedImageData];
  324 + SDImageFormat format = [NSData sd_imageFormatForImageData:data];
  325 + _animatedImageFormat = format;
  326 + }
  327 + return self;
  328 +}
  329 +
  330 +#pragma mark - Preload
  331 +- (void)preloadAllFrames {
  332 + if (!self.isAllFramesLoaded) {
  333 + NSMutableArray<SDImageFrame *> *frames = [NSMutableArray arrayWithCapacity:self.animatedImageFrameCount];
  334 + for (size_t i = 0; i < self.animatedImageFrameCount; i++) {
  335 + UIImage *image = [self animatedImageFrameAtIndex:i];
  336 + NSTimeInterval duration = [self animatedImageDurationAtIndex:i];
  337 + SDImageFrame *frame = [SDImageFrame frameWithImage:image duration:duration]; // through the image should be nonnull, used as nullable for `animatedImageFrameAtIndex:`
  338 + [frames addObject:frame];
  339 + }
  340 + self.loadedAnimatedImageFrames = frames;
  341 + self.allFramesLoaded = YES;
  342 + }
  343 +}
  344 +
  345 +- (void)unloadAllFrames {
  346 + if (self.isAllFramesLoaded) {
  347 + self.loadedAnimatedImageFrames = nil;
  348 + self.allFramesLoaded = NO;
  349 + }
  350 +}
  351 +
  352 +#pragma mark - NSSecureCoding
  353 +- (instancetype)initWithCoder:(NSCoder *)aDecoder {
  354 + self = [super initWithCoder:aDecoder];
  355 + if (self) {
  356 + NSData *animatedImageData = [aDecoder decodeObjectOfClass:[NSData class] forKey:NSStringFromSelector(@selector(animatedImageData))];
  357 + CGFloat scale = self.scale;
  358 + if (!animatedImageData) {
  359 + return self;
  360 + }
  361 + id<SDAnimatedImageCoder> animatedCoder = nil;
  362 + for (id<SDImageCoder>coder in [SDImageCodersManager sharedManager].coders) {
  363 + if ([coder conformsToProtocol:@protocol(SDAnimatedImageCoder)]) {
  364 + if ([coder canDecodeFromData:animatedImageData]) {
  365 + animatedCoder = [[[coder class] alloc] initWithAnimatedImageData:animatedImageData options:@{SDImageCoderDecodeScaleFactor : @(scale)}];
  366 + break;
  367 + }
  368 + }
  369 + }
  370 + if (!animatedCoder) {
  371 + return self;
  372 + }
  373 + _coder = animatedCoder;
  374 + SDImageFormat format = [NSData sd_imageFormatForImageData:animatedImageData];
  375 + _animatedImageFormat = format;
  376 + }
  377 + return self;
  378 +}
  379 +
  380 +- (void)encodeWithCoder:(NSCoder *)aCoder {
  381 + [super encodeWithCoder:aCoder];
  382 + NSData *animatedImageData = self.animatedImageData;
  383 + if (animatedImageData) {
  384 + [aCoder encodeObject:animatedImageData forKey:NSStringFromSelector(@selector(animatedImageData))];
  385 + }
  386 +}
  387 +
  388 ++ (BOOL)supportsSecureCoding {
  389 + return YES;
  390 +}
  391 +
  392 +#pragma mark - SDAnimatedImage
  393 +
  394 +- (NSData *)animatedImageData {
  395 + return [self.coder animatedImageData];
  396 +}
  397 +
  398 +- (NSUInteger)animatedImageLoopCount {
  399 + return [self.coder animatedImageLoopCount];
  400 +}
  401 +
  402 +- (NSUInteger)animatedImageFrameCount {
  403 + return [self.coder animatedImageFrameCount];
  404 +}
  405 +
  406 +- (UIImage *)animatedImageFrameAtIndex:(NSUInteger)index {
  407 + if (index >= self.animatedImageFrameCount) {
  408 + return nil;
  409 + }
  410 + if (self.isAllFramesLoaded) {
  411 + SDImageFrame *frame = [self.loadedAnimatedImageFrames objectAtIndex:index];
  412 + return frame.image;
  413 + }
  414 + return [self.coder animatedImageFrameAtIndex:index];
  415 +}
  416 +
  417 +- (NSTimeInterval)animatedImageDurationAtIndex:(NSUInteger)index {
  418 + if (index >= self.animatedImageFrameCount) {
  419 + return 0;
  420 + }
  421 + if (self.isAllFramesLoaded) {
  422 + SDImageFrame *frame = [self.loadedAnimatedImageFrames objectAtIndex:index];
  423 + return frame.duration;
  424 + }
  425 + return [self.coder animatedImageDurationAtIndex:index];
  426 +}
  427 +
  428 +@end
Example/Pods/SDWebImage/SDWebImage/SDAnimatedImageRep.h 0 → 100644
  1 +/*
  2 + * This file is part of the SDWebImage package.
  3 + * (c) Olivier Poitrey <rs@dailymotion.com>
  4 + *
  5 + * For the full copyright and license information, please view the LICENSE
  6 + * file that was distributed with this source code.
  7 + */
  8 +
  9 +#import "SDWebImageCompat.h"
  10 +
  11 +#if SD_MAC
  12 +
  13 +// A subclass of `NSBitmapImageRep` to fix that GIF loop count issue because `NSBitmapImageRep` will reset `NSImageCurrentFrameDuration` by using `kCGImagePropertyGIFDelayTime` but not `kCGImagePropertyGIFUnclampedDelayTime`.
  14 +// Built in GIF coder use this instead of `NSBitmapImageRep` for better GIF rendering. If you do not want this, only enable `SDImageIOCoder`, which just call `NSImage` API and actually use `NSBitmapImageRep` for GIF image.
  15 +// This also support APNG format using `SDImageAPNGCoder`. Which provide full alpha-channel support and the correct duration match the `kCGImagePropertyAPNGUnclampedDelayTime`.
  16 +
  17 +@interface SDAnimatedImageRep : NSBitmapImageRep
  18 +
  19 +@end
  20 +
  21 +#endif