Commit 534b960ea7b113ef5d71645bdbbec529ccf48c9b
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
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
Example/CNLiveCycleScrollView.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
0 → 100644
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
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
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 | +[](https://travis-ci.org/rs/SDWebImage) | |
| 7 | +[](http://cocoadocs.org/docsets/SDWebImage/) | |
| 8 | +[](http://cocoadocs.org/docsets/SDWebImage/) | |
| 9 | +[](https://www.apache.org/licenses/LICENSE-2.0.html) | |
| 10 | +[](https://github.com/rs/SDWebImage) | |
| 11 | +[](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 | 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 | ... | ... |