From a8662f1aca661a4a934305fc0f8ff1935ef1798f Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sat, 19 Dec 2015 20:16:19 +0800 Subject: [PATCH 001/276] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=9Acell?= =?UTF-8?q?=E7=9A=84=E9=AB=98=E5=BA=A6=E8=87=AA=E9=80=82=E5=BA=94,?= =?UTF-8?q?=E6=9B=B4=E6=96=B0demo7=E5=9B=BE=E7=89=87=E9=AB=98=E5=BA=A6?= =?UTF-8?q?=E6=8C=89=E6=AF=94=E4=BE=8B=E7=BC=A9=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell2.m" | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell2.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell2.m" index a494031..8555cbe 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell2.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell2.m" @@ -69,18 +69,18 @@ - (void)setup imageView0.sd_layout .topSpaceToView(_titleLabel, margin) .leftSpaceToView(contentView, margin) - .heightIs(60); + .autoHeightRatio(0.8); imageView1.sd_layout .topSpaceToView(_titleLabel, margin) .leftSpaceToView(imageView0, margin) - .heightIs(60); + .autoHeightRatio(0.8); imageView2.sd_layout .topSpaceToView(_titleLabel, margin) .leftSpaceToView(imageView1, margin) .rightSpaceToView(contentView, margin) - .heightIs(60); + .autoHeightRatio(0.8); [self setupAutoHeightWithBottomView:imageView0 bottomMargin:margin]; } From 64fbf1311f889c90447a8a5e98f550694031bee1 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sat, 19 Dec 2015 20:34:04 +0800 Subject: [PATCH 002/276] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=9Acell?= =?UTF-8?q?=E7=9A=84=E9=AB=98=E5=BA=A6=E8=87=AA=E9=80=82=E5=BA=94,?= =?UTF-8?q?=E6=9B=B4=E6=96=B0demo7=E5=9B=BE=E7=89=87=E9=AB=98=E5=BA=A6?= =?UTF-8?q?=E6=8C=89=E6=AF=94=E4=BE=8B=E7=BC=A9=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UITableView+SDAutoTableViewCellHeight.h" | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" index bd3d55a..d85e1a5 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" @@ -29,15 +29,26 @@ @interface UITableView (SDAutoTableViewCellHeight) +// ------------------ 单个cell情景下调用以下方法 ------------------ + +/* + * 开启高度自适应,建议在tableview的数据源方法“- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section”中调用此方法,详细用法见demo5 + */ - (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth; +/* + * 返回计算出的cell高度 + * model:cell的数据模型实例 + * keyPath:cell的数据模型属性的属性名字符串(即kvc原理中的key) + */ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath; -// 多cell情景下调用以下方法 + +// ------------------ 多cell情景下调用以下方法 ------------------ /* - * cellClassArray 为所有cell的类组成的数组 + * cellClassArray 为所有cell的类组成的数组,详细用法见demo7 */ - (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth; From fb040d6c014787600d40911ae9695661164ae828 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Tue, 22 Dec 2015 19:49:29 +0800 Subject: [PATCH 003/276] =?UTF-8?q?=E5=8D=87=E7=BA=A7=EF=BC=81=E4=B8=80?= =?UTF-8?q?=E8=A1=8C=E4=BB=A3=E7=A0=81=EF=BC=88=E4=B8=80=E6=AD=A5=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=EF=BC=89=E6=90=9E=E5=AE=9Atableview=E7=9A=84cell?= =?UTF-8?q?=E9=AB=98=E5=BA=A6=E8=87=AA=E9=80=82=E5=BA=94,=E5=90=8C?= =?UTF-8?q?=E6=97=B6=E9=80=82=E7=94=A8=E4=BA=8E=E5=8D=95cell=E5=92=8C?= =?UTF-8?q?=E5=A4=9Acell=EF=BC=88=E8=AF=A6=E8=A7=81demo8=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj" | 14 ++ .../UserInterfaceState.xcuserstate" | Bin 26902 -> 29344 bytes .../DemoTableViewControler.m" | 2 +- .../DemoVC8.h" | 13 ++ .../DemoVC8.m" | 139 ++++++++++++++++++ .../UITableView+SDAutoTableViewCellHeight.h" | 52 ++++--- .../UITableView+SDAutoTableViewCellHeight.m" | 34 ++++- 7 files changed, 228 insertions(+), 26 deletions(-) create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC8.h" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC8.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" index 5d48ea2..5ef47bb 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" @@ -11,6 +11,7 @@ 484511701C2439830071BE2C /* DemoVC7Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4845116A1C2439830071BE2C /* DemoVC7Cell.m */; }; 484511711C2439830071BE2C /* DemoVC7Cell2.m in Sources */ = {isa = PBXBuildFile; fileRef = 4845116C1C2439830071BE2C /* DemoVC7Cell2.m */; }; 484511721C2439830071BE2C /* DemoVC7Model.m in Sources */ = {isa = PBXBuildFile; fileRef = 4845116E1C2439830071BE2C /* DemoVC7Model.m */; }; + 4867A48F1C292EF800BE8767 /* DemoVC8.m in Sources */ = {isa = PBXBuildFile; fileRef = 4867A48E1C292EF800BE8767 /* DemoVC8.m */; }; 486A382D1C0D852C000D43E5 /* DemoVC6.m in Sources */ = {isa = PBXBuildFile; fileRef = 486A382C1C0D852C000D43E5 /* DemoVC6.m */; }; 487D3EB71BCB9EC700A66173 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EB61BCB9EC700A66173 /* main.m */; }; 487D3EBA1BCB9EC700A66173 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EB91BCB9EC700A66173 /* AppDelegate.m */; }; @@ -67,6 +68,8 @@ 4845116C1C2439830071BE2C /* DemoVC7Cell2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC7Cell2.m; sourceTree = ""; }; 4845116D1C2439830071BE2C /* DemoVC7Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC7Model.h; sourceTree = ""; }; 4845116E1C2439830071BE2C /* DemoVC7Model.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC7Model.m; sourceTree = ""; }; + 4867A48D1C292EF800BE8767 /* DemoVC8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC8.h; sourceTree = ""; }; + 4867A48E1C292EF800BE8767 /* DemoVC8.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC8.m; sourceTree = ""; }; 486A382B1C0D852C000D43E5 /* DemoVC6.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC6.h; sourceTree = ""; }; 486A382C1C0D852C000D43E5 /* DemoVC6.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC6.m; sourceTree = ""; }; 487D3EB11BCB9EC700A66173 /* SDAutoLayout 测试 Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SDAutoLayout 测试 Demo.app"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -161,6 +164,15 @@ name = DemoVC7; sourceTree = ""; }; + 4867A48C1C292EB500BE8767 /* DemoVC8 */ = { + isa = PBXGroup; + children = ( + 4867A48D1C292EF800BE8767 /* DemoVC8.h */, + 4867A48E1C292EF800BE8767 /* DemoVC8.m */, + ); + name = DemoVC8; + sourceTree = ""; + }; 486A382A1C0D8499000D43E5 /* DemoVC6 */ = { isa = PBXGroup; children = ( @@ -236,6 +248,7 @@ 487D3EDE1BCBA52900A66173 /* DemoVC */ = { isa = PBXGroup; children = ( + 4867A48C1C292EB500BE8767 /* DemoVC8 */, 484511661C24395F0071BE2C /* DemoVC7 */, 486A382A1C0D8499000D43E5 /* DemoVC6 */, 48DBCD051C01D82A002EC476 /* DemoVC5 */, @@ -443,6 +456,7 @@ 48DBCD0E1C01DA1E002EC476 /* DemoVC5Model.m in Sources */, 484511711C2439830071BE2C /* DemoVC7Cell2.m in Sources */, 484511721C2439830071BE2C /* DemoVC7Model.m in Sources */, + 4867A48F1C292EF800BE8767 /* DemoVC8.m in Sources */, 487D3EBA1BCB9EC700A66173 /* AppDelegate.m in Sources */, 48DBCD0B1C01D89C002EC476 /* DemoVC5.m in Sources */, 4845116F1C2439830071BE2C /* DemoVC7.m in Sources */, diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" index 62ff8f0cd1386dcc8da7f4270e52171f0698217a..15ccf071eb5fdbc153e06ecc835165f2addb0ca5 100644 GIT binary patch delta 14809 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 diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoTableViewControler.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoTableViewControler.m" index 701d316..52c5d7d 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoTableViewControler.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoTableViewControler.m" @@ -42,7 +42,7 @@ - (void)viewDidLoad - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 8; + return 9; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC8.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC8.h" new file mode 100644 index 0000000..ee7687c --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC8.h" @@ -0,0 +1,13 @@ +// +// DemoVC8.h +// SDAutoLayout 测试 Demo +// +// Created by gsd on 15/12/22. +// Copyright © 2015年 gsd. All rights reserved. +// + +#import + +@interface DemoVC8 : UITableViewController + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC8.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC8.m" new file mode 100644 index 0000000..6ae275f --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC8.m" @@ -0,0 +1,139 @@ +// +// DemoVC8.m +// SDAutoLayout 测试 Demo +// +// Created by gsd on 15/12/22. +// Copyright © 2015年 gsd. All rights reserved. +// + +#import "DemoVC8.h" + +#import "DemoVC7Model.h" + +#import "DemoVC7Cell.h" +#import "DemoVC7Cell2.h" + +#import "UITableView+SDAutoTableViewCellHeight.h" + +#import "SDRefresh.h" + +@interface DemoVC8 () + +@property (nonatomic, strong) NSMutableArray *modelsArray; + +@end + +@implementation DemoVC8 +{ + SDRefreshFooterView *_refreshFooter; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.tableView.estimatedRowHeight = 100; + + [self creatModelsWithCount:18]; + + [self.tableView registerClass:[DemoVC7Cell class] forCellReuseIdentifier:NSStringFromClass([DemoVC7Cell class])]; + [self.tableView registerClass:[DemoVC7Cell2 class] forCellReuseIdentifier:NSStringFromClass([DemoVC7Cell2 class])]; + + __weak typeof(self) weakSelf = self; + + // 上拉加载 + _refreshFooter = [SDRefreshFooterView refreshView]; + [_refreshFooter addToScrollView:self.tableView]; + __weak typeof(_refreshFooter) weakRefreshFooter = _refreshFooter; + _refreshFooter.beginRefreshingOperation = ^() { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [weakSelf creatModelsWithCount:10]; + [weakSelf.tableView reloadData]; + [weakRefreshFooter endRefreshing]; + }); + }; + +} + +- (void)creatModelsWithCount:(NSInteger)count +{ + if (!_modelsArray) { + _modelsArray = [NSMutableArray new]; + } + + NSArray *iconImageNamesArray = @[@"icon0.jpg", + @"icon1.jpg", + @"icon2.jpg", + @"icon3.jpg", + @"icon4.jpg", + ]; + + + NSArray *textArray = @[@"当你的 app 没有提供 3x 的LaunchImage 时。然后等比例拉伸", + @"然后等比例拉伸到大屏。屏幕宽度返回 320否则在大屏上会显得字大", + @"长期处于这种模式下,否则在大屏上会显得字大,内容少这种情况下对界面不会", + @"但是建议不要长期处于这种模式下,否则在大屏上会显得字大,内容少,容易遭到用户投诉。", + @"屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任小。" + ]; + + for (int i = 0; i < count; i++) { + int iconRandomIndex = arc4random_uniform(5); + int nameRandomIndex = arc4random_uniform(5); + + DemoVC7Model *model = [DemoVC7Model new]; + model.title = textArray[nameRandomIndex]; + + + // 模拟“有或者无图片” + int random = arc4random_uniform(100); + if (random <= 30) { + NSMutableArray *temp = [NSMutableArray new]; + + for (int i = 0; i < 3; i++) { + int randomIndex = arc4random_uniform(5); + NSString *text = iconImageNamesArray[randomIndex]; + [temp addObject:text]; + } + + model.imagePathsArray = [temp copy]; + } else { + model.imagePathsArray = @[iconImageNamesArray[iconRandomIndex]]; + } + + [self.modelsArray addObject:model]; + } +} + +#pragma mark - Table view data source + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.modelsArray.count; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + Class currentClass = [DemoVC7Cell class]; + DemoVC7Cell *cell = nil; + + DemoVC7Model *model = self.modelsArray[indexPath.row]; + + if (model.imagePathsArray.count > 1) { + currentClass = [DemoVC7Cell2 class]; + } + cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass(currentClass)]; + + cell.model = model; + + return cell; +} + + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + // >>>>>>>>>>>>>>>>>>>>> * cell自适应设置 * >>>>>>>>>>>>>>>>>>>>>>>> + // 只需一行代码即可实现单cell以及多cell的tableview高度自适应 + return [self cellHeightForIndexPath:indexPath cellContentViewWidth:[UIScreen mainScreen].bounds.size.width]; +} + + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" index d85e1a5..c6d4eee 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" @@ -21,51 +21,63 @@ */ + + + +/* + + cell高度自适应有“普通版”和“升级版”两个版本: + + 1.普通版:两行代码(两步设置)搞定tableview的cell高度自适应(单cell详见demo5,多cell详见demo7) + + 2.升级版:只需一步设置即可实现,见下方category“UITableViewController (SDTableViewControllerAutoCellHeight)”) + + PS:cell高度自适应前提>>应该调用cell的“- (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法进行cell的自动高度设置 + */ + #import @class SDCellAutoHeightManager; #define kSDModelCellTag 199206 + +/* 普通版!两行代码(两步设置)搞定tableview的cell高度自适应(单cell详见demo5,多cell详见demo7) */ + @interface UITableView (SDAutoTableViewCellHeight) -// ------------------ 单个cell情景下调用以下方法 ------------------ +@property (nonatomic, strong) SDCellAutoHeightManager *cellAutoHeightManager; -/* - * 开启高度自适应,建议在tableview的数据源方法“- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section”中调用此方法,详细用法见demo5 - */ -- (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth; -/* - * 返回计算出的cell高度 - * model:cell的数据模型实例 - * keyPath:cell的数据模型属性的属性名字符串(即kvc原理中的key) - */ -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath; +// >>>>>>>>>>>>>> 单个cell情景下调用以下方法(详细用法见demo5) >>>>>>>>>>>>>> -// ------------------ 多cell情景下调用以下方法 ------------------ +- (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth; // 开启高度自适应,建议在tableview的数据源方法“- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section”中调用此方法,详细用法见demo5 -/* - * cellClassArray 为所有cell的类组成的数组,详细用法见demo7 - */ -- (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth; +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath; // 返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key) -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass; -@property (nonatomic, strong) SDCellAutoHeightManager *cellAutoHeightManager; -@end +// >>>>>>>>>>>>>> 多cell情景下调用以下方法(详细用法见demo7) >>>>>>>>>>>>>>>>> +- (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth; // cellClassArray 为所有cell的类组成的数组,详细用法见demo7 +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass; // 返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key) +@end +/* 升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell(详见demo8) */ +@interface UITableViewController (SDTableViewControllerAutoCellHeight) + +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width; + +@end @@ -98,6 +110,8 @@ @property (nonatomic, assign) CGFloat cellHeight; +@property (nonatomic, strong) UITableViewCell *modelCell; + - (void)clearHeightCache; - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath; diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" index ef8d318..1580bcf 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" @@ -25,18 +25,20 @@ #import "UIView+SDAutoLayout.h" #import -@interface SDCellAutoHeightManager () - -@property (nonatomic, strong) UITableViewCell *modelCell; - -@end - @implementation SDCellAutoHeightManager { NSMutableDictionary *_cacheDictionary; UITableView *_modelTableview; } +- (instancetype)init +{ + if (self = [super init]) { + _cacheDictionary = [NSMutableDictionary new]; + } + return self; +} + - (instancetype)initWithCellClass:(Class)cellClass { if (self = [super init]) { @@ -214,5 +216,25 @@ - (void)setCellAutoHeightManager:(SDCellAutoHeightManager *)cellAutoHeightManage @end +@implementation UITableViewController (SDTableViewControllerAutoCellHeight) +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width +{ + + if (!self.tableView.cellAutoHeightManager) { + self.tableView.cellAutoHeightManager = [[SDCellAutoHeightManager alloc] init]; + } + if (self.tableView.cellAutoHeightManager.contentViewWidth != width) { + self.tableView.cellAutoHeightManager.contentViewWidth = width; + [self.tableView.cellAutoHeightManager clearHeightCache]; + } + UITableViewCell *cell = [self tableView:self.tableView cellForRowAtIndexPath:indexPath]; + self.tableView.cellAutoHeightManager.modelCell = cell; + if (cell.contentView.width != width) { + cell.contentView.width = width; + } + return [[self.tableView cellAutoHeightManager] cellHeightForIndexPath:indexPath model:nil keyPath:nil]; +} + +@end From 1fd412a334245bb5bd4140dd78f9162f51dc8dfe Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Tue, 22 Dec 2015 20:01:55 +0800 Subject: [PATCH 004/276] Update README.md --- README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3f58160..ddc3442 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,23 @@ # ☆新增:cell高度自适应 + label文字自适应☆ ![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) + +## >>>>> 升级版:tableview cell 自动高度设置只需要2步 + + 1. >> 设置cell高度自适应: + // cell布局设置好之后调用此方法就可以实现高度自适应(注意:如果用高度自适应则不要再以cell的底边为参照去布局其子view) + [cell setupAutoHeightWithBottomView:_view4 bottomMargin:10]; + + 2. >> 设置 tableview + + - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath + { + // 2.2 根据模型取得cell高度 + return [self cellHeightForIndexPath:indexPath cellContentViewWidth:[UIScreen mainScreen].bounds.size.width]; + } + -## >>>>> tableview cell 自动高度设置只需要3步 +## >>>>> 普通版:tableview cell 自动高度设置只需要3步 1. >> 设置cell高度自适应: // cell布局设置好之后调用此方法就可以实现高度自适应(注意:如果用高度自适应则不要再以cell的底边为参照去布局其子view) From e54cf8957421b282019b0ea02fe95bdcaaa305a5 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Tue, 22 Dec 2015 20:02:57 +0800 Subject: [PATCH 005/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ddc3442..a1d6b61 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - // 2.2 根据模型取得cell高度 + // 获取cell高度 return [self cellHeightForIndexPath:indexPath cellContentViewWidth:[UIScreen mainScreen].bounds.size.width]; } From 5da1bdc376c0e4b3564416d65a2a09f9e39984a0 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Tue, 22 Dec 2015 20:04:54 +0800 Subject: [PATCH 006/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a1d6b61..ba36090 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ // cell布局设置好之后调用此方法就可以实现高度自适应(注意:如果用高度自适应则不要再以cell的底边为参照去布局其子view) [cell setupAutoHeightWithBottomView:_view4 bottomMargin:10]; - 2. >> 设置 tableview + 2. >> 获取自动计算出的cell高度 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { From f1ed97ec6ff9fea83f52947154eb7c1291a8bf64 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Wed, 23 Dec 2015 22:09:26 +0800 Subject: [PATCH 007/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=9C=8B=E5=8F=8B=E5=9C=88demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj" | 196 ++++++ .../UserInterfaceState.xcuserstate" | Bin 29344 -> 37097 bytes .../Demo9Model.h" | 18 + .../Demo9Model.m" | 13 + .../DemoTableViewControler.m" | 7 +- .../DemoVC1.m" | 31 +- .../DemoVC5CellTableViewCell.m" | 4 +- .../DemoVC9.h" | 13 + .../DemoVC9.m" | 151 +++++ .../DemoVC9Cell.h" | 17 + .../DemoVC9Cell.m" | 109 +++ .../DemoVC9HeaderView.h" | 13 + .../DemoVC9HeaderView.m" | 65 ++ .../Images/pbg.jpg" | Bin 0 -> 105637 bytes .../Images/pic5.jpg" | Bin 0 -> 4459 bytes .../Images/pic6.jpg" | Bin 0 -> 11117 bytes .../Images/pic7.jpg" | Bin 0 -> 6058 bytes .../Images/pic8.jpg" | Bin 0 -> 13100 bytes .../Images/picon.jpg" | Bin 0 -> 212225 bytes .../SDAutoLayout/UIView+SDAutoLayout.h" | 2 +- .../SDAutoLayout/UIView+SDAutoLayout.m" | 8 +- .../SDPhotoBrowser/SDBrowserImageView.h" | 27 + .../SDPhotoBrowser/SDBrowserImageView.m" | 236 +++++++ .../SDPhotoBrowser/SDPhotoBrowser.h" | 37 ++ .../SDPhotoBrowser/SDPhotoBrowser.m" | 347 ++++++++++ .../SDPhotoBrowser/SDPhotoBrowserConfig.h" | 42 ++ .../SDPhotoBrowser/SDWaitingView.h" | 17 + .../SDPhotoBrowser/SDWaitingView.m" | 88 +++ .../SDWebImage/MKAnnotationView+WebCache.h" | 124 ++++ .../SDWebImage/MKAnnotationView+WebCache.m" | 126 ++++ .../SDWebImage/NSData+ImageContentType.h" | 26 + .../SDWebImage/NSData+ImageContentType.m" | 49 ++ .../SDWebImage/SDImageCache.h" | 272 ++++++++ .../SDWebImage/SDImageCache.m" | 623 ++++++++++++++++++ .../SDWebImage/SDWebImageCompat.h" | 72 ++ .../SDWebImage/SDWebImageCompat.m" | 51 ++ .../SDWebImage/SDWebImageDecoder.h" | 18 + .../SDWebImage/SDWebImageDecoder.m" | 69 ++ .../SDWebImage/SDWebImageDownloader.h" | 191 ++++++ .../SDWebImage/SDWebImageDownloader.m" | 232 +++++++ .../SDWebImageDownloaderOperation.h" | 78 +++ .../SDWebImageDownloaderOperation.m" | 466 +++++++++++++ .../SDWebImage/SDWebImageManager.h" | 299 +++++++++ .../SDWebImage/SDWebImageManager.m" | 362 ++++++++++ .../SDWebImage/SDWebImageOperation.h" | 15 + .../SDWebImage/SDWebImagePrefetcher.h" | 108 +++ .../SDWebImage/SDWebImagePrefetcher.m" | 151 +++++ .../SDWebImage/UIButton+WebCache.h" | 229 +++++++ .../SDWebImage/UIButton+WebCache.m" | 270 ++++++++ .../SDWebImage/UIImage+GIF.h" | 19 + .../SDWebImage/UIImage+GIF.m" | 158 +++++ .../SDWebImage/UIImage+MultiFormat.h" | 15 + .../SDWebImage/UIImage+MultiFormat.m" | 118 ++++ .../SDWebImage/UIImage+WebP.h" | 26 + .../SDWebImage/UIImage+WebP.m" | 78 +++ .../UIImageView+HighlightedWebCache.h" | 100 +++ .../UIImageView+HighlightedWebCache.m" | 112 ++++ .../SDWebImage/UIImageView+WebCache.h" | 213 ++++++ .../SDWebImage/UIImageView+WebCache.m" | 277 ++++++++ .../SDWebImage/UIView+WebCacheOperation.h" | 36 + .../SDWebImage/UIView+WebCacheOperation.m" | 55 ++ .../SDWeiXinPhotoContainerView.h" | 15 + .../SDWeiXinPhotoContainerView.m" | 118 ++++ 63 files changed, 6600 insertions(+), 12 deletions(-) create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.h" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.m" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.h" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.m" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.h" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.m" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.h" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.m" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pbg.jpg" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic5.jpg" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic6.jpg" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic7.jpg" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic8.jpg" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/Images/picon.jpg" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDBrowserImageView.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDBrowserImageView.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowser.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowser.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowserConfig.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDWaitingView.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDWaitingView.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/MKAnnotationView+WebCache.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/MKAnnotationView+WebCache.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/NSData+ImageContentType.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/NSData+ImageContentType.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDImageCache.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDImageCache.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageCompat.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageCompat.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDecoder.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDecoder.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloader.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloader.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloaderOperation.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloaderOperation.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageManager.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageManager.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageOperation.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImagePrefetcher.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImagePrefetcher.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIButton+WebCache.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIButton+WebCache.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+GIF.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+GIF.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+MultiFormat.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+MultiFormat.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+WebP.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+WebP.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+HighlightedWebCache.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+HighlightedWebCache.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+WebCache.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+WebCache.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIView+WebCacheOperation.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIView+WebCacheOperation.m" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.h" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" index 5ef47bb..1d6ae4b 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" @@ -7,6 +7,36 @@ objects = { /* Begin PBXBuildFile section */ + 4841F5DB1C2A8275004979F4 /* DemoVC9.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F5DA1C2A8275004979F4 /* DemoVC9.m */; }; + 4841F5DE1C2A8632004979F4 /* DemoVC9Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F5DD1C2A8632004979F4 /* DemoVC9Cell.m */; }; + 4841F5E11C2A90CF004979F4 /* Demo9Model.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F5E01C2A90CF004979F4 /* Demo9Model.m */; }; + 4841F5E41C2A94ED004979F4 /* SDWeiXinPhotoContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F5E31C2A94ED004979F4 /* SDWeiXinPhotoContainerView.m */; }; + 4841F5E91C2ABC60004979F4 /* pic5.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 4841F5E51C2ABC60004979F4 /* pic5.jpg */; }; + 4841F5EA1C2ABC60004979F4 /* pic6.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 4841F5E61C2ABC60004979F4 /* pic6.jpg */; }; + 4841F5EB1C2ABC60004979F4 /* pic7.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 4841F5E71C2ABC60004979F4 /* pic7.jpg */; }; + 4841F5EC1C2ABC60004979F4 /* pic8.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 4841F5E81C2ABC60004979F4 /* pic8.jpg */; }; + 4841F5EF1C2AC7D6004979F4 /* DemoVC9HeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F5EE1C2AC7D6004979F4 /* DemoVC9HeaderView.m */; }; + 4841F5F21C2ACC2B004979F4 /* pbg.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 4841F5F01C2ACC2B004979F4 /* pbg.jpg */; }; + 4841F5F31C2ACC2B004979F4 /* picon.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 4841F5F11C2ACC2B004979F4 /* picon.jpg */; }; + 4841F5FC1C2AD949004979F4 /* SDBrowserImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F5F61C2AD949004979F4 /* SDBrowserImageView.m */; }; + 4841F5FD1C2AD949004979F4 /* SDPhotoBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F5F81C2AD949004979F4 /* SDPhotoBrowser.m */; }; + 4841F5FE1C2AD949004979F4 /* SDWaitingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F5FB1C2AD949004979F4 /* SDWaitingView.m */; }; + 4841F6531C2ADCAE004979F4 /* MKAnnotationView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6331C2ADCAE004979F4 /* MKAnnotationView+WebCache.m */; }; + 4841F6541C2ADCAE004979F4 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6351C2ADCAE004979F4 /* NSData+ImageContentType.m */; }; + 4841F6551C2ADCAE004979F4 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6371C2ADCAE004979F4 /* SDImageCache.m */; }; + 4841F6561C2ADCAE004979F4 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6391C2ADCAE004979F4 /* SDWebImageCompat.m */; }; + 4841F6571C2ADCAE004979F4 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F63B1C2ADCAE004979F4 /* SDWebImageDecoder.m */; }; + 4841F6581C2ADCAE004979F4 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F63D1C2ADCAE004979F4 /* SDWebImageDownloader.m */; }; + 4841F6591C2ADCAE004979F4 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F63F1C2ADCAE004979F4 /* SDWebImageDownloaderOperation.m */; }; + 4841F65A1C2ADCAE004979F4 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6411C2ADCAE004979F4 /* SDWebImageManager.m */; }; + 4841F65B1C2ADCAE004979F4 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6441C2ADCAE004979F4 /* SDWebImagePrefetcher.m */; }; + 4841F65C1C2ADCAE004979F4 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6461C2ADCAE004979F4 /* UIButton+WebCache.m */; }; + 4841F65D1C2ADCAE004979F4 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6481C2ADCAE004979F4 /* UIImage+GIF.m */; }; + 4841F65E1C2ADCAE004979F4 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F64A1C2ADCAE004979F4 /* UIImage+MultiFormat.m */; }; + 4841F65F1C2ADCAE004979F4 /* UIImage+WebP.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F64C1C2ADCAE004979F4 /* UIImage+WebP.m */; }; + 4841F6601C2ADCAE004979F4 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F64E1C2ADCAE004979F4 /* UIImageView+HighlightedWebCache.m */; }; + 4841F6611C2ADCAE004979F4 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6501C2ADCAE004979F4 /* UIImageView+WebCache.m */; }; + 4841F6621C2ADCAE004979F4 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6521C2ADCAE004979F4 /* UIView+WebCacheOperation.m */; }; 4845116F1C2439830071BE2C /* DemoVC7.m in Sources */ = {isa = PBXBuildFile; fileRef = 484511681C2439830071BE2C /* DemoVC7.m */; }; 484511701C2439830071BE2C /* DemoVC7Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4845116A1C2439830071BE2C /* DemoVC7Cell.m */; }; 484511711C2439830071BE2C /* DemoVC7Cell2.m in Sources */ = {isa = PBXBuildFile; fileRef = 4845116C1C2439830071BE2C /* DemoVC7Cell2.m */; }; @@ -60,6 +90,62 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 4841F5D91C2A8275004979F4 /* DemoVC9.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC9.h; sourceTree = ""; }; + 4841F5DA1C2A8275004979F4 /* DemoVC9.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC9.m; sourceTree = ""; }; + 4841F5DC1C2A8632004979F4 /* DemoVC9Cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC9Cell.h; sourceTree = ""; }; + 4841F5DD1C2A8632004979F4 /* DemoVC9Cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC9Cell.m; sourceTree = ""; }; + 4841F5DF1C2A90CF004979F4 /* Demo9Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Demo9Model.h; sourceTree = ""; }; + 4841F5E01C2A90CF004979F4 /* Demo9Model.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Demo9Model.m; sourceTree = ""; }; + 4841F5E21C2A94ED004979F4 /* SDWeiXinPhotoContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWeiXinPhotoContainerView.h; sourceTree = ""; }; + 4841F5E31C2A94ED004979F4 /* SDWeiXinPhotoContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWeiXinPhotoContainerView.m; sourceTree = ""; }; + 4841F5E51C2ABC60004979F4 /* pic5.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic5.jpg; sourceTree = ""; }; + 4841F5E61C2ABC60004979F4 /* pic6.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic6.jpg; sourceTree = ""; }; + 4841F5E71C2ABC60004979F4 /* pic7.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic7.jpg; sourceTree = ""; }; + 4841F5E81C2ABC60004979F4 /* pic8.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic8.jpg; sourceTree = ""; }; + 4841F5ED1C2AC7D6004979F4 /* DemoVC9HeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC9HeaderView.h; sourceTree = ""; }; + 4841F5EE1C2AC7D6004979F4 /* DemoVC9HeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC9HeaderView.m; sourceTree = ""; }; + 4841F5F01C2ACC2B004979F4 /* pbg.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pbg.jpg; sourceTree = ""; }; + 4841F5F11C2ACC2B004979F4 /* picon.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = picon.jpg; sourceTree = ""; }; + 4841F5F51C2AD949004979F4 /* SDBrowserImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDBrowserImageView.h; sourceTree = ""; }; + 4841F5F61C2AD949004979F4 /* SDBrowserImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDBrowserImageView.m; sourceTree = ""; }; + 4841F5F71C2AD949004979F4 /* SDPhotoBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDPhotoBrowser.h; sourceTree = ""; }; + 4841F5F81C2AD949004979F4 /* SDPhotoBrowser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDPhotoBrowser.m; sourceTree = ""; }; + 4841F5F91C2AD949004979F4 /* SDPhotoBrowserConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDPhotoBrowserConfig.h; sourceTree = ""; }; + 4841F5FA1C2AD949004979F4 /* SDWaitingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWaitingView.h; sourceTree = ""; }; + 4841F5FB1C2AD949004979F4 /* SDWaitingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWaitingView.m; sourceTree = ""; }; + 4841F6321C2ADCAE004979F4 /* MKAnnotationView+WebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MKAnnotationView+WebCache.h"; sourceTree = ""; }; + 4841F6331C2ADCAE004979F4 /* MKAnnotationView+WebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MKAnnotationView+WebCache.m"; sourceTree = ""; }; + 4841F6341C2ADCAE004979F4 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+ImageContentType.h"; sourceTree = ""; }; + 4841F6351C2ADCAE004979F4 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+ImageContentType.m"; sourceTree = ""; }; + 4841F6361C2ADCAE004979F4 /* SDImageCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDImageCache.h; sourceTree = ""; }; + 4841F6371C2ADCAE004979F4 /* SDImageCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDImageCache.m; sourceTree = ""; }; + 4841F6381C2ADCAE004979F4 /* SDWebImageCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageCompat.h; sourceTree = ""; }; + 4841F6391C2ADCAE004979F4 /* SDWebImageCompat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageCompat.m; sourceTree = ""; }; + 4841F63A1C2ADCAE004979F4 /* SDWebImageDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageDecoder.h; sourceTree = ""; }; + 4841F63B1C2ADCAE004979F4 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageDecoder.m; sourceTree = ""; }; + 4841F63C1C2ADCAE004979F4 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageDownloader.h; sourceTree = ""; }; + 4841F63D1C2ADCAE004979F4 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageDownloader.m; sourceTree = ""; }; + 4841F63E1C2ADCAE004979F4 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageDownloaderOperation.h; sourceTree = ""; }; + 4841F63F1C2ADCAE004979F4 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageDownloaderOperation.m; sourceTree = ""; }; + 4841F6401C2ADCAE004979F4 /* SDWebImageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageManager.h; sourceTree = ""; }; + 4841F6411C2ADCAE004979F4 /* SDWebImageManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageManager.m; sourceTree = ""; }; + 4841F6421C2ADCAE004979F4 /* SDWebImageOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageOperation.h; sourceTree = ""; }; + 4841F6431C2ADCAE004979F4 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImagePrefetcher.h; sourceTree = ""; }; + 4841F6441C2ADCAE004979F4 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImagePrefetcher.m; sourceTree = ""; }; + 4841F6451C2ADCAE004979F4 /* UIButton+WebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+WebCache.h"; sourceTree = ""; }; + 4841F6461C2ADCAE004979F4 /* UIButton+WebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+WebCache.m"; sourceTree = ""; }; + 4841F6471C2ADCAE004979F4 /* UIImage+GIF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+GIF.h"; sourceTree = ""; }; + 4841F6481C2ADCAE004979F4 /* UIImage+GIF.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+GIF.m"; sourceTree = ""; }; + 4841F6491C2ADCAE004979F4 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+MultiFormat.h"; sourceTree = ""; }; + 4841F64A1C2ADCAE004979F4 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+MultiFormat.m"; sourceTree = ""; }; + 4841F64B1C2ADCAE004979F4 /* UIImage+WebP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+WebP.h"; sourceTree = ""; }; + 4841F64C1C2ADCAE004979F4 /* UIImage+WebP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+WebP.m"; sourceTree = ""; }; + 4841F64D1C2ADCAE004979F4 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + 4841F64E1C2ADCAE004979F4 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + 4841F64F1C2ADCAE004979F4 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+WebCache.h"; sourceTree = ""; }; + 4841F6501C2ADCAE004979F4 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+WebCache.m"; sourceTree = ""; }; + 4841F6511C2ADCAE004979F4 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+WebCacheOperation.h"; sourceTree = ""; }; + 4841F6521C2ADCAE004979F4 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+WebCacheOperation.m"; sourceTree = ""; }; 484511671C2439830071BE2C /* DemoVC7.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC7.h; sourceTree = ""; }; 484511681C2439830071BE2C /* DemoVC7.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC7.m; sourceTree = ""; }; 484511691C2439830071BE2C /* DemoVC7Cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC7Cell.h; sourceTree = ""; }; @@ -149,6 +235,77 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 4841F5D81C2A8256004979F4 /* DemoVC9 */ = { + isa = PBXGroup; + children = ( + 4841F5D91C2A8275004979F4 /* DemoVC9.h */, + 4841F5DA1C2A8275004979F4 /* DemoVC9.m */, + 4841F5DC1C2A8632004979F4 /* DemoVC9Cell.h */, + 4841F5DD1C2A8632004979F4 /* DemoVC9Cell.m */, + 4841F5DF1C2A90CF004979F4 /* Demo9Model.h */, + 4841F5E01C2A90CF004979F4 /* Demo9Model.m */, + 4841F5E21C2A94ED004979F4 /* SDWeiXinPhotoContainerView.h */, + 4841F5E31C2A94ED004979F4 /* SDWeiXinPhotoContainerView.m */, + 4841F5ED1C2AC7D6004979F4 /* DemoVC9HeaderView.h */, + 4841F5EE1C2AC7D6004979F4 /* DemoVC9HeaderView.m */, + ); + name = DemoVC9; + sourceTree = ""; + }; + 4841F5F41C2AD949004979F4 /* SDPhotoBrowser */ = { + isa = PBXGroup; + children = ( + 4841F5F51C2AD949004979F4 /* SDBrowserImageView.h */, + 4841F5F61C2AD949004979F4 /* SDBrowserImageView.m */, + 4841F5F71C2AD949004979F4 /* SDPhotoBrowser.h */, + 4841F5F81C2AD949004979F4 /* SDPhotoBrowser.m */, + 4841F5F91C2AD949004979F4 /* SDPhotoBrowserConfig.h */, + 4841F5FA1C2AD949004979F4 /* SDWaitingView.h */, + 4841F5FB1C2AD949004979F4 /* SDWaitingView.m */, + ); + path = SDPhotoBrowser; + sourceTree = ""; + }; + 4841F6311C2ADCAE004979F4 /* SDWebImage */ = { + isa = PBXGroup; + children = ( + 4841F6321C2ADCAE004979F4 /* MKAnnotationView+WebCache.h */, + 4841F6331C2ADCAE004979F4 /* MKAnnotationView+WebCache.m */, + 4841F6341C2ADCAE004979F4 /* NSData+ImageContentType.h */, + 4841F6351C2ADCAE004979F4 /* NSData+ImageContentType.m */, + 4841F6361C2ADCAE004979F4 /* SDImageCache.h */, + 4841F6371C2ADCAE004979F4 /* SDImageCache.m */, + 4841F6381C2ADCAE004979F4 /* SDWebImageCompat.h */, + 4841F6391C2ADCAE004979F4 /* SDWebImageCompat.m */, + 4841F63A1C2ADCAE004979F4 /* SDWebImageDecoder.h */, + 4841F63B1C2ADCAE004979F4 /* SDWebImageDecoder.m */, + 4841F63C1C2ADCAE004979F4 /* SDWebImageDownloader.h */, + 4841F63D1C2ADCAE004979F4 /* SDWebImageDownloader.m */, + 4841F63E1C2ADCAE004979F4 /* SDWebImageDownloaderOperation.h */, + 4841F63F1C2ADCAE004979F4 /* SDWebImageDownloaderOperation.m */, + 4841F6401C2ADCAE004979F4 /* SDWebImageManager.h */, + 4841F6411C2ADCAE004979F4 /* SDWebImageManager.m */, + 4841F6421C2ADCAE004979F4 /* SDWebImageOperation.h */, + 4841F6431C2ADCAE004979F4 /* SDWebImagePrefetcher.h */, + 4841F6441C2ADCAE004979F4 /* SDWebImagePrefetcher.m */, + 4841F6451C2ADCAE004979F4 /* UIButton+WebCache.h */, + 4841F6461C2ADCAE004979F4 /* UIButton+WebCache.m */, + 4841F6471C2ADCAE004979F4 /* UIImage+GIF.h */, + 4841F6481C2ADCAE004979F4 /* UIImage+GIF.m */, + 4841F6491C2ADCAE004979F4 /* UIImage+MultiFormat.h */, + 4841F64A1C2ADCAE004979F4 /* UIImage+MultiFormat.m */, + 4841F64B1C2ADCAE004979F4 /* UIImage+WebP.h */, + 4841F64C1C2ADCAE004979F4 /* UIImage+WebP.m */, + 4841F64D1C2ADCAE004979F4 /* UIImageView+HighlightedWebCache.h */, + 4841F64E1C2ADCAE004979F4 /* UIImageView+HighlightedWebCache.m */, + 4841F64F1C2ADCAE004979F4 /* UIImageView+WebCache.h */, + 4841F6501C2ADCAE004979F4 /* UIImageView+WebCache.m */, + 4841F6511C2ADCAE004979F4 /* UIView+WebCacheOperation.h */, + 4841F6521C2ADCAE004979F4 /* UIView+WebCacheOperation.m */, + ); + path = SDWebImage; + sourceTree = ""; + }; 484511661C24395F0071BE2C /* DemoVC7 */ = { isa = PBXGroup; children = ( @@ -203,6 +360,8 @@ 487D3EB31BCB9EC700A66173 /* SDAutoLayout 测试 Demo */ = { isa = PBXGroup; children = ( + 4841F6311C2ADCAE004979F4 /* SDWebImage */, + 4841F5F41C2AD949004979F4 /* SDPhotoBrowser */, 48DA2AFB1BFB529200A771E6 /* SDAutoLayout */, 99E7289C1BE5E22D00771161 /* SDRefeshView */, 487D3EDE1BCBA52900A66173 /* DemoVC */, @@ -248,6 +407,7 @@ 487D3EDE1BCBA52900A66173 /* DemoVC */ = { isa = PBXGroup; children = ( + 4841F5D81C2A8256004979F4 /* DemoVC9 */, 4867A48C1C292EB500BE8767 /* DemoVC8 */, 484511661C24395F0071BE2C /* DemoVC7 */, 486A382A1C0D8499000D43E5 /* DemoVC6 */, @@ -305,6 +465,12 @@ 48DBCD0F1C01DEB1002EC476 /* Images */ = { isa = PBXGroup; children = ( + 4841F5F01C2ACC2B004979F4 /* pbg.jpg */, + 4841F5F11C2ACC2B004979F4 /* picon.jpg */, + 4841F5E51C2ABC60004979F4 /* pic5.jpg */, + 4841F5E61C2ABC60004979F4 /* pic6.jpg */, + 4841F5E71C2ABC60004979F4 /* pic7.jpg */, + 4841F5E81C2ABC60004979F4 /* pic8.jpg */, 48DBCD101C01E045002EC476 /* icon0.jpg */, 48DBCD111C01E045002EC476 /* icon1.jpg */, 48DBCD121C01E045002EC476 /* icon2.jpg */, @@ -418,15 +584,21 @@ buildActionMask = 2147483647; files = ( 48DBCD1A1C01E045002EC476 /* icon0.jpg in Resources */, + 4841F5E91C2ABC60004979F4 /* pic5.jpg in Resources */, + 4841F5EB1C2ABC60004979F4 /* pic7.jpg in Resources */, 48DBCD221C01E045002EC476 /* pic3.jpg in Resources */, 48DBCD211C01E045002EC476 /* pic2.jpg in Resources */, 48DBCD231C01E045002EC476 /* pic4.jpg in Resources */, 48DBCD1F1C01E045002EC476 /* pic0.jpg in Resources */, + 4841F5F21C2ACC2B004979F4 /* pbg.jpg in Resources */, 487D3EC01BCB9EC700A66173 /* Main.storyboard in Resources */, + 4841F5F31C2ACC2B004979F4 /* picon.jpg in Resources */, 48DBCD1B1C01E045002EC476 /* icon1.jpg in Resources */, 48DBCD201C01E045002EC476 /* pic1.jpg in Resources */, + 4841F5EA1C2ABC60004979F4 /* pic6.jpg in Resources */, 487D3EC51BCB9EC700A66173 /* LaunchScreen.xib in Resources */, 48DBCD1D1C01E045002EC476 /* icon3.jpg in Resources */, + 4841F5EC1C2ABC60004979F4 /* pic8.jpg in Resources */, 487D3EC21BCB9EC700A66173 /* Images.xcassets in Resources */, 48DBCD1C1C01E045002EC476 /* icon2.jpg in Resources */, 99E728A71BE5E22D00771161 /* sdRefeshView_arrow@2x.png in Resources */, @@ -451,27 +623,51 @@ 487D3EE71BCBA78B00A66173 /* DemoTableViewControler.m in Sources */, 487D3EBD1BCB9EC700A66173 /* ViewController.m in Sources */, 48DA2B011BFB529200A771E6 /* UIView+SDAutoLayout.m in Sources */, + 4841F65A1C2ADCAE004979F4 /* SDWebImageManager.m in Sources */, 487D3EF41BCBB71500A66173 /* DemoVC3.m in Sources */, 486A382D1C0D852C000D43E5 /* DemoVC6.m in Sources */, + 4841F5DE1C2A8632004979F4 /* DemoVC9Cell.m in Sources */, + 4841F65E1C2ADCAE004979F4 /* UIImage+MultiFormat.m in Sources */, + 4841F5DB1C2A8275004979F4 /* DemoVC9.m in Sources */, + 4841F6581C2ADCAE004979F4 /* SDWebImageDownloader.m in Sources */, 48DBCD0E1C01DA1E002EC476 /* DemoVC5Model.m in Sources */, + 4841F65F1C2ADCAE004979F4 /* UIImage+WebP.m in Sources */, + 4841F5FE1C2AD949004979F4 /* SDWaitingView.m in Sources */, 484511711C2439830071BE2C /* DemoVC7Cell2.m in Sources */, + 4841F5FC1C2AD949004979F4 /* SDBrowserImageView.m in Sources */, 484511721C2439830071BE2C /* DemoVC7Model.m in Sources */, + 4841F6601C2ADCAE004979F4 /* UIImageView+HighlightedWebCache.m in Sources */, + 4841F6571C2ADCAE004979F4 /* SDWebImageDecoder.m in Sources */, + 4841F65B1C2ADCAE004979F4 /* SDWebImagePrefetcher.m in Sources */, 4867A48F1C292EF800BE8767 /* DemoVC8.m in Sources */, 487D3EBA1BCB9EC700A66173 /* AppDelegate.m in Sources */, 48DBCD0B1C01D89C002EC476 /* DemoVC5.m in Sources */, + 4841F5E41C2A94ED004979F4 /* SDWeiXinPhotoContainerView.m in Sources */, 4845116F1C2439830071BE2C /* DemoVC7.m in Sources */, + 4841F5FD1C2AD949004979F4 /* SDPhotoBrowser.m in Sources */, + 4841F65D1C2ADCAE004979F4 /* UIImage+GIF.m in Sources */, + 4841F6611C2ADCAE004979F4 /* UIImageView+WebCache.m in Sources */, 484511701C2439830071BE2C /* DemoVC7Cell.m in Sources */, + 4841F6551C2ADCAE004979F4 /* SDImageCache.m in Sources */, 48DA2B001BFB529200A771E6 /* UITableView+SDAutoTableViewCellHeight.m in Sources */, 99E728AA1BE5E22D00771161 /* SDRefreshView.m in Sources */, 48D632331BD0A7B500F86A88 /* DemoVC4.m in Sources */, 487D3EE11BCBA55700A66173 /* DemoVC0.m in Sources */, + 4841F6591C2ADCAE004979F4 /* SDWebImageDownloaderOperation.m in Sources */, 99E728AB1BE5E22D00771161 /* UIView+SDExtension.m in Sources */, 99E728A81BE5E22D00771161 /* SDRefreshFooterView.m in Sources */, + 4841F6561C2ADCAE004979F4 /* SDWebImageCompat.m in Sources */, + 4841F6541C2ADCAE004979F4 /* NSData+ImageContentType.m in Sources */, 48DBCD081C01D884002EC476 /* DemoVC5CellTableViewCell.m in Sources */, 487D3EEA1BCBACF500A66173 /* DemoVC2.m in Sources */, 99E728A91BE5E22D00771161 /* SDRefreshHeaderView.m in Sources */, + 4841F65C1C2ADCAE004979F4 /* UIButton+WebCache.m in Sources */, 487D3EF01BCBB61A00A66173 /* TestCell2.m in Sources */, 487D3EB71BCB9EC700A66173 /* main.m in Sources */, + 4841F5EF1C2AC7D6004979F4 /* DemoVC9HeaderView.m in Sources */, + 4841F6621C2ADCAE004979F4 /* UIView+WebCacheOperation.m in Sources */, + 4841F6531C2ADCAE004979F4 /* MKAnnotationView+WebCache.m in Sources */, + 4841F5E11C2A90CF004979F4 /* Demo9Model.m in Sources */, 487D3EE41BCBA6CA00A66173 /* DemoVC1.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" index 15ccf071eb5fdbc153e06ecc835165f2addb0ca5..7b005f8475ed0a04bfba34c18d8477899504743d 100644 GIT binary patch literal 37097 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 o3@AR;OPvIG%YmM92{ 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≠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 diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.h" new file mode 100644 index 0000000..92d3e62 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.h" @@ -0,0 +1,18 @@ +// +// Demo9Model.h +// SDAutoLayout 测试 Demo +// +// Created by gsd on 15/12/23. +// Copyright © 2015年 gsd. All rights reserved. +// + +#import + +@interface Demo9Model : NSObject + +@property (nonatomic, copy) NSString *iconName; +@property (nonatomic, copy) NSString *name; +@property (nonatomic, copy) NSString *content; +@property (nonatomic, strong) NSArray *picNamesArray; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.m" new file mode 100644 index 0000000..cf5c3da --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.m" @@ -0,0 +1,13 @@ +// +// Demo9Model.m +// SDAutoLayout 测试 Demo +// +// Created by gsd on 15/12/23. +// Copyright © 2015年 gsd. All rights reserved. +// + +#import "Demo9Model.h" + +@implementation Demo9Model + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoTableViewControler.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoTableViewControler.m" index 52c5d7d..03da057 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoTableViewControler.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoTableViewControler.m" @@ -33,16 +33,15 @@ - (void)viewDidLoad self.view.backgroundColor = [UIColor whiteColor]; - UIViewController *vc = [DemoVC5 new]; - vc.title = @"DemoVC5"; - [self.navigationController pushViewController:vc animated:YES]; + + [self.navigationController pushViewController:[NSClassFromString(@"DemoVC9") new] animated:YES]; } #pragma mark - tableview datasourece and delegate - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 9; + return 10; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC1.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC1.m" index a5c16ca..b4fc08b 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC1.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC1.m" @@ -29,6 +29,7 @@ - (void)viewDidLoad { [super viewDidLoad]; + // 暂时用view替代展示cell效果 self.view0.sd_layout @@ -37,11 +38,11 @@ - (void)viewDidLoad .widthIs(50) .heightIs(50); + // view1使用高度根据子view内容自适应,所有不需要设置高度 self.view1.sd_layout .leftSpaceToView(self.view0, 10) .topEqualToView(self.view0) - .rightSpaceToView(self.view, 30) - .heightRatioToView(self.view, 0.2); + .rightSpaceToView(self.view, 30); self.view2.sd_layout .rightSpaceToView(self.view, 10) @@ -66,8 +67,32 @@ - (void)viewDidLoad .rightEqualToView(self.view1) .bottomSpaceToView(self.view, 20) .topEqualToView(self.view4); + +// ============================================================ + + // 在view1中加入两个子view,然后设置view1高度根据子view内容自适应 + + + UILabel *testLabel = [UILabel new]; + UIView *testView = [UIView new]; + [self.view1 addSubview:testLabel]; + [self.view1 addSubview:testView]; + + testLabel.backgroundColor = [UIColor purpleColor]; + testView.backgroundColor = [UIColor orangeColor]; + + testLabel.text = @"edflgjl;ijf;iljd;lij;lfk;lknsdfhfg;ljhl;sfdj;oigfj;jgf;lfgjrlkfewiorrgi"; + + testLabel.sd_layout.autoHeightRatio(0).spaceToSuperView(UIEdgeInsetsMake(10, 10, 0, 10)); + testView.sd_layout + .topSpaceToView(testLabel, 10) + .widthRatioToView(testLabel, 1) + .heightIs(30) + .leftEqualToView(testLabel); + + [self.view1 setupAutoHeightWithBottomView:testView bottomMargin:10]; - self.view5.tag = 19999; +// ============================================================ } @end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5CellTableViewCell.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5CellTableViewCell.m" index d8f0392..dcece84 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5CellTableViewCell.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5CellTableViewCell.m" @@ -105,11 +105,11 @@ - (void)setup .centerYEqualToView(_view1) .heightIs(14); - [_view4 setSigleLineAutoResizeWithMaxWidth:50]; + [_view4 setSingleLineAutoResizeWithMaxWidth:50]; _view0.sd_cornerRadiusFromWidthRatio = @(0.5); - [_view1 setSigleLineAutoResizeWithMaxWidth:200]; + [_view1 setSingleLineAutoResizeWithMaxWidth:200]; } diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.h" new file mode 100644 index 0000000..f6cbd2b --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.h" @@ -0,0 +1,13 @@ +// +// DemoVC9.h +// SDAutoLayout 测试 Demo +// +// Created by gsd on 15/12/23. +// Copyright © 2015年 gsd. All rights reserved. +// + +#import + +@interface DemoVC9 : UITableViewController + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.m" new file mode 100644 index 0000000..52a9670 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.m" @@ -0,0 +1,151 @@ +// +// DemoVC9.m +// SDAutoLayout 测试 Demo +// +// Created by gsd on 15/12/23. +// Copyright © 2015年 gsd. All rights reserved. +// + +#import "DemoVC9.h" + +#import "Demo9Model.h" +#import "DemoVC9Cell.h" + +#import "DemoVC9HeaderView.h" + +#import "DemoVC5CellTableViewCell.h" + +#import "SDRefeshView/SDRefresh.h" + +#import "UITableView+SDAutoTableViewCellHeight.h" + +#define kDemoVC9CellId @"demovc9cell" + +@interface DemoVC9 () + +@property (nonatomic, strong) NSMutableArray *modelsArray; + +@end + +@implementation DemoVC9 +{ + SDRefreshFooterView *_refreshFooter; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + +// self.edgesForExtendedLayout = UIRectEdgeAll; + self.automaticallyAdjustsScrollViewInsets = NO; + + self.tableView.estimatedRowHeight = 100; + + [self creatModelsWithCount:10]; + + __weak typeof(self) weakSelf = self; + + // 上拉加载 + _refreshFooter = [SDRefreshFooterView refreshView]; + [_refreshFooter addToScrollView:self.tableView]; + __weak typeof(_refreshFooter) weakRefreshFooter = _refreshFooter; + _refreshFooter.beginRefreshingOperation = ^() { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [weakSelf creatModelsWithCount:10]; + [weakSelf.tableView reloadData]; + [weakRefreshFooter endRefreshing]; + }); + }; + + DemoVC9HeaderView *headerView = [DemoVC9HeaderView new]; + headerView.frame = CGRectMake(0, 0, 0, 260); + self.tableView.tableHeaderView = headerView; + + [self.tableView registerClass:[DemoVC9Cell class] forCellReuseIdentifier:kDemoVC9CellId]; +} + +- (void)creatModelsWithCount:(NSInteger)count +{ + if (!_modelsArray) { + _modelsArray = [NSMutableArray new]; + } + + NSArray *iconImageNamesArray = @[@"icon0.jpg", + @"icon1.jpg", + @"icon2.jpg", + @"icon3.jpg", + @"icon4.jpg", + ]; + + NSArray *namesArray = @[@"GSD_iOS", + @"风口上的猪", + @"当今世界网名都不好起了", + @"我叫郭德纲", + @"Hello Kitty"]; + + NSArray *textArray = @[@"当你的 app 没有提供 3x 的 LaunchImage 时,系统默认进入兼容模式,大屏幕一切按照 320 宽度渲染,屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。", + @"然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。", + @"当你的 app 没有提供 3x 的 LaunchImage 时", + @"但是建议不要长期处于这种模式下,否则在大屏上会显得字大,内容少,容易遭到用户投诉。", + @"屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。" + ]; + + NSArray *picImageNamesArray = @[ @"pic0.jpg", + @"pic1.jpg", + @"pic2.jpg", + @"pic3.jpg", + @"pic4.jpg", + @"pic5.jpg", + @"pic6.jpg", + @"pic7.jpg", + @"pic8.jpg" + ]; + + for (int i = 0; i < count; i++) { + int iconRandomIndex = arc4random_uniform(5); + int nameRandomIndex = arc4random_uniform(5); + int contentRandomIndex = arc4random_uniform(5); + + Demo9Model *model = [Demo9Model new]; + model.iconName = iconImageNamesArray[iconRandomIndex]; + model.name = namesArray[nameRandomIndex]; + model.content = textArray[contentRandomIndex]; + + + // 模拟“随机图片” + int random = arc4random_uniform(10); + + NSMutableArray *temp = [NSMutableArray new]; + for (int i = 0; i < random; i++) { + int randomIndex = arc4random_uniform(9); + [temp addObject:picImageNamesArray[randomIndex]]; + } + if (temp.count) { + model.picNamesArray = [temp copy]; + } + + [self.modelsArray addObject:model]; + } +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.modelsArray.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + DemoVC5CellTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kDemoVC9CellId]; + + cell.model = self.modelsArray[indexPath.row]; + return cell; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + // >>>>>>>>>>>>>>>>>>>>> * cell自适应 * >>>>>>>>>>>>>>>>>>>>>>>> + CGFloat h = [self cellHeightForIndexPath:indexPath cellContentViewWidth:[UIScreen mainScreen].bounds.size.width]; + return h; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.h" new file mode 100644 index 0000000..acca1b3 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.h" @@ -0,0 +1,17 @@ +// +// DemoVC9Cell.h +// SDAutoLayout 测试 Demo +// +// Created by gsd on 15/12/23. +// Copyright © 2015年 gsd. All rights reserved. +// + +#import + +@class Demo9Model; + +@interface DemoVC9Cell : UITableViewCell + +@property (nonatomic, strong) Demo9Model *model; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.m" new file mode 100644 index 0000000..8404c7a --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.m" @@ -0,0 +1,109 @@ +// +// DemoVC9Cell.m +// SDAutoLayout 测试 Demo +// +// Created by gsd on 15/12/23. +// Copyright © 2015年 gsd. All rights reserved. +// + +#import "DemoVC9Cell.h" + +#import "Demo9Model.h" + +#import "UIView+SDAutoLayout.h" + +#import "SDWeiXinPhotoContainerView.h" + +@implementation DemoVC9Cell +{ + UIImageView *_iconView; + UILabel *_nameLable; + UILabel *_contentLabel; + SDWeiXinPhotoContainerView *_picContainerView; + UILabel *_timeLabel; +} + + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + [self setup]; + } + return self; +} + +- (void)setup +{ + _iconView = [UIImageView new]; + + _nameLable = [UILabel new]; + _nameLable.font = [UIFont systemFontOfSize:14]; + _nameLable.textColor = [UIColor colorWithRed:(54 / 255.0) green:(71 / 255.0) blue:(121 / 255.0) alpha:0.9]; + + _contentLabel = [UILabel new]; + _contentLabel.font = [UIFont systemFontOfSize:15]; + + _picContainerView = [SDWeiXinPhotoContainerView new]; + + _timeLabel = [UILabel new]; + _timeLabel.font = [UIFont systemFontOfSize:13]; + _timeLabel.textColor = [UIColor lightGrayColor]; + + NSArray *views = @[_iconView, _nameLable, _contentLabel, _picContainerView, _timeLabel]; + + [views enumerateObjectsUsingBlock:^(UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + [self.contentView addSubview:obj]; + }]; + + UIView *contentView = self.contentView; + CGFloat margin = 10; + + _iconView.sd_layout + .leftSpaceToView(contentView, margin) + .topSpaceToView(contentView, margin + 5) + .widthIs(40) + .heightIs(40); + + _nameLable.sd_layout + .leftSpaceToView(_iconView, margin) + .topEqualToView(_iconView) + .heightIs(18); + [_nameLable setSingleLineAutoResizeWithMaxWidth:200]; + + _contentLabel.sd_layout + .leftEqualToView(_nameLable) + .topSpaceToView(_nameLable, margin) + .rightSpaceToView(contentView, margin) + .autoHeightRatio(0); + + _picContainerView.sd_layout + .leftEqualToView(_contentLabel); + + _timeLabel.sd_layout + .leftEqualToView(_contentLabel) + .topSpaceToView(_picContainerView, margin) + .heightIs(15) + .autoHeightRatio(0); + + [self setupAutoHeightWithBottomView:_timeLabel bottomMargin:margin + 5]; + +} + + +- (void)setModel:(Demo9Model *)model +{ + _model = model; + + _iconView.image = [UIImage imageNamed:model.iconName]; + _nameLable.text = model.name; + _contentLabel.text = model.content; + _picContainerView.picPathStringsArray = model.picNamesArray; + CGFloat picContainerTopMargin = 0; + if (model.picNamesArray.count) { + picContainerTopMargin = 10; + } + _picContainerView.sd_layout.topSpaceToView(_contentLabel, picContainerTopMargin); + _timeLabel.text = @"1分钟前"; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.h" new file mode 100644 index 0000000..3a8fcd7 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.h" @@ -0,0 +1,13 @@ +// +// DemoVC9HeaderView.h +// SDAutoLayout 测试 Demo +// +// Created by gsd on 15/12/23. +// Copyright © 2015年 gsd. All rights reserved. +// + +#import + +@interface DemoVC9HeaderView : UIView + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.m" new file mode 100644 index 0000000..1eb0139 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.m" @@ -0,0 +1,65 @@ +// +// DemoVC9HeaderView.m +// SDAutoLayout 测试 Demo +// +// Created by gsd on 15/12/23. +// Copyright © 2015年 gsd. All rights reserved. +// + +#import "DemoVC9HeaderView.h" + +#import "UIView+SDAutoLayout.h" + +@implementation DemoVC9HeaderView +{ + UIImageView *_backgroundImageView; + UIImageView *_iconView; + UILabel *_nameLabel; +} + +- (instancetype)initWithFrame:(CGRect)frame +{ + if (self = [super initWithFrame:frame]) { + [self setup]; + } + return self; +} + +- (void)setup +{ + _backgroundImageView = [UIImageView new]; + _backgroundImageView.image = [UIImage imageNamed:@"pbg.jpg"]; + [self addSubview:_backgroundImageView]; + + _iconView = [UIImageView new]; + _iconView.image = [UIImage imageNamed:@"picon.jpg"]; + _iconView.layer.borderColor = [UIColor whiteColor].CGColor; + _iconView.layer.borderWidth = 3; + [self addSubview:_iconView]; + + _nameLabel = [UILabel new]; + _nameLabel.text = @"GSD_iOS"; + _nameLabel.textColor = [UIColor whiteColor]; + _nameLabel.textAlignment = NSTextAlignmentRight; + _nameLabel.font = [UIFont boldSystemFontOfSize:15]; + [self addSubview:_nameLabel]; + + + _backgroundImageView.sd_layout.spaceToSuperView(UIEdgeInsetsMake(0, 0, 40, 0)); + + _iconView.sd_layout + .widthIs(70) + .heightIs(70) + .rightSpaceToView(self, 15) + .bottomSpaceToView(self, 20); + + + _nameLabel.tag = 1000; + [_nameLabel setSingleLineAutoResizeWithMaxWidth:200]; + _nameLabel.sd_layout + .rightSpaceToView(_iconView, 20) + .bottomSpaceToView(_iconView, -35) + .heightIs(20); +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pbg.jpg" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pbg.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..86e70e8d7bb121a65b21627f7ae118b91de07b70 GIT binary patch literal 105637 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 z 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 Lj);k0;fep*EyM`C literal 0 HcmV?d00001 diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic5.jpg" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic5.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..4e2659708a018804212f553d17363fb88bb0a83f GIT binary patch literal 4459 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 z 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 PktR(E(LvnaJpcS(4>R^) literal 0 HcmV?d00001 diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic7.jpg" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic7.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..89d87e67f3dca620b9a955fbcf9269f37279f706 GIT binary patch literal 6058 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 literal 0 HcmV?d00001 diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic8.jpg" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic8.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..55e461787cb0d6cfb690b8d4894731b5014a47d7 GIT binary patch literal 13100 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 PKbjO4cC+r{@2me0Hk|!n literal 0 HcmV?d00001 diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/picon.jpg" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Images/picon.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..43cb3c809cd03a9edb87d3fbae615630f2e3603f GIT binary patch literal 212225 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

HikX-2Dy)KiLR;9}7(ZLY~Gao3vkooLD@AG2wl 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 Yep5^dqwPze(3d}Qpb9xYrjXD7*+8B4E&u=k literal 0 HcmV?d00001 diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" index 3446305..97b1549 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" @@ -171,7 +171,7 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @interface UILabel (SDLabelAutoResize) // 设置单行文本label宽度自适应 -- (void)setSigleLineAutoResizeWithMaxWidth:(CGFloat)maxWidth; +- (void)setSingleLineAutoResizeWithMaxWidth:(CGFloat)maxWidth; @end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" index 73cd803..7f397b3 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" @@ -472,7 +472,7 @@ - (void)setupAutoContentSizeWithBottomView:(UIView *)bottomView bottomMargin:(CG @implementation UILabel (SDLabelAutoResize) -- (void)setSigleLineAutoResizeWithMaxWidth:(CGFloat)maxWidth +- (void)setSingleLineAutoResizeWithMaxWidth:(CGFloat)maxWidth { self.sd_maxWidth = @(maxWidth); } @@ -602,8 +602,8 @@ - (void)sd_autolayout cell.autoHeight = cell.sd_bottomView.bottom + cell.sd_bottomViewBottomMargin; } } else if (![self isKindOfClass:[UITableViewCell class]] && self.sd_bottomView) { + CGFloat contentHeight = self.sd_bottomView.bottom + self.sd_bottomViewBottomMargin; if ([self isKindOfClass:[UIScrollView class]]) { - CGFloat contentHeight = self.sd_bottomView.bottom + self.sd_bottomViewBottomMargin; UIScrollView *scrollView = (UIScrollView *)self; CGSize contentSize = scrollView.contentSize; contentSize.height = contentHeight; @@ -611,6 +611,9 @@ - (void)sd_autolayout contentSize.width = scrollView.width; } scrollView.contentSize = contentSize; + } else { + // 如果这里出现循环调用情况请把demo发送到gsdios@126.com,谢谢配合。 + self.height = contentHeight; } } } @@ -627,6 +630,7 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model if (label.text.length) { CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; label.width = rect.size.width; + label.fixedWith = @(label.width); } else { label.width = 0; } diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDBrowserImageView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDBrowserImageView.h" new file mode 100755 index 0000000..e5d88e5 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDBrowserImageView.h" @@ -0,0 +1,27 @@ +// +// SDBrowserImageView.h +// SDPhotoBrowser +// +// Created by aier on 15-2-6. +// Copyright (c) 2015年 GSD. All rights reserved. +// + +#import +#import "SDWaitingView.h" + + +@interface SDBrowserImageView : UIImageView + +@property (nonatomic, assign) CGFloat progress; +@property (nonatomic, assign, readonly) BOOL isScaled; +@property (nonatomic, assign) BOOL hasLoadedImage; + +- (void)eliminateScale; // 清除缩放 + +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder; + +- (void)doubleTapToZommWithScale:(CGFloat)scale; + +- (void)clear; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDBrowserImageView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDBrowserImageView.m" new file mode 100755 index 0000000..03d6567 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDBrowserImageView.m" @@ -0,0 +1,236 @@ +// +// SDBrowserImageView.m +// SDPhotoBrowser +// +// Created by aier on 15-2-6. +// Copyright (c) 2015年 GSD. All rights reserved. +// + +#import "SDBrowserImageView.h" +#import "UIImageView+WebCache.h" +#import "SDPhotoBrowserConfig.h" + +@implementation SDBrowserImageView +{ + __weak SDWaitingView *_waitingView; + BOOL _didCheckSize; + UIScrollView *_scroll; + UIImageView *_scrollImageView; + UIScrollView *_zoomingScroolView; + UIImageView *_zoomingImageView; + CGFloat _totalScale; +} + + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.userInteractionEnabled = YES; + self.contentMode = UIViewContentModeScaleAspectFit; + _totalScale = 1.0; + + // 捏合手势缩放图片 + UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(zoomImage:)]; + pinch.delegate = self; + [self addGestureRecognizer:pinch]; + + + + } + return self; +} + +- (BOOL)isScaled +{ + return 1.0 != _totalScale; +} + +- (void)layoutSubviews +{ + [super layoutSubviews]; + _waitingView.center = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 0.5); + + CGSize imageSize = self.image.size; + + if (self.bounds.size.width * (imageSize.height / imageSize.width) > self.bounds.size.height) { + if (!_scroll) { + UIScrollView *scroll = [[UIScrollView alloc] init]; + scroll.backgroundColor = [UIColor whiteColor]; + UIImageView *imageView = [[UIImageView alloc] init]; + imageView.image = self.image; + _scrollImageView = imageView; + [scroll addSubview:imageView]; + scroll.backgroundColor = SDPhotoBrowserBackgrounColor; + _scroll = scroll; + [self addSubview:scroll]; + if (_waitingView) { + [self bringSubviewToFront:_waitingView]; + } + } + _scroll.frame = self.bounds; + + CGFloat imageViewH = self.bounds.size.width * (imageSize.height / imageSize.width); + + _scrollImageView.bounds = CGRectMake(0, 0, _scroll.frame.size.width, imageViewH); + _scrollImageView.center = CGPointMake(_scroll.frame.size.width * 0.5, _scrollImageView.frame.size.height * 0.5); + _scroll.contentSize = CGSizeMake(0, _scrollImageView.bounds.size.height); + + } else { + if (_scroll) [_scroll removeFromSuperview]; // 防止旋转时适配的scrollView的影响 + } + +} + + + +- (void)setProgress:(CGFloat)progress +{ + _progress = progress; + _waitingView.progress = progress; + +} + +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder +{ + SDWaitingView *waiting = [[SDWaitingView alloc] init]; + waiting.bounds = CGRectMake(0, 0, 100, 100); + waiting.mode = SDWaitingViewProgressMode; + _waitingView = waiting; + [self addSubview:waiting]; + + + __weak SDBrowserImageView *imageViewWeak = self; + + [self sd_setImageWithURL:url placeholderImage:placeholder options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) { + imageViewWeak.progress = (CGFloat)receivedSize / expectedSize; + + } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + [imageViewWeak removeWaitingView]; + + + if (error) { + UILabel *label = [[UILabel alloc] init]; + label.bounds = CGRectMake(0, 0, 160, 30); + label.center = CGPointMake(imageViewWeak.bounds.size.width * 0.5, imageViewWeak.bounds.size.height * 0.5); + label.text = @"图片加载失败"; + label.font = [UIFont systemFontOfSize:16]; + label.textColor = [UIColor whiteColor]; + label.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.8]; + label.layer.cornerRadius = 5; + label.clipsToBounds = YES; + label.textAlignment = NSTextAlignmentCenter; + [imageViewWeak addSubview:label]; + } else { + _scrollImageView.image = image; + [_scrollImageView setNeedsDisplay]; + } + + }]; +} + +- (void)zoomImage:(UIPinchGestureRecognizer *)recognizer +{ + [self prepareForImageViewScaling]; + CGFloat scale = recognizer.scale; + CGFloat temp = _totalScale + (scale - 1); + [self setTotalScale:temp]; + recognizer.scale = 1.0; +} + +- (void)setTotalScale:(CGFloat)totalScale +{ + if ((_totalScale < 0.5 && totalScale < _totalScale) || (_totalScale > 2.0 && totalScale > _totalScale)) return; // 最大缩放 2倍,最小0.5倍 + + [self zoomWithScale:totalScale]; +} + +- (void)zoomWithScale:(CGFloat)scale +{ + _totalScale = scale; + + _zoomingImageView.transform = CGAffineTransformMakeScale(scale, scale); + + if (scale > 1) { + CGFloat contentW = _zoomingImageView.frame.size.width; + CGFloat contentH = MAX(_zoomingImageView.frame.size.height, self.frame.size.height); + + _zoomingImageView.center = CGPointMake(contentW * 0.5, contentH * 0.5); + _zoomingScroolView.contentSize = CGSizeMake(contentW, contentH); + + + CGPoint offset = _zoomingScroolView.contentOffset; + offset.x = (contentW - _zoomingScroolView.frame.size.width) * 0.5; +// offset.y = (contentH - _zoomingImageView.frame.size.height) * 0.5; + _zoomingScroolView.contentOffset = offset; + + } else { + _zoomingScroolView.contentSize = _zoomingScroolView.frame.size; + _zoomingScroolView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0); + _zoomingImageView.center = _zoomingScroolView.center; + } +} + +- (void)doubleTapToZommWithScale:(CGFloat)scale +{ + [self prepareForImageViewScaling]; + [UIView animateWithDuration:0.5 animations:^{ + [self zoomWithScale:scale]; + } completion:^(BOOL finished) { + if (scale == 1) { + [self clear]; + } + }]; +} + +- (void)prepareForImageViewScaling +{ + if (!_zoomingScroolView) { + _zoomingScroolView = [[UIScrollView alloc] initWithFrame:self.bounds]; + _zoomingScroolView.backgroundColor = SDPhotoBrowserBackgrounColor; + _zoomingScroolView.contentSize = self.bounds.size; + UIImageView *zoomingImageView = [[UIImageView alloc] initWithImage:self.image]; + CGSize imageSize = zoomingImageView.image.size; + CGFloat imageViewH = self.bounds.size.height; + if (imageSize.width > 0) { + imageViewH = self.bounds.size.width * (imageSize.height / imageSize.width); + } + zoomingImageView.bounds = CGRectMake(0, 0, self.bounds.size.width, imageViewH); + zoomingImageView.center = _zoomingScroolView.center; + zoomingImageView.contentMode = UIViewContentModeScaleAspectFit; + _zoomingImageView = zoomingImageView; + [_zoomingScroolView addSubview:zoomingImageView]; + [self addSubview:_zoomingScroolView]; + } +} + +- (void)scaleImage:(CGFloat)scale +{ + [self prepareForImageViewScaling]; + [self setTotalScale:scale]; +} + +// 清除缩放 +- (void)eliminateScale +{ + [self clear]; + _totalScale = 1.0; +} + +- (void)clear +{ + [_zoomingScroolView removeFromSuperview]; + _zoomingScroolView = nil; + _zoomingImageView = nil; + +} + +- (void)removeWaitingView +{ + [_waitingView removeFromSuperview]; +} + + + + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowser.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowser.h" new file mode 100755 index 0000000..9fe04fe --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowser.h" @@ -0,0 +1,37 @@ +// +// SDPhotoBrowser.h +// photobrowser +// +// Created by aier on 15-2-3. +// Copyright (c) 2015年 aier. All rights reserved. +// + +#import + + +@class SDButton, SDPhotoBrowser; + +@protocol SDPhotoBrowserDelegate + +@required + +- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index; + +@optional + +- (NSURL *)photoBrowser:(SDPhotoBrowser *)browser highQualityImageURLForIndex:(NSInteger)index; + +@end + + +@interface SDPhotoBrowser : UIView + +@property (nonatomic, weak) UIView *sourceImagesContainerView; +@property (nonatomic, assign) NSInteger currentImageIndex; +@property (nonatomic, assign) NSInteger imageCount; + +@property (nonatomic, weak) id delegate; + +- (void)show; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowser.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowser.m" new file mode 100755 index 0000000..0b0953b --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowser.m" @@ -0,0 +1,347 @@ +// +// SDPhotoBrowser.m +// photobrowser +// +// Created by aier on 15-2-3. +// Copyright (c) 2015年 aier. All rights reserved. +// + +#import "SDPhotoBrowser.h" +#import "UIImageView+WebCache.h" +#import "SDBrowserImageView.h" + + +// ============在这里方便配置样式相关设置=========== + +// || +// || +// || +// \\// +// \/ + +#import "SDPhotoBrowserConfig.h" + +// ============================================= + +@implementation SDPhotoBrowser +{ + UIScrollView *_scrollView; + BOOL _hasShowedFistView; + UILabel *_indexLabel; + UIButton *_saveButton; + UIActivityIndicatorView *_indicatorView; + BOOL _willDisappear; +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = SDPhotoBrowserBackgrounColor; + } + return self; +} + + +- (void)didMoveToSuperview +{ + [self setupScrollView]; + + [self setupToolbars]; +} + +- (void)dealloc +{ + [[UIApplication sharedApplication].keyWindow removeObserver:self forKeyPath:@"frame"]; +} + +- (void)setupToolbars +{ + // 1. 序标 + UILabel *indexLabel = [[UILabel alloc] init]; + indexLabel.bounds = CGRectMake(0, 0, 80, 30); + indexLabel.textAlignment = NSTextAlignmentCenter; + indexLabel.textColor = [UIColor whiteColor]; + indexLabel.font = [UIFont boldSystemFontOfSize:20]; + indexLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5]; + indexLabel.layer.cornerRadius = indexLabel.bounds.size.height * 0.5; + indexLabel.clipsToBounds = YES; + if (self.imageCount > 1) { + indexLabel.text = [NSString stringWithFormat:@"1/%ld", (long)self.imageCount]; + } + _indexLabel = indexLabel; + [self addSubview:indexLabel]; + + // 2.保存按钮 + UIButton *saveButton = [[UIButton alloc] init]; + [saveButton setTitle:@"保存" forState:UIControlStateNormal]; + [saveButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + saveButton.backgroundColor = [UIColor colorWithRed:0.1f green:0.1f blue:0.1f alpha:0.90f]; + saveButton.layer.cornerRadius = 5; + saveButton.clipsToBounds = YES; + [saveButton addTarget:self action:@selector(saveImage) forControlEvents:UIControlEventTouchUpInside]; + _saveButton = saveButton; + [self addSubview:saveButton]; +} + +- (void)saveImage +{ + int index = _scrollView.contentOffset.x / _scrollView.bounds.size.width; + UIImageView *currentImageView = _scrollView.subviews[index]; + + UIImageWriteToSavedPhotosAlbum(currentImageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL); + + UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] init]; + indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge; + indicator.center = self.center; + _indicatorView = indicator; + [[UIApplication sharedApplication].keyWindow addSubview:indicator]; + [indicator startAnimating]; +} + +- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo; +{ + [_indicatorView removeFromSuperview]; + + UILabel *label = [[UILabel alloc] init]; + label.textColor = [UIColor whiteColor]; + label.backgroundColor = [UIColor colorWithRed:0.1f green:0.1f blue:0.1f alpha:0.90f]; + label.layer.cornerRadius = 5; + label.clipsToBounds = YES; + label.bounds = CGRectMake(0, 0, 150, 30); + label.center = self.center; + label.textAlignment = NSTextAlignmentCenter; + label.font = [UIFont boldSystemFontOfSize:17]; + [[UIApplication sharedApplication].keyWindow addSubview:label]; + [[UIApplication sharedApplication].keyWindow bringSubviewToFront:label]; + if (error) { + label.text = SDPhotoBrowserSaveImageFailText; + } else { + label.text = SDPhotoBrowserSaveImageSuccessText; + } + [label performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1.0]; +} + +- (void)setupScrollView +{ + _scrollView = [[UIScrollView alloc] init]; + _scrollView.delegate = self; + _scrollView.showsHorizontalScrollIndicator = NO; + _scrollView.showsVerticalScrollIndicator = NO; + _scrollView.pagingEnabled = YES; + [self addSubview:_scrollView]; + + for (int i = 0; i < self.imageCount; i++) { + SDBrowserImageView *imageView = [[SDBrowserImageView alloc] init]; + imageView.tag = i; + + // 单击图片 + UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(photoClick:)]; + + // 双击放大图片 + UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewDoubleTaped:)]; + doubleTap.numberOfTapsRequired = 2; + [self addGestureRecognizer:doubleTap]; + + [singleTap requireGestureRecognizerToFail:doubleTap]; + + [imageView addGestureRecognizer:singleTap]; + [imageView addGestureRecognizer:doubleTap]; + [_scrollView addSubview:imageView]; + } + + [self setupImageOfImageViewForIndex:self.currentImageIndex]; + +} + +// 加载图片 +- (void)setupImageOfImageViewForIndex:(NSInteger)index +{ + SDBrowserImageView *imageView = _scrollView.subviews[index]; + self.currentImageIndex = index; + if (imageView.hasLoadedImage) return; + if ([self highQualityImageURLForIndex:index]) { + [imageView setImageWithURL:[self highQualityImageURLForIndex:index] placeholderImage:[self placeholderImageForIndex:index]]; + } else { + imageView.image = [self placeholderImageForIndex:index]; + } + imageView.hasLoadedImage = YES; +} + +- (void)photoClick:(UITapGestureRecognizer *)recognizer +{ + _scrollView.hidden = YES; + _willDisappear = YES; + + SDBrowserImageView *currentImageView = (SDBrowserImageView *)recognizer.view; + NSInteger currentIndex = currentImageView.tag; + + UIView *sourceView = self.sourceImagesContainerView.subviews[currentIndex]; + CGRect targetTemp = [self.sourceImagesContainerView convertRect:sourceView.frame toView:self]; + + UIImageView *tempView = [[UIImageView alloc] init]; + tempView.contentMode = sourceView.contentMode; + tempView.clipsToBounds = YES; + tempView.image = currentImageView.image; + CGFloat h = (self.bounds.size.width / currentImageView.image.size.width) * currentImageView.image.size.height; + + if (!currentImageView.image) { // 防止 因imageview的image加载失败 导致 崩溃 + h = self.bounds.size.height; + } + + tempView.bounds = CGRectMake(0, 0, self.bounds.size.width, h); + tempView.center = self.center; + + [self addSubview:tempView]; + + _saveButton.hidden = YES; + + [UIView animateWithDuration:SDPhotoBrowserHideImageAnimationDuration animations:^{ + tempView.frame = targetTemp; + self.backgroundColor = [UIColor clearColor]; + _indexLabel.alpha = 0.1; + } completion:^(BOOL finished) { + [self removeFromSuperview]; + }]; +} + +- (void)imageViewDoubleTaped:(UITapGestureRecognizer *)recognizer +{ + SDBrowserImageView *imageView = (SDBrowserImageView *)recognizer.view; + CGFloat scale; + if (imageView.isScaled) { + scale = 1.0; + } else { + scale = 2.0; + } + + SDBrowserImageView *view = (SDBrowserImageView *)recognizer.view; + + [view doubleTapToZommWithScale:scale]; +} + +- (void)layoutSubviews +{ + [super layoutSubviews]; + + CGRect rect = self.bounds; + rect.size.width += SDPhotoBrowserImageViewMargin * 2; + + _scrollView.bounds = rect; + _scrollView.center = self.center; + + CGFloat y = 0; + CGFloat w = _scrollView.frame.size.width - SDPhotoBrowserImageViewMargin * 2; + CGFloat h = _scrollView.frame.size.height; + + + + [_scrollView.subviews enumerateObjectsUsingBlock:^(SDBrowserImageView *obj, NSUInteger idx, BOOL *stop) { + CGFloat x = SDPhotoBrowserImageViewMargin + idx * (SDPhotoBrowserImageViewMargin * 2 + w); + obj.frame = CGRectMake(x, y, w, h); + }]; + + _scrollView.contentSize = CGSizeMake(_scrollView.subviews.count * _scrollView.frame.size.width, 0); + _scrollView.contentOffset = CGPointMake(self.currentImageIndex * _scrollView.frame.size.width, 0); + + + if (!_hasShowedFistView) { + [self showFirstImage]; + } + + _indexLabel.center = CGPointMake(self.bounds.size.width * 0.5, 35); + _saveButton.frame = CGRectMake(30, self.bounds.size.height - 70, 50, 25); +} + +- (void)show +{ + UIWindow *window = [UIApplication sharedApplication].keyWindow; + self.frame = window.bounds; + [window addObserver:self forKeyPath:@"frame" options:0 context:nil]; + [window addSubview:self]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(UIView *)object change:(NSDictionary *)change context:(void *)context +{ + if ([keyPath isEqualToString:@"frame"]) { + self.frame = object.bounds; + SDBrowserImageView *currentImageView = _scrollView.subviews[_currentImageIndex]; + if ([currentImageView isKindOfClass:[SDBrowserImageView class]]) { + [currentImageView clear]; + } + } +} + +- (void)showFirstImage +{ + UIView *sourceView = self.sourceImagesContainerView.subviews[self.currentImageIndex]; + CGRect rect = [self.sourceImagesContainerView convertRect:sourceView.frame toView:self]; + + UIImageView *tempView = [[UIImageView alloc] init]; + tempView.image = [self placeholderImageForIndex:self.currentImageIndex]; + + [self addSubview:tempView]; + + CGRect targetTemp = [_scrollView.subviews[self.currentImageIndex] bounds]; + + tempView.frame = rect; + tempView.contentMode = [_scrollView.subviews[self.currentImageIndex] contentMode]; + _scrollView.hidden = YES; + + + [UIView animateWithDuration:SDPhotoBrowserShowImageAnimationDuration animations:^{ + tempView.center = self.center; + tempView.bounds = (CGRect){CGPointZero, targetTemp.size}; + } completion:^(BOOL finished) { + _hasShowedFistView = YES; + [tempView removeFromSuperview]; + _scrollView.hidden = NO; + }]; +} + +- (UIImage *)placeholderImageForIndex:(NSInteger)index +{ + if ([self.delegate respondsToSelector:@selector(photoBrowser:placeholderImageForIndex:)]) { + return [self.delegate photoBrowser:self placeholderImageForIndex:index]; + } + return nil; +} + +- (NSURL *)highQualityImageURLForIndex:(NSInteger)index +{ + if ([self.delegate respondsToSelector:@selector(photoBrowser:highQualityImageURLForIndex:)]) { + return [self.delegate photoBrowser:self highQualityImageURLForIndex:index]; + } + return nil; +} + +#pragma mark - scrollview代理方法 + +- (void)scrollViewDidScroll:(UIScrollView *)scrollView +{ + int index = (scrollView.contentOffset.x + _scrollView.bounds.size.width * 0.5) / _scrollView.bounds.size.width; + + // 有过缩放的图片在拖动一定距离后清除缩放 + CGFloat margin = 150; + CGFloat x = scrollView.contentOffset.x; + if ((x - index * self.bounds.size.width) > margin || (x - index * self.bounds.size.width) < - margin) { + SDBrowserImageView *imageView = _scrollView.subviews[index]; + if (imageView.isScaled) { + [UIView animateWithDuration:0.5 animations:^{ + imageView.transform = CGAffineTransformIdentity; + } completion:^(BOOL finished) { + [imageView eliminateScale]; + }]; + } + } + + + if (!_willDisappear) { + _indexLabel.text = [NSString stringWithFormat:@"%d/%ld", index + 1, (long)self.imageCount]; + } + [self setupImageOfImageViewForIndex:index]; +} + + + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowserConfig.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowserConfig.h" new file mode 100755 index 0000000..443b558 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowserConfig.h" @@ -0,0 +1,42 @@ +// +// SDPhotoBrowserConfig.h +// SDPhotoBrowser +// +// Created by aier on 15-2-9. +// Copyright (c) 2015年 GSD. All rights reserved. +// + + +typedef enum { + SDWaitingViewModeLoopDiagram, // 环形 + SDWaitingViewModePieDiagram // 饼型 +} SDWaitingViewMode; + +// 图片保存成功提示文字 +#define SDPhotoBrowserSaveImageSuccessText @" ^_^ 保存成功 "; + +// 图片保存失败提示文字 +#define SDPhotoBrowserSaveImageFailText @" >_< 保存失败 "; + +// browser背景颜色 +#define SDPhotoBrowserBackgrounColor [UIColor colorWithRed:0 green:0 blue:0 alpha:0.95] + +// browser中图片间的margin +#define SDPhotoBrowserImageViewMargin 10 + +// browser中显示图片动画时长 +#define SDPhotoBrowserShowImageAnimationDuration 0.4f + +// browser中显示图片动画时长 +#define SDPhotoBrowserHideImageAnimationDuration 0.4f + +// 图片下载进度指示进度显示样式(SDWaitingViewModeLoopDiagram 环形,SDWaitingViewModePieDiagram 饼型) +#define SDWaitingViewProgressMode SDWaitingViewModeLoopDiagram + +// 图片下载进度指示器背景色 +#define SDWaitingViewBackgroundColor [UIColor colorWithRed:0 green:0 blue:0 alpha:0.7] + +// 图片下载进度指示器内部控件间的间距 +#define SDWaitingViewItemMargin 10 + + diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDWaitingView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDWaitingView.h" new file mode 100755 index 0000000..d688e1e --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDWaitingView.h" @@ -0,0 +1,17 @@ +// +// SDWaitingView.h +// SDPhotoBrowser +// +// Created by aier on 15-2-6. +// Copyright (c) 2015年 GSD. All rights reserved. +// + +#import +#import "SDPhotoBrowserConfig.h" + +@interface SDWaitingView : UIView + +@property (nonatomic, assign) CGFloat progress; +@property (nonatomic, assign) int mode; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDWaitingView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDWaitingView.m" new file mode 100755 index 0000000..2841e03 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDWaitingView.m" @@ -0,0 +1,88 @@ +// +// SDWaitingView.m +// SDPhotoBrowser +// +// Created by aier on 15-2-6. +// Copyright (c) 2015年 GSD. All rights reserved. +// + +#import "SDWaitingView.h" + +//// 图片下载进度指示器背景色 +//#define SDWaitingViewBackgroundColor [UIColor colorWithRed:0 green:0 blue:0 alpha:0.7] +// +//// 图片下载进度指示器内部控件间的间距 +// +//#define SDWaitingViewItemMargin 10 + + +@implementation SDWaitingView + + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = SDWaitingViewBackgroundColor; + self.layer.cornerRadius = 5; + self.clipsToBounds = YES; + self.mode = SDWaitingViewModeLoopDiagram; + } + return self; +} + +- (void)setProgress:(CGFloat)progress +{ + _progress = progress; + [self setNeedsDisplay]; + if (progress >= 1) { + [self removeFromSuperview]; + } +} + +- (void)drawRect:(CGRect)rect +{ + CGContextRef ctx = UIGraphicsGetCurrentContext(); + + CGFloat xCenter = rect.size.width * 0.5; + CGFloat yCenter = rect.size.height * 0.5; + [[UIColor whiteColor] set]; + + switch (self.mode) { + case SDWaitingViewModePieDiagram: + { + CGFloat radius = MIN(rect.size.width * 0.5, rect.size.height * 0.5) - SDWaitingViewItemMargin; + + + CGFloat w = radius * 2 + SDWaitingViewItemMargin; + CGFloat h = w; + CGFloat x = (rect.size.width - w) * 0.5; + CGFloat y = (rect.size.height - h) * 0.5; + CGContextAddEllipseInRect(ctx, CGRectMake(x, y, w, h)); + CGContextFillPath(ctx); + + [SDWaitingViewBackgroundColor set]; + CGContextMoveToPoint(ctx, xCenter, yCenter); + CGContextAddLineToPoint(ctx, xCenter, 0); + CGFloat to = - M_PI * 0.5 + self.progress * M_PI * 2 + 0.001; // 初始值 + CGContextAddArc(ctx, xCenter, yCenter, radius, - M_PI * 0.5, to, 1); + CGContextClosePath(ctx); + + CGContextFillPath(ctx); + } + break; + + default: + { + CGContextSetLineWidth(ctx, 15); + CGContextSetLineCap(ctx, kCGLineCapRound); + CGFloat to = - M_PI * 0.5 + self.progress * M_PI * 2 + 0.05; // 初始值0.05 + CGFloat radius = MIN(rect.size.width, rect.size.height) * 0.5 - SDWaitingViewItemMargin; + CGContextAddArc(ctx, xCenter, yCenter, radius, - M_PI * 0.5, to, 0); + CGContextStrokePath(ctx); + } + break; + } +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/MKAnnotationView+WebCache.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/MKAnnotationView+WebCache.h" new file mode 100755 index 0000000..f61f3c0 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/MKAnnotationView+WebCache.h" @@ -0,0 +1,124 @@ +// +// MKAnnotationView+WebCache.h +// SDWebImage +// +// Created by Olivier Poitrey on 14/03/12. +// Copyright (c) 2012 Dailymotion. All rights reserved. +// + +#import "MapKit/MapKit.h" +#import "SDWebImageManager.h" + +/** + * Integrates SDWebImage async downloading and caching of remote images with MKAnnotationView. + */ +@interface MKAnnotationView (WebCache) + +/** + * Get the current image URL. + * + * Note that because of the limitations of categories this property can get out of sync + * if you use sd_setImage: directly. + */ +- (NSURL *)sd_imageURL; + +/** + * Set the imageView `image` with an `url`. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + */ +- (void)sd_setImageWithURL:(NSURL *)url; + +/** + * Set the imageView `image` with an `url` and a placeholder. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param placeholder The image to be set initially, until the image request finishes. + * @see sd_setImageWithURL:placeholderImage:options: + */ +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder; + +/** + * Set the imageView `image` with an `url`, placeholder and custom options. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param placeholder The image to be set initially, until the image request finishes. + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. + */ + +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options; + +/** + * Set the imageView `image` with an `url`. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Set the imageView `image` with an `url`, placeholder. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param placeholder The image to be set initially, until the image request finishes. + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Set the imageView `image` with an `url`, placeholder and custom options. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param placeholder The image to be set initially, until the image request finishes. + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Cancel the current download + */ +- (void)sd_cancelCurrentImageLoad; + +@end + + +@interface MKAnnotationView (WebCacheDeprecated) + +- (NSURL *)imageURL __deprecated_msg("Use `sd_imageURL`"); + +- (void)setImageWithURL:(NSURL *)url __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:`"); +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:`"); +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options:`"); + +- (void)setImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:completed:`"); +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:completed:`"); +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options:completed:`"); + +- (void)cancelCurrentImageLoad __deprecated_msg("Use `sd_cancelCurrentImageLoad`"); + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/MKAnnotationView+WebCache.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/MKAnnotationView+WebCache.m" new file mode 100755 index 0000000..5d4875c --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/MKAnnotationView+WebCache.m" @@ -0,0 +1,126 @@ +// +// MKAnnotationView+WebCache.m +// SDWebImage +// +// Created by Olivier Poitrey on 14/03/12. +// Copyright (c) 2012 Dailymotion. All rights reserved. +// + +#import "MKAnnotationView+WebCache.h" +#import "objc/runtime.h" +#import "UIView+WebCacheOperation.h" + +static char imageURLKey; + +@implementation MKAnnotationView (WebCache) + +- (NSURL *)sd_imageURL { + return objc_getAssociatedObject(self, &imageURLKey); +} + +- (void)sd_setImageWithURL:(NSURL *)url { + [self sd_setImageWithURL:url placeholderImage:nil options:0 completed:nil]; +} + +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder { + [self sd_setImageWithURL:url placeholderImage:placeholder options:0 completed:nil]; +} + +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { + [self sd_setImageWithURL:url placeholderImage:placeholder options:options completed:nil]; +} + +- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock { + [self sd_setImageWithURL:url placeholderImage:nil options:0 completed:completedBlock]; +} + +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock { + [self sd_setImageWithURL:url placeholderImage:placeholder options:0 completed:completedBlock]; +} + +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock { + [self sd_cancelCurrentImageLoad]; + + objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + self.image = placeholder; + + if (url) { + __weak __typeof(self)wself = self; + id operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { + if (!wself) return; + dispatch_main_sync_safe(^{ + __strong MKAnnotationView *sself = wself; + if (!sself) return; + if (image) { + sself.image = image; + } + if (completedBlock && finished) { + completedBlock(image, error, cacheType, url); + } + }); + }]; + [self sd_setImageLoadOperation:operation forKey:@"MKAnnotationViewImage"]; + } else { + dispatch_main_async_safe(^{ + NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; + if (completedBlock) { + completedBlock(nil, error, SDImageCacheTypeNone, url); + } + }); + } +} + +- (void)sd_cancelCurrentImageLoad { + [self sd_cancelImageLoadOperationWithKey:@"MKAnnotationViewImage"]; +} + +@end + + +@implementation MKAnnotationView (WebCacheDeprecated) + +- (NSURL *)imageURL { + return [self sd_imageURL]; +} + +- (void)setImageWithURL:(NSURL *)url { + [self sd_setImageWithURL:url placeholderImage:nil options:0 completed:nil]; +} + +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder { + [self sd_setImageWithURL:url placeholderImage:placeholder options:0 completed:nil]; +} + +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { + [self sd_setImageWithURL:url placeholderImage:placeholder options:options completed:nil]; +} + +- (void)setImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock { + [self sd_setImageWithURL:url placeholderImage:nil options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType); + } + }]; +} + +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock { + [self sd_setImageWithURL:url placeholderImage:placeholder options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType); + } + }]; +} + +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock { + [self sd_setImageWithURL:url placeholderImage:placeholder options:options completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType); + } + }]; +} + +- (void)cancelCurrentImageLoad { + [self sd_cancelCurrentImageLoad]; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/NSData+ImageContentType.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/NSData+ImageContentType.h" new file mode 100755 index 0000000..69c76dc --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/NSData+ImageContentType.h" @@ -0,0 +1,26 @@ +// +// Created by Fabrice Aneche on 06/01/14. +// Copyright (c) 2014 Dailymotion. All rights reserved. +// + +#import + +@interface NSData (ImageContentType) + +/** + * Compute the content type for an image data + * + * @param data the input data + * + * @return the content type as string (i.e. image/jpeg, image/gif) + */ ++ (NSString *)sd_contentTypeForImageData:(NSData *)data; + +@end + + +@interface NSData (ImageContentTypeDeprecated) + ++ (NSString *)contentTypeForImageData:(NSData *)data __deprecated_msg("Use `sd_contentTypeForImageData:`"); + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/NSData+ImageContentType.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/NSData+ImageContentType.m" new file mode 100755 index 0000000..0941cfa --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/NSData+ImageContentType.m" @@ -0,0 +1,49 @@ +// +// Created by Fabrice Aneche on 06/01/14. +// Copyright (c) 2014 Dailymotion. All rights reserved. +// + +#import "NSData+ImageContentType.h" + + +@implementation NSData (ImageContentType) + ++ (NSString *)sd_contentTypeForImageData:(NSData *)data { + uint8_t c; + [data getBytes:&c length:1]; + switch (c) { + case 0xFF: + return @"image/jpeg"; + case 0x89: + return @"image/png"; + case 0x47: + return @"image/gif"; + case 0x49: + case 0x4D: + return @"image/tiff"; + case 0x52: + // R as RIFF for WEBP + if ([data length] < 12) { + return nil; + } + + NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding]; + if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) { + return @"image/webp"; + } + + return nil; + } + return nil; +} + +@end + + +@implementation NSData (ImageContentTypeDeprecated) + ++ (NSString *)contentTypeForImageData:(NSData *)data { + return [self sd_contentTypeForImageData:data]; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDImageCache.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDImageCache.h" new file mode 100755 index 0000000..9577726 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDImageCache.h" @@ -0,0 +1,272 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import +#import "SDWebImageCompat.h" + +typedef NS_ENUM(NSInteger, SDImageCacheType) { + /** + * The image wasn't available the SDWebImage caches, but was downloaded from the web. + */ + SDImageCacheTypeNone, + /** + * The image was obtained from the disk cache. + */ + SDImageCacheTypeDisk, + /** + * The image was obtained from the memory cache. + */ + SDImageCacheTypeMemory +}; + +typedef void(^SDWebImageQueryCompletedBlock)(UIImage *image, SDImageCacheType cacheType); + +typedef void(^SDWebImageCheckCacheCompletionBlock)(BOOL isInCache); + +typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger totalSize); + +/** + * SDImageCache maintains a memory cache and an optional disk cache. Disk cache write operations are performed + * asynchronous so it doesn’t add unnecessary latency to the UI. + */ +@interface SDImageCache : NSObject + +/** + * Decompressing images that are downloaded and cached can improve performance but can consume lot of memory. + * Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption. + */ +@property (assign, nonatomic) BOOL shouldDecompressImages; + +/** + * disable iCloud backup [defaults to YES] + */ +@property (assign, nonatomic) BOOL shouldDisableiCloud; + +/** + * use memory cache [defaults to YES] + */ +@property (assign, nonatomic) BOOL shouldCacheImagesInMemory; + +/** + * The maximum "total cost" of the in-memory image cache. The cost function is the number of pixels held in memory. + */ +@property (assign, nonatomic) NSUInteger maxMemoryCost; + +/** + * The maximum number of objects the cache should hold. + */ +@property (assign, nonatomic) NSUInteger maxMemoryCountLimit; + +/** + * The maximum length of time to keep an image in the cache, in seconds + */ +@property (assign, nonatomic) NSInteger maxCacheAge; + +/** + * The maximum size of the cache, in bytes. + */ +@property (assign, nonatomic) NSUInteger maxCacheSize; + +/** + * Returns global shared cache instance + * + * @return SDImageCache global instance + */ ++ (SDImageCache *)sharedImageCache; + +/** + * Init a new cache store with a specific namespace + * + * @param ns The namespace to use for this cache store + */ +- (id)initWithNamespace:(NSString *)ns; + +/** + * Init a new cache store with a specific namespace and directory + * + * @param ns The namespace to use for this cache store + * @param directory Directory to cache disk images in + */ +- (id)initWithNamespace:(NSString *)ns diskCacheDirectory:(NSString *)directory; + +-(NSString *)makeDiskCachePath:(NSString*)fullNamespace; + +/** + * Add a read-only cache path to search for images pre-cached by SDImageCache + * Useful if you want to bundle pre-loaded images with your app + * + * @param path The path to use for this read-only cache path + */ +- (void)addReadOnlyCachePath:(NSString *)path; + +/** + * Store an image into memory and disk cache at the given key. + * + * @param image The image to store + * @param key The unique image cache key, usually it's image absolute URL + */ +- (void)storeImage:(UIImage *)image forKey:(NSString *)key; + +/** + * Store an image into memory and optionally disk cache at the given key. + * + * @param image The image to store + * @param key The unique image cache key, usually it's image absolute URL + * @param toDisk Store the image to disk cache if YES + */ +- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk; + +/** + * Store an image into memory and optionally disk cache at the given key. + * + * @param image The image to store + * @param recalculate BOOL indicates if imageData can be used or a new data should be constructed from the UIImage + * @param imageData The image data as returned by the server, this representation will be used for disk storage + * instead of converting the given image object into a storable/compressed image format in order + * to save quality and CPU + * @param key The unique image cache key, usually it's image absolute URL + * @param toDisk Store the image to disk cache if YES + */ +- (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk; + +/** + * Query the disk cache asynchronously. + * + * @param key The unique key used to store the wanted image + */ +- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock; + +/** + * Query the memory cache synchronously. + * + * @param key The unique key used to store the wanted image + */ +- (UIImage *)imageFromMemoryCacheForKey:(NSString *)key; + +/** + * Query the disk cache synchronously after checking the memory cache. + * + * @param key The unique key used to store the wanted image + */ +- (UIImage *)imageFromDiskCacheForKey:(NSString *)key; + +/** + * Remove the image from memory and disk cache synchronously + * + * @param key The unique image cache key + */ +- (void)removeImageForKey:(NSString *)key; + + +/** + * Remove the image from memory and disk cache asynchronously + * + * @param key The unique image cache key + * @param completion An block that should be executed after the image has been removed (optional) + */ +- (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion; + +/** + * Remove the image from memory and optionally disk cache asynchronously + * + * @param key The unique image cache key + * @param fromDisk Also remove cache entry from disk if YES + */ +- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk; + +/** + * Remove the image from memory and optionally disk cache asynchronously + * + * @param key The unique image cache key + * @param fromDisk Also remove cache entry from disk if YES + * @param completion An block that should be executed after the image has been removed (optional) + */ +- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion; + +/** + * Clear all memory cached images + */ +- (void)clearMemory; + +/** + * Clear all disk cached images. Non-blocking method - returns immediately. + * @param completion An block that should be executed after cache expiration completes (optional) + */ +- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion; + +/** + * Clear all disk cached images + * @see clearDiskOnCompletion: + */ +- (void)clearDisk; + +/** + * Remove all expired cached image from disk. Non-blocking method - returns immediately. + * @param completionBlock An block that should be executed after cache expiration completes (optional) + */ +- (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock; + +/** + * Remove all expired cached image from disk + * @see cleanDiskWithCompletionBlock: + */ +- (void)cleanDisk; + +/** + * Get the size used by the disk cache + */ +- (NSUInteger)getSize; + +/** + * Get the number of images in the disk cache + */ +- (NSUInteger)getDiskCount; + +/** + * Asynchronously calculate the disk cache's size. + */ +- (void)calculateSizeWithCompletionBlock:(SDWebImageCalculateSizeBlock)completionBlock; + +/** + * Async check if image exists in disk cache already (does not load the image) + * + * @param key the key describing the url + * @param completionBlock the block to be executed when the check is done. + * @note the completion block will be always executed on the main queue + */ +- (void)diskImageExistsWithKey:(NSString *)key completion:(SDWebImageCheckCacheCompletionBlock)completionBlock; + +/** + * Check if image exists in disk cache already (does not load the image) + * + * @param key the key describing the url + * + * @return YES if an image exists for the given key + */ +- (BOOL)diskImageExistsWithKey:(NSString *)key; + +/** + * Get the cache path for a certain key (needs the cache path root folder) + * + * @param key the key (can be obtained from url using cacheKeyForURL) + * @param path the cache path root folder + * + * @return the cache path + */ +- (NSString *)cachePathForKey:(NSString *)key inPath:(NSString *)path; + +/** + * Get the default cache path for a certain key + * + * @param key the key (can be obtained from url using cacheKeyForURL) + * + * @return the default cache path + */ +- (NSString *)defaultCachePathForKey:(NSString *)key; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDImageCache.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDImageCache.m" new file mode 100755 index 0000000..9ad41ee --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDImageCache.m" @@ -0,0 +1,623 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import "SDImageCache.h" +#import "SDWebImageDecoder.h" +#import "UIImage+MultiFormat.h" +#import + +// See https://github.com/rs/SDWebImage/pull/1141 for discussion +@interface AutoPurgeCache : NSCache +@end + +@implementation AutoPurgeCache + +- (id)init +{ + self = [super init]; + if (self) { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeAllObjects) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; + } + return self; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; + +} + +@end + +static const NSInteger kDefaultCacheMaxCacheAge = 60 * 60 * 24 * 7; // 1 week +// PNG signature bytes and data (below) +static unsigned char kPNGSignatureBytes[8] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A}; +static NSData *kPNGSignatureData = nil; + +BOOL ImageDataHasPNGPreffix(NSData *data); + +BOOL ImageDataHasPNGPreffix(NSData *data) { + NSUInteger pngSignatureLength = [kPNGSignatureData length]; + if ([data length] >= pngSignatureLength) { + if ([[data subdataWithRange:NSMakeRange(0, pngSignatureLength)] isEqualToData:kPNGSignatureData]) { + return YES; + } + } + + return NO; +} + +FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) { + return image.size.height * image.size.width * image.scale * image.scale; +} + +@interface SDImageCache () + +@property (strong, nonatomic) NSCache *memCache; +@property (strong, nonatomic) NSString *diskCachePath; +@property (strong, nonatomic) NSMutableArray *customPaths; +@property (SDDispatchQueueSetterSementics, nonatomic) dispatch_queue_t ioQueue; + +@end + + +@implementation SDImageCache { + NSFileManager *_fileManager; +} + ++ (SDImageCache *)sharedImageCache { + static dispatch_once_t once; + static id instance; + dispatch_once(&once, ^{ + instance = [self new]; + }); + return instance; +} + +- (id)init { + return [self initWithNamespace:@"default"]; +} + +- (id)initWithNamespace:(NSString *)ns { + NSString *path = [self makeDiskCachePath:ns]; + return [self initWithNamespace:ns diskCacheDirectory:path]; +} + +- (id)initWithNamespace:(NSString *)ns diskCacheDirectory:(NSString *)directory { + if ((self = [super init])) { + NSString *fullNamespace = [@"com.hackemist.SDWebImageCache." stringByAppendingString:ns]; + + // initialise PNG signature data + kPNGSignatureData = [NSData dataWithBytes:kPNGSignatureBytes length:8]; + + // Create IO serial queue + _ioQueue = dispatch_queue_create("com.hackemist.SDWebImageCache", DISPATCH_QUEUE_SERIAL); + + // Init default values + _maxCacheAge = kDefaultCacheMaxCacheAge; + + // Init the memory cache + _memCache = [[AutoPurgeCache alloc] init]; + _memCache.name = fullNamespace; + + // Init the disk cache + if (directory != nil) { + _diskCachePath = [directory stringByAppendingPathComponent:fullNamespace]; + } else { + NSString *path = [self makeDiskCachePath:ns]; + _diskCachePath = path; + } + + // Set decompression to YES + _shouldDecompressImages = YES; + + // memory cache enabled + _shouldCacheImagesInMemory = YES; + + // Disable iCloud + _shouldDisableiCloud = YES; + + dispatch_sync(_ioQueue, ^{ + _fileManager = [NSFileManager new]; + }); + +#if TARGET_OS_IPHONE + // Subscribe to app events + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(clearMemory) + name:UIApplicationDidReceiveMemoryWarningNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(cleanDisk) + name:UIApplicationWillTerminateNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(backgroundCleanDisk) + name:UIApplicationDidEnterBackgroundNotification + object:nil]; +#endif + } + + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + SDDispatchQueueRelease(_ioQueue); +} + +- (void)addReadOnlyCachePath:(NSString *)path { + if (!self.customPaths) { + self.customPaths = [NSMutableArray new]; + } + + if (![self.customPaths containsObject:path]) { + [self.customPaths addObject:path]; + } +} + +- (NSString *)cachePathForKey:(NSString *)key inPath:(NSString *)path { + NSString *filename = [self cachedFileNameForKey:key]; + return [path stringByAppendingPathComponent:filename]; +} + +- (NSString *)defaultCachePathForKey:(NSString *)key { + return [self cachePathForKey:key inPath:self.diskCachePath]; +} + +#pragma mark SDImageCache (private) + +- (NSString *)cachedFileNameForKey:(NSString *)key { + const char *str = [key UTF8String]; + if (str == NULL) { + str = ""; + } + unsigned char r[CC_MD5_DIGEST_LENGTH]; + CC_MD5(str, (CC_LONG)strlen(str), r); + NSString *filename = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%@", + r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], + r[11], r[12], r[13], r[14], r[15], [[key pathExtension] isEqualToString:@""] ? @"" : [NSString stringWithFormat:@".%@", [key pathExtension]]]; + + return filename; +} + +#pragma mark ImageCache + +// Init the disk cache +-(NSString *)makeDiskCachePath:(NSString*)fullNamespace{ + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); + return [paths[0] stringByAppendingPathComponent:fullNamespace]; +} + +- (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk { + if (!image || !key) { + return; + } + // if memory cache is enabled + if (self.shouldCacheImagesInMemory) { + NSUInteger cost = SDCacheCostForImage(image); + [self.memCache setObject:image forKey:key cost:cost]; + } + + if (toDisk) { + dispatch_async(self.ioQueue, ^{ + NSData *data = imageData; + + if (image && (recalculate || !data)) { +#if TARGET_OS_IPHONE + // We need to determine if the image is a PNG or a JPEG + // PNGs are easier to detect because they have a unique signature (http://www.w3.org/TR/PNG-Structure.html) + // The first eight bytes of a PNG file always contain the following (decimal) values: + // 137 80 78 71 13 10 26 10 + + // If the imageData is nil (i.e. if trying to save a UIImage directly or the image was transformed on download) + // and the image has an alpha channel, we will consider it PNG to avoid losing the transparency + int alphaInfo = CGImageGetAlphaInfo(image.CGImage); + BOOL hasAlpha = !(alphaInfo == kCGImageAlphaNone || + alphaInfo == kCGImageAlphaNoneSkipFirst || + alphaInfo == kCGImageAlphaNoneSkipLast); + BOOL imageIsPng = hasAlpha; + + // But if we have an image data, we will look at the preffix + if ([imageData length] >= [kPNGSignatureData length]) { + imageIsPng = ImageDataHasPNGPreffix(imageData); + } + + if (imageIsPng) { + data = UIImagePNGRepresentation(image); + } + else { + data = UIImageJPEGRepresentation(image, (CGFloat)1.0); + } +#else + data = [NSBitmapImageRep representationOfImageRepsInArray:image.representations usingType: NSJPEGFileType properties:nil]; +#endif + } + + if (data) { + if (![_fileManager fileExistsAtPath:_diskCachePath]) { + [_fileManager createDirectoryAtPath:_diskCachePath withIntermediateDirectories:YES attributes:nil error:NULL]; + } + + // get cache Path for image key + NSString *cachePathForKey = [self defaultCachePathForKey:key]; + // transform to NSUrl + NSURL *fileURL = [NSURL fileURLWithPath:cachePathForKey]; + + [_fileManager createFileAtPath:cachePathForKey contents:data attributes:nil]; + + // disable iCloud backup + if (self.shouldDisableiCloud) { + [fileURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:nil]; + } + } + }); + } +} + +- (void)storeImage:(UIImage *)image forKey:(NSString *)key { + [self storeImage:image recalculateFromImage:YES imageData:nil forKey:key toDisk:YES]; +} + +- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk { + [self storeImage:image recalculateFromImage:YES imageData:nil forKey:key toDisk:toDisk]; +} + +- (BOOL)diskImageExistsWithKey:(NSString *)key { + BOOL exists = NO; + + // this is an exception to access the filemanager on another queue than ioQueue, but we are using the shared instance + // from apple docs on NSFileManager: The methods of the shared NSFileManager object can be called from multiple threads safely. + exists = [[NSFileManager defaultManager] fileExistsAtPath:[self defaultCachePathForKey:key]]; + + return exists; +} + +- (void)diskImageExistsWithKey:(NSString *)key completion:(SDWebImageCheckCacheCompletionBlock)completionBlock { + dispatch_async(_ioQueue, ^{ + BOOL exists = [_fileManager fileExistsAtPath:[self defaultCachePathForKey:key]]; + if (completionBlock) { + dispatch_async(dispatch_get_main_queue(), ^{ + completionBlock(exists); + }); + } + }); +} + +- (UIImage *)imageFromMemoryCacheForKey:(NSString *)key { + return [self.memCache objectForKey:key]; +} + +- (UIImage *)imageFromDiskCacheForKey:(NSString *)key { + + // First check the in-memory cache... + UIImage *image = [self imageFromMemoryCacheForKey:key]; + if (image) { + return image; + } + + // Second check the disk cache... + UIImage *diskImage = [self diskImageForKey:key]; + if (diskImage && self.shouldCacheImagesInMemory) { + NSUInteger cost = SDCacheCostForImage(diskImage); + [self.memCache setObject:diskImage forKey:key cost:cost]; + } + + return diskImage; +} + +- (NSData *)diskImageDataBySearchingAllPathsForKey:(NSString *)key { + NSString *defaultPath = [self defaultCachePathForKey:key]; + NSData *data = [NSData dataWithContentsOfFile:defaultPath]; + if (data) { + return data; + } + + NSArray *customPaths = [self.customPaths copy]; + for (NSString *path in customPaths) { + NSString *filePath = [self cachePathForKey:key inPath:path]; + NSData *imageData = [NSData dataWithContentsOfFile:filePath]; + if (imageData) { + return imageData; + } + } + + return nil; +} + +- (UIImage *)diskImageForKey:(NSString *)key { + NSData *data = [self diskImageDataBySearchingAllPathsForKey:key]; + if (data) { + UIImage *image = [UIImage sd_imageWithData:data]; + image = [self scaledImageForKey:key image:image]; + if (self.shouldDecompressImages) { + image = [UIImage decodedImageWithImage:image]; + } + return image; + } + else { + return nil; + } +} + +- (UIImage *)scaledImageForKey:(NSString *)key image:(UIImage *)image { + return SDScaledImageForKey(key, image); +} + +- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock { + if (!doneBlock) { + return nil; + } + + if (!key) { + doneBlock(nil, SDImageCacheTypeNone); + return nil; + } + + // First check the in-memory cache... + UIImage *image = [self imageFromMemoryCacheForKey:key]; + if (image) { + doneBlock(image, SDImageCacheTypeMemory); + return nil; + } + + NSOperation *operation = [NSOperation new]; + dispatch_async(self.ioQueue, ^{ + if (operation.isCancelled) { + return; + } + + @autoreleasepool { + UIImage *diskImage = [self diskImageForKey:key]; + if (diskImage && self.shouldCacheImagesInMemory) { + NSUInteger cost = SDCacheCostForImage(diskImage); + [self.memCache setObject:diskImage forKey:key cost:cost]; + } + + dispatch_async(dispatch_get_main_queue(), ^{ + doneBlock(diskImage, SDImageCacheTypeDisk); + }); + } + }); + + return operation; +} + +- (void)removeImageForKey:(NSString *)key { + [self removeImageForKey:key withCompletion:nil]; +} + +- (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion { + [self removeImageForKey:key fromDisk:YES withCompletion:completion]; +} + +- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk { + [self removeImageForKey:key fromDisk:fromDisk withCompletion:nil]; +} + +- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion { + + if (key == nil) { + return; + } + + if (self.shouldCacheImagesInMemory) { + [self.memCache removeObjectForKey:key]; + } + + if (fromDisk) { + dispatch_async(self.ioQueue, ^{ + [_fileManager removeItemAtPath:[self defaultCachePathForKey:key] error:nil]; + + if (completion) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(); + }); + } + }); + } else if (completion){ + completion(); + } + +} + +- (void)setMaxMemoryCost:(NSUInteger)maxMemoryCost { + self.memCache.totalCostLimit = maxMemoryCost; +} + +- (NSUInteger)maxMemoryCost { + return self.memCache.totalCostLimit; +} + +- (NSUInteger)maxMemoryCountLimit { + return self.memCache.countLimit; +} + +- (void)setMaxMemoryCountLimit:(NSUInteger)maxCountLimit { + self.memCache.countLimit = maxCountLimit; +} + +- (void)clearMemory { + [self.memCache removeAllObjects]; +} + +- (void)clearDisk { + [self clearDiskOnCompletion:nil]; +} + +- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion +{ + dispatch_async(self.ioQueue, ^{ + [_fileManager removeItemAtPath:self.diskCachePath error:nil]; + [_fileManager createDirectoryAtPath:self.diskCachePath + withIntermediateDirectories:YES + attributes:nil + error:NULL]; + + if (completion) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(); + }); + } + }); +} + +- (void)cleanDisk { + [self cleanDiskWithCompletionBlock:nil]; +} + +- (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock { + dispatch_async(self.ioQueue, ^{ + NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES]; + NSArray *resourceKeys = @[NSURLIsDirectoryKey, NSURLContentModificationDateKey, NSURLTotalFileAllocatedSizeKey]; + + // This enumerator prefetches useful properties for our cache files. + NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtURL:diskCacheURL + includingPropertiesForKeys:resourceKeys + options:NSDirectoryEnumerationSkipsHiddenFiles + errorHandler:NULL]; + + NSDate *expirationDate = [NSDate dateWithTimeIntervalSinceNow:-self.maxCacheAge]; + NSMutableDictionary *cacheFiles = [NSMutableDictionary dictionary]; + NSUInteger currentCacheSize = 0; + + // Enumerate all of the files in the cache directory. This loop has two purposes: + // + // 1. Removing files that are older than the expiration date. + // 2. Storing file attributes for the size-based cleanup pass. + NSMutableArray *urlsToDelete = [[NSMutableArray alloc] init]; + for (NSURL *fileURL in fileEnumerator) { + NSDictionary *resourceValues = [fileURL resourceValuesForKeys:resourceKeys error:NULL]; + + // Skip directories. + if ([resourceValues[NSURLIsDirectoryKey] boolValue]) { + continue; + } + + // Remove files that are older than the expiration date; + NSDate *modificationDate = resourceValues[NSURLContentModificationDateKey]; + if ([[modificationDate laterDate:expirationDate] isEqualToDate:expirationDate]) { + [urlsToDelete addObject:fileURL]; + continue; + } + + // Store a reference to this file and account for its total size. + NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey]; + currentCacheSize += [totalAllocatedSize unsignedIntegerValue]; + [cacheFiles setObject:resourceValues forKey:fileURL]; + } + + for (NSURL *fileURL in urlsToDelete) { + [_fileManager removeItemAtURL:fileURL error:nil]; + } + + // If our remaining disk cache exceeds a configured maximum size, perform a second + // size-based cleanup pass. We delete the oldest files first. + if (self.maxCacheSize > 0 && currentCacheSize > self.maxCacheSize) { + // Target half of our maximum cache size for this cleanup pass. + const NSUInteger desiredCacheSize = self.maxCacheSize / 2; + + // Sort the remaining cache files by their last modification time (oldest first). + NSArray *sortedFiles = [cacheFiles keysSortedByValueWithOptions:NSSortConcurrent + usingComparator:^NSComparisonResult(id obj1, id obj2) { + return [obj1[NSURLContentModificationDateKey] compare:obj2[NSURLContentModificationDateKey]]; + }]; + + // Delete files until we fall below our desired cache size. + for (NSURL *fileURL in sortedFiles) { + if ([_fileManager removeItemAtURL:fileURL error:nil]) { + NSDictionary *resourceValues = cacheFiles[fileURL]; + NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey]; + currentCacheSize -= [totalAllocatedSize unsignedIntegerValue]; + + if (currentCacheSize < desiredCacheSize) { + break; + } + } + } + } + if (completionBlock) { + dispatch_async(dispatch_get_main_queue(), ^{ + completionBlock(); + }); + } + }); +} + +- (void)backgroundCleanDisk { + Class UIApplicationClass = NSClassFromString(@"UIApplication"); + if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) { + return; + } + UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)]; + __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ + // Clean up any unfinished task business by marking where you + // stopped or ending the task outright. + [application endBackgroundTask:bgTask]; + bgTask = UIBackgroundTaskInvalid; + }]; + + // Start the long-running task and return immediately. + [self cleanDiskWithCompletionBlock:^{ + [application endBackgroundTask:bgTask]; + bgTask = UIBackgroundTaskInvalid; + }]; +} + +- (NSUInteger)getSize { + __block NSUInteger size = 0; + dispatch_sync(self.ioQueue, ^{ + NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath]; + for (NSString *fileName in fileEnumerator) { + NSString *filePath = [self.diskCachePath stringByAppendingPathComponent:fileName]; + NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil]; + size += [attrs fileSize]; + } + }); + return size; +} + +- (NSUInteger)getDiskCount { + __block NSUInteger count = 0; + dispatch_sync(self.ioQueue, ^{ + NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath]; + count = [[fileEnumerator allObjects] count]; + }); + return count; +} + +- (void)calculateSizeWithCompletionBlock:(SDWebImageCalculateSizeBlock)completionBlock { + NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES]; + + dispatch_async(self.ioQueue, ^{ + NSUInteger fileCount = 0; + NSUInteger totalSize = 0; + + NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtURL:diskCacheURL + includingPropertiesForKeys:@[NSFileSize] + options:NSDirectoryEnumerationSkipsHiddenFiles + errorHandler:NULL]; + + for (NSURL *fileURL in fileEnumerator) { + NSNumber *fileSize; + [fileURL getResourceValue:&fileSize forKey:NSURLFileSizeKey error:NULL]; + totalSize += [fileSize unsignedIntegerValue]; + fileCount += 1; + } + + if (completionBlock) { + dispatch_async(dispatch_get_main_queue(), ^{ + completionBlock(fileCount, totalSize); + }); + } + }); +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageCompat.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageCompat.h" new file mode 100755 index 0000000..3c21b41 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageCompat.h" @@ -0,0 +1,72 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * (c) Jamie Pinkham + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import + +#ifdef __OBJC_GC__ +#error SDWebImage does not support Objective-C Garbage Collection +#endif + +#if __IPHONE_OS_VERSION_MIN_REQUIRED != 20000 && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0 +#error SDWebImage doesn't support Deployment Target version < 5.0 +#endif + +#if !TARGET_OS_IPHONE +#import +#ifndef UIImage +#define UIImage NSImage +#endif +#ifndef UIImageView +#define UIImageView NSImageView +#endif +#else + +#import + +#endif + +#ifndef NS_ENUM +#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type +#endif + +#ifndef NS_OPTIONS +#define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type +#endif + +#if OS_OBJECT_USE_OBJC + #undef SDDispatchQueueRelease + #undef SDDispatchQueueSetterSementics + #define SDDispatchQueueRelease(q) + #define SDDispatchQueueSetterSementics strong +#else +#undef SDDispatchQueueRelease +#undef SDDispatchQueueSetterSementics +#define SDDispatchQueueRelease(q) (dispatch_release(q)) +#define SDDispatchQueueSetterSementics assign +#endif + +extern UIImage *SDScaledImageForKey(NSString *key, UIImage *image); + +typedef void(^SDWebImageNoParamsBlock)(); + +extern NSString *const SDWebImageErrorDomain; + +#define dispatch_main_sync_safe(block)\ + if ([NSThread isMainThread]) {\ + block();\ + } else {\ + dispatch_sync(dispatch_get_main_queue(), block);\ + } + +#define dispatch_main_async_safe(block)\ + if ([NSThread isMainThread]) {\ + block();\ + } else {\ + dispatch_async(dispatch_get_main_queue(), block);\ + } diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageCompat.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageCompat.m" new file mode 100755 index 0000000..9a011bc --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageCompat.m" @@ -0,0 +1,51 @@ +// +// SDWebImageCompat.m +// SDWebImage +// +// Created by Olivier Poitrey on 11/12/12. +// Copyright (c) 2012 Dailymotion. All rights reserved. +// + +#import "SDWebImageCompat.h" + +#if !__has_feature(objc_arc) +#error SDWebImage is ARC only. Either turn on ARC for the project or use -fobjc-arc flag +#endif + +inline UIImage *SDScaledImageForKey(NSString *key, UIImage *image) { + if (!image) { + return nil; + } + + if ([image.images count] > 0) { + NSMutableArray *scaledImages = [NSMutableArray array]; + + for (UIImage *tempImage in image.images) { + [scaledImages addObject:SDScaledImageForKey(key, tempImage)]; + } + + return [UIImage animatedImageWithImages:scaledImages duration:image.duration]; + } + else { + if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { + CGFloat scale = [UIScreen mainScreen].scale; + if (key.length >= 8) { + NSRange range = [key rangeOfString:@"@2x."]; + if (range.location != NSNotFound) { + scale = 2.0; + } + + range = [key rangeOfString:@"@3x."]; + if (range.location != NSNotFound) { + scale = 3.0; + } + } + + UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation]; + image = scaledImage; + } + return image; + } +} + +NSString *const SDWebImageErrorDomain = @"SDWebImageErrorDomain"; diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDecoder.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDecoder.h" new file mode 100755 index 0000000..0176a7b --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDecoder.h" @@ -0,0 +1,18 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * Created by james on 9/28/11. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import +#import "SDWebImageCompat.h" + +@interface UIImage (ForceDecode) + ++ (UIImage *)decodedImageWithImage:(UIImage *)image; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDecoder.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDecoder.m" new file mode 100755 index 0000000..b78217a --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDecoder.m" @@ -0,0 +1,69 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * Created by james on 9/28/11. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import "SDWebImageDecoder.h" + +@implementation UIImage (ForceDecode) + ++ (UIImage *)decodedImageWithImage:(UIImage *)image { + // while downloading huge amount of images + // autorelease the bitmap context + // and all vars to help system to free memory + // when there are memory warning. + // on iOS7, do not forget to call + // [[SDImageCache sharedImageCache] clearMemory]; + @autoreleasepool{ + // do not decode animated images + if (image.images) { return image; } + + CGImageRef imageRef = image.CGImage; + + CGImageAlphaInfo alpha = CGImageGetAlphaInfo(imageRef); + BOOL anyAlpha = (alpha == kCGImageAlphaFirst || + alpha == kCGImageAlphaLast || + alpha == kCGImageAlphaPremultipliedFirst || + alpha == kCGImageAlphaPremultipliedLast); + + if (anyAlpha) { return image; } + + size_t width = CGImageGetWidth(imageRef); + size_t height = CGImageGetHeight(imageRef); + + // current + CGColorSpaceModel imageColorSpaceModel = CGColorSpaceGetModel(CGImageGetColorSpace(imageRef)); + CGColorSpaceRef colorspaceRef = CGImageGetColorSpace(imageRef); + + bool unsupportedColorSpace = (imageColorSpaceModel == 0 || imageColorSpaceModel == -1 || imageColorSpaceModel == kCGColorSpaceModelIndexed); + if (unsupportedColorSpace) + colorspaceRef = CGColorSpaceCreateDeviceRGB(); + + CGContextRef context = CGBitmapContextCreate(NULL, width, + height, + CGImageGetBitsPerComponent(imageRef), + 0, + colorspaceRef, + kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst); + + // Draw the image into the context and retrieve the new image, which will now have an alpha layer + CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef); + CGImageRef imageRefWithAlpha = CGBitmapContextCreateImage(context); + UIImage *imageWithAlpha = [UIImage imageWithCGImage:imageRefWithAlpha scale:image.scale orientation:image.imageOrientation]; + + if (unsupportedColorSpace) + CGColorSpaceRelease(colorspaceRef); + + CGContextRelease(context); + CGImageRelease(imageRefWithAlpha); + + return imageWithAlpha; + } +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloader.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloader.h" new file mode 100755 index 0000000..b64fb13 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloader.h" @@ -0,0 +1,191 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import +#import "SDWebImageCompat.h" +#import "SDWebImageOperation.h" + +typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) { + SDWebImageDownloaderLowPriority = 1 << 0, + SDWebImageDownloaderProgressiveDownload = 1 << 1, + + /** + * By default, request prevent the of NSURLCache. With this flag, NSURLCache + * is used with default policies. + */ + SDWebImageDownloaderUseNSURLCache = 1 << 2, + + /** + * Call completion block with nil image/imageData if the image was read from NSURLCache + * (to be combined with `SDWebImageDownloaderUseNSURLCache`). + */ + + SDWebImageDownloaderIgnoreCachedResponse = 1 << 3, + /** + * In iOS 4+, continue the download of the image if the app goes to background. This is achieved by asking the system for + * extra time in background to let the request finish. If the background task expires the operation will be cancelled. + */ + + SDWebImageDownloaderContinueInBackground = 1 << 4, + + /** + * Handles cookies stored in NSHTTPCookieStore by setting + * NSMutableURLRequest.HTTPShouldHandleCookies = YES; + */ + SDWebImageDownloaderHandleCookies = 1 << 5, + + /** + * Enable to allow untrusted SSL certificates. + * Useful for testing purposes. Use with caution in production. + */ + SDWebImageDownloaderAllowInvalidSSLCertificates = 1 << 6, + + /** + * Put the image in the high priority queue. + */ + SDWebImageDownloaderHighPriority = 1 << 7, +}; + +typedef NS_ENUM(NSInteger, SDWebImageDownloaderExecutionOrder) { + /** + * Default value. All download operations will execute in queue style (first-in-first-out). + */ + SDWebImageDownloaderFIFOExecutionOrder, + + /** + * All download operations will execute in stack style (last-in-first-out). + */ + SDWebImageDownloaderLIFOExecutionOrder +}; + +extern NSString *const SDWebImageDownloadStartNotification; +extern NSString *const SDWebImageDownloadStopNotification; + +typedef void(^SDWebImageDownloaderProgressBlock)(NSInteger receivedSize, NSInteger expectedSize); + +typedef void(^SDWebImageDownloaderCompletedBlock)(UIImage *image, NSData *data, NSError *error, BOOL finished); + +typedef NSDictionary *(^SDWebImageDownloaderHeadersFilterBlock)(NSURL *url, NSDictionary *headers); + +/** + * Asynchronous downloader dedicated and optimized for image loading. + */ +@interface SDWebImageDownloader : NSObject + +/** + * Decompressing images that are downloaded and cached can improve performance but can consume lot of memory. + * Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption. + */ +@property (assign, nonatomic) BOOL shouldDecompressImages; + +@property (assign, nonatomic) NSInteger maxConcurrentDownloads; + +/** + * Shows the current amount of downloads that still need to be downloaded + */ +@property (readonly, nonatomic) NSUInteger currentDownloadCount; + + +/** + * The timeout value (in seconds) for the download operation. Default: 15.0. + */ +@property (assign, nonatomic) NSTimeInterval downloadTimeout; + + +/** + * Changes download operations execution order. Default value is `SDWebImageDownloaderFIFOExecutionOrder`. + */ +@property (assign, nonatomic) SDWebImageDownloaderExecutionOrder executionOrder; + +/** + * Singleton method, returns the shared instance + * + * @return global shared instance of downloader class + */ ++ (SDWebImageDownloader *)sharedDownloader; + +/** + * Set the default URL credential to be set for request operations. + */ +@property (strong, nonatomic) NSURLCredential *urlCredential; + +/** + * Set username + */ +@property (strong, nonatomic) NSString *username; + +/** + * Set password + */ +@property (strong, nonatomic) NSString *password; + +/** + * Set filter to pick headers for downloading image HTTP request. + * + * This block will be invoked for each downloading image request, returned + * NSDictionary will be used as headers in corresponding HTTP request. + */ +@property (nonatomic, copy) SDWebImageDownloaderHeadersFilterBlock headersFilter; + +/** + * Set a value for a HTTP header to be appended to each download HTTP request. + * + * @param value The value for the header field. Use `nil` value to remove the header. + * @param field The name of the header field to set. + */ +- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field; + +/** + * Returns the value of the specified HTTP header field. + * + * @return The value associated with the header field field, or `nil` if there is no corresponding header field. + */ +- (NSString *)valueForHTTPHeaderField:(NSString *)field; + +/** + * Sets a subclass of `SDWebImageDownloaderOperation` as the default + * `NSOperation` to be used each time SDWebImage constructs a request + * operation to download an image. + * + * @param operationClass The subclass of `SDWebImageDownloaderOperation` to set + * as default. Passing `nil` will revert to `SDWebImageDownloaderOperation`. + */ +- (void)setOperationClass:(Class)operationClass; + +/** + * Creates a SDWebImageDownloader async downloader instance with a given URL + * + * The delegate will be informed when the image is finish downloaded or an error has happen. + * + * @see SDWebImageDownloaderDelegate + * + * @param url The URL to the image to download + * @param options The options to be used for this download + * @param progressBlock A block called repeatedly while the image is downloading + * @param completedBlock A block called once the download is completed. + * If the download succeeded, the image parameter is set, in case of error, + * error parameter is set with the error. The last parameter is always YES + * if SDWebImageDownloaderProgressiveDownload isn't use. With the + * SDWebImageDownloaderProgressiveDownload option, this block is called + * repeatedly with the partial image object and the finished argument set to NO + * before to be called a last time with the full image and finished argument + * set to YES. In case of error, the finished argument is always YES. + * + * @return A cancellable SDWebImageOperation + */ +- (id )downloadImageWithURL:(NSURL *)url + options:(SDWebImageDownloaderOptions)options + progress:(SDWebImageDownloaderProgressBlock)progressBlock + completed:(SDWebImageDownloaderCompletedBlock)completedBlock; + +/** + * Sets the download queue suspension state + */ +- (void)setSuspended:(BOOL)suspended; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloader.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloader.m" new file mode 100755 index 0000000..1fdcfc9 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloader.m" @@ -0,0 +1,232 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import "SDWebImageDownloader.h" +#import "SDWebImageDownloaderOperation.h" +#import + +static NSString *const kProgressCallbackKey = @"progress"; +static NSString *const kCompletedCallbackKey = @"completed"; + +@interface SDWebImageDownloader () + +@property (strong, nonatomic) NSOperationQueue *downloadQueue; +@property (weak, nonatomic) NSOperation *lastAddedOperation; +@property (assign, nonatomic) Class operationClass; +@property (strong, nonatomic) NSMutableDictionary *URLCallbacks; +@property (strong, nonatomic) NSMutableDictionary *HTTPHeaders; +// This queue is used to serialize the handling of the network responses of all the download operation in a single queue +@property (SDDispatchQueueSetterSementics, nonatomic) dispatch_queue_t barrierQueue; + +@end + +@implementation SDWebImageDownloader + ++ (void)initialize { + // Bind SDNetworkActivityIndicator if available (download it here: http://github.com/rs/SDNetworkActivityIndicator ) + // To use it, just add #import "SDNetworkActivityIndicator.h" in addition to the SDWebImage import + if (NSClassFromString(@"SDNetworkActivityIndicator")) { + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + id activityIndicator = [NSClassFromString(@"SDNetworkActivityIndicator") performSelector:NSSelectorFromString(@"sharedActivityIndicator")]; +#pragma clang diagnostic pop + + // Remove observer in case it was previously added. + [[NSNotificationCenter defaultCenter] removeObserver:activityIndicator name:SDWebImageDownloadStartNotification object:nil]; + [[NSNotificationCenter defaultCenter] removeObserver:activityIndicator name:SDWebImageDownloadStopNotification object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:activityIndicator + selector:NSSelectorFromString(@"startActivity") + name:SDWebImageDownloadStartNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:activityIndicator + selector:NSSelectorFromString(@"stopActivity") + name:SDWebImageDownloadStopNotification object:nil]; + } +} + ++ (SDWebImageDownloader *)sharedDownloader { + static dispatch_once_t once; + static id instance; + dispatch_once(&once, ^{ + instance = [self new]; + }); + return instance; +} + +- (id)init { + if ((self = [super init])) { + _operationClass = [SDWebImageDownloaderOperation class]; + _shouldDecompressImages = YES; + _executionOrder = SDWebImageDownloaderFIFOExecutionOrder; + _downloadQueue = [NSOperationQueue new]; + _downloadQueue.maxConcurrentOperationCount = 6; + _URLCallbacks = [NSMutableDictionary new]; +#ifdef SD_WEBP + _HTTPHeaders = [@{@"Accept": @"image/webp,image/*;q=0.8"} mutableCopy]; +#else + _HTTPHeaders = [@{@"Accept": @"image/*;q=0.8"} mutableCopy]; +#endif + _barrierQueue = dispatch_queue_create("com.hackemist.SDWebImageDownloaderBarrierQueue", DISPATCH_QUEUE_CONCURRENT); + _downloadTimeout = 15.0; + } + return self; +} + +- (void)dealloc { + [self.downloadQueue cancelAllOperations]; + SDDispatchQueueRelease(_barrierQueue); +} + +- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field { + if (value) { + self.HTTPHeaders[field] = value; + } + else { + [self.HTTPHeaders removeObjectForKey:field]; + } +} + +- (NSString *)valueForHTTPHeaderField:(NSString *)field { + return self.HTTPHeaders[field]; +} + +- (void)setMaxConcurrentDownloads:(NSInteger)maxConcurrentDownloads { + _downloadQueue.maxConcurrentOperationCount = maxConcurrentDownloads; +} + +- (NSUInteger)currentDownloadCount { + return _downloadQueue.operationCount; +} + +- (NSInteger)maxConcurrentDownloads { + return _downloadQueue.maxConcurrentOperationCount; +} + +- (void)setOperationClass:(Class)operationClass { + _operationClass = operationClass ?: [SDWebImageDownloaderOperation class]; +} + +- (id )downloadImageWithURL:(NSURL *)url options:(SDWebImageDownloaderOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageDownloaderCompletedBlock)completedBlock { + __block SDWebImageDownloaderOperation *operation; + __weak __typeof(self)wself = self; + + [self addProgressCallback:progressBlock completedBlock:completedBlock forURL:url createCallback:^{ + NSTimeInterval timeoutInterval = wself.downloadTimeout; + if (timeoutInterval == 0.0) { + timeoutInterval = 15.0; + } + + // In order to prevent from potential duplicate caching (NSURLCache + SDImageCache) we disable the cache for image requests if told otherwise + NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:(options & SDWebImageDownloaderUseNSURLCache ? NSURLRequestUseProtocolCachePolicy : NSURLRequestReloadIgnoringLocalCacheData) timeoutInterval:timeoutInterval]; + request.HTTPShouldHandleCookies = (options & SDWebImageDownloaderHandleCookies); + request.HTTPShouldUsePipelining = YES; + if (wself.headersFilter) { + request.allHTTPHeaderFields = wself.headersFilter(url, [wself.HTTPHeaders copy]); + } + else { + request.allHTTPHeaderFields = wself.HTTPHeaders; + } + operation = [[wself.operationClass alloc] initWithRequest:request + options:options + progress:^(NSInteger receivedSize, NSInteger expectedSize) { + SDWebImageDownloader *sself = wself; + if (!sself) return; + __block NSArray *callbacksForURL; + dispatch_sync(sself.barrierQueue, ^{ + callbacksForURL = [sself.URLCallbacks[url] copy]; + }); + for (NSDictionary *callbacks in callbacksForURL) { + dispatch_async(dispatch_get_main_queue(), ^{ + SDWebImageDownloaderProgressBlock callback = callbacks[kProgressCallbackKey]; + if (callback) callback(receivedSize, expectedSize); + }); + } + } + completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) { + SDWebImageDownloader *sself = wself; + if (!sself) return; + __block NSArray *callbacksForURL; + dispatch_barrier_sync(sself.barrierQueue, ^{ + callbacksForURL = [sself.URLCallbacks[url] copy]; + if (finished) { + [sself.URLCallbacks removeObjectForKey:url]; + } + }); + for (NSDictionary *callbacks in callbacksForURL) { + SDWebImageDownloaderCompletedBlock callback = callbacks[kCompletedCallbackKey]; + if (callback) callback(image, data, error, finished); + } + } + cancelled:^{ + SDWebImageDownloader *sself = wself; + if (!sself) return; + dispatch_barrier_async(sself.barrierQueue, ^{ + [sself.URLCallbacks removeObjectForKey:url]; + }); + }]; + operation.shouldDecompressImages = wself.shouldDecompressImages; + + if (wself.urlCredential) { + operation.credential = wself.urlCredential; + } else if (wself.username && wself.password) { + operation.credential = [NSURLCredential credentialWithUser:wself.username password:wself.password persistence:NSURLCredentialPersistenceForSession]; + } + + if (options & SDWebImageDownloaderHighPriority) { + operation.queuePriority = NSOperationQueuePriorityHigh; + } else if (options & SDWebImageDownloaderLowPriority) { + operation.queuePriority = NSOperationQueuePriorityLow; + } + + [wself.downloadQueue addOperation:operation]; + if (wself.executionOrder == SDWebImageDownloaderLIFOExecutionOrder) { + // Emulate LIFO execution order by systematically adding new operations as last operation's dependency + [wself.lastAddedOperation addDependency:operation]; + wself.lastAddedOperation = operation; + } + }]; + + return operation; +} + +- (void)addProgressCallback:(SDWebImageDownloaderProgressBlock)progressBlock completedBlock:(SDWebImageDownloaderCompletedBlock)completedBlock forURL:(NSURL *)url createCallback:(SDWebImageNoParamsBlock)createCallback { + // The URL will be used as the key to the callbacks dictionary so it cannot be nil. If it is nil immediately call the completed block with no image or data. + if (url == nil) { + if (completedBlock != nil) { + completedBlock(nil, nil, nil, NO); + } + return; + } + + dispatch_barrier_sync(self.barrierQueue, ^{ + BOOL first = NO; + if (!self.URLCallbacks[url]) { + self.URLCallbacks[url] = [NSMutableArray new]; + first = YES; + } + + // Handle single download of simultaneous download request for the same URL + NSMutableArray *callbacksForURL = self.URLCallbacks[url]; + NSMutableDictionary *callbacks = [NSMutableDictionary new]; + if (progressBlock) callbacks[kProgressCallbackKey] = [progressBlock copy]; + if (completedBlock) callbacks[kCompletedCallbackKey] = [completedBlock copy]; + [callbacksForURL addObject:callbacks]; + self.URLCallbacks[url] = callbacksForURL; + + if (first) { + createCallback(); + } + }); +} + +- (void)setSuspended:(BOOL)suspended { + [self.downloadQueue setSuspended:suspended]; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloaderOperation.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloaderOperation.h" new file mode 100755 index 0000000..dd48b22 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloaderOperation.h" @@ -0,0 +1,78 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import +#import "SDWebImageDownloader.h" +#import "SDWebImageOperation.h" + +extern NSString *const SDWebImageDownloadStartNotification; +extern NSString *const SDWebImageDownloadReceiveResponseNotification; +extern NSString *const SDWebImageDownloadStopNotification; +extern NSString *const SDWebImageDownloadFinishNotification; + +@interface SDWebImageDownloaderOperation : NSOperation + +/** + * The request used by the operation's connection. + */ +@property (strong, nonatomic, readonly) NSURLRequest *request; + + +@property (assign, nonatomic) BOOL shouldDecompressImages; + +/** + * Whether the URL connection should consult the credential storage for authenticating the connection. `YES` by default. + * + * This is the value that is returned in the `NSURLConnectionDelegate` method `-connectionShouldUseCredentialStorage:`. + */ +@property (nonatomic, assign) BOOL shouldUseCredentialStorage; + +/** + * The credential used for authentication challenges in `-connection:didReceiveAuthenticationChallenge:`. + * + * This will be overridden by any shared credentials that exist for the username or password of the request URL, if present. + */ +@property (nonatomic, strong) NSURLCredential *credential; + +/** + * The SDWebImageDownloaderOptions for the receiver. + */ +@property (assign, nonatomic, readonly) SDWebImageDownloaderOptions options; + +/** + * The expected size of data. + */ +@property (assign, nonatomic) NSInteger expectedSize; + +/** + * The response returned by the operation's connection. + */ +@property (strong, nonatomic) NSURLResponse *response; + +/** + * Initializes a `SDWebImageDownloaderOperation` object + * + * @see SDWebImageDownloaderOperation + * + * @param request the URL request + * @param options downloader options + * @param progressBlock the block executed when a new chunk of data arrives. + * @note the progress block is executed on a background queue + * @param completedBlock the block executed when the download is done. + * @note the completed block is executed on the main queue for success. If errors are found, there is a chance the block will be executed on a background queue + * @param cancelBlock the block executed if the download (operation) is cancelled + * + * @return the initialized instance + */ +- (id)initWithRequest:(NSURLRequest *)request + options:(SDWebImageDownloaderOptions)options + progress:(SDWebImageDownloaderProgressBlock)progressBlock + completed:(SDWebImageDownloaderCompletedBlock)completedBlock + cancelled:(SDWebImageNoParamsBlock)cancelBlock; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloaderOperation.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloaderOperation.m" new file mode 100755 index 0000000..5a8bd11 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloaderOperation.m" @@ -0,0 +1,466 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import "SDWebImageDownloaderOperation.h" +#import "SDWebImageDecoder.h" +#import "UIImage+MultiFormat.h" +#import +#import "SDWebImageManager.h" + +NSString *const SDWebImageDownloadStartNotification = @"SDWebImageDownloadStartNotification"; +NSString *const SDWebImageDownloadReceiveResponseNotification = @"SDWebImageDownloadReceiveResponseNotification"; +NSString *const SDWebImageDownloadStopNotification = @"SDWebImageDownloadStopNotification"; +NSString *const SDWebImageDownloadFinishNotification = @"SDWebImageDownloadFinishNotification"; + +@interface SDWebImageDownloaderOperation () + +@property (copy, nonatomic) SDWebImageDownloaderProgressBlock progressBlock; +@property (copy, nonatomic) SDWebImageDownloaderCompletedBlock completedBlock; +@property (copy, nonatomic) SDWebImageNoParamsBlock cancelBlock; + +@property (assign, nonatomic, getter = isExecuting) BOOL executing; +@property (assign, nonatomic, getter = isFinished) BOOL finished; +@property (strong, nonatomic) NSMutableData *imageData; +@property (strong, nonatomic) NSURLConnection *connection; +@property (strong, atomic) NSThread *thread; + +#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 +@property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundTaskId; +#endif + +@end + +@implementation SDWebImageDownloaderOperation { + size_t width, height; + UIImageOrientation orientation; + BOOL responseFromCached; +} + +@synthesize executing = _executing; +@synthesize finished = _finished; + +- (id)initWithRequest:(NSURLRequest *)request + options:(SDWebImageDownloaderOptions)options + progress:(SDWebImageDownloaderProgressBlock)progressBlock + completed:(SDWebImageDownloaderCompletedBlock)completedBlock + cancelled:(SDWebImageNoParamsBlock)cancelBlock { + if ((self = [super init])) { + _request = request; + _shouldDecompressImages = YES; + _shouldUseCredentialStorage = YES; + _options = options; + _progressBlock = [progressBlock copy]; + _completedBlock = [completedBlock copy]; + _cancelBlock = [cancelBlock copy]; + _executing = NO; + _finished = NO; + _expectedSize = 0; + responseFromCached = YES; // Initially wrong until `connection:willCacheResponse:` is called or not called + } + return self; +} + +- (void)start { + @synchronized (self) { + if (self.isCancelled) { + self.finished = YES; + [self reset]; + return; + } + +#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 + Class UIApplicationClass = NSClassFromString(@"UIApplication"); + BOOL hasApplication = UIApplicationClass && [UIApplicationClass respondsToSelector:@selector(sharedApplication)]; + if (hasApplication && [self shouldContinueWhenAppEntersBackground]) { + __weak __typeof__ (self) wself = self; + UIApplication * app = [UIApplicationClass performSelector:@selector(sharedApplication)]; + self.backgroundTaskId = [app beginBackgroundTaskWithExpirationHandler:^{ + __strong __typeof (wself) sself = wself; + + if (sself) { + [sself cancel]; + + [app endBackgroundTask:sself.backgroundTaskId]; + sself.backgroundTaskId = UIBackgroundTaskInvalid; + } + }]; + } +#endif + + self.executing = YES; + self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self startImmediately:NO]; + self.thread = [NSThread currentThread]; + } + + [self.connection start]; + + if (self.connection) { + if (self.progressBlock) { + self.progressBlock(0, NSURLResponseUnknownLength); + } + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStartNotification object:self]; + }); + + if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_5_1) { + // Make sure to run the runloop in our background thread so it can process downloaded data + // Note: we use a timeout to work around an issue with NSURLConnection cancel under iOS 5 + // not waking up the runloop, leading to dead threads (see https://github.com/rs/SDWebImage/issues/466) + CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10, false); + } + else { + CFRunLoopRun(); + } + + if (!self.isFinished) { + [self.connection cancel]; + [self connection:self.connection didFailWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorTimedOut userInfo:@{NSURLErrorFailingURLErrorKey : self.request.URL}]]; + } + } + else { + if (self.completedBlock) { + self.completedBlock(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Connection can't be initialized"}], YES); + } + } + +#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 + Class UIApplicationClass = NSClassFromString(@"UIApplication"); + if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) { + return; + } + if (self.backgroundTaskId != UIBackgroundTaskInvalid) { + UIApplication * app = [UIApplication performSelector:@selector(sharedApplication)]; + [app endBackgroundTask:self.backgroundTaskId]; + self.backgroundTaskId = UIBackgroundTaskInvalid; + } +#endif +} + +- (void)cancel { + @synchronized (self) { + if (self.thread) { + [self performSelector:@selector(cancelInternalAndStop) onThread:self.thread withObject:nil waitUntilDone:NO]; + } + else { + [self cancelInternal]; + } + } +} + +- (void)cancelInternalAndStop { + if (self.isFinished) return; + [self cancelInternal]; + CFRunLoopStop(CFRunLoopGetCurrent()); +} + +- (void)cancelInternal { + if (self.isFinished) return; + [super cancel]; + if (self.cancelBlock) self.cancelBlock(); + + if (self.connection) { + [self.connection cancel]; + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self]; + }); + + // As we cancelled the connection, its callback won't be called and thus won't + // maintain the isFinished and isExecuting flags. + if (self.isExecuting) self.executing = NO; + if (!self.isFinished) self.finished = YES; + } + + [self reset]; +} + +- (void)done { + self.finished = YES; + self.executing = NO; + [self reset]; +} + +- (void)reset { + self.cancelBlock = nil; + self.completedBlock = nil; + self.progressBlock = nil; + self.connection = nil; + self.imageData = nil; + self.thread = nil; +} + +- (void)setFinished:(BOOL)finished { + [self willChangeValueForKey:@"isFinished"]; + _finished = finished; + [self didChangeValueForKey:@"isFinished"]; +} + +- (void)setExecuting:(BOOL)executing { + [self willChangeValueForKey:@"isExecuting"]; + _executing = executing; + [self didChangeValueForKey:@"isExecuting"]; +} + +- (BOOL)isConcurrent { + return YES; +} + +#pragma mark NSURLConnection (delegate) + +- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { + + //'304 Not Modified' is an exceptional one + if (![response respondsToSelector:@selector(statusCode)] || ([((NSHTTPURLResponse *)response) statusCode] < 400 && [((NSHTTPURLResponse *)response) statusCode] != 304)) { + NSInteger expected = response.expectedContentLength > 0 ? (NSInteger)response.expectedContentLength : 0; + self.expectedSize = expected; + if (self.progressBlock) { + self.progressBlock(0, expected); + } + + self.imageData = [[NSMutableData alloc] initWithCapacity:expected]; + self.response = response; + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadReceiveResponseNotification object:self]; + }); + } + else { + NSUInteger code = [((NSHTTPURLResponse *)response) statusCode]; + + //This is the case when server returns '304 Not Modified'. It means that remote image is not changed. + //In case of 304 we need just cancel the operation and return cached image from the cache. + if (code == 304) { + [self cancelInternal]; + } else { + [self.connection cancel]; + } + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self]; + }); + + if (self.completedBlock) { + self.completedBlock(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:[((NSHTTPURLResponse *)response) statusCode] userInfo:nil], YES); + } + CFRunLoopStop(CFRunLoopGetCurrent()); + [self done]; + } +} + +- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { + [self.imageData appendData:data]; + + if ((self.options & SDWebImageDownloaderProgressiveDownload) && self.expectedSize > 0 && self.completedBlock) { + // The following code is from http://www.cocoaintheshell.com/2011/05/progressive-images-download-imageio/ + // Thanks to the author @Nyx0uf + + // Get the total bytes downloaded + const NSInteger totalSize = self.imageData.length; + + // Update the data source, we must pass ALL the data, not just the new bytes + CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)self.imageData, NULL); + + if (width + height == 0) { + CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL); + if (properties) { + NSInteger orientationValue = -1; + CFTypeRef val = CFDictionaryGetValue(properties, kCGImagePropertyPixelHeight); + if (val) CFNumberGetValue(val, kCFNumberLongType, &height); + val = CFDictionaryGetValue(properties, kCGImagePropertyPixelWidth); + if (val) CFNumberGetValue(val, kCFNumberLongType, &width); + val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation); + if (val) CFNumberGetValue(val, kCFNumberNSIntegerType, &orientationValue); + CFRelease(properties); + + // When we draw to Core Graphics, we lose orientation information, + // which means the image below born of initWithCGIImage will be + // oriented incorrectly sometimes. (Unlike the image born of initWithData + // in connectionDidFinishLoading.) So save it here and pass it on later. + orientation = [[self class] orientationFromPropertyValue:(orientationValue == -1 ? 1 : orientationValue)]; + } + + } + + if (width + height > 0 && totalSize < self.expectedSize) { + // Create the image + CGImageRef partialImageRef = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL); + +#ifdef TARGET_OS_IPHONE + // Workaround for iOS anamorphic image + if (partialImageRef) { + const size_t partialHeight = CGImageGetHeight(partialImageRef); + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGContextRef bmContext = CGBitmapContextCreate(NULL, width, height, 8, width * 4, colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst); + CGColorSpaceRelease(colorSpace); + if (bmContext) { + CGContextDrawImage(bmContext, (CGRect){.origin.x = 0.0f, .origin.y = 0.0f, .size.width = width, .size.height = partialHeight}, partialImageRef); + CGImageRelease(partialImageRef); + partialImageRef = CGBitmapContextCreateImage(bmContext); + CGContextRelease(bmContext); + } + else { + CGImageRelease(partialImageRef); + partialImageRef = nil; + } + } +#endif + + if (partialImageRef) { + UIImage *image = [UIImage imageWithCGImage:partialImageRef scale:1 orientation:orientation]; + NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL]; + UIImage *scaledImage = [self scaledImageForKey:key image:image]; + if (self.shouldDecompressImages) { + image = [UIImage decodedImageWithImage:scaledImage]; + } + else { + image = scaledImage; + } + CGImageRelease(partialImageRef); + dispatch_main_sync_safe(^{ + if (self.completedBlock) { + self.completedBlock(image, nil, nil, NO); + } + }); + } + } + + CFRelease(imageSource); + } + + if (self.progressBlock) { + self.progressBlock(self.imageData.length, self.expectedSize); + } +} + ++ (UIImageOrientation)orientationFromPropertyValue:(NSInteger)value { + switch (value) { + case 1: + return UIImageOrientationUp; + case 3: + return UIImageOrientationDown; + case 8: + return UIImageOrientationLeft; + case 6: + return UIImageOrientationRight; + case 2: + return UIImageOrientationUpMirrored; + case 4: + return UIImageOrientationDownMirrored; + case 5: + return UIImageOrientationLeftMirrored; + case 7: + return UIImageOrientationRightMirrored; + default: + return UIImageOrientationUp; + } +} + +- (UIImage *)scaledImageForKey:(NSString *)key image:(UIImage *)image { + return SDScaledImageForKey(key, image); +} + +- (void)connectionDidFinishLoading:(NSURLConnection *)aConnection { + SDWebImageDownloaderCompletedBlock completionBlock = self.completedBlock; + @synchronized(self) { + CFRunLoopStop(CFRunLoopGetCurrent()); + self.thread = nil; + self.connection = nil; + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadFinishNotification object:self]; + }); + } + + if (![[NSURLCache sharedURLCache] cachedResponseForRequest:_request]) { + responseFromCached = NO; + } + + if (completionBlock) { + if (self.options & SDWebImageDownloaderIgnoreCachedResponse && responseFromCached) { + completionBlock(nil, nil, nil, YES); + } else if (self.imageData) { + UIImage *image = [UIImage sd_imageWithData:self.imageData]; + NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL]; + image = [self scaledImageForKey:key image:image]; + + // Do not force decoding animated GIFs + if (!image.images) { + if (self.shouldDecompressImages) { + image = [UIImage decodedImageWithImage:image]; + } + } + if (CGSizeEqualToSize(image.size, CGSizeZero)) { + completionBlock(nil, nil, [NSError errorWithDomain:SDWebImageErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Downloaded image has 0 pixels"}], YES); + } + else { + completionBlock(image, self.imageData, nil, YES); + } + } else { + completionBlock(nil, nil, [NSError errorWithDomain:SDWebImageErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Image data is nil"}], YES); + } + } + self.completionBlock = nil; + [self done]; +} + +- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { + @synchronized(self) { + CFRunLoopStop(CFRunLoopGetCurrent()); + self.thread = nil; + self.connection = nil; + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self]; + }); + } + + if (self.completedBlock) { + self.completedBlock(nil, nil, error, YES); + } + self.completionBlock = nil; + [self done]; +} + +- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse { + responseFromCached = NO; // If this method is called, it means the response wasn't read from cache + if (self.request.cachePolicy == NSURLRequestReloadIgnoringLocalCacheData) { + // Prevents caching of responses + return nil; + } + else { + return cachedResponse; + } +} + +- (BOOL)shouldContinueWhenAppEntersBackground { + return self.options & SDWebImageDownloaderContinueInBackground; +} + +- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection __unused *)connection { + return self.shouldUseCredentialStorage; +} + +- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge{ + if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { + if (!(self.options & SDWebImageDownloaderAllowInvalidSSLCertificates) && + [challenge.sender respondsToSelector:@selector(performDefaultHandlingForAuthenticationChallenge:)]) { + [challenge.sender performDefaultHandlingForAuthenticationChallenge:challenge]; + } else { + NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; + [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; + } + } else { + if ([challenge previousFailureCount] == 0) { + if (self.credential) { + [[challenge sender] useCredential:self.credential forAuthenticationChallenge:challenge]; + } else { + [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; + } + } else { + [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; + } + } +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageManager.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageManager.h" new file mode 100755 index 0000000..18e578a --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageManager.h" @@ -0,0 +1,299 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import "SDWebImageCompat.h" +#import "SDWebImageOperation.h" +#import "SDWebImageDownloader.h" +#import "SDImageCache.h" + +typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { + /** + * By default, when a URL fail to be downloaded, the URL is blacklisted so the library won't keep trying. + * This flag disable this blacklisting. + */ + SDWebImageRetryFailed = 1 << 0, + + /** + * By default, image downloads are started during UI interactions, this flags disable this feature, + * leading to delayed download on UIScrollView deceleration for instance. + */ + SDWebImageLowPriority = 1 << 1, + + /** + * This flag disables on-disk caching + */ + SDWebImageCacheMemoryOnly = 1 << 2, + + /** + * This flag enables progressive download, the image is displayed progressively during download as a browser would do. + * By default, the image is only displayed once completely downloaded. + */ + SDWebImageProgressiveDownload = 1 << 3, + + /** + * Even if the image is cached, respect the HTTP response cache control, and refresh the image from remote location if needed. + * The disk caching will be handled by NSURLCache instead of SDWebImage leading to slight performance degradation. + * This option helps deal with images changing behind the same request URL, e.g. Facebook graph api profile pics. + * If a cached image is refreshed, the completion block is called once with the cached image and again with the final image. + * + * Use this flag only if you can't make your URLs static with embedded cache busting parameter. + */ + SDWebImageRefreshCached = 1 << 4, + + /** + * In iOS 4+, continue the download of the image if the app goes to background. This is achieved by asking the system for + * extra time in background to let the request finish. If the background task expires the operation will be cancelled. + */ + SDWebImageContinueInBackground = 1 << 5, + + /** + * Handles cookies stored in NSHTTPCookieStore by setting + * NSMutableURLRequest.HTTPShouldHandleCookies = YES; + */ + SDWebImageHandleCookies = 1 << 6, + + /** + * Enable to allow untrusted SSL certificates. + * Useful for testing purposes. Use with caution in production. + */ + SDWebImageAllowInvalidSSLCertificates = 1 << 7, + + /** + * By default, image are loaded in the order they were queued. This flag move them to + * the front of the queue and is loaded immediately instead of waiting for the current queue to be loaded (which + * could take a while). + */ + SDWebImageHighPriority = 1 << 8, + + /** + * By default, placeholder images are loaded while the image is loading. This flag will delay the loading + * of the placeholder image until after the image has finished loading. + */ + SDWebImageDelayPlaceholder = 1 << 9, + + /** + * We usually don't call transformDownloadedImage delegate method on animated images, + * as most transformation code would mangle it. + * Use this flag to transform them anyway. + */ + SDWebImageTransformAnimatedImage = 1 << 10, + + /** + * By default, image is added to the imageView after download. But in some cases, we want to + * have the hand before setting the image (apply a filter or add it with cross-fade animation for instance) + * Use this flag if you want to manually set the image in the completion when success + */ + SDWebImageAvoidAutoSetImage = 1 << 11 +}; + +typedef void(^SDWebImageCompletionBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL); + +typedef void(^SDWebImageCompletionWithFinishedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL); + +typedef NSString *(^SDWebImageCacheKeyFilterBlock)(NSURL *url); + + +@class SDWebImageManager; + +@protocol SDWebImageManagerDelegate + +@optional + +/** + * Controls which image should be downloaded when the image is not found in the cache. + * + * @param imageManager The current `SDWebImageManager` + * @param imageURL The url of the image to be downloaded + * + * @return Return NO to prevent the downloading of the image on cache misses. If not implemented, YES is implied. + */ +- (BOOL)imageManager:(SDWebImageManager *)imageManager shouldDownloadImageForURL:(NSURL *)imageURL; + +/** + * Allows to transform the image immediately after it has been downloaded and just before to cache it on disk and memory. + * NOTE: This method is called from a global queue in order to not to block the main thread. + * + * @param imageManager The current `SDWebImageManager` + * @param image The image to transform + * @param imageURL The url of the image to transform + * + * @return The transformed image object. + */ +- (UIImage *)imageManager:(SDWebImageManager *)imageManager transformDownloadedImage:(UIImage *)image withURL:(NSURL *)imageURL; + +@end + +/** + * The SDWebImageManager is the class behind the UIImageView+WebCache category and likes. + * It ties the asynchronous downloader (SDWebImageDownloader) with the image cache store (SDImageCache). + * You can use this class directly to benefit from web image downloading with caching in another context than + * a UIView. + * + * Here is a simple example of how to use SDWebImageManager: + * + * @code + +SDWebImageManager *manager = [SDWebImageManager sharedManager]; +[manager downloadImageWithURL:imageURL + options:0 + progress:nil + completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { + if (image) { + // do something with image + } + }]; + + * @endcode + */ +@interface SDWebImageManager : NSObject + +@property (weak, nonatomic) id delegate; + +@property (strong, nonatomic, readonly) SDImageCache *imageCache; +@property (strong, nonatomic, readonly) SDWebImageDownloader *imageDownloader; + +/** + * The cache filter is a block used each time SDWebImageManager need to convert an URL into a cache key. This can + * be used to remove dynamic part of an image URL. + * + * The following example sets a filter in the application delegate that will remove any query-string from the + * URL before to use it as a cache key: + * + * @code + +[[SDWebImageManager sharedManager] setCacheKeyFilter:^(NSURL *url) { + url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path]; + return [url absoluteString]; +}]; + + * @endcode + */ +@property (nonatomic, copy) SDWebImageCacheKeyFilterBlock cacheKeyFilter; + +/** + * Returns global SDWebImageManager instance. + * + * @return SDWebImageManager shared instance + */ ++ (SDWebImageManager *)sharedManager; + +/** + * Downloads the image at the given URL if not present in cache or return the cached version otherwise. + * + * @param url The URL to the image + * @param options A mask to specify options to use for this request + * @param progressBlock A block called while image is downloading + * @param completedBlock A block called when operation has been completed. + * + * This parameter is required. + * + * This block has no return value and takes the requested UIImage as first parameter. + * In case of error the image parameter is nil and the second parameter may contain an NSError. + * + * The third parameter is an `SDImageCacheType` enum indicating if the image was retrieved from the local cache + * or from the memory cache or from the network. + * + * The last parameter is set to NO when the SDWebImageProgressiveDownload option is used and the image is + * downloading. This block is thus called repeatedly with a partial image. When image is fully downloaded, the + * block is called a last time with the full image and the last parameter set to YES. + * + * @return Returns an NSObject conforming to SDWebImageOperation. Should be an instance of SDWebImageDownloaderOperation + */ +- (id )downloadImageWithURL:(NSURL *)url + options:(SDWebImageOptions)options + progress:(SDWebImageDownloaderProgressBlock)progressBlock + completed:(SDWebImageCompletionWithFinishedBlock)completedBlock; + +/** + * Saves image to cache for given URL + * + * @param image The image to cache + * @param url The URL to the image + * + */ + +- (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url; + +/** + * Cancel all current operations + */ +- (void)cancelAll; + +/** + * Check one or more operations running + */ +- (BOOL)isRunning; + +/** + * Check if image has already been cached + * + * @param url image url + * + * @return if the image was already cached + */ +- (BOOL)cachedImageExistsForURL:(NSURL *)url; + +/** + * Check if image has already been cached on disk only + * + * @param url image url + * + * @return if the image was already cached (disk only) + */ +- (BOOL)diskImageExistsForURL:(NSURL *)url; + +/** + * Async check if image has already been cached + * + * @param url image url + * @param completionBlock the block to be executed when the check is finished + * + * @note the completion block is always executed on the main queue + */ +- (void)cachedImageExistsForURL:(NSURL *)url + completion:(SDWebImageCheckCacheCompletionBlock)completionBlock; + +/** + * Async check if image has already been cached on disk only + * + * @param url image url + * @param completionBlock the block to be executed when the check is finished + * + * @note the completion block is always executed on the main queue + */ +- (void)diskImageExistsForURL:(NSURL *)url + completion:(SDWebImageCheckCacheCompletionBlock)completionBlock; + + +/** + *Return the cache key for a given URL + */ +- (NSString *)cacheKeyForURL:(NSURL *)url; + +@end + + +#pragma mark - Deprecated + +typedef void(^SDWebImageCompletedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType) __deprecated_msg("Block type deprecated. Use `SDWebImageCompletionBlock`"); +typedef void(^SDWebImageCompletedWithFinishedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) __deprecated_msg("Block type deprecated. Use `SDWebImageCompletionWithFinishedBlock`"); + + +@interface SDWebImageManager (Deprecated) + +/** + * Downloads the image at the given URL if not present in cache or return the cached version otherwise. + * + * @deprecated This method has been deprecated. Use `downloadImageWithURL:options:progress:completed:` + */ +- (id )downloadWithURL:(NSURL *)url + options:(SDWebImageOptions)options + progress:(SDWebImageDownloaderProgressBlock)progressBlock + completed:(SDWebImageCompletedWithFinishedBlock)completedBlock __deprecated_msg("Method deprecated. Use `downloadImageWithURL:options:progress:completed:`"); + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageManager.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageManager.m" new file mode 100755 index 0000000..6ca4713 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageManager.m" @@ -0,0 +1,362 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import "SDWebImageManager.h" +#import + +@interface SDWebImageCombinedOperation : NSObject + +@property (assign, nonatomic, getter = isCancelled) BOOL cancelled; +@property (copy, nonatomic) SDWebImageNoParamsBlock cancelBlock; +@property (strong, nonatomic) NSOperation *cacheOperation; + +@end + +@interface SDWebImageManager () + +@property (strong, nonatomic, readwrite) SDImageCache *imageCache; +@property (strong, nonatomic, readwrite) SDWebImageDownloader *imageDownloader; +@property (strong, nonatomic) NSMutableSet *failedURLs; +@property (strong, nonatomic) NSMutableArray *runningOperations; + +@end + +@implementation SDWebImageManager + ++ (id)sharedManager { + static dispatch_once_t once; + static id instance; + dispatch_once(&once, ^{ + instance = [self new]; + }); + return instance; +} + +- (id)init { + if ((self = [super init])) { + _imageCache = [self createCache]; + _imageDownloader = [SDWebImageDownloader sharedDownloader]; + _failedURLs = [NSMutableSet new]; + _runningOperations = [NSMutableArray new]; + } + return self; +} + +- (SDImageCache *)createCache { + return [SDImageCache sharedImageCache]; +} + +- (NSString *)cacheKeyForURL:(NSURL *)url { + if (self.cacheKeyFilter) { + return self.cacheKeyFilter(url); + } + else { + return [url absoluteString]; + } +} + +- (BOOL)cachedImageExistsForURL:(NSURL *)url { + NSString *key = [self cacheKeyForURL:url]; + if ([self.imageCache imageFromMemoryCacheForKey:key] != nil) return YES; + return [self.imageCache diskImageExistsWithKey:key]; +} + +- (BOOL)diskImageExistsForURL:(NSURL *)url { + NSString *key = [self cacheKeyForURL:url]; + return [self.imageCache diskImageExistsWithKey:key]; +} + +- (void)cachedImageExistsForURL:(NSURL *)url + completion:(SDWebImageCheckCacheCompletionBlock)completionBlock { + NSString *key = [self cacheKeyForURL:url]; + + BOOL isInMemoryCache = ([self.imageCache imageFromMemoryCacheForKey:key] != nil); + + if (isInMemoryCache) { + // making sure we call the completion block on the main queue + dispatch_async(dispatch_get_main_queue(), ^{ + if (completionBlock) { + completionBlock(YES); + } + }); + return; + } + + [self.imageCache diskImageExistsWithKey:key completion:^(BOOL isInDiskCache) { + // the completion block of checkDiskCacheForImageWithKey:completion: is always called on the main queue, no need to further dispatch + if (completionBlock) { + completionBlock(isInDiskCache); + } + }]; +} + +- (void)diskImageExistsForURL:(NSURL *)url + completion:(SDWebImageCheckCacheCompletionBlock)completionBlock { + NSString *key = [self cacheKeyForURL:url]; + + [self.imageCache diskImageExistsWithKey:key completion:^(BOOL isInDiskCache) { + // the completion block of checkDiskCacheForImageWithKey:completion: is always called on the main queue, no need to further dispatch + if (completionBlock) { + completionBlock(isInDiskCache); + } + }]; +} + +- (id )downloadImageWithURL:(NSURL *)url + options:(SDWebImageOptions)options + progress:(SDWebImageDownloaderProgressBlock)progressBlock + completed:(SDWebImageCompletionWithFinishedBlock)completedBlock { + // Invoking this method without a completedBlock is pointless + NSAssert(completedBlock != nil, @"If you mean to prefetch the image, use -[SDWebImagePrefetcher prefetchURLs] instead"); + + // Very common mistake is to send the URL using NSString object instead of NSURL. For some strange reason, XCode won't + // throw any warning for this type mismatch. Here we failsafe this error by allowing URLs to be passed as NSString. + if ([url isKindOfClass:NSString.class]) { + url = [NSURL URLWithString:(NSString *)url]; + } + + // Prevents app crashing on argument type error like sending NSNull instead of NSURL + if (![url isKindOfClass:NSURL.class]) { + url = nil; + } + + __block SDWebImageCombinedOperation *operation = [SDWebImageCombinedOperation new]; + __weak SDWebImageCombinedOperation *weakOperation = operation; + + BOOL isFailedUrl = NO; + @synchronized (self.failedURLs) { + isFailedUrl = [self.failedURLs containsObject:url]; + } + + if (url.absoluteString.length == 0 || (!(options & SDWebImageRetryFailed) && isFailedUrl)) { + dispatch_main_sync_safe(^{ + NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorFileDoesNotExist userInfo:nil]; + completedBlock(nil, error, SDImageCacheTypeNone, YES, url); + }); + return operation; + } + + @synchronized (self.runningOperations) { + [self.runningOperations addObject:operation]; + } + NSString *key = [self cacheKeyForURL:url]; + + operation.cacheOperation = [self.imageCache queryDiskCacheForKey:key done:^(UIImage *image, SDImageCacheType cacheType) { + if (operation.isCancelled) { + @synchronized (self.runningOperations) { + [self.runningOperations removeObject:operation]; + } + + return; + } + + if ((!image || options & SDWebImageRefreshCached) && (![self.delegate respondsToSelector:@selector(imageManager:shouldDownloadImageForURL:)] || [self.delegate imageManager:self shouldDownloadImageForURL:url])) { + if (image && options & SDWebImageRefreshCached) { + dispatch_main_sync_safe(^{ + // If image was found in the cache but SDWebImageRefreshCached is provided, notify about the cached image + // AND try to re-download it in order to let a chance to NSURLCache to refresh it from server. + completedBlock(image, nil, cacheType, YES, url); + }); + } + + // download if no image or requested to refresh anyway, and download allowed by delegate + SDWebImageDownloaderOptions downloaderOptions = 0; + if (options & SDWebImageLowPriority) downloaderOptions |= SDWebImageDownloaderLowPriority; + if (options & SDWebImageProgressiveDownload) downloaderOptions |= SDWebImageDownloaderProgressiveDownload; + if (options & SDWebImageRefreshCached) downloaderOptions |= SDWebImageDownloaderUseNSURLCache; + if (options & SDWebImageContinueInBackground) downloaderOptions |= SDWebImageDownloaderContinueInBackground; + if (options & SDWebImageHandleCookies) downloaderOptions |= SDWebImageDownloaderHandleCookies; + if (options & SDWebImageAllowInvalidSSLCertificates) downloaderOptions |= SDWebImageDownloaderAllowInvalidSSLCertificates; + if (options & SDWebImageHighPriority) downloaderOptions |= SDWebImageDownloaderHighPriority; + if (image && options & SDWebImageRefreshCached) { + // force progressive off if image already cached but forced refreshing + downloaderOptions &= ~SDWebImageDownloaderProgressiveDownload; + // ignore image read from NSURLCache if image if cached but force refreshing + downloaderOptions |= SDWebImageDownloaderIgnoreCachedResponse; + } + id subOperation = [self.imageDownloader downloadImageWithURL:url options:downloaderOptions progress:progressBlock completed:^(UIImage *downloadedImage, NSData *data, NSError *error, BOOL finished) { + if (weakOperation.isCancelled) { + // Do nothing if the operation was cancelled + // See #699 for more details + // if we would call the completedBlock, there could be a race condition between this block and another completedBlock for the same object, so if this one is called second, we will overwrite the new data + } + else if (error) { + dispatch_main_sync_safe(^{ + if (!weakOperation.isCancelled) { + completedBlock(nil, error, SDImageCacheTypeNone, finished, url); + } + }); + + if ( error.code != NSURLErrorNotConnectedToInternet + && error.code != NSURLErrorCancelled + && error.code != NSURLErrorTimedOut + && error.code != NSURLErrorInternationalRoamingOff + && error.code != NSURLErrorDataNotAllowed + && error.code != NSURLErrorCannotFindHost + && error.code != NSURLErrorCannotConnectToHost) { + @synchronized (self.failedURLs) { + [self.failedURLs addObject:url]; + } + } + } + else { + if ((options & SDWebImageRetryFailed)) { + @synchronized (self.failedURLs) { + [self.failedURLs removeObject:url]; + } + } + + BOOL cacheOnDisk = !(options & SDWebImageCacheMemoryOnly); + + if (options & SDWebImageRefreshCached && image && !downloadedImage) { + // Image refresh hit the NSURLCache cache, do not call the completion block + } + else if (downloadedImage && (!downloadedImage.images || (options & SDWebImageTransformAnimatedImage)) && [self.delegate respondsToSelector:@selector(imageManager:transformDownloadedImage:withURL:)]) { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ + UIImage *transformedImage = [self.delegate imageManager:self transformDownloadedImage:downloadedImage withURL:url]; + + if (transformedImage && finished) { + BOOL imageWasTransformed = ![transformedImage isEqual:downloadedImage]; + [self.imageCache storeImage:transformedImage recalculateFromImage:imageWasTransformed imageData:(imageWasTransformed ? nil : data) forKey:key toDisk:cacheOnDisk]; + } + + dispatch_main_sync_safe(^{ + if (!weakOperation.isCancelled) { + completedBlock(transformedImage, nil, SDImageCacheTypeNone, finished, url); + } + }); + }); + } + else { + if (downloadedImage && finished) { + [self.imageCache storeImage:downloadedImage recalculateFromImage:NO imageData:data forKey:key toDisk:cacheOnDisk]; + } + + dispatch_main_sync_safe(^{ + if (!weakOperation.isCancelled) { + completedBlock(downloadedImage, nil, SDImageCacheTypeNone, finished, url); + } + }); + } + } + + if (finished) { + @synchronized (self.runningOperations) { + [self.runningOperations removeObject:operation]; + } + } + }]; + operation.cancelBlock = ^{ + [subOperation cancel]; + + @synchronized (self.runningOperations) { + [self.runningOperations removeObject:weakOperation]; + } + }; + } + else if (image) { + dispatch_main_sync_safe(^{ + if (!weakOperation.isCancelled) { + completedBlock(image, nil, cacheType, YES, url); + } + }); + @synchronized (self.runningOperations) { + [self.runningOperations removeObject:operation]; + } + } + else { + // Image not in cache and download disallowed by delegate + dispatch_main_sync_safe(^{ + if (!weakOperation.isCancelled) { + completedBlock(nil, nil, SDImageCacheTypeNone, YES, url); + } + }); + @synchronized (self.runningOperations) { + [self.runningOperations removeObject:operation]; + } + } + }]; + + return operation; +} + +- (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url { + if (image && url) { + NSString *key = [self cacheKeyForURL:url]; + [self.imageCache storeImage:image forKey:key toDisk:YES]; + } +} + +- (void)cancelAll { + @synchronized (self.runningOperations) { + NSArray *copiedOperations = [self.runningOperations copy]; + [copiedOperations makeObjectsPerformSelector:@selector(cancel)]; + [self.runningOperations removeObjectsInArray:copiedOperations]; + } +} + +- (BOOL)isRunning { + BOOL isRunning = NO; + @synchronized(self.runningOperations) { + isRunning = (self.runningOperations.count > 0); + } + return isRunning; +} + +@end + + +@implementation SDWebImageCombinedOperation + +- (void)setCancelBlock:(SDWebImageNoParamsBlock)cancelBlock { + // check if the operation is already cancelled, then we just call the cancelBlock + if (self.isCancelled) { + if (cancelBlock) { + cancelBlock(); + } + _cancelBlock = nil; // don't forget to nil the cancelBlock, otherwise we will get crashes + } else { + _cancelBlock = [cancelBlock copy]; + } +} + +- (void)cancel { + self.cancelled = YES; + if (self.cacheOperation) { + [self.cacheOperation cancel]; + self.cacheOperation = nil; + } + if (self.cancelBlock) { + self.cancelBlock(); + + // TODO: this is a temporary fix to #809. + // Until we can figure the exact cause of the crash, going with the ivar instead of the setter +// self.cancelBlock = nil; + _cancelBlock = nil; + } +} + +@end + + +@implementation SDWebImageManager (Deprecated) + +// deprecated method, uses the non deprecated method +// adapter for the completion block +- (id )downloadWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedWithFinishedBlock)completedBlock { + return [self downloadImageWithURL:url + options:options + progress:progressBlock + completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType, finished); + } + }]; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageOperation.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageOperation.h" new file mode 100755 index 0000000..71094ee --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageOperation.h" @@ -0,0 +1,15 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import + +@protocol SDWebImageOperation + +- (void)cancel; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImagePrefetcher.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImagePrefetcher.h" new file mode 100755 index 0000000..6c31b15 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImagePrefetcher.h" @@ -0,0 +1,108 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import +#import "SDWebImageManager.h" + +@class SDWebImagePrefetcher; + +@protocol SDWebImagePrefetcherDelegate + +@optional + +/** + * Called when an image was prefetched. + * + * @param imagePrefetcher The current image prefetcher + * @param imageURL The image url that was prefetched + * @param finishedCount The total number of images that were prefetched (successful or not) + * @param totalCount The total number of images that were to be prefetched + */ +- (void)imagePrefetcher:(SDWebImagePrefetcher *)imagePrefetcher didPrefetchURL:(NSURL *)imageURL finishedCount:(NSUInteger)finishedCount totalCount:(NSUInteger)totalCount; + +/** + * Called when all images are prefetched. + * @param imagePrefetcher The current image prefetcher + * @param totalCount The total number of images that were prefetched (whether successful or not) + * @param skippedCount The total number of images that were skipped + */ +- (void)imagePrefetcher:(SDWebImagePrefetcher *)imagePrefetcher didFinishWithTotalCount:(NSUInteger)totalCount skippedCount:(NSUInteger)skippedCount; + +@end + +typedef void(^SDWebImagePrefetcherProgressBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfTotalUrls); +typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfSkippedUrls); + +/** + * Prefetch some URLs in the cache for future use. Images are downloaded in low priority. + */ +@interface SDWebImagePrefetcher : NSObject + +/** + * The web image manager + */ +@property (strong, nonatomic, readonly) SDWebImageManager *manager; + +/** + * Maximum number of URLs to prefetch at the same time. Defaults to 3. + */ +@property (nonatomic, assign) NSUInteger maxConcurrentDownloads; + +/** + * SDWebImageOptions for prefetcher. Defaults to SDWebImageLowPriority. + */ +@property (nonatomic, assign) SDWebImageOptions options; + +/** + * Queue options for Prefetcher. Defaults to Main Queue. + */ +@property (nonatomic, assign) dispatch_queue_t prefetcherQueue; + +@property (weak, nonatomic) id delegate; + +/** + * Return the global image prefetcher instance. + */ ++ (SDWebImagePrefetcher *)sharedImagePrefetcher; + +/** + * Allows you to instantiate a prefetcher with any arbitrary image manager. + */ +- (id)initWithImageManager:(SDWebImageManager *)manager; + +/** + * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching, + * currently one image is downloaded at a time, + * and skips images for failed downloads and proceed to the next image in the list + * + * @param urls list of URLs to prefetch + */ +- (void)prefetchURLs:(NSArray *)urls; + +/** + * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching, + * currently one image is downloaded at a time, + * and skips images for failed downloads and proceed to the next image in the list + * + * @param urls list of URLs to prefetch + * @param progressBlock block to be called when progress updates; + * first parameter is the number of completed (successful or not) requests, + * second parameter is the total number of images originally requested to be prefetched + * @param completionBlock block to be called when prefetching is completed + * first param is the number of completed (successful or not) requests, + * second parameter is the number of skipped requests + */ +- (void)prefetchURLs:(NSArray *)urls progress:(SDWebImagePrefetcherProgressBlock)progressBlock completed:(SDWebImagePrefetcherCompletionBlock)completionBlock; + +/** + * Remove and cancel queued list + */ +- (void)cancelPrefetching; + + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImagePrefetcher.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImagePrefetcher.m" new file mode 100755 index 0000000..a2ad8a8 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImagePrefetcher.m" @@ -0,0 +1,151 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import "SDWebImagePrefetcher.h" + +@interface SDWebImagePrefetcher () + +@property (strong, nonatomic) SDWebImageManager *manager; +@property (strong, nonatomic) NSArray *prefetchURLs; +@property (assign, nonatomic) NSUInteger requestedCount; +@property (assign, nonatomic) NSUInteger skippedCount; +@property (assign, nonatomic) NSUInteger finishedCount; +@property (assign, nonatomic) NSTimeInterval startedTime; +@property (copy, nonatomic) SDWebImagePrefetcherCompletionBlock completionBlock; +@property (copy, nonatomic) SDWebImagePrefetcherProgressBlock progressBlock; + +@end + +@implementation SDWebImagePrefetcher + ++ (SDWebImagePrefetcher *)sharedImagePrefetcher { + static dispatch_once_t once; + static id instance; + dispatch_once(&once, ^{ + instance = [self new]; + }); + return instance; +} + +- (id)init { + return [self initWithImageManager:[SDWebImageManager new]]; +} + +- (id)initWithImageManager:(SDWebImageManager *)manager { + if ((self = [super init])) { + _manager = manager; + _options = SDWebImageLowPriority; + _prefetcherQueue = dispatch_get_main_queue(); + self.maxConcurrentDownloads = 3; + } + return self; +} + +- (void)setMaxConcurrentDownloads:(NSUInteger)maxConcurrentDownloads { + self.manager.imageDownloader.maxConcurrentDownloads = maxConcurrentDownloads; +} + +- (NSUInteger)maxConcurrentDownloads { + return self.manager.imageDownloader.maxConcurrentDownloads; +} + +- (void)startPrefetchingAtIndex:(NSUInteger)index { + if (index >= self.prefetchURLs.count) return; + self.requestedCount++; + [self.manager downloadImageWithURL:self.prefetchURLs[index] options:self.options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { + if (!finished) return; + self.finishedCount++; + + if (image) { + if (self.progressBlock) { + self.progressBlock(self.finishedCount,[self.prefetchURLs count]); + } + } + else { + if (self.progressBlock) { + self.progressBlock(self.finishedCount,[self.prefetchURLs count]); + } + // Add last failed + self.skippedCount++; + } + if ([self.delegate respondsToSelector:@selector(imagePrefetcher:didPrefetchURL:finishedCount:totalCount:)]) { + [self.delegate imagePrefetcher:self + didPrefetchURL:self.prefetchURLs[index] + finishedCount:self.finishedCount + totalCount:self.prefetchURLs.count + ]; + } + else if (self.finishedCount == self.requestedCount) { + [self reportStatus]; + if (self.completionBlock) { + self.completionBlock(self.finishedCount, self.skippedCount); + self.completionBlock = nil; + } + self.progressBlock = nil; + } + }]; +} + +- (void)reportStatus { + NSUInteger total = [self.prefetchURLs count]; + if ([self.delegate respondsToSelector:@selector(imagePrefetcher:didFinishWithTotalCount:skippedCount:)]) { + [self.delegate imagePrefetcher:self + didFinishWithTotalCount:(total - self.skippedCount) + skippedCount:self.skippedCount + ]; + } +} + +- (void)prefetchURLs:(NSArray *)urls { + [self prefetchURLs:urls progress:nil completed:nil]; +} + +- (void)prefetchURLs:(NSArray *)urls progress:(SDWebImagePrefetcherProgressBlock)progressBlock completed:(SDWebImagePrefetcherCompletionBlock)completionBlock { + [self cancelPrefetching]; // Prevent duplicate prefetch request + self.startedTime = CFAbsoluteTimeGetCurrent(); + self.prefetchURLs = urls; + self.completionBlock = completionBlock; + self.progressBlock = progressBlock; + + __weak SDWebImagePrefetcher *weakSelf = self; + + if (urls.count == 0) { + if (completionBlock) { + completionBlock(0,0); + } + } else { + // http://oleb.net/blog/2013/07/parallelize-for-loops-gcd-dispatch_apply/ + // Optimize the maxConcurrentdownloads for effeciency. Since caching operations are involved that are non-trivial using + // dispatch_apply might be helpful. + + NSInteger maxNumberOfImages = self.prefetchURLs.count; + + dispatch_apply(maxNumberOfImages/self.maxConcurrentDownloads, self.prefetcherQueue, ^(size_t index) { + size_t i = index * self.maxConcurrentDownloads; + size_t stop = i + self.maxConcurrentDownloads; + do { + [weakSelf startPrefetchingAtIndex:i++]; + } while (i < stop); + }); + + // Download remaining images. + for (size_t i = maxNumberOfImages - (maxNumberOfImages % self.maxConcurrentDownloads); i < (size_t)maxNumberOfImages; i++) { + [self startPrefetchingAtIndex:i]; + } + } +} + +- (void)cancelPrefetching { + self.prefetchURLs = nil; + self.skippedCount = 0; + self.requestedCount = 0; + self.finishedCount = 0; + [self.manager cancelAll]; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIButton+WebCache.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIButton+WebCache.h" new file mode 100755 index 0000000..ecf5ced --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIButton+WebCache.h" @@ -0,0 +1,229 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import "SDWebImageCompat.h" +#import "SDWebImageManager.h" + +/** + * Integrates SDWebImage async downloading and caching of remote images with UIButtonView. + */ +@interface UIButton (WebCache) + +/** + * Get the current image URL. + */ +- (NSURL *)sd_currentImageURL; + +/** + * Get the image URL for a control state. + * + * @param state Which state you want to know the URL for. The values are described in UIControlState. + */ +- (NSURL *)sd_imageURLForState:(UIControlState)state; + +/** + * Set the imageView `image` with an `url`. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param state The state that uses the specified title. The values are described in UIControlState. + */ +- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state; + +/** + * Set the imageView `image` with an `url` and a placeholder. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param state The state that uses the specified title. The values are described in UIControlState. + * @param placeholder The image to be set initially, until the image request finishes. + * @see sd_setImageWithURL:placeholderImage:options: + */ +- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder; + +/** + * Set the imageView `image` with an `url`, placeholder and custom options. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param state The state that uses the specified title. The values are described in UIControlState. + * @param placeholder The image to be set initially, until the image request finishes. + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. + */ +- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options; + +/** + * Set the imageView `image` with an `url`. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param state The state that uses the specified title. The values are described in UIControlState. + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Set the imageView `image` with an `url`, placeholder. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param state The state that uses the specified title. The values are described in UIControlState. + * @param placeholder The image to be set initially, until the image request finishes. + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Set the imageView `image` with an `url`, placeholder and custom options. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param state The state that uses the specified title. The values are described in UIControlState. + * @param placeholder The image to be set initially, until the image request finishes. + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Set the backgroundImageView `image` with an `url`. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param state The state that uses the specified title. The values are described in UIControlState. + */ +- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state; + +/** + * Set the backgroundImageView `image` with an `url` and a placeholder. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param state The state that uses the specified title. The values are described in UIControlState. + * @param placeholder The image to be set initially, until the image request finishes. + * @see sd_setImageWithURL:placeholderImage:options: + */ +- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder; + +/** + * Set the backgroundImageView `image` with an `url`, placeholder and custom options. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param state The state that uses the specified title. The values are described in UIControlState. + * @param placeholder The image to be set initially, until the image request finishes. + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. + */ +- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options; + +/** + * Set the backgroundImageView `image` with an `url`. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param state The state that uses the specified title. The values are described in UIControlState. + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Set the backgroundImageView `image` with an `url`, placeholder. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param state The state that uses the specified title. The values are described in UIControlState. + * @param placeholder The image to be set initially, until the image request finishes. + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Set the backgroundImageView `image` with an `url`, placeholder and custom options. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param placeholder The image to be set initially, until the image request finishes. + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Cancel the current image download + */ +- (void)sd_cancelImageLoadForState:(UIControlState)state; + +/** + * Cancel the current backgroundImage download + */ +- (void)sd_cancelBackgroundImageLoadForState:(UIControlState)state; + +@end + + +@interface UIButton (WebCacheDeprecated) + +- (NSURL *)currentImageURL __deprecated_msg("Use `sd_currentImageURL`"); +- (NSURL *)imageURLForState:(UIControlState)state __deprecated_msg("Use `sd_imageURLForState:`"); + +- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:`"); +- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:`"); +- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:options:`"); + +- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:completed:`"); +- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:completed:`"); +- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:options:completed:`"); + +- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:`"); +- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:`"); +- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:options:`"); + +- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:completed:`"); +- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:completed:`"); +- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:options:completed:`"); + +- (void)cancelCurrentImageLoad __deprecated_msg("Use `sd_cancelImageLoadForState:`"); +- (void)cancelBackgroundImageLoadForState:(UIControlState)state __deprecated_msg("Use `sd_cancelBackgroundImageLoadForState:`"); + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIButton+WebCache.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIButton+WebCache.m" new file mode 100755 index 0000000..5bf6620 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIButton+WebCache.m" @@ -0,0 +1,270 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import "UIButton+WebCache.h" +#import "objc/runtime.h" +#import "UIView+WebCacheOperation.h" + +static char imageURLStorageKey; + +@implementation UIButton (WebCache) + +- (NSURL *)sd_currentImageURL { + NSURL *url = self.imageURLStorage[@(self.state)]; + + if (!url) { + url = self.imageURLStorage[@(UIControlStateNormal)]; + } + + return url; +} + +- (NSURL *)sd_imageURLForState:(UIControlState)state { + return self.imageURLStorage[@(state)]; +} + +- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state { + [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil]; +} + +- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder { + [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil]; +} + +- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { + [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil]; +} + +- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock { + [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:completedBlock]; +} + +- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock { + [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:completedBlock]; +} + +- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock { + + [self setImage:placeholder forState:state]; + [self sd_cancelImageLoadForState:state]; + + if (!url) { + [self.imageURLStorage removeObjectForKey:@(state)]; + + dispatch_main_async_safe(^{ + NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; + if (completedBlock) { + completedBlock(nil, error, SDImageCacheTypeNone, url); + } + }); + + return; + } + + self.imageURLStorage[@(state)] = url; + + __weak __typeof(self)wself = self; + id operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { + if (!wself) return; + dispatch_main_sync_safe(^{ + __strong UIButton *sself = wself; + if (!sself) return; + if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock) + { + completedBlock(image, error, cacheType, url); + return; + } + else if (image) { + [sself setImage:image forState:state]; + } + if (completedBlock && finished) { + completedBlock(image, error, cacheType, url); + } + }); + }]; + [self sd_setImageLoadOperation:operation forState:state]; +} + +- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state { + [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil]; +} + +- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder { + [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil]; +} + +- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { + [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil]; +} + +- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock { + [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:completedBlock]; +} + +- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock { + [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:completedBlock]; +} + +- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock { + [self sd_cancelImageLoadForState:state]; + + [self setBackgroundImage:placeholder forState:state]; + + if (url) { + __weak __typeof(self)wself = self; + id operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { + if (!wself) return; + dispatch_main_sync_safe(^{ + __strong UIButton *sself = wself; + if (!sself) return; + if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock) + { + completedBlock(image, error, cacheType, url); + return; + } + else if (image) { + [sself setBackgroundImage:image forState:state]; + } + if (completedBlock && finished) { + completedBlock(image, error, cacheType, url); + } + }); + }]; + [self sd_setBackgroundImageLoadOperation:operation forState:state]; + } else { + dispatch_main_async_safe(^{ + NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; + if (completedBlock) { + completedBlock(nil, error, SDImageCacheTypeNone, url); + } + }); + } +} + +- (void)sd_setImageLoadOperation:(id)operation forState:(UIControlState)state { + [self sd_setImageLoadOperation:operation forKey:[NSString stringWithFormat:@"UIButtonImageOperation%@", @(state)]]; +} + +- (void)sd_cancelImageLoadForState:(UIControlState)state { + [self sd_cancelImageLoadOperationWithKey:[NSString stringWithFormat:@"UIButtonImageOperation%@", @(state)]]; +} + +- (void)sd_setBackgroundImageLoadOperation:(id)operation forState:(UIControlState)state { + [self sd_setImageLoadOperation:operation forKey:[NSString stringWithFormat:@"UIButtonBackgroundImageOperation%@", @(state)]]; +} + +- (void)sd_cancelBackgroundImageLoadForState:(UIControlState)state { + [self sd_cancelImageLoadOperationWithKey:[NSString stringWithFormat:@"UIButtonBackgroundImageOperation%@", @(state)]]; +} + +- (NSMutableDictionary *)imageURLStorage { + NSMutableDictionary *storage = objc_getAssociatedObject(self, &imageURLStorageKey); + if (!storage) + { + storage = [NSMutableDictionary dictionary]; + objc_setAssociatedObject(self, &imageURLStorageKey, storage, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + + return storage; +} + +@end + + +@implementation UIButton (WebCacheDeprecated) + +- (NSURL *)currentImageURL { + return [self sd_currentImageURL]; +} + +- (NSURL *)imageURLForState:(UIControlState)state { + return [self sd_imageURLForState:state]; +} + +- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state { + [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil]; +} + +- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder { + [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil]; +} + +- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { + [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil]; +} + +- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock { + [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType); + } + }]; +} + +- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock { + [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType); + } + }]; +} + +- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock { + [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType); + } + }]; +} + +- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state { + [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil]; +} + +- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder { + [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil]; +} + +- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { + [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil]; +} + +- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock { + [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType); + } + }]; +} + +- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock { + [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType); + } + }]; +} + +- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock { + [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType); + } + }]; +} + +- (void)cancelCurrentImageLoad { + // in a backwards compatible manner, cancel for current state + [self sd_cancelImageLoadForState:self.state]; +} + +- (void)cancelBackgroundImageLoadForState:(UIControlState)state { + [self sd_cancelBackgroundImageLoadForState:state]; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+GIF.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+GIF.h" new file mode 100755 index 0000000..084f424 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+GIF.h" @@ -0,0 +1,19 @@ +// +// UIImage+GIF.h +// LBGIFImage +// +// Created by Laurin Brandner on 06.01.12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#import + +@interface UIImage (GIF) + ++ (UIImage *)sd_animatedGIFNamed:(NSString *)name; + ++ (UIImage *)sd_animatedGIFWithData:(NSData *)data; + +- (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+GIF.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+GIF.m" new file mode 100755 index 0000000..e1ded2a --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+GIF.m" @@ -0,0 +1,158 @@ +// +// UIImage+GIF.m +// LBGIFImage +// +// Created by Laurin Brandner on 06.01.12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#import "UIImage+GIF.h" +#import + +@implementation UIImage (GIF) + ++ (UIImage *)sd_animatedGIFWithData:(NSData *)data { + if (!data) { + return nil; + } + + CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL); + + size_t count = CGImageSourceGetCount(source); + + UIImage *animatedImage; + + if (count <= 1) { + animatedImage = [[UIImage alloc] initWithData:data]; + } + else { + NSMutableArray *images = [NSMutableArray array]; + + NSTimeInterval duration = 0.0f; + + for (size_t i = 0; i < count; i++) { + CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL); + + duration += [self sd_frameDurationAtIndex:i source:source]; + + [images addObject:[UIImage imageWithCGImage:image scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]]; + + CGImageRelease(image); + } + + if (!duration) { + duration = (1.0f / 10.0f) * count; + } + + animatedImage = [UIImage animatedImageWithImages:images duration:duration]; + } + + CFRelease(source); + + return animatedImage; +} + ++ (float)sd_frameDurationAtIndex:(NSUInteger)index source:(CGImageSourceRef)source { + float frameDuration = 0.1f; + CFDictionaryRef cfFrameProperties = CGImageSourceCopyPropertiesAtIndex(source, index, nil); + NSDictionary *frameProperties = (__bridge NSDictionary *)cfFrameProperties; + NSDictionary *gifProperties = frameProperties[(NSString *)kCGImagePropertyGIFDictionary]; + + NSNumber *delayTimeUnclampedProp = gifProperties[(NSString *)kCGImagePropertyGIFUnclampedDelayTime]; + if (delayTimeUnclampedProp) { + frameDuration = [delayTimeUnclampedProp floatValue]; + } + else { + + NSNumber *delayTimeProp = gifProperties[(NSString *)kCGImagePropertyGIFDelayTime]; + if (delayTimeProp) { + frameDuration = [delayTimeProp floatValue]; + } + } + + // Many annoying ads specify a 0 duration to make an image flash as quickly as possible. + // We follow Firefox's behavior and use a duration of 100 ms for any frames that specify + // a duration of <= 10 ms. See and + // for more information. + + if (frameDuration < 0.011f) { + frameDuration = 0.100f; + } + + CFRelease(cfFrameProperties); + return frameDuration; +} + ++ (UIImage *)sd_animatedGIFNamed:(NSString *)name { + CGFloat scale = [UIScreen mainScreen].scale; + + if (scale > 1.0f) { + NSString *retinaPath = [[NSBundle mainBundle] pathForResource:[name stringByAppendingString:@"@2x"] ofType:@"gif"]; + + NSData *data = [NSData dataWithContentsOfFile:retinaPath]; + + if (data) { + return [UIImage sd_animatedGIFWithData:data]; + } + + NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"gif"]; + + data = [NSData dataWithContentsOfFile:path]; + + if (data) { + return [UIImage sd_animatedGIFWithData:data]; + } + + return [UIImage imageNamed:name]; + } + else { + NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"gif"]; + + NSData *data = [NSData dataWithContentsOfFile:path]; + + if (data) { + return [UIImage sd_animatedGIFWithData:data]; + } + + return [UIImage imageNamed:name]; + } +} + +- (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size { + if (CGSizeEqualToSize(self.size, size) || CGSizeEqualToSize(size, CGSizeZero)) { + return self; + } + + CGSize scaledSize = size; + CGPoint thumbnailPoint = CGPointZero; + + CGFloat widthFactor = size.width / self.size.width; + CGFloat heightFactor = size.height / self.size.height; + CGFloat scaleFactor = (widthFactor > heightFactor) ? widthFactor : heightFactor; + scaledSize.width = self.size.width * scaleFactor; + scaledSize.height = self.size.height * scaleFactor; + + if (widthFactor > heightFactor) { + thumbnailPoint.y = (size.height - scaledSize.height) * 0.5; + } + else if (widthFactor < heightFactor) { + thumbnailPoint.x = (size.width - scaledSize.width) * 0.5; + } + + NSMutableArray *scaledImages = [NSMutableArray array]; + + for (UIImage *image in self.images) { + UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); + + [image drawInRect:CGRectMake(thumbnailPoint.x, thumbnailPoint.y, scaledSize.width, scaledSize.height)]; + UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); + + [scaledImages addObject:newImage]; + + UIGraphicsEndImageContext(); + } + + return [UIImage animatedImageWithImages:scaledImages duration:self.duration]; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+MultiFormat.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+MultiFormat.h" new file mode 100755 index 0000000..186ebc0 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+MultiFormat.h" @@ -0,0 +1,15 @@ +// +// UIImage+MultiFormat.h +// SDWebImage +// +// Created by Olivier Poitrey on 07/06/13. +// Copyright (c) 2013 Dailymotion. All rights reserved. +// + +#import + +@interface UIImage (MultiFormat) + ++ (UIImage *)sd_imageWithData:(NSData *)data; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+MultiFormat.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+MultiFormat.m" new file mode 100755 index 0000000..a830754 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+MultiFormat.m" @@ -0,0 +1,118 @@ +// +// UIImage+MultiFormat.m +// SDWebImage +// +// Created by Olivier Poitrey on 07/06/13. +// Copyright (c) 2013 Dailymotion. All rights reserved. +// + +#import "UIImage+MultiFormat.h" +#import "UIImage+GIF.h" +#import "NSData+ImageContentType.h" +#import + +#ifdef SD_WEBP +#import "UIImage+WebP.h" +#endif + +@implementation UIImage (MultiFormat) + ++ (UIImage *)sd_imageWithData:(NSData *)data { + if (!data) { + return nil; + } + + UIImage *image; + NSString *imageContentType = [NSData sd_contentTypeForImageData:data]; + if ([imageContentType isEqualToString:@"image/gif"]) { + image = [UIImage sd_animatedGIFWithData:data]; + } +#ifdef SD_WEBP + else if ([imageContentType isEqualToString:@"image/webp"]) + { + image = [UIImage sd_imageWithWebPData:data]; + } +#endif + else { + image = [[UIImage alloc] initWithData:data]; + UIImageOrientation orientation = [self sd_imageOrientationFromImageData:data]; + if (orientation != UIImageOrientationUp) { + image = [UIImage imageWithCGImage:image.CGImage + scale:image.scale + orientation:orientation]; + } + } + + + return image; +} + + ++(UIImageOrientation)sd_imageOrientationFromImageData:(NSData *)imageData { + UIImageOrientation result = UIImageOrientationUp; + CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL); + if (imageSource) { + CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL); + if (properties) { + CFTypeRef val; + int exifOrientation; + val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation); + if (val) { + CFNumberGetValue(val, kCFNumberIntType, &exifOrientation); + result = [self sd_exifOrientationToiOSOrientation:exifOrientation]; + } // else - if it's not set it remains at up + CFRelease((CFTypeRef) properties); + } else { + //NSLog(@"NO PROPERTIES, FAIL"); + } + CFRelease(imageSource); + } + return result; +} + +#pragma mark EXIF orientation tag converter +// Convert an EXIF image orientation to an iOS one. +// reference see here: http://sylvana.net/jpegcrop/exif_orientation.html ++ (UIImageOrientation) sd_exifOrientationToiOSOrientation:(int)exifOrientation { + UIImageOrientation orientation = UIImageOrientationUp; + switch (exifOrientation) { + case 1: + orientation = UIImageOrientationUp; + break; + + case 3: + orientation = UIImageOrientationDown; + break; + + case 8: + orientation = UIImageOrientationLeft; + break; + + case 6: + orientation = UIImageOrientationRight; + break; + + case 2: + orientation = UIImageOrientationUpMirrored; + break; + + case 4: + orientation = UIImageOrientationDownMirrored; + break; + + case 5: + orientation = UIImageOrientationLeftMirrored; + break; + + case 7: + orientation = UIImageOrientationRightMirrored; + break; + default: + break; + } + return orientation; +} + + + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+WebP.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+WebP.h" new file mode 100755 index 0000000..b791e6f --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+WebP.h" @@ -0,0 +1,26 @@ +// +// UIImage+WebP.h +// SDWebImage +// +// Created by Olivier Poitrey on 07/06/13. +// Copyright (c) 2013 Dailymotion. All rights reserved. +// + +#ifdef SD_WEBP + +#import + +// Fix for issue #416 Undefined symbols for architecture armv7 since WebP introduction when deploying to device +void WebPInitPremultiplyNEON(void); + +void WebPInitUpsamplersNEON(void); + +void VP8DspInitNEON(void); + +@interface UIImage (WebP) + ++ (UIImage *)sd_imageWithWebPData:(NSData *)data; + +@end + +#endif diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+WebP.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+WebP.m" new file mode 100755 index 0000000..f27a1b6 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+WebP.m" @@ -0,0 +1,78 @@ +// +// UIImage+WebP.m +// SDWebImage +// +// Created by Olivier Poitrey on 07/06/13. +// Copyright (c) 2013 Dailymotion. All rights reserved. +// + +#ifdef SD_WEBP +#import "UIImage+WebP.h" + +#if !COCOAPODS +#import "webp/decode.h" +#else +#import "libwebp/webp/decode.h" +#endif + +// Callback for CGDataProviderRelease +static void FreeImageData(void *info, const void *data, size_t size) +{ + free((void *)data); +} + +@implementation UIImage (WebP) + ++ (UIImage *)sd_imageWithWebPData:(NSData *)data { + WebPDecoderConfig config; + if (!WebPInitDecoderConfig(&config)) { + return nil; + } + + if (WebPGetFeatures(data.bytes, data.length, &config.input) != VP8_STATUS_OK) { + return nil; + } + + config.output.colorspace = config.input.has_alpha ? MODE_rgbA : MODE_RGB; + config.options.use_threads = 1; + + // Decode the WebP image data into a RGBA value array. + if (WebPDecode(data.bytes, data.length, &config) != VP8_STATUS_OK) { + return nil; + } + + int width = config.input.width; + int height = config.input.height; + if (config.options.use_scaling) { + width = config.options.scaled_width; + height = config.options.scaled_height; + } + + // Construct a UIImage from the decoded RGBA value array. + CGDataProviderRef provider = + CGDataProviderCreateWithData(NULL, config.output.u.RGBA.rgba, config.output.u.RGBA.size, FreeImageData); + CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); + CGBitmapInfo bitmapInfo = config.input.has_alpha ? kCGBitmapByteOrder32Big | kCGImageAlphaPremultipliedLast : 0; + size_t components = config.input.has_alpha ? 4 : 3; + CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; + CGImageRef imageRef = CGImageCreate(width, height, 8, components * 8, components * width, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent); + + CGColorSpaceRelease(colorSpaceRef); + CGDataProviderRelease(provider); + + UIImage *image = [[UIImage alloc] initWithCGImage:imageRef]; + CGImageRelease(imageRef); + + return image; +} + +@end + +#if !COCOAPODS +// Functions to resolve some undefined symbols when using WebP and force_load flag +void WebPInitPremultiplyNEON(void) {} +void WebPInitUpsamplersNEON(void) {} +void VP8DspInitNEON(void) {} +#endif + +#endif diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+HighlightedWebCache.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+HighlightedWebCache.h" new file mode 100755 index 0000000..c1d8fea --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+HighlightedWebCache.h" @@ -0,0 +1,100 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import +#import "SDWebImageCompat.h" +#import "SDWebImageManager.h" + +/** + * Integrates SDWebImage async downloading and caching of remote images with UIImageView for highlighted state. + */ +@interface UIImageView (HighlightedWebCache) + +/** + * Set the imageView `highlightedImage` with an `url`. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + */ +- (void)sd_setHighlightedImageWithURL:(NSURL *)url; + +/** + * Set the imageView `highlightedImage` with an `url` and custom options. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. + */ +- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options; + +/** + * Set the imageView `highlightedImage` with an `url`. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Set the imageView `highlightedImage` with an `url` and custom options. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Set the imageView `highlightedImage` with an `url` and custom options. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. + * @param progressBlock A block called while image is downloading + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Cancel the current download + */ +- (void)sd_cancelCurrentHighlightedImageLoad; + +@end + + +@interface UIImageView (HighlightedWebCacheDeprecated) + +- (void)setHighlightedImageWithURL:(NSURL *)url __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:`"); +- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:options:`"); +- (void)setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:completed:`"); +- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:options:completed:`"); +- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:options:progress:completed:`"); + +- (void)cancelCurrentHighlightedImageLoad __deprecated_msg("Use `sd_cancelCurrentHighlightedImageLoad`"); + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+HighlightedWebCache.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+HighlightedWebCache.m" new file mode 100755 index 0000000..921134e --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+HighlightedWebCache.m" @@ -0,0 +1,112 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import "UIImageView+HighlightedWebCache.h" +#import "UIView+WebCacheOperation.h" + +#define UIImageViewHighlightedWebCacheOperationKey @"highlightedImage" + +@implementation UIImageView (HighlightedWebCache) + +- (void)sd_setHighlightedImageWithURL:(NSURL *)url { + [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:nil]; +} + +- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options { + [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:nil]; +} + +- (void)sd_setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock { + [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:completedBlock]; +} + +- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock { + [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:completedBlock]; +} + +- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock { + [self sd_cancelCurrentHighlightedImageLoad]; + + if (url) { + __weak __typeof(self)wself = self; + id operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { + if (!wself) return; + dispatch_main_sync_safe (^ + { + if (!wself) return; + if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock) + { + completedBlock(image, error, cacheType, url); + return; + } + else if (image) { + wself.highlightedImage = image; + [wself setNeedsLayout]; + } + if (completedBlock && finished) { + completedBlock(image, error, cacheType, url); + } + }); + }]; + [self sd_setImageLoadOperation:operation forKey:UIImageViewHighlightedWebCacheOperationKey]; + } else { + dispatch_main_async_safe(^{ + NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; + if (completedBlock) { + completedBlock(nil, error, SDImageCacheTypeNone, url); + } + }); + } +} + +- (void)sd_cancelCurrentHighlightedImageLoad { + [self sd_cancelImageLoadOperationWithKey:UIImageViewHighlightedWebCacheOperationKey]; +} + +@end + + +@implementation UIImageView (HighlightedWebCacheDeprecated) + +- (void)setHighlightedImageWithURL:(NSURL *)url { + [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:nil]; +} + +- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options { + [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:nil]; +} + +- (void)setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock { + [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType); + } + }]; +} + +- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock { + [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType); + } + }]; +} + +- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock { + [self sd_setHighlightedImageWithURL:url options:0 progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType); + } + }]; +} + +- (void)cancelCurrentHighlightedImageLoad { + [self sd_cancelCurrentHighlightedImageLoad]; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+WebCache.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+WebCache.h" new file mode 100755 index 0000000..eeb7460 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+WebCache.h" @@ -0,0 +1,213 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import "SDWebImageCompat.h" +#import "SDWebImageManager.h" + +/** + * Integrates SDWebImage async downloading and caching of remote images with UIImageView. + * + * Usage with a UITableViewCell sub-class: + * + * @code + +#import + +... + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *MyIdentifier = @"MyIdentifier"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; + + if (cell == nil) { + cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] + autorelease]; + } + + // Here we use the provided sd_setImageWithURL: method to load the web image + // Ensure you use a placeholder image otherwise cells will be initialized with no image + [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://example.com/image.jpg"] + placeholderImage:[UIImage imageNamed:@"placeholder"]]; + + cell.textLabel.text = @"My Text"; + return cell; +} + + * @endcode + */ +@interface UIImageView (WebCache) + +/** + * Get the current image URL. + * + * Note that because of the limitations of categories this property can get out of sync + * if you use sd_setImage: directly. + */ +- (NSURL *)sd_imageURL; + +/** + * Set the imageView `image` with an `url`. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + */ +- (void)sd_setImageWithURL:(NSURL *)url; + +/** + * Set the imageView `image` with an `url` and a placeholder. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param placeholder The image to be set initially, until the image request finishes. + * @see sd_setImageWithURL:placeholderImage:options: + */ +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder; + +/** + * Set the imageView `image` with an `url`, placeholder and custom options. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param placeholder The image to be set initially, until the image request finishes. + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. + */ +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options; + +/** + * Set the imageView `image` with an `url`. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Set the imageView `image` with an `url`, placeholder. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param placeholder The image to be set initially, until the image request finishes. + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Set the imageView `image` with an `url`, placeholder and custom options. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param placeholder The image to be set initially, until the image request finishes. + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Set the imageView `image` with an `url`, placeholder and custom options. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param placeholder The image to be set initially, until the image request finishes. + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. + * @param progressBlock A block called while image is downloading + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Set the imageView `image` with an `url` and optionally a placeholder image. + * + * The download is asynchronous and cached. + * + * @param url The url for the image. + * @param placeholder The image to be set initially, until the image request finishes. + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. + * @param progressBlock A block called while image is downloading + * @param completedBlock A block called when operation has been completed. This block has no return value + * and takes the requested UIImage as first parameter. In case of error the image parameter + * is nil and the second parameter may contain an NSError. The third parameter is a Boolean + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. + */ +- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock; + +/** + * Download an array of images and starts them in an animation loop + * + * @param arrayOfURLs An array of NSURL + */ +- (void)sd_setAnimationImagesWithURLs:(NSArray *)arrayOfURLs; + +/** + * Cancel the current download + */ +- (void)sd_cancelCurrentImageLoad; + +- (void)sd_cancelCurrentAnimationImagesLoad; + +/** + * Show activity UIActivityIndicatorView + */ +- (void)setShowActivityIndicatorView:(BOOL)show; + +/** + * set desired UIActivityIndicatorViewStyle + * + * @param style The style of the UIActivityIndicatorView + */ +- (void)setIndicatorStyle:(UIActivityIndicatorViewStyle)style; + +@end + + +@interface UIImageView (WebCacheDeprecated) + +- (NSURL *)imageURL __deprecated_msg("Use `sd_imageURL`"); + +- (void)setImageWithURL:(NSURL *)url __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:`"); +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:`"); +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options`"); + +- (void)setImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:completed:`"); +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:completed:`"); +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options:completed:`"); +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options:progress:completed:`"); + +- (void)setAnimationImagesWithURLs:(NSArray *)arrayOfURLs __deprecated_msg("Use `sd_setAnimationImagesWithURLs:`"); + +- (void)cancelCurrentArrayLoad __deprecated_msg("Use `sd_cancelCurrentAnimationImagesLoad`"); + +- (void)cancelCurrentImageLoad __deprecated_msg("Use `sd_cancelCurrentImageLoad`"); + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+WebCache.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+WebCache.m" new file mode 100755 index 0000000..ec0d2e9 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+WebCache.m" @@ -0,0 +1,277 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import "UIImageView+WebCache.h" +#import "objc/runtime.h" +#import "UIView+WebCacheOperation.h" + +static char imageURLKey; +static char TAG_ACTIVITY_INDICATOR; +static char TAG_ACTIVITY_STYLE; +static char TAG_ACTIVITY_SHOW; + +@implementation UIImageView (WebCache) + +- (void)sd_setImageWithURL:(NSURL *)url { + [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil]; +} + +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder { + [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil]; +} + +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { + [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil]; +} + +- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock { + [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:completedBlock]; +} + +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock { + [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:completedBlock]; +} + +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock { + [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock]; +} + +- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock { + [self sd_cancelCurrentImageLoad]; + objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + if (!(options & SDWebImageDelayPlaceholder)) { + dispatch_main_async_safe(^{ + self.image = placeholder; + }); + } + + if (url) { + + // check if activityView is enabled or not + if ([self showActivityIndicatorView]) { + [self addActivityIndicator]; + } + + __weak __typeof(self)wself = self; + id operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { + [wself removeActivityIndicator]; + if (!wself) return; + dispatch_main_sync_safe(^{ + if (!wself) return; + if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock) + { + completedBlock(image, error, cacheType, url); + return; + } + else if (image) { + wself.image = image; + [wself setNeedsLayout]; + } else { + if ((options & SDWebImageDelayPlaceholder)) { + wself.image = placeholder; + [wself setNeedsLayout]; + } + } + if (completedBlock && finished) { + completedBlock(image, error, cacheType, url); + } + }); + }]; + [self sd_setImageLoadOperation:operation forKey:@"UIImageViewImageLoad"]; + } else { + dispatch_main_async_safe(^{ + [self removeActivityIndicator]; + NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; + if (completedBlock) { + completedBlock(nil, error, SDImageCacheTypeNone, url); + } + }); + } +} + +- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock { + NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:url]; + UIImage *lastPreviousCachedImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:key]; + + [self sd_setImageWithURL:url placeholderImage:lastPreviousCachedImage ?: placeholder options:options progress:progressBlock completed:completedBlock]; +} + +- (NSURL *)sd_imageURL { + return objc_getAssociatedObject(self, &imageURLKey); +} + +- (void)sd_setAnimationImagesWithURLs:(NSArray *)arrayOfURLs { + [self sd_cancelCurrentAnimationImagesLoad]; + __weak __typeof(self)wself = self; + + NSMutableArray *operationsArray = [[NSMutableArray alloc] init]; + + for (NSURL *logoImageURL in arrayOfURLs) { + id operation = [SDWebImageManager.sharedManager downloadImageWithURL:logoImageURL options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { + if (!wself) return; + dispatch_main_sync_safe(^{ + __strong UIImageView *sself = wself; + [sself stopAnimating]; + if (sself && image) { + NSMutableArray *currentImages = [[sself animationImages] mutableCopy]; + if (!currentImages) { + currentImages = [[NSMutableArray alloc] init]; + } + [currentImages addObject:image]; + + sself.animationImages = currentImages; + [sself setNeedsLayout]; + } + [sself startAnimating]; + }); + }]; + [operationsArray addObject:operation]; + } + + [self sd_setImageLoadOperation:[NSArray arrayWithArray:operationsArray] forKey:@"UIImageViewAnimationImages"]; +} + +- (void)sd_cancelCurrentImageLoad { + [self sd_cancelImageLoadOperationWithKey:@"UIImageViewImageLoad"]; +} + +- (void)sd_cancelCurrentAnimationImagesLoad { + [self sd_cancelImageLoadOperationWithKey:@"UIImageViewAnimationImages"]; +} + + +#pragma mark - +- (UIActivityIndicatorView *)activityIndicator { + return (UIActivityIndicatorView *)objc_getAssociatedObject(self, &TAG_ACTIVITY_INDICATOR); +} + +- (void)setActivityIndicator:(UIActivityIndicatorView *)activityIndicator { + objc_setAssociatedObject(self, &TAG_ACTIVITY_INDICATOR, activityIndicator, OBJC_ASSOCIATION_RETAIN); +} + +- (void)setShowActivityIndicatorView:(BOOL)show{ + objc_setAssociatedObject(self, &TAG_ACTIVITY_SHOW, [NSNumber numberWithBool:show], OBJC_ASSOCIATION_RETAIN); +} + +- (BOOL)showActivityIndicatorView{ + return [objc_getAssociatedObject(self, &TAG_ACTIVITY_SHOW) boolValue]; +} + +- (void)setIndicatorStyle:(UIActivityIndicatorViewStyle)style{ + objc_setAssociatedObject(self, &TAG_ACTIVITY_STYLE, [NSNumber numberWithInt:style], OBJC_ASSOCIATION_RETAIN); +} + +- (int)getIndicatorStyle{ + return [objc_getAssociatedObject(self, &TAG_ACTIVITY_STYLE) intValue]; +} + +- (void)addActivityIndicator { + if (!self.activityIndicator) { + self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:[self getIndicatorStyle]]; + self.activityIndicator.translatesAutoresizingMaskIntoConstraints = NO; + + dispatch_main_async_safe(^{ + [self addSubview:self.activityIndicator]; + + [self addConstraint:[NSLayoutConstraint constraintWithItem:self.activityIndicator + attribute:NSLayoutAttributeCenterX + relatedBy:NSLayoutRelationEqual + toItem:self + attribute:NSLayoutAttributeCenterX + multiplier:1.0 + constant:0.0]]; + [self addConstraint:[NSLayoutConstraint constraintWithItem:self.activityIndicator + attribute:NSLayoutAttributeCenterY + relatedBy:NSLayoutRelationEqual + toItem:self + attribute:NSLayoutAttributeCenterY + multiplier:1.0 + constant:0.0]]; + }); + } + + dispatch_main_async_safe(^{ + [self.activityIndicator startAnimating]; + }); + +} + +- (void)removeActivityIndicator { + if (self.activityIndicator) { + [self.activityIndicator removeFromSuperview]; + self.activityIndicator = nil; + } +} + +@end + + +@implementation UIImageView (WebCacheDeprecated) + +- (NSURL *)imageURL { + return [self sd_imageURL]; +} + +- (void)setImageWithURL:(NSURL *)url { + [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil]; +} + +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder { + [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil]; +} + +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { + [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil]; +} + +- (void)setImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock { + [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType); + } + }]; +} + +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock { + [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType); + } + }]; +} + +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock { + [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType); + } + }]; +} + +- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock { + [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (completedBlock) { + completedBlock(image, error, cacheType); + } + }]; +} + +- (void)cancelCurrentArrayLoad { + [self sd_cancelCurrentAnimationImagesLoad]; +} + +- (void)cancelCurrentImageLoad { + [self sd_cancelCurrentImageLoad]; +} + +- (void)setAnimationImagesWithURLs:(NSArray *)arrayOfURLs { + [self sd_setAnimationImagesWithURLs:arrayOfURLs]; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIView+WebCacheOperation.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIView+WebCacheOperation.h" new file mode 100755 index 0000000..6719036 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIView+WebCacheOperation.h" @@ -0,0 +1,36 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import +#import "SDWebImageManager.h" + +@interface UIView (WebCacheOperation) + +/** + * Set the image load operation (storage in a UIView based dictionary) + * + * @param operation the operation + * @param key key for storing the operation + */ +- (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key; + +/** + * Cancel all operations for the current UIView and key + * + * @param key key for identifying the operations + */ +- (void)sd_cancelImageLoadOperationWithKey:(NSString *)key; + +/** + * Just remove the operations corresponding to the current UIView and key without cancelling them + * + * @param key key for identifying the operations + */ +- (void)sd_removeImageLoadOperationWithKey:(NSString *)key; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIView+WebCacheOperation.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIView+WebCacheOperation.m" new file mode 100755 index 0000000..9219478 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIView+WebCacheOperation.m" @@ -0,0 +1,55 @@ +/* + * This file is part of the SDWebImage package. + * (c) Olivier Poitrey + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#import "UIView+WebCacheOperation.h" +#import "objc/runtime.h" + +static char loadOperationKey; + +@implementation UIView (WebCacheOperation) + +- (NSMutableDictionary *)operationDictionary { + NSMutableDictionary *operations = objc_getAssociatedObject(self, &loadOperationKey); + if (operations) { + return operations; + } + operations = [NSMutableDictionary dictionary]; + objc_setAssociatedObject(self, &loadOperationKey, operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + return operations; +} + +- (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key { + [self sd_cancelImageLoadOperationWithKey:key]; + NSMutableDictionary *operationDictionary = [self operationDictionary]; + [operationDictionary setObject:operation forKey:key]; +} + +- (void)sd_cancelImageLoadOperationWithKey:(NSString *)key { + // Cancel in progress downloader from queue + NSMutableDictionary *operationDictionary = [self operationDictionary]; + id operations = [operationDictionary objectForKey:key]; + if (operations) { + if ([operations isKindOfClass:[NSArray class]]) { + for (id operation in operations) { + if (operation) { + [operation cancel]; + } + } + } else if ([operations conformsToProtocol:@protocol(SDWebImageOperation)]){ + [(id) operations cancel]; + } + [operationDictionary removeObjectForKey:key]; + } +} + +- (void)sd_removeImageLoadOperationWithKey:(NSString *)key { + NSMutableDictionary *operationDictionary = [self operationDictionary]; + [operationDictionary removeObjectForKey:key]; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.h" new file mode 100644 index 0000000..b5d296e --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.h" @@ -0,0 +1,15 @@ +// +// SDWeiXinPhotoContainerView.h +// SDAutoLayout 测试 Demo +// +// Created by gsd on 15/12/23. +// Copyright © 2015年 gsd. All rights reserved. +// + +#import + +@interface SDWeiXinPhotoContainerView : UIView + +@property (nonatomic, strong) NSArray *picPathStringsArray; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.m" new file mode 100644 index 0000000..491829a --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.m" @@ -0,0 +1,118 @@ +// +// SDWeiXinPhotoContainerView.m +// SDAutoLayout 测试 Demo +// +// Created by gsd on 15/12/23. +// Copyright © 2015年 gsd. All rights reserved. +// + +#import "SDWeiXinPhotoContainerView.h" + +#import "UIView+SDAutoLayout.h" + +#import "SDPhotoBrowser.h" + +@interface SDWeiXinPhotoContainerView () + +@end + +@implementation SDWeiXinPhotoContainerView + + +- (void)setPicPathStringsArray:(NSArray *)picPathStringsArray +{ + _picPathStringsArray = picPathStringsArray; + + [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + + if (_picPathStringsArray.count == 0) { + self.height = 0; + self.fixedHeight = @(0); + return; + } + + CGFloat itemW = [self itemWidthForPicPathArray:_picPathStringsArray]; + CGFloat itemH = 0; + if (_picPathStringsArray.count == 1) { + UIImage *image = [UIImage imageNamed:_picPathStringsArray.firstObject]; + if (image.size.width) { + itemH = image.size.height / image.size.width * itemW; + } + } else { + itemH = itemW; + } + long perRowItemCount = [self perRowItemCountForPicPathArray:_picPathStringsArray]; + CGFloat margin = 10; + + [_picPathStringsArray enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + long columnIndex = idx % perRowItemCount; + long rowIndex = idx / perRowItemCount; + UIImageView *imageView = [UIImageView new]; + imageView.image = [UIImage imageNamed:obj]; + imageView.frame = CGRectMake(columnIndex * (itemW + margin), rowIndex * (itemH + margin), itemW, itemH); + [self addSubview:imageView]; + + imageView.userInteractionEnabled = YES; + imageView.tag = idx; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; + [imageView addGestureRecognizer:tap]; + }]; + + CGFloat w = perRowItemCount * itemW + (perRowItemCount - 1) * margin; + int columnCount = ceilf(_picPathStringsArray.count * 1.0 / perRowItemCount); + CGFloat h = columnCount * itemH + (columnCount - 1) * margin; + self.width = w; + self.height = h; + + self.fixedHeight = @(h); + self.fixedWith = @(w); +} + +- (void)tapImageView:(UITapGestureRecognizer *)tap +{ + UIView *imageView = tap.view; + SDPhotoBrowser *browser = [[SDPhotoBrowser alloc] init]; + browser.currentImageIndex = imageView.tag; + browser.sourceImagesContainerView = self; + browser.imageCount = self.picPathStringsArray.count; + browser.delegate = self; + [browser show]; +} + +- (CGFloat)itemWidthForPicPathArray:(NSArray *)array +{ + if (array.count == 1) { + return 120; + } else { + return 80; + } +} + +- (NSInteger)perRowItemCountForPicPathArray:(NSArray *)array +{ + if (array.count < 3) { + return array.count; + } else if (array.count <= 4) { + return 2; + } else { + return 3; + } +} + + +#pragma mark - SDPhotoBrowserDelegate + +- (NSURL *)photoBrowser:(SDPhotoBrowser *)browser highQualityImageURLForIndex:(NSInteger)index +{ + NSString *imageName = self.picPathStringsArray[index]; + NSURL *url = [[NSBundle mainBundle] URLForResource:imageName withExtension:nil]; + return url; +} + +- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index +{ + UIImageView *imageView = self.subviews[index]; + return imageView.image; +} + +@end From 3ca3380185ef0d5a41aab2280c61c23460193a91 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 24 Dec 2015 10:45:30 +0800 Subject: [PATCH 008/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ba36090..63df546 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ # ☆新增:cell高度自适应 + label文字自适应☆ - +![](http://code.cocoachina.com/uploads/attachments/20151223/128785/f261001dd0b0acae7281e9acfff2da20.gif) ![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) ## >>>>> 升级版:tableview cell 自动高度设置只需要2步 From 8c48f49d820274a2155ecdc34d2ef1359edd85e6 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 24 Dec 2015 11:39:35 +0800 Subject: [PATCH 009/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=9C=8B=E5=8F=8B=E5=9C=88demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate" | Bin 37097 -> 39407 bytes .../Demo9Model.h" | 16 ++++++++++++++++ .../Demo9Model.m" | 16 ++++++++++++++++ .../DemoVC9.h" | 15 +++++++++++++++ .../DemoVC9.m" | 15 +++++++++++++++ .../DemoVC9Cell.h" | 15 +++++++++++++++ .../DemoVC9Cell.m" | 16 ++++++++++++++++ .../DemoVC9HeaderView.h" | 16 ++++++++++++++++ .../DemoVC9HeaderView.m" | 16 ++++++++++++++++ .../SDWeiXinPhotoContainerView.h" | 16 ++++++++++++++++ .../SDWeiXinPhotoContainerView.m" | 16 ++++++++++++++++ 11 files changed, 157 insertions(+) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" index 7b005f8475ed0a04bfba34c18d8477899504743d..ca03f03591e12839441215e51e839ba57f2805d5 100644 GIT binary patch delta 16303 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 delta 15257 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 G%l`+lfEptJ diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.h" index 92d3e62..7e12b1a 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.h" @@ -6,6 +6,22 @@ // Copyright © 2015年 gsd. All rights reserved. // + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * * + ********************************************************************************* + + */ + #import @interface Demo9Model : NSObject diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.m" index cf5c3da..4ed2ebb 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.m" @@ -6,6 +6,22 @@ // Copyright © 2015年 gsd. All rights reserved. // + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * * + ********************************************************************************* + + */ + #import "Demo9Model.h" @implementation Demo9Model diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.h" index f6cbd2b..b399098 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.h" @@ -6,6 +6,21 @@ // Copyright © 2015年 gsd. All rights reserved. // +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * * + ********************************************************************************* + + */ + #import @interface DemoVC9 : UITableViewController diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.m" index 52a9670..1656670 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.m" @@ -6,6 +6,21 @@ // Copyright © 2015年 gsd. All rights reserved. // +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * * + ********************************************************************************* + + */ + #import "DemoVC9.h" #import "Demo9Model.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.h" index acca1b3..03803ab 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.h" @@ -6,6 +6,21 @@ // Copyright © 2015年 gsd. All rights reserved. // +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * * + ********************************************************************************* + + */ + #import @class Demo9Model; diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.m" index 8404c7a..1bb230e 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.m" @@ -6,6 +6,22 @@ // Copyright © 2015年 gsd. All rights reserved. // + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * * + ********************************************************************************* + + */ + #import "DemoVC9Cell.h" #import "Demo9Model.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.h" index 3a8fcd7..9cf1962 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.h" @@ -6,6 +6,22 @@ // Copyright © 2015年 gsd. All rights reserved. // + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * * + ********************************************************************************* + + */ + #import @interface DemoVC9HeaderView : UIView diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.m" index 1eb0139..5aa96ab 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.m" @@ -6,6 +6,22 @@ // Copyright © 2015年 gsd. All rights reserved. // + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * * + ********************************************************************************* + + */ + #import "DemoVC9HeaderView.h" #import "UIView+SDAutoLayout.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.h" index b5d296e..36a8001 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.h" @@ -6,6 +6,22 @@ // Copyright © 2015年 gsd. All rights reserved. // + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * * + ********************************************************************************* + + */ + #import @interface SDWeiXinPhotoContainerView : UIView diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.m" index 491829a..4b2a7e5 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.m" @@ -6,6 +6,22 @@ // Copyright © 2015年 gsd. All rights reserved. // + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * * + ********************************************************************************* + + */ + #import "SDWeiXinPhotoContainerView.h" #import "UIView+SDAutoLayout.h" From d92bf92b7bff0b5ba9a42865fdb5cd3e45497eac Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 24 Dec 2015 11:41:34 +0800 Subject: [PATCH 010/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 63df546..3c22349 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ # ☆新增:cell高度自适应 + label文字自适应☆ -![](http://code.cocoachina.com/uploads/attachments/20151223/128785/f261001dd0b0acae7281e9acfff2da20.gif) +![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif) ![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) ## >>>>> 升级版:tableview cell 自动高度设置只需要2步 From 43985a905c731ec7763e99d18fda608e8fe99c60 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 24 Dec 2015 11:44:28 +0800 Subject: [PATCH 011/276] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3c22349..bbac6a8 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ # ☆新增:cell高度自适应 + label文字自适应☆ ![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif) + ![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) ## >>>>> 升级版:tableview cell 自动高度设置只需要2步 From 7d32d09290ad12b487fdff00041fb1f394626bf1 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 24 Dec 2015 11:55:23 +0800 Subject: [PATCH 012/276] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bbac6a8..7ced147 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ ![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) -## >>>>> 升级版:tableview cell 自动高度设置只需要2步 +## >>>>> 升级版:tableview 高度自适应设置只需要2步 1. >> 设置cell高度自适应: // cell布局设置好之后调用此方法就可以实现高度自适应(注意:如果用高度自适应则不要再以cell的底边为参照去布局其子view) @@ -25,7 +25,7 @@ } -## >>>>> 普通版:tableview cell 自动高度设置只需要3步 +## >>>>> 普通版:tableview 高度自适应设置只需要3步 1. >> 设置cell高度自适应: // cell布局设置好之后调用此方法就可以实现高度自适应(注意:如果用高度自适应则不要再以cell的底边为参照去布局其子view) From dd21fe530c0af0fc4fbcdc5f1baa5aeecbcddb37 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 24 Dec 2015 11:56:23 +0800 Subject: [PATCH 013/276] Update README.md --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 7ced147..fede507 100644 --- a/README.md +++ b/README.md @@ -113,9 +113,6 @@ # PS -/* 如果您需要布局错误LOG信息提示请打开此宏 */ - -//#define SDAutoLayoutIssueLog ![](http://ww3.sinaimg.cn/bmiddle/9b8146edgw1ex4mukixr6g209g07lhdt.gif) From 61d37147c2aa60f1419b96700b3666bd172a263d Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sat, 26 Dec 2015 15:32:55 +0800 Subject: [PATCH 014/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fede507..9029368 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# SDAutoLayout +# SDAutoLayout(新建QQ交流群:497140713) ☆☆ SDAutoLayout 视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ From 437033bb7fda0d5ecb6d907ff8fc40ee438553fb Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 3 Jan 2016 14:48:57 +0800 Subject: [PATCH 015/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=BB=E4=BD=95?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=AF=B9=E8=B1=A1=E9=83=BD=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=B8=80=E8=A1=8C=E4=BB=A3=E7=A0=81=E6=90=9E?= =?UTF-8?q?=E5=AE=9Acell=E9=AB=98=E5=BA=A6=E8=87=AA=E9=80=82=E5=BA=94?= =?UTF-8?q?=EF=BC=9B=E5=A2=9E=E5=8A=A0=E6=96=87=E6=A1=A3=E6=B3=A8=E9=87=8A?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UITableView+SDAutoTableViewCellHeight.h" | 20 ++++-- .../UITableView+SDAutoTableViewCellHeight.m" | 23 ++++++- .../SDAutoLayout/UIView+SDAutoLayout.h" | 61 +++++++++++++------ 3 files changed, 78 insertions(+), 26 deletions(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" index c6d4eee..1d16263 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" @@ -52,18 +52,21 @@ // >>>>>>>>>>>>>> 单个cell情景下调用以下方法(详细用法见demo5) >>>>>>>>>>>>>> +/** 开启高度自适应,建议在tableview的数据源方法“- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section”中调用此方法,详细用法见demo5 */ +- (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth; -- (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth; // 开启高度自适应,建议在tableview的数据源方法“- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section”中调用此方法,详细用法见demo5 - -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath; // 返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key) +/** 返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key)*/ +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath; // >>>>>>>>>>>>>> 多cell情景下调用以下方法(详细用法见demo7) >>>>>>>>>>>>>>>>> -- (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth; // cellClassArray 为所有cell的类组成的数组,详细用法见demo7 +/** cellClassArray 为所有cell的类组成的数组,详细用法见demo7 */ +- (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth; -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass; // 返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key) +/** 返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key) */ +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass; @end @@ -75,14 +78,21 @@ @interface UITableViewController (SDTableViewControllerAutoCellHeight) +/** (UITableViewController方法)升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell */ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width; @end +/* 升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell */ +@interface NSObject (SDAnyObjectAutoCellHeight) +/** (NSObject方法)升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell */ +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width tableView:(UITableView *)tableView; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" index 1580bcf..94f9cd2 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" @@ -228,7 +228,7 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth: self.tableView.cellAutoHeightManager.contentViewWidth = width; [self.tableView.cellAutoHeightManager clearHeightCache]; } - UITableViewCell *cell = [self tableView:self.tableView cellForRowAtIndexPath:indexPath]; + UITableViewCell *cell = [self.tableView.dataSource tableView:self.tableView cellForRowAtIndexPath:indexPath]; self.tableView.cellAutoHeightManager.modelCell = cell; if (cell.contentView.width != width) { cell.contentView.width = width; @@ -238,3 +238,24 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth: @end +@implementation NSObject (SDAnyObjectAutoCellHeight) + +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width tableView:(UITableView *)tableView +{ + if (!tableView.cellAutoHeightManager) { + tableView.cellAutoHeightManager = [[SDCellAutoHeightManager alloc] init]; + } + if (tableView.cellAutoHeightManager.contentViewWidth != width) { + tableView.cellAutoHeightManager.contentViewWidth = width; + [tableView.cellAutoHeightManager clearHeightCache]; + } + UITableViewCell *cell = [tableView.dataSource tableView:tableView cellForRowAtIndexPath:indexPath]; + tableView.cellAutoHeightManager.modelCell = cell; + if (cell.contentView.width != width) { + cell.contentView.width = width; + } + return [[tableView cellAutoHeightManager] cellHeightForIndexPath:indexPath model:nil keyPath:nil]; +} + +@end + diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" index 97b1549..5c85edd 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" @@ -72,33 +72,44 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); ***************************************************** */ -/* - * 设置距离其它view的间距 - */ +/* 设置距离其它view的间距 */ +/** 左边与其参照view之间的间距,参数为“(参照view,间距数值)” */ @property (nonatomic, copy, readonly) MarginToView leftSpaceToView; +/** 右边与其参照view之间的间距,参数为“(参照view,间距数值)” */ @property (nonatomic, copy, readonly) MarginToView rightSpaceToView; +/** 顶部与其参照view之间的间距,参数为“(参照view,间距数值)” */ @property (nonatomic, copy, readonly) MarginToView topSpaceToView; +/** 底部与其参照view之间的间距,参数为“(参照view,间距数值)” */ @property (nonatomic, copy, readonly) MarginToView bottomSpaceToView; -/* - * 设置x、y、width、height、centerX、centerY 值 - */ + +/* 设置x、y、width、height、centerX、centerY 值 */ + +/** x值 */ @property (nonatomic, copy, readonly) Margin xIs; +/** y值 */ @property (nonatomic, copy, readonly) Margin yIs; +/** centerX值 */ @property (nonatomic, copy, readonly) Margin centerXIs; +/** centerY值 */ @property (nonatomic, copy, readonly) Margin centerYIs; +/** 宽度值 */ @property (nonatomic, copy, readonly) WidthHeight widthIs; +/** 高度值 */ @property (nonatomic, copy, readonly) WidthHeight heightIs; -/* - * 设置最大宽度和高度、最小宽度和高度 - */ +/* 设置最大宽度和高度、最小宽度和高度 */ + +/** 最大宽度值 */ @property (nonatomic, copy, readonly) WidthHeight maxWidthIs; +/** 最大高度值 */ @property (nonatomic, copy, readonly) WidthHeight maxHeightIs; +/** 最小宽度值 */ @property (nonatomic, copy, readonly) WidthHeight minWidthIs; +/** 最小高度值 */ @property (nonatomic, copy, readonly) WidthHeight minHeightIs; @@ -106,26 +117,32 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); * 设置和哪一个参照view的边距相同 */ +/** 左间距与参照view相同 */ @property (nonatomic, copy, readonly) MarginEqualToView leftEqualToView; +/** 右间距与参照view相同 */ @property (nonatomic, copy, readonly) MarginEqualToView rightEqualToView; +/** 顶部间距与参照view相同 */ @property (nonatomic, copy, readonly) MarginEqualToView topEqualToView; +/** 底部间距与参照view相同 */ @property (nonatomic, copy, readonly) MarginEqualToView bottomEqualToView; +/** centerX与参照view相同 */ @property (nonatomic, copy, readonly) MarginEqualToView centerXEqualToView; +/** centerY与参照view相同 */ @property (nonatomic, copy, readonly) MarginEqualToView centerYEqualToView; -/* - * 设置宽度或者高度等于参照view的多少倍 - */ +/* 设置宽度或者高度等于参照view的多少倍 */ + +/** 宽度是参照view宽度的多少倍 */ @property (nonatomic, copy, readonly) WidthHeightEqualToView widthRatioToView; +/** 高度是参照view宽度的多少倍 */ @property (nonatomic, copy, readonly) WidthHeightEqualToView heightRatioToView; - +/** 自适应高度,传入高宽比值,label可以传0实现文字高度自适应 */ @property (nonatomic, copy, readonly) AutoHeight autoHeightRatio; -/* - * 填充父view(快捷方法) - */ +/* 填充父view(快捷方法) */ +/** 传入UIEdgeInsetsMake(top, left, bottom, right),可以快捷设置view到其父view上左下右的间距 */ @property (nonatomic, copy, readonly) SpaceToSuperView spaceToSuperView; @property (nonatomic, weak) UIView *needsAutoResizeView; @@ -142,7 +159,7 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @property (nonatomic) UIView *sd_bottomView; @property (nonatomic) CGFloat sd_bottomViewBottomMargin; -// 设置普通view内容自适应 +/** 设置普通view内容自适应 */ - (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin; @end @@ -150,11 +167,15 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @interface UIView (SDLayoutExtention) /* 设置圆角 */ + +/** 设置圆角半径值 */ @property (nonatomic, strong) NSNumber *sd_cornerRadius; +/** 设置圆角半径值为view宽度的多少倍 */ @property (nonatomic, strong) NSNumber *sd_cornerRadiusFromWidthRatio; +/** 设置圆角半径值为view高度的多少倍 */ @property (nonatomic, strong) NSNumber *sd_cornerRadiusFromHeightRatio; -// 设置等宽子view +/** 设置等宽子view(子view需要在同一水平方向) */ @property (nonatomic, strong) NSArray *sd_equalWidthSubviews; @end @@ -162,7 +183,7 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @interface UIScrollView (SDAutoContentSize) -// 设置scrollview内容自适应 +/** 设置scrollview内容自适应 */ - (void)setupAutoContentSizeWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin; @end @@ -170,7 +191,7 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @interface UILabel (SDLabelAutoResize) -// 设置单行文本label宽度自适应 +/** 设置单行文本label宽度自适应 */ - (void)setSingleLineAutoResizeWithMaxWidth:(CGFloat)maxWidth; @end From 568610b7356e5dacb2fb7b44983e043e0fb379dc Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 3 Jan 2016 16:22:59 +0800 Subject: [PATCH 016/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=BB=E4=BD=95?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=AF=B9=E8=B1=A1=E9=83=BD=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=B8=80=E8=A1=8C=E4=BB=A3=E7=A0=81=E6=90=9E?= =?UTF-8?q?=E5=AE=9Acell=E9=AB=98=E5=BA=A6=E8=87=AA=E9=80=82=E5=BA=94?= =?UTF-8?q?=EF=BC=9B=E5=A2=9E=E5=8A=A0=E6=96=87=E6=A1=A3=E6=B3=A8=E9=87=8A?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SDAutoLayout/UIView+SDAutoLayout.h" | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" index 5c85edd..e28501d 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" @@ -74,13 +74,13 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); /* 设置距离其它view的间距 */ -/** 左边与其参照view之间的间距,参数为“(参照view,间距数值)” */ +/** 左边到其参照view之间的间距,参数为“(参照view,间距数值)” */ @property (nonatomic, copy, readonly) MarginToView leftSpaceToView; -/** 右边与其参照view之间的间距,参数为“(参照view,间距数值)” */ +/** 右边到其参照view之间的间距,参数为“(参照view,间距数值)” */ @property (nonatomic, copy, readonly) MarginToView rightSpaceToView; -/** 顶部与其参照view之间的间距,参数为“(参照view,间距数值)” */ +/** 顶部到其参照view之间的间距,参数为“(参照view,间距数值)” */ @property (nonatomic, copy, readonly) MarginToView topSpaceToView; -/** 底部与其参照view之间的间距,参数为“(参照view,间距数值)” */ +/** 底部到其参照view之间的间距,参数为“(参照view,间距数值)” */ @property (nonatomic, copy, readonly) MarginToView bottomSpaceToView; @@ -159,7 +159,7 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @property (nonatomic) UIView *sd_bottomView; @property (nonatomic) CGFloat sd_bottomViewBottomMargin; -/** 设置普通view内容自适应 */ +/** 设置Cell的高度自适应,也可用于设置普通view内容自适应 */ - (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin; @end @@ -243,6 +243,7 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); - (NSMutableArray *)autoLayoutModelsArray; +/** 开始自动布局 */ - (SDAutoLayoutModel *)sd_layout; - (void)addAutoLayoutModel:(SDAutoLayoutModel *)model; From a4598718463ce43085039d3d50feb56186b6c827 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 4 Jan 2016 00:00:49 +0800 Subject: [PATCH 017/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A01.=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=B8=83=E5=B1=80=E5=8A=A8=E7=94=BB=EF=BC=9B2.=E4=BB=BB?= =?UTF-8?q?=E4=BD=95=E7=B1=BB=E5=9E=8B=E5=AF=B9=E8=B1=A1=E9=83=BD=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E5=AE=9E=E7=8E=B0=E4=B8=80=E8=A1=8C=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=90=9E=E5=AE=9Acell=E9=AB=98=E5=BA=A6=E8=87=AA=E9=80=82?= =?UTF-8?q?=E5=BA=94=EF=BC=9B3.=E5=A2=9E=E5=8A=A0=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DemoVC0.m" | 99 +++++++++---------- 1 file changed, 48 insertions(+), 51 deletions(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC0.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC0.m" index ea15c56..f9f5806 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC0.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC0.m" @@ -23,41 +23,41 @@ #import "DemoVC0.h" +#define kTimeInterval 0.8 + @implementation DemoVC0 +{ + NSTimer *_timer; + CGFloat _widthRatio; +} - (void)viewDidLoad { [super viewDidLoad]; - self.edgesForExtendedLayout = UIRectEdgeNone; + _widthRatio = 0.4; - self.view0.sd_layout - .leftSpaceToView(self.view, 10) - .topSpaceToView(self.view,80) - .heightIs(130) - .widthRatioToView(self.view, 0.4); + _timer = [NSTimer scheduledTimerWithTimeInterval:kTimeInterval target:self selector:@selector(animation) userInfo:nil repeats:YES]; - self.view1.sd_layout - .leftSpaceToView(self.view0, 10) - .topEqualToView(self.view0) - .heightIs(60); + self.edgesForExtendedLayout = UIRectEdgeNone; self.view0.sd_layout - .leftSpaceToView(self.view, 10) + .leftSpaceToView(self.view, 20) .topSpaceToView(self.view,80) .heightIs(130) - .widthRatioToView(self.view, 0.4); + .widthRatioToView(self.view, _widthRatio); self.view1.sd_layout .leftSpaceToView(self.view0, 10) .topEqualToView(self.view0) - .heightIs(60); + .heightIs(60) + .widthRatioToView(self.view0, 0.5); self.view2.sd_layout .leftSpaceToView(self.view1, 10) .topEqualToView(self.view1) .heightRatioToView(self.view1, 1) - .widthRatioToView(self.view1, 1); + .widthIs(50); self.view3.sd_layout .leftEqualToView(self.view1) @@ -69,54 +69,51 @@ - (void)viewDidLoad .leftEqualToView(self.view2) .topEqualToView(self.view3) .heightRatioToView(self.view3, 1) - .widthRatioToView(self.view1, 1); + .widthRatioToView(self.view2, 1); + [self.view0 addSubview:self.view5]; self.view5.sd_layout - .topSpaceToView(self.view0, 20) - .leftEqualToView(self.view0) - .bottomSpaceToView(self.view, 30); - - self.view6.sd_layout - .leftSpaceToView(self.view5, 10) - .topEqualToView(self.view5) - .heightRatioToView(self.view5, 1) - .widthRatioToView(self.view5, 1); + .centerYEqualToView(self.view0) + .rightSpaceToView(self.view0, 10) + .widthRatioToView(self.view0, 0.5) + .heightIs(20); + +// self.view6.sd_layout +// .centerXEqualToView(self.view) +// .topSpaceToView(self.view0, 50) +// .heightRatioToView(self.view, 1) +// .widthRatioToView(self.view5, 1); + } -/* - Q:这里为什么要在 viewWillLayoutSubviews 里计算宽度? - - A:大多情况下的布局需求是不需要在 viewWillLayoutSubviews 里计算宽度,只需要直接一次设置 - 就可以了(例如其他的demo案例)。 - - 1.为什么这个界面要计算view5的宽度? - - 因为这个界面的布局要求(以view5 和 view6 为例)是:view5 距离屏幕 - 左边10,view6 距离 view5 10, view6 距离屏幕右边10 ,view5 和 view6 宽度相同,这样一来就需要 - 确定 view5 的宽度供 view6 参考,所以要计算下 view5 的宽度。 - - 2.在以上的情形中计算view5宽度理解了,那为什么是要在 viewWillLayoutSubviews 里计算宽度? - - 如果app需要【同时适配横竖屏】,则在横竖屏幕切换时屏幕的宽高对调,那么就需要再计算一次view5的宽度,而切换屏幕时 在viewWillLayoutSubviews 拿到的self.view的宽度才是正确的(因为viewdidload只是在view初始化完成并加 - 载出来时调用一次,以后切换屏幕不再调用),如果app不需要同时适配 - 横竖屏则不需要此步骤。 - - - */ -- (void)viewWillLayoutSubviews +- (void)animation { - [super viewWillLayoutSubviews]; + if (_widthRatio == 0.4) { + _widthRatio = 0.1; + } else { + _widthRatio = 0.4; + } + [UIView animateWithDuration:0.8 animations:^{ + self.view0.sd_layout + .widthRatioToView(self.view, _widthRatio); + [self.view layoutSubviews]; + [self.view0 layoutSubviews]; + }]; - CGFloat view1W = (self.view.width * 0.6 - 10 * 4) / 2; - self.view1.sd_layout.widthIs(view1W); - CGFloat view5W = (self.view.width - 30) / 2; - self.view5.sd_layout.widthIs(view5W); -} + /* + + SDAutoLayout(新建QQ交流群:497140713) + github:https://github.com/gsdios/SDAutoLayout + ☆☆ SDAutoLayout 视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ + 一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. + + */ +} @end From 8d7546a218396d57d8c5ad55b3558d6e5671e486 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 4 Jan 2016 14:31:51 +0800 Subject: [PATCH 018/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A01.=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=B8=83=E5=B1=80=E5=8A=A8=E7=94=BB=EF=BC=9B2.=E4=BB=BB?= =?UTF-8?q?=E4=BD=95=E7=B1=BB=E5=9E=8B=E5=AF=B9=E8=B1=A1=E9=83=BD=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E5=AE=9E=E7=8E=B0=E4=B8=80=E8=A1=8C=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=90=9E=E5=AE=9Acell=E9=AB=98=E5=BA=A6=E8=87=AA=E9=80=82?= =?UTF-8?q?=E5=BA=94=EF=BC=9B3.=E5=A2=9E=E5=8A=A0=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E6=B3=A8=E9=87=8A;4.=E5=A2=9E=E5=8A=A0=E9=87=8D=E7=BD=AE?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=B8=83=E5=B1=80=E6=96=B9=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate" | Bin 39407 -> 39671 bytes .../SDAutoLayout/UIView+SDAutoLayout.h" | 3 +++ .../SDAutoLayout/UIView+SDAutoLayout.m" | 9 +++++++++ 3 files changed, 12 insertions(+) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" index ca03f03591e12839441215e51e839ba57f2805d5..7509e25860a8ea69c39077f1677316a43b8a4490 100644 GIT binary patch delta 17516 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 E0|HHBLjV8( delta 17321 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 NXW0An;pfQ6{{t(p2LS*8 diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" index e28501d..76613b1 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" @@ -246,6 +246,9 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); /** 开始自动布局 */ - (SDAutoLayoutModel *)sd_layout; +/** 清空之前的自动布局设置,重新开始自动布局 */ +- (SDAutoLayoutModel *)sd_resetLayout; + - (void)addAutoLayoutModel:(SDAutoLayoutModel *)model; @property (nonatomic, strong) NSNumber *fixedWith; diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" index 7f397b3..af38fc8 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" @@ -570,6 +570,15 @@ - (SDAutoLayoutModel *)sd_layout return model; } +- (SDAutoLayoutModel *)sd_resetLayout +{ + SDAutoLayoutModel *model = [self ownLayoutModel]; + if (model) { + [self.superview.autoLayoutModelsArray removeObject:model]; + } + return [self sd_layout]; +} + - (void)sd_autolayout { [self sd_autolayout]; From 78f4b9bb10fea580ad53b5f194f8b0388d1a5f36 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 4 Jan 2016 17:10:41 +0800 Subject: [PATCH 019/276] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=9C=8B=E5=8F=8B=E5=9C=88=20demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate" | Bin 39671 -> 38535 bytes .../SDWeiXinPhotoContainerView.m" | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" index 7509e25860a8ea69c39077f1677316a43b8a4490..6f2eda2682fbd23480910548d30ab5d496a19efc 100644 GIT binary patch delta 9466 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 S1PJQ84j_ZRn=fa3(f0) delta 10247 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 320 ? 80 : 70; + return w; } } From 522e3e2913d63ffa0b26dac43092cc0d25b2e47f Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 4 Jan 2016 20:00:19 +0800 Subject: [PATCH 020/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A01.=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=B8=83=E5=B1=80=E5=8A=A8=E7=94=BB=EF=BC=9B2.=E4=BB=BB?= =?UTF-8?q?=E4=BD=95=E7=B1=BB=E5=9E=8B=E5=AF=B9=E8=B1=A1=E9=83=BD=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E5=AE=9E=E7=8E=B0=E4=B8=80=E8=A1=8C=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=90=9E=E5=AE=9Acell=E9=AB=98=E5=BA=A6=E8=87=AA=E9=80=82?= =?UTF-8?q?=E5=BA=94=EF=BC=9B3.=E5=A2=9E=E5=8A=A0=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E6=B3=A8=E9=87=8A;4.=E5=A2=9E=E5=8A=A0=E9=87=8D=E7=BD=AE?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=B8=83=E5=B1=80=E6=96=B9=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate" | Bin 38535 -> 38345 bytes .../SDAutoLayout/UIView+SDAutoLayout.m" | 1 + 2 files changed, 1 insertion(+) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" index 6f2eda2682fbd23480910548d30ab5d496a19efc..91e5fba4109804fe5ce5852ddd6ccb586abf3cf9 100644 GIT binary patch delta 9139 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 delta 9274 zcmb`McU)8F7x2T4n)}=khOz_%WQa^zAt51T5ke*qhGiKDNeCkegpq`h++4LbKplQDS z$o^gt6>eSg=^s!xD{@L+hH?ofjeP4jKN>RQ{bua zO!zB!4!j8Nfmgt5;I;5Zcq_aO-VX1A_rX8G`{6_IFYsab2z&#+3EzT$hi}7o;6LEI z@IClG{3rYfehR;U|AOBF2*AJ#c!R+p5CuUX0z`r+kN^_F2#^GFfe46!1W17l$Uz>+ z2L(U@%77Zwg9gw7%)kOVffI}cUw{eVOE3k@0JFhdumCIq%fNE58ms}^z;^H>*a7x{ zU%_c`2Al=wz1Tm+ZE9q8`6$+AT|U=oXA+@b7TTC z5t)QcMO?^CWFgXpbR&z99%MDL23d=&L)IgkkROpf$RXqxk+gIq!`BiE4I z$Q|TQ&Jd5L@=6Uc7sjtwYC^~#;N;o#768#SRoIf#l9O;Tjh=2Vvn5k;?MA-Z%|GYlnFp=qw&WB#uFRmO z*-LH7Ny*f8$%0Vd{`$XubIW%Xm!*)X1O_3AKzB_ko9cR$in>NtQd~cjBW|C&9;a$t z&XzD&eI(hHT(QKJ5?JpF80N9Arm_)o%UyR|NpW*aS$Cz%=;jveQjQ98sZ`H^1A`V} zP>(azg*8UFM%T=7>s%MCHba5|7-Z~%Gcd^N3_V2v1cX3_GvO>kd>0&qK`mV{8-qIj zqvFBYy(&Hi*}6!tF{r^As`UCe4XXdtT?9)A1G`A~F{ri+mST|Ines`M2j>&w7cTtI zc!h8oA$~Dj1Q)|4@JP~GxD402)+hC!n-s2YRDEGERl6@*Cqs)VbY`!HxM=60v| z-i1Nkz4H$dWeW;j`L&ahbg-Tf-vigd^>72+h(VuY&^Qblk3nDbzy{bz2#1?7XaWXJ zbb4aYm$)}Fb+G|TFJF9sY>ld|R$ytWHmEgfQL9GZ;`*RVcLnRhhK@?I(6s6dHI1H@ zQA0~Q`O!&M*wzJiV9+ECn(UfZmQYej7zI0Ev_f7eYiq4mHEIeqt&4DplTckOFT`Iy zIbk$Bo-nWnH*qX(ByJx5nex%dsXg!)gmBzQe9UQ1&t4m6xK8WhUDUeJz`j|h!M1L= z1D^45-s$+%Mz6uHsfyvQ<8@wPvk2W?@N5inInz(W-@tS6P<{)~BYXxgfEU7DaQBS* zV&p3fT8Ke2F=&BHSI&Mb z8|zxFB7JqOrdT1(F`7R1W>lUe^tx*uyxx`25K8QZH@M;&A|!n?Zh|+%t1;*s44R8i z@L7@0q^VYiC42SzWKu`3NxdHUXu&7x?mp@KKB;R?gNk?nKInSikU;#IP>tW?e3f24 zHd|7BSdu+H%$AadFJ)SCvdi8$BIhW4ju5{LJ_a9$PrxVPQ}D0wY4{9$7K6USpv4%p z1cR1h5bmPo7_vI!#z8bTf6GyH2H3|04AOkP})8*F`mcRm8IQ)@>NWcSpkPQTc zSPVLXLBHYa01q_&A@;+FF&HrmBeGpJO(#7IK@lh>kUNGb!9h8!!9{-haJVB zt7kwtsKAw#U=&c|4N8ED6b@=!tD6g=E@99W3_A9&MFKQH3oisZLL>&A$DkAVDsc@n zWuc9Pz25;nFaRTH0(kB?i9x?&&}j@hgF$Eivq<=$t(Qm}2A#r@^&)*@GN_Nqmj5Po zKp)`7KEVHOJ78~L+u{Fi>qQ2i_leK-iCqhe69ye1kO}+2L@m|>p?1p z=s&J1FcnO5VV-{dyTNpvd;E#>U%mh?+#9L^TEb@ov>0@`*I!qhgg(H&ChYA3_@GCf zyuPu%1@n|%(XIv6gI&8?5qG&!t?35y3Dy4+x*A)N0SiHw(ktRqJGdKk_qO>Y80g&t z7UM_*9O-La0AEbkU0s&s9Iyhc>J{V5=|&g$9)oT=LyKh9b%sw&uLTwhE`nEB!7yLqqUjp`lpTK@_02~BA zgF_f}7lZC$(0vU06N4UL&_fJ*v;-UmN5D~V4CaFq01xqF40?h=FEHpsZ%l~`$xh#o{w=L6?M=OgFi9&iKPB*X&Twx<~MtaoR6?o5f`ZfD^2!J!%d zst@qJK9!zI>rFuaX74`u^AmgTG3e#T41FArcVA4N^dk5aJOj^B@B-l4R~Ymc2EE3h zHyHHx|Ha_{F9OL3(g)x>%&lKXNn=tN&Apo^-`Hko#nXL$T}^&< ztBz|jRa+TKuVJp`V3QMkU)$`bQvt+-XTaBP6ZN*5&L%` zLown29F`PL6cYUpE68w+NcyLWK;n=QI3`Ful7J*)L>MCijEEO}NrXrw1tXGsmku!+ z$E2nTq4&;|ff3#R;RMM<@S0``!a}kTHo`%;2oK?7L<&aqz=)n0(F-GbW5j_NaS+Z4 zl7k45Ttr03LL|MM5PdLW07i_$h(S(Yj5rL(WE%Nz0Fh#(%+=iCJFpz7AjBf0Fe2W< z566S(@A|qU3jJq?M%0MrZvco97!h~NLJax`0Hhw@qmc%r5z!+CjEH+_2u8$xGxVR( zBO=6vrypVvMhyPACHoeOO6oM`xWa61TdPr8Z8f&FChEP2e?x(odqWzJ5kvZtO2xn1 zeQMMBG3>;!fAUVeZ(l`#V11hKe>4exA9+B=eauKiJcZ&JN$K^UQq|ZQ;Xm$Uz=@H4 z0iV_zhUpk_xNBKw_=vBNZ}74WnT5@dfmy1`wm&&+h;Md1X+qK!-yj=ViHD7#)v6BgjhWAs|ew^t9v7#>eAS;vJHg2 z3;z@I&B#_9roJr}*@h9Re{ZqK4nlV~vJ=^b5z{eZ#y`6&vKQI^-&-Ye06B;eX&902 z;y8kXjv&YXM}Go2i4hqXk?Ar!hLF!9=X;qxhY?w>1&+w@E6COVs)Uj2$j#mcH!vcn z3%P|6xvoxC5Q_ZKYtLQe9!BJ0M8SXTd4N3rpZT63Pcb46ZniU}6t8Cm>bh2=DS|WR z3qtSDCnjGZZ~mv>TjU)^%)y94XNuCx^HU{Ut1)p+8W)OsLS)D_4IR>tOd`XsHK;#& zdceg2cLqEf@P-7DNF+cale|a+Nxme1QX;9Cq#~I~R+5cmC!r*aG=}s!X*_8HX%cB6 zshiY8T0&Y*T18q-T1VPQ+DzI?+D6C9M3n(ioYbfg|8z@^T+bKIJyC}OUhbX5g*C~Hc9(xS%@bnny;p5@w5zX^R_F#Gl zJwzT751B`v$4-xf9;ZDncwF+h;&H>{md9<6KRh0Jy!3SUqU}(EdRO2OS!8*r&i}luwn9%17-R z;hW@};+y81?z`M~lkXPaZN5MHvHZk-Qa`z0zTY{&TYk6w{_wl!-{5cY@9^*RcLW3k zL69*>^P8r-a`1`@D2d^ExJ}@FMDKI54EigUs zyTG-9>jO6iZVpNg$_nBH@q)60HU#Yn+84Ax=wL7{I6F8eI5$`vyd`*l@WJ3i!H0*8 z9HJhg9ikgjKjd`?DFlR&LntA;Lym?V4>=j~YbZZ7KU5J~6j~B`AoSPJGoj}~FNC3m zVO3$OFm;$V?0neoVRyprhTR`(9Xf947eglwogD5F9uz(#JT!c0__pwa;fKNxhaZi| zjwpyIj3|y68F4z|dc@6$-y`lsHbvSa(MT+EOytX`eo+IW;3y<&LDb5q@1s^ntsORW zSmLmxVJXAXhCLkicG&x9LNpZJ9PNm9Mvq3L$3{OLP8bdi?>BtFaO?1K!@n3larorn zZ(`sWB*s0)BgP&xF=leil$dETA7b5OJz~9L2gV+ay%>8r_G;|4I9Xg-Tt(cdxT?56 z;$FnPihCXRHhx$9k@#crC*n^f@DlP83K9wviW3edoK85Ka6aK;qBwD6VrgP|VrAm> z#D|IK>Q*(Kf=Il$?~6#7W{MWhbpm+Lg2?X zRG8{b9Ypn|`cnr}!>N(fVbtN&SZX{~NHtJ9QECr$6?GGJGj%uhDD^D$JoO^=GW9C; z4)reeKJ@|h5%ozrB|R;jmtLRVl8&W+nf^`sqV(_5m!vOCUy;5(ePjCO^sVXJ(|4qw zrx9o#v~(JqCZ-k8M$u|%b+iVWo@S(3XdSdpnuF$~jiyba&7v)$t)zWVTTNR_TTerO zr0t~brtPKuL_0vcP6u>E zjP8t{jKvvCGnQxklyN`fH6xr6hcajkE$R}HRCPgJ(Iu$Ofr+g^kfcX z`Y?wuqnSxe7Bh#L%M>%EOgVETvy55ER5DdeHB-;DGRH8dG0{29xy*UY1DlJ%PPHp@RND@&Tynq|)# zpEV|k~jJCRLeXR~GOJaz%QkX_6k#ja+n*;;lT8*N~>vQhRI?627K*$dg->>l=F z_7Ci}><#Qq?5*tW?4Q^t*caJ%*pJ!I*e}_y+3z?5IDq5M@!)uK262Kp!#GJC7AJ?3 z%Mo*=964tsr;Jm{QF2rqHAl}eb4GKfa=zw#!}*popRKaw~e=hw~M!jw~u#(cY$}C_lWm| z_l);~_lobv@5d+c0iVpL@csDV{1JRQpUKbSbNShP89$$2$S>xP<{5GV*1L3RD7(Kqsgd=mkcBMKD@0SujV?E$9&} z7AzGk7oh6|8wFbg+XOoVy97TA&Io=J{3&=L_)G9s@F54vA?JAHc;^ht@yiLwNzEzC z(dA6bnUm9#^L@^?oP9Y5at`Gj$vK{LKIc--)tqZNH*h=+@* z;w&*o%oAsebHsUKg}7KeQd}mk5NpIHai@5Kc!qeUc$WBU@i*c{;>F@+;uYfW#jC|z z#Cyeu#plJ>#ka(F#P`Gx#4l0tYw(ZE=Vp*ev|wm zxi5Jrc`SJ*c_H~ArAPy$QPMdDEE>3$php=<&pAed5k<> zo+ziuxpJ|5q`XS5lB?xfxlZ0JZQD@^0qc&bym;KOfHb&iBdp&mWv0o6pbB$rt5I z^Yile<{!>KntwL`MgF^j;DVF_b^)(IP>@?7DUcPE6qFWJ6pSh`7MKd!3M>V-g2x4~ z6(j|sa94OL1}c0MLlv=#ctxTjNs*#pDzX$@1z(Y)$W;_5Mk(qP?FuWZ=v1JJ(TcH( z8HyhjhZGkTR}|M2Hx;)PcNKps9x0v{_A4Y6fSVf#7eo;=5tSG;zu&AWyv!Y2wi;H#^9V|Lkbf)Nh z(WRoRMc0dN7CkO{RrIC^eP8TW3>TA&J&L`H2Nh=)*B8$!UQoQa_(buQ;#C0Qk$5>bh?#9T7AWKzkLlIbNg zOXil$FX<}jDOp_dL&?UHoh1iK<4Z@B(o1tnWu-->)uo2g=F-+uGg{hFYADmzkktn5VD zg|dfbPs*N`y()WC_O9$hIaJ=i94;r9Q_2I&gUdt8hn6oYUtPYoe0}+*3U-CGLSB(y zQCM-Y;!efgiu)B0D@RpUHdN{>jg_X#dzG&$Ust}Z{4fd|HD%PaQ8Pw;r6ehRlzz$p zWsveqPYo4b&NVrouJNE7vldRnxNjSKC8Z|zOBBi z{!{%({Y2AGRbaheI5$(pH}8JfA8 z`5LrK)1z6US*F>p`B`&Zb6Im;b4zna^QY#K=Behn=B*ZJJ+$6hAMIdmur^dXR2!q^ zXl2@bZK1YATdFPB>a-17gSJ`Qs%_Vf(T>wj&`#D))lS#W*LG=pv`e(hwJWt-wA-~i zwR^NbX%A?B)t=Q}&|cR5roCS4R_lS*de{2Y`qu{52G_>a#@5EwCe$)&g|*^ZS#5r8 zVQoomX|1+aSKCl)sBNlksco;d)P7yNw)SxCZ5^cZ)CK5*bRoK-x=3AuE=iZFqw457 zhEA>P)UDQ?)Lqlv)%~e^q!R4*2(Ke)|J&&)>YNj)HT+j#=7RZmb&&j zOWne{-F1iRj@6y4J6(6Ko>K2uKe#@)KBPXiKBvC8UROW1eq8;8`pNZE>u1#OuRm6Q zuKr^EmHKP-H|u||e_H>(pN9cw=}7nnw!QoO=z0jG_`3)(^pMjH_dID-_+IA)3l{&d(+OQ-A((N4m2HV zI?{B!=~UBcwCQZq^`)jwzO?U+p4y;Z9CicxBc99xb0ZmnYQz7m)fqjU2CVbN42xsbJ|7i(sp@!d3$}k zzP$-;Z)tCDx3+h-qwQ1Lr?<~+pWXgV`@Hsr?TgyKYhT;Gqy2pQpJrf=Hm92N%oS#h zxz=1~ZZPZ3?PjaF)9f%~<}v2U=C94&=1u0U<{!*5^G7YpbQJk!m;oz`IbUUiKWys)-v5P(=yvK$FkjW z%ksqX%<{tWmld-1x58G$8g3n7O|ep~bSu-!vTCd*Yn#<#wOJijr}azgOzUjxH`aO9 z9_te8a_cJV57vv;ryb-DpAP?yz>eUKm=1aevm>j6+mYQN>=1XzIx5f(WrwOm)1m8V z=+JjGb(lKPj!7MhJGOS5>3C)%*eEtXTYxRl7HkW#McZO+3APco6kD2&WfR+qZS^+2 zt;yD6Yqwc#qivIHQ*6_1Gi|eNb8L%k%WNxcKiCe~ezu*lowr@GUA5h}{bhS=`_Kt> zCUi17S)H6tekW?^v~@Zc89{f+&-!_7f-^mjx!IF1@er{im8dMTO9ixzo3qzjuVbEj`NO7jw_Dajz^AnD1`P$ zVU&V;p@UFgG!z|rV zt>{j45Bd{&2t9%xM^B=c&|Bye^d Date: Thu, 7 Jan 2016 13:50:59 +0800 Subject: [PATCH 021/276] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E6=8E=89=E4=B9=8B?= =?UTF-8?q?=E5=89=8D=E5=9C=A8demo=E4=BD=BF=E7=94=A8=E7=9A=84=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E8=87=AA=E5=B8=A6=E9=A2=84=E4=BC=B0=E9=AB=98=E5=BA=A6?= =?UTF-8?q?=E6=96=B9=E6=B3=95=EF=BC=8C=E4=BC=98=E5=8C=96=E6=B5=81=E7=95=85?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate" | Bin 38345 -> 37451 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" index 91e5fba4109804fe5ce5852ddd6ccb586abf3cf9..b0364c4da54d22f9307879e021396191b3236e8c 100644 GIT binary patch delta 11792 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 delta 11852 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%0DA+t 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 From f1df389a47fc925d28c44c0c6b186515bfd1d039 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 7 Jan 2016 14:54:32 +0800 Subject: [PATCH 022/276] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E6=8E=89=E4=B9=8B?= =?UTF-8?q?=E5=89=8D=E5=9C=A8demo=E4=BD=BF=E7=94=A8=E7=9A=84=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E8=87=AA=E5=B8=A6=E9=A2=84=E4=BC=B0=E9=AB=98=E5=BA=A6?= =?UTF-8?q?=E6=96=B9=E6=B3=95=EF=BC=8C=E4=BC=98=E5=8C=96=E6=B5=81=E7=95=85?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate" | Bin 37451 -> 37556 bytes .../DemoVC5.m" | 2 +- .../DemoVC7.m" | 2 +- .../DemoVC8.m" | 2 +- .../DemoVC9.m" | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" index b0364c4da54d22f9307879e021396191b3236e8c..eddfeb761b052252f282a93a54050fe2eeb85cd7 100644 GIT binary patch delta 8725 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 Date: Thu, 7 Jan 2016 17:09:11 +0800 Subject: [PATCH 023/276] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=20scrollview=20?= =?UTF-8?q?=E6=A8=AA=E5=90=91=E5=86=85=E5=AE=B9=E8=87=AA=E9=80=82=E5=BA=94?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=9B2.=E5=A2=9E=E5=8A=A0view=E5=AE=BD?= =?UTF-8?q?=E9=AB=98=E7=9B=B8=E7=AD=89=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate" | Bin 37556 -> 37799 bytes .../DemoVC6.m" | 2 +- .../SDAutoLayout/UIView+SDAutoLayout.h" | 67 ++++++++------ .../SDAutoLayout/UIView+SDAutoLayout.m" | 85 +++++++++++++++++- 4 files changed, 123 insertions(+), 31 deletions(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" index eddfeb761b052252f282a93a54050fe2eeb85cd7..d1afbb08883d81ac737f748e91ef3cbb27dd0706 100644 GIT binary patch literal 37799 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 J&wsP*{~z12wfO)5 delta 18645 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 Mbbh}3+p_Ba0F<9@DF6Tf diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC6.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC6.m" index bfa027f..3946ce4 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC6.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC6.m" @@ -55,7 +55,7 @@ - (void)viewDidLoad { self.view3.sd_layout .widthIs(250) - .heightIs(250) + .heightEqualToWidth() .centerXEqualToView(scrollView) .topSpaceToView(self.view2, 20); diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" index 76613b1..9fc99c6 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" @@ -10,7 +10,7 @@ --------- INTRODUCTION --------- - HOW TO USE ? + USAGE: MODE 1. >>>>>>>>>>>>>>> You can use it in this way: @@ -57,6 +57,7 @@ typedef SDAutoLayoutModel *(^MarginEqualToView)(UIView *toView); typedef SDAutoLayoutModel *(^WidthHeight)(CGFloat value); typedef SDAutoLayoutModel *(^WidthHeightEqualToView)(UIView *toView, CGFloat ratioValue); typedef SDAutoLayoutModel *(^AutoHeight)(CGFloat ratioValue); +typedef SDAutoLayoutModel *(^SameWidthHeight)(); typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @interface SDAutoLayoutModel : NSObject @@ -72,6 +73,7 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); ***************************************************** */ + /* 设置距离其它view的间距 */ /** 左边到其参照view之间的间距,参数为“(参照view,间距数值)” */ @@ -87,59 +89,66 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); /* 设置x、y、width、height、centerX、centerY 值 */ -/** x值 */ +/** x值,参数为“(CGFloat数值)” */ @property (nonatomic, copy, readonly) Margin xIs; -/** y值 */ +/** y值,参数为“(CGFloat数值)” */ @property (nonatomic, copy, readonly) Margin yIs; -/** centerX值 */ +/** centerX值,参数为“(CGFloat数值)” */ @property (nonatomic, copy, readonly) Margin centerXIs; -/** centerY值 */ +/** centerY值,参数为“(CGFloat数值)” */ @property (nonatomic, copy, readonly) Margin centerYIs; -/** 宽度值 */ +/** 宽度值,参数为“(CGFloat数值)” */ @property (nonatomic, copy, readonly) WidthHeight widthIs; -/** 高度值 */ +/** 高度值,参数为“(CGFloat数值)” */ @property (nonatomic, copy, readonly) WidthHeight heightIs; + /* 设置最大宽度和高度、最小宽度和高度 */ -/** 最大宽度值 */ +/** 最大宽度值,参数为“(CGFloat数值)” */ @property (nonatomic, copy, readonly) WidthHeight maxWidthIs; -/** 最大高度值 */ +/** 最大高度值,参数为“(CGFloat数值)” */ @property (nonatomic, copy, readonly) WidthHeight maxHeightIs; -/** 最小宽度值 */ +/** 最小宽度值,参数为“(CGFloat数值)” */ @property (nonatomic, copy, readonly) WidthHeight minWidthIs; -/** 最小高度值 */ +/** 最小高度值,参数为“(CGFloat数值)” */ @property (nonatomic, copy, readonly) WidthHeight minHeightIs; -/* - * 设置和哪一个参照view的边距相同 - */ -/** 左间距与参照view相同 */ +/* 设置和某个参照view的边距相同 */ + +/** 左间距与参照view相同,参数为“(参照view)” */ @property (nonatomic, copy, readonly) MarginEqualToView leftEqualToView; -/** 右间距与参照view相同 */ +/** 右间距与参照view相同,参数为“(参照view)” */ @property (nonatomic, copy, readonly) MarginEqualToView rightEqualToView; -/** 顶部间距与参照view相同 */ +/** 顶部间距与参照view相同,参数为“(参照view)” */ @property (nonatomic, copy, readonly) MarginEqualToView topEqualToView; -/** 底部间距与参照view相同 */ +/** 底部间距与参照view相同,参数为“(参照view)” */ @property (nonatomic, copy, readonly) MarginEqualToView bottomEqualToView; -/** centerX与参照view相同 */ +/** centerX与参照view相同,参数为“(参照view)” */ @property (nonatomic, copy, readonly) MarginEqualToView centerXEqualToView; -/** centerY与参照view相同 */ +/** centerY与参照view相同,参数为“(参照view)” */ @property (nonatomic, copy, readonly) MarginEqualToView centerYEqualToView; + /* 设置宽度或者高度等于参照view的多少倍 */ -/** 宽度是参照view宽度的多少倍 */ +/** 宽度是参照view宽度的多少倍,参数为“(参照view,比例数值)” */ @property (nonatomic, copy, readonly) WidthHeightEqualToView widthRatioToView; -/** 高度是参照view宽度的多少倍 */ +/** 高度是参照view宽度的多少倍,参数为“(参照view,比例数值)” */ @property (nonatomic, copy, readonly) WidthHeightEqualToView heightRatioToView; +/** 设置一个view的宽度和它的高度相同,参数为空“()” */ +@property (nonatomic, copy, readonly) SameWidthHeight widthEqualToHeight; +/** 设置一个view的高度和它的宽度相同,参数为空“()” */ +@property (nonatomic, copy, readonly) SameWidthHeight heightEqualToWidth; /** 自适应高度,传入高宽比值,label可以传0实现文字高度自适应 */ @property (nonatomic, copy, readonly) AutoHeight autoHeightRatio; + + /* 填充父view(快捷方法) */ /** 传入UIEdgeInsetsMake(top, left, bottom, right),可以快捷设置view到其父view上左下右的间距 */ @@ -152,15 +161,18 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); -@interface UIView (SDAutoHeight) +@interface UIView (SDAutoHeightWidth) + +/** 设置Cell的高度自适应,也可用于设置普通view内容自适应 */ +- (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin; @property (nonatomic) CGFloat autoHeight; @property (nonatomic) UIView *sd_bottomView; @property (nonatomic) CGFloat sd_bottomViewBottomMargin; -/** 设置Cell的高度自适应,也可用于设置普通view内容自适应 */ -- (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin; +@property (nonatomic) UIView *sd_rightView; +@property (nonatomic) CGFloat sd_rightMargin; @end @@ -183,9 +195,12 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @interface UIScrollView (SDAutoContentSize) -/** 设置scrollview内容自适应 */ +/** 设置scrollview内容竖向自适应 */ - (void)setupAutoContentSizeWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin; +/** 设置scrollview内容横向自适应 */ +- (void)setupAutoContentSizeWithRightView:(UIView *)rightView rightMargin:(CGFloat)rightMargin; + @end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" index 4cfbd2e..3ab4f18 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" @@ -55,6 +55,9 @@ @interface SDAutoLayoutModel () @property (nonatomic, strong) SDAutoLayoutModelItem *equalCenterX; @property (nonatomic, strong) SDAutoLayoutModelItem *equalCenterY; +@property (nonatomic, strong) SDAutoLayoutModelItem *widthEqualHeight; +@property (nonatomic, strong) SDAutoLayoutModelItem *heightEqualWidth; + @end @implementation SDAutoLayoutModel @@ -83,6 +86,8 @@ @implementation SDAutoLayoutModel @synthesize maxHeightIs = _maxHeightIs; @synthesize minWidthIs = _minWidthIs; @synthesize minHeightIs = _minHeightIs; +@synthesize widthEqualToHeight = _widthEqualToHeight; +@synthesize heightEqualToWidth = _heightEqualToWidth; - (MarginToView)leftSpaceToView { @@ -372,10 +377,36 @@ - (SpaceToSuperView)spaceToSuperView return _spaceToSuperView; } +- (SameWidthHeight)widthEqualToHeight +{ + __weak typeof(self) weakSelf = self; + + if (!_widthEqualToHeight) { + _widthEqualToHeight = ^() { + weakSelf.widthEqualHeight = [SDAutoLayoutModelItem new]; + return weakSelf; + }; + } + return _widthEqualToHeight; +} + +- (SameWidthHeight)heightEqualToWidth +{ + __weak typeof(self) weakSelf = self; + + if (!_heightEqualToWidth) { + _heightEqualToWidth = ^() { + weakSelf.heightEqualWidth = [SDAutoLayoutModelItem new]; + return weakSelf; + }; + } + return _heightEqualToWidth; +} + @end -@implementation UIView (SDAutoHeight) +@implementation UIView (SDAutoHeightWidth) - (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin { @@ -413,6 +444,26 @@ - (void)setSd_bottomViewBottomMargin:(CGFloat)sd_bottomViewBottomMargin objc_setAssociatedObject(self, @selector(sd_bottomViewBottomMargin), @(sd_bottomViewBottomMargin), OBJC_ASSOCIATION_RETAIN_NONATOMIC); } +- (UIView *)sd_rightView +{ + return objc_getAssociatedObject(self, _cmd); +} + +- (void)setSd_rightView:(UIView *)sd_rightView +{ + objc_setAssociatedObject(self, @selector(sd_rightView), sd_rightView, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (CGFloat)sd_rightMargin +{ + return [objc_getAssociatedObject(self, _cmd) floatValue]; +} + +- (void)setSd_rightMargin:(CGFloat)sd_rightMargin +{ + objc_setAssociatedObject(self, @selector(sd_rightMargin), @(sd_rightMargin), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + @end @implementation UIView (SDLayoutExtention) @@ -468,6 +519,12 @@ - (void)setupAutoContentSizeWithBottomView:(UIView *)bottomView bottomMargin:(CG [self setupAutoHeightWithBottomView:bottomView bottomMargin:bottomMargin]; } +- (void)setupAutoContentSizeWithRightView:(UIView *)rightView rightMargin:(CGFloat)rightMargin +{ + [self setSd_rightView:rightView]; + [self setSd_rightMargin:rightMargin]; +} + @end @implementation UILabel (SDLabelAutoResize) @@ -611,12 +668,24 @@ - (void)sd_autolayout if ([cell isKindOfClass:[UITableViewCell class]]) { cell.autoHeight = cell.sd_bottomView.bottom + cell.sd_bottomViewBottomMargin; } - } else if (![self isKindOfClass:[UITableViewCell class]] && self.sd_bottomView) { - CGFloat contentHeight = self.sd_bottomView.bottom + self.sd_bottomViewBottomMargin; + } else if (![self isKindOfClass:[UITableViewCell class]] && (self.sd_bottomView || self.sd_rightView)) { + CGFloat contentHeight = 0; + CGFloat contentWidth = 0; + if (self.sd_bottomView) { + contentHeight = self.sd_bottomView.bottom + self.sd_bottomViewBottomMargin; + } + if (self.sd_rightView) { + contentWidth = self.sd_rightView.right + self.sd_rightMargin; + } if ([self isKindOfClass:[UIScrollView class]]) { UIScrollView *scrollView = (UIScrollView *)self; CGSize contentSize = scrollView.contentSize; - contentSize.height = contentHeight; + if (contentHeight > 0) { + contentSize.height = contentHeight; + } + if (contentWidth > 0) { + contentSize.width = contentWidth; + } if (contentSize.width <= 0) { contentSize.width = scrollView.width; } @@ -848,6 +917,14 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model view.height = [model.minHeight floatValue]; } + if (model.widthEqualHeight) { + view.width = view.height; + } + + if (model.heightEqualWidth) { + view.height = view.width; + } + CGFloat cornerRadius = view.layer.cornerRadius; CGFloat newCornerRadius = 0; From 5efe79d9efea40d9f6b5b9ad77eec1f5252bc658 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Fri, 8 Jan 2016 16:00:57 +0800 Subject: [PATCH 024/276] =?UTF-8?q?=E6=95=B4=E7=90=86=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=BB=93=E6=9E=84=EF=BC=8C=E5=A2=9E=E5=8A=A0demo=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj" | 784 ++++++++++-------- .../UserInterfaceState.xcuserstate" | Bin 37799 -> 41512 bytes .../DemoVC/DemoVC0/DemoVC0.h" | 0 .../DemoVC/DemoVC0/DemoVC0.m" | 0 .../DemoVC/DemoVC1/DemoVC1.h" | 0 .../DemoVC/DemoVC1/DemoVC1.m" | 0 .../DemoVC/DemoVC2/DemoVC2.h" | 0 .../DemoVC/DemoVC2/DemoVC2.m" | 0 .../DemoVC/DemoVC3/DemoVC3.h" | 0 .../DemoVC/DemoVC3/DemoVC3.m" | 2 +- .../DemoVC/DemoVC3/TestCell2.h" | 0 .../DemoVC/DemoVC3/TestCell2.m" | 0 .../DemoVC/DemoVC4/DemoVC4.h" | 0 .../DemoVC/DemoVC4/DemoVC4.m" | 0 .../DemoVC/DemoVC5/DemoVC5.h" | 0 .../DemoVC/DemoVC5/DemoVC5.m" | 56 +- .../DemoVC5/DemoVC5CellTableViewCell.h" | 0 .../DemoVC5/DemoVC5CellTableViewCell.m" | 0 .../DemoVC/DemoVC5/DemoVC5Model.h" | 0 .../DemoVC/DemoVC5/DemoVC5Model.m" | 0 .../DemoVC/DemoVC6/DemoVC6.h" | 0 .../DemoVC/DemoVC6/DemoVC6.m" | 0 .../DemoVC/DemoVC7/DemoVC7.h" | 0 .../DemoVC/DemoVC7/DemoVC7.m" | 0 .../DemoVC/DemoVC7/DemoVC7Cell.h" | 0 .../DemoVC/DemoVC7/DemoVC7Cell.m" | 0 .../DemoVC/DemoVC7/DemoVC7Cell2.h" | 0 .../DemoVC/DemoVC7/DemoVC7Cell2.m" | 0 .../DemoVC/DemoVC7/DemoVC7Model.h" | 0 .../DemoVC/DemoVC7/DemoVC7Model.m" | 0 .../DemoVC/DemoVC8/DemoVC8.h" | 0 .../DemoVC/DemoVC8/DemoVC8.m" | 0 .../DemoVC/DemoVC9/Demo9Model.h" | 0 .../DemoVC/DemoVC9/Demo9Model.m" | 0 .../DemoVC/DemoVC9/DemoVC9.h" | 0 .../DemoVC/DemoVC9/DemoVC9.m" | 2 +- .../DemoVC/DemoVC9/DemoVC9Cell.h" | 0 .../DemoVC/DemoVC9/DemoVC9Cell.m" | 0 .../DemoVC/DemoVC9/DemoVC9HeaderView.h" | 0 .../DemoVC/DemoVC9/DemoVC9HeaderView.m" | 0 .../DemoVC9/SDWeiXinPhotoContainerView.h" | 0 .../DemoVC9/SDWeiXinPhotoContainerView.m" | 0 .../Others/AppDelegate.h" | 0 .../Others/AppDelegate.m" | 0 .../Others/DemoCell.h" | 16 + .../Others/DemoCell.m" | 54 ++ .../Others/DemoTableViewControler.h" | 0 .../Others/DemoTableViewControler.m" | 29 +- .../Others/ViewController.h" | 0 .../Others/ViewController.m" | 0 .../SDAutoLayout/UIView+SDAutoLayout.h" | 44 +- .../PageControl/TAAbstractDotView.h" | 24 + .../PageControl/TAAbstractDotView.m" | 30 + .../PageControl/TAAnimatedDotView.h" | 15 + .../PageControl/TAAnimatedDotView.m" | 88 ++ .../PageControl/TADotView.h" | 13 + .../PageControl/TADotView.m" | 63 ++ .../PageControl/TAPageControl.h" | 106 +++ .../PageControl/TAPageControl.m" | 364 ++++++++ .../SDCycleScrollView/SDCollectionViewCell.h" | 47 ++ .../SDCycleScrollView/SDCollectionViewCell.m" | 106 +++ .../SDCycleScrollView/SDCycleScrollView.h" | 167 ++++ .../SDCycleScrollView/SDCycleScrollView.m" | 542 ++++++++++++ .../SDCycleScrollView/UIView+SDExtension.h" | 44 + .../SDCycleScrollView/UIView+SDExtension.m" | 107 +++ .../SDPhotoBrowser/SDBrowserImageView.h" | 0 .../SDPhotoBrowser/SDBrowserImageView.m" | 0 .../Vender/SDPhotoBrowser/SDPhotoBrowser.h" | 0 .../Vender/SDPhotoBrowser/SDPhotoBrowser.m" | 0 .../SDPhotoBrowser/SDPhotoBrowserConfig.h" | 0 .../Vender/SDPhotoBrowser/SDWaitingView.h" | 0 .../Vender/SDPhotoBrowser/SDWaitingView.m" | 0 .../Vender/SDRefeshView/SDRefresh.h" | 0 .../SDRefeshView/SDRefreshFooterView.h" | 0 .../SDRefeshView/SDRefreshFooterView.m" | 0 .../SDRefeshView/SDRefreshHeaderView.h" | 0 .../SDRefeshView/SDRefreshHeaderView.m" | 0 .../Vender/SDRefeshView/SDRefreshView.h" | 0 .../Vender/SDRefeshView/SDRefreshView.m" | 0 .../Vender/SDRefeshView/UIView+SDExtension.h" | 0 .../Vender/SDRefeshView/UIView+SDExtension.m" | 0 .../SDRefeshView/sdRefeshView_arrow@2x.png" | Bin .../SDWebImage/MKAnnotationView+WebCache.h" | 0 .../SDWebImage/MKAnnotationView+WebCache.m" | 0 .../SDWebImage/NSData+ImageContentType.h" | 0 .../SDWebImage/NSData+ImageContentType.m" | 0 .../Vender/SDWebImage/SDImageCache.h" | 0 .../Vender/SDWebImage/SDImageCache.m" | 0 .../Vender/SDWebImage/SDWebImageCompat.h" | 0 .../Vender/SDWebImage/SDWebImageCompat.m" | 0 .../Vender/SDWebImage/SDWebImageDecoder.h" | 0 .../Vender/SDWebImage/SDWebImageDecoder.m" | 0 .../Vender/SDWebImage/SDWebImageDownloader.h" | 0 .../Vender/SDWebImage/SDWebImageDownloader.m" | 0 .../SDWebImageDownloaderOperation.h" | 0 .../SDWebImageDownloaderOperation.m" | 0 .../Vender/SDWebImage/SDWebImageManager.h" | 0 .../Vender/SDWebImage/SDWebImageManager.m" | 0 .../Vender/SDWebImage/SDWebImageOperation.h" | 0 .../Vender/SDWebImage/SDWebImagePrefetcher.h" | 0 .../Vender/SDWebImage/SDWebImagePrefetcher.m" | 0 .../Vender/SDWebImage/UIButton+WebCache.h" | 0 .../Vender/SDWebImage/UIButton+WebCache.m" | 0 .../Vender/SDWebImage/UIImage+GIF.h" | 0 .../Vender/SDWebImage/UIImage+GIF.m" | 0 .../Vender/SDWebImage/UIImage+MultiFormat.h" | 0 .../Vender/SDWebImage/UIImage+MultiFormat.m" | 0 .../Vender/SDWebImage/UIImage+WebP.h" | 0 .../Vender/SDWebImage/UIImage+WebP.m" | 0 .../UIImageView+HighlightedWebCache.h" | 0 .../UIImageView+HighlightedWebCache.m" | 0 .../Vender/SDWebImage/UIImageView+WebCache.h" | 0 .../Vender/SDWebImage/UIImageView+WebCache.m" | 0 .../SDWebImage/UIView+WebCacheOperation.h" | 0 .../SDWebImage/UIView+WebCacheOperation.m" | 0 115 files changed, 2337 insertions(+), 366 deletions(-) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC0.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC0.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC1.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC1/DemoVC1.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC1.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC1/DemoVC1.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC2.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC2/DemoVC2.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC2.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC2/DemoVC2.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC3.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/DemoVC3.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC3.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/DemoVC3.m" (99%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/TestCell2.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/TestCell2.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/TestCell2.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/TestCell2.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC4.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC4/DemoVC4.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC4.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC4/DemoVC4.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5.m" (78%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5CellTableViewCell.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5CellTableViewCell.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5Model.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5Model.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5Model.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5Model.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC6.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC6/DemoVC6.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC6.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC6/DemoVC6.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell2.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell2.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell2.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell2.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Model.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Model.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Model.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Model.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC8.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC8/DemoVC8.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC8.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC8/DemoVC8.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/Demo9Model.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/Demo9Model.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.m" (99%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9Cell.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9Cell.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9HeaderView.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9HeaderView.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/AppDelegate.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Others/AppDelegate.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/AppDelegate.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Others/AppDelegate.m" (100%) create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoCell.h" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoCell.m" rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoTableViewControler.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoTableViewControler.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.m" (51%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/ViewController.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Others/ViewController.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/ViewController.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Others/ViewController.m" (100%) create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TADotView.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TADotView.m" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAPageControl.h" create mode 100755 "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAPageControl.m" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCollectionViewCell.h" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCollectionViewCell.m" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCycleScrollView.h" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCycleScrollView.m" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/UIView+SDExtension.h" create mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/UIView+SDExtension.m" rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDBrowserImageView.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDBrowserImageView.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDBrowserImageView.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDBrowserImageView.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowser.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowser.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowser.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowser.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowserConfig.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowserConfig.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDWaitingView.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDWaitingView.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDWaitingView.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDWaitingView.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefresh.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefresh.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshFooterView.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshFooterView.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshFooterView.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshFooterView.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshHeaderView.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshHeaderView.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshHeaderView.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshHeaderView.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshView.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshView.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshView.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshView.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/UIView+SDExtension.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/UIView+SDExtension.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/UIView+SDExtension.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/UIView+SDExtension.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/sdRefeshView_arrow@2x.png" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/sdRefeshView_arrow@2x.png" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/MKAnnotationView+WebCache.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/MKAnnotationView+WebCache.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/MKAnnotationView+WebCache.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/MKAnnotationView+WebCache.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/NSData+ImageContentType.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/NSData+ImageContentType.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/NSData+ImageContentType.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/NSData+ImageContentType.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDImageCache.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDImageCache.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDImageCache.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDImageCache.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageCompat.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageCompat.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageCompat.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageCompat.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDecoder.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDecoder.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDecoder.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDecoder.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloader.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloader.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloader.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloader.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloaderOperation.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloaderOperation.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloaderOperation.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloaderOperation.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageManager.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageManager.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageManager.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageManager.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageOperation.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageOperation.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImagePrefetcher.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImagePrefetcher.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImagePrefetcher.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImagePrefetcher.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIButton+WebCache.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIButton+WebCache.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIButton+WebCache.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIButton+WebCache.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+GIF.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+GIF.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+GIF.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+GIF.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+MultiFormat.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+MultiFormat.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+MultiFormat.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+MultiFormat.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+WebP.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+WebP.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+WebP.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+WebP.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+HighlightedWebCache.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+HighlightedWebCache.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+HighlightedWebCache.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+HighlightedWebCache.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+WebCache.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+WebCache.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+WebCache.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+WebCache.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIView+WebCacheOperation.h" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIView+WebCacheOperation.h" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIView+WebCacheOperation.m" => "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIView+WebCacheOperation.m" (100%) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" index 1d6ae4b..9840acc 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" @@ -7,61 +7,74 @@ objects = { /* Begin PBXBuildFile section */ - 4841F5DB1C2A8275004979F4 /* DemoVC9.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F5DA1C2A8275004979F4 /* DemoVC9.m */; }; - 4841F5DE1C2A8632004979F4 /* DemoVC9Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F5DD1C2A8632004979F4 /* DemoVC9Cell.m */; }; - 4841F5E11C2A90CF004979F4 /* Demo9Model.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F5E01C2A90CF004979F4 /* Demo9Model.m */; }; - 4841F5E41C2A94ED004979F4 /* SDWeiXinPhotoContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F5E31C2A94ED004979F4 /* SDWeiXinPhotoContainerView.m */; }; 4841F5E91C2ABC60004979F4 /* pic5.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 4841F5E51C2ABC60004979F4 /* pic5.jpg */; }; 4841F5EA1C2ABC60004979F4 /* pic6.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 4841F5E61C2ABC60004979F4 /* pic6.jpg */; }; 4841F5EB1C2ABC60004979F4 /* pic7.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 4841F5E71C2ABC60004979F4 /* pic7.jpg */; }; 4841F5EC1C2ABC60004979F4 /* pic8.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 4841F5E81C2ABC60004979F4 /* pic8.jpg */; }; - 4841F5EF1C2AC7D6004979F4 /* DemoVC9HeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F5EE1C2AC7D6004979F4 /* DemoVC9HeaderView.m */; }; 4841F5F21C2ACC2B004979F4 /* pbg.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 4841F5F01C2ACC2B004979F4 /* pbg.jpg */; }; 4841F5F31C2ACC2B004979F4 /* picon.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 4841F5F11C2ACC2B004979F4 /* picon.jpg */; }; - 4841F5FC1C2AD949004979F4 /* SDBrowserImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F5F61C2AD949004979F4 /* SDBrowserImageView.m */; }; - 4841F5FD1C2AD949004979F4 /* SDPhotoBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F5F81C2AD949004979F4 /* SDPhotoBrowser.m */; }; - 4841F5FE1C2AD949004979F4 /* SDWaitingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F5FB1C2AD949004979F4 /* SDWaitingView.m */; }; - 4841F6531C2ADCAE004979F4 /* MKAnnotationView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6331C2ADCAE004979F4 /* MKAnnotationView+WebCache.m */; }; - 4841F6541C2ADCAE004979F4 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6351C2ADCAE004979F4 /* NSData+ImageContentType.m */; }; - 4841F6551C2ADCAE004979F4 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6371C2ADCAE004979F4 /* SDImageCache.m */; }; - 4841F6561C2ADCAE004979F4 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6391C2ADCAE004979F4 /* SDWebImageCompat.m */; }; - 4841F6571C2ADCAE004979F4 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F63B1C2ADCAE004979F4 /* SDWebImageDecoder.m */; }; - 4841F6581C2ADCAE004979F4 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F63D1C2ADCAE004979F4 /* SDWebImageDownloader.m */; }; - 4841F6591C2ADCAE004979F4 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F63F1C2ADCAE004979F4 /* SDWebImageDownloaderOperation.m */; }; - 4841F65A1C2ADCAE004979F4 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6411C2ADCAE004979F4 /* SDWebImageManager.m */; }; - 4841F65B1C2ADCAE004979F4 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6441C2ADCAE004979F4 /* SDWebImagePrefetcher.m */; }; - 4841F65C1C2ADCAE004979F4 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6461C2ADCAE004979F4 /* UIButton+WebCache.m */; }; - 4841F65D1C2ADCAE004979F4 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6481C2ADCAE004979F4 /* UIImage+GIF.m */; }; - 4841F65E1C2ADCAE004979F4 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F64A1C2ADCAE004979F4 /* UIImage+MultiFormat.m */; }; - 4841F65F1C2ADCAE004979F4 /* UIImage+WebP.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F64C1C2ADCAE004979F4 /* UIImage+WebP.m */; }; - 4841F6601C2ADCAE004979F4 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F64E1C2ADCAE004979F4 /* UIImageView+HighlightedWebCache.m */; }; - 4841F6611C2ADCAE004979F4 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6501C2ADCAE004979F4 /* UIImageView+WebCache.m */; }; - 4841F6621C2ADCAE004979F4 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4841F6521C2ADCAE004979F4 /* UIView+WebCacheOperation.m */; }; - 4845116F1C2439830071BE2C /* DemoVC7.m in Sources */ = {isa = PBXBuildFile; fileRef = 484511681C2439830071BE2C /* DemoVC7.m */; }; - 484511701C2439830071BE2C /* DemoVC7Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4845116A1C2439830071BE2C /* DemoVC7Cell.m */; }; - 484511711C2439830071BE2C /* DemoVC7Cell2.m in Sources */ = {isa = PBXBuildFile; fileRef = 4845116C1C2439830071BE2C /* DemoVC7Cell2.m */; }; - 484511721C2439830071BE2C /* DemoVC7Model.m in Sources */ = {isa = PBXBuildFile; fileRef = 4845116E1C2439830071BE2C /* DemoVC7Model.m */; }; - 4867A48F1C292EF800BE8767 /* DemoVC8.m in Sources */ = {isa = PBXBuildFile; fileRef = 4867A48E1C292EF800BE8767 /* DemoVC8.m */; }; - 486A382D1C0D852C000D43E5 /* DemoVC6.m in Sources */ = {isa = PBXBuildFile; fileRef = 486A382C1C0D852C000D43E5 /* DemoVC6.m */; }; + 485302CC1C3F6490004361A7 /* SDBrowserImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302991C3F6490004361A7 /* SDBrowserImageView.m */; }; + 485302CD1C3F6490004361A7 /* SDPhotoBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853029B1C3F6490004361A7 /* SDPhotoBrowser.m */; }; + 485302CE1C3F6490004361A7 /* SDWaitingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853029E1C3F6490004361A7 /* SDWaitingView.m */; }; + 485302CF1C3F6490004361A7 /* sdRefeshView_arrow@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 485302A01C3F6490004361A7 /* sdRefeshView_arrow@2x.png */; }; + 485302D01C3F6490004361A7 /* SDRefreshFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302A31C3F6490004361A7 /* SDRefreshFooterView.m */; }; + 485302D11C3F6490004361A7 /* SDRefreshHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302A51C3F6490004361A7 /* SDRefreshHeaderView.m */; }; + 485302D21C3F6490004361A7 /* SDRefreshView.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302A71C3F6490004361A7 /* SDRefreshView.m */; }; + 485302D31C3F6490004361A7 /* UIView+SDExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302A91C3F6490004361A7 /* UIView+SDExtension.m */; }; + 485302D41C3F6490004361A7 /* MKAnnotationView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302AC1C3F6490004361A7 /* MKAnnotationView+WebCache.m */; }; + 485302D51C3F6490004361A7 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302AE1C3F6490004361A7 /* NSData+ImageContentType.m */; }; + 485302D61C3F6490004361A7 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302B01C3F6490004361A7 /* SDImageCache.m */; }; + 485302D71C3F6490004361A7 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302B21C3F6490004361A7 /* SDWebImageCompat.m */; }; + 485302D81C3F6490004361A7 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302B41C3F6490004361A7 /* SDWebImageDecoder.m */; }; + 485302D91C3F6490004361A7 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302B61C3F6490004361A7 /* SDWebImageDownloader.m */; }; + 485302DA1C3F6490004361A7 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302B81C3F6490004361A7 /* SDWebImageDownloaderOperation.m */; }; + 485302DB1C3F6490004361A7 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302BA1C3F6490004361A7 /* SDWebImageManager.m */; }; + 485302DC1C3F6490004361A7 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302BD1C3F6490004361A7 /* SDWebImagePrefetcher.m */; }; + 485302DD1C3F6490004361A7 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302BF1C3F6490004361A7 /* UIButton+WebCache.m */; }; + 485302DE1C3F6490004361A7 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302C11C3F6490004361A7 /* UIImage+GIF.m */; }; + 485302DF1C3F6490004361A7 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302C31C3F6490004361A7 /* UIImage+MultiFormat.m */; }; + 485302E01C3F6490004361A7 /* UIImage+WebP.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302C51C3F6490004361A7 /* UIImage+WebP.m */; }; + 485302E11C3F6490004361A7 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302C71C3F6490004361A7 /* UIImageView+HighlightedWebCache.m */; }; + 485302E21C3F6490004361A7 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302C91C3F6490004361A7 /* UIImageView+WebCache.m */; }; + 485302E31C3F6490004361A7 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302CB1C3F6490004361A7 /* UIView+WebCacheOperation.m */; }; + 485302F41C3F65EE004361A7 /* TAAbstractDotView.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302E71C3F65EE004361A7 /* TAAbstractDotView.m */; }; + 485302F51C3F65EE004361A7 /* TAAnimatedDotView.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302E91C3F65EE004361A7 /* TAAnimatedDotView.m */; }; + 485302F61C3F65EE004361A7 /* TADotView.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302EB1C3F65EE004361A7 /* TADotView.m */; }; + 485302F71C3F65EE004361A7 /* TAPageControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302ED1C3F65EE004361A7 /* TAPageControl.m */; }; + 485302F81C3F65EE004361A7 /* SDCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302EF1C3F65EE004361A7 /* SDCollectionViewCell.m */; }; + 485302F91C3F65EE004361A7 /* SDCycleScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302F11C3F65EE004361A7 /* SDCycleScrollView.m */; }; + 485302FA1C3F65EE004361A7 /* UIView+SDExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 485302F31C3F65EE004361A7 /* UIView+SDExtension.m */; }; + 485303351C3F977A004361A7 /* DemoVC0.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303051C3F977A004361A7 /* DemoVC0.m */; }; + 485303361C3F977A004361A7 /* DemoVC1.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303081C3F977A004361A7 /* DemoVC1.m */; }; + 485303371C3F977A004361A7 /* DemoVC2.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853030B1C3F977A004361A7 /* DemoVC2.m */; }; + 485303381C3F977A004361A7 /* DemoVC3.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853030E1C3F977A004361A7 /* DemoVC3.m */; }; + 485303391C3F977A004361A7 /* TestCell2.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303101C3F977A004361A7 /* TestCell2.m */; }; + 4853033A1C3F977A004361A7 /* DemoVC4.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303131C3F977A004361A7 /* DemoVC4.m */; }; + 4853033B1C3F977A004361A7 /* DemoVC5.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303161C3F977A004361A7 /* DemoVC5.m */; }; + 4853033C1C3F977A004361A7 /* DemoVC5CellTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303181C3F977A004361A7 /* DemoVC5CellTableViewCell.m */; }; + 4853033D1C3F977A004361A7 /* DemoVC5Model.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853031A1C3F977A004361A7 /* DemoVC5Model.m */; }; + 4853033E1C3F977A004361A7 /* DemoVC6.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853031D1C3F977A004361A7 /* DemoVC6.m */; }; + 4853033F1C3F977A004361A7 /* DemoVC7.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303201C3F977A004361A7 /* DemoVC7.m */; }; + 485303401C3F977A004361A7 /* DemoVC7Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303221C3F977A004361A7 /* DemoVC7Cell.m */; }; + 485303411C3F977A004361A7 /* DemoVC7Cell2.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303241C3F977A004361A7 /* DemoVC7Cell2.m */; }; + 485303421C3F977A004361A7 /* DemoVC7Model.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303261C3F977A004361A7 /* DemoVC7Model.m */; }; + 485303431C3F977A004361A7 /* DemoVC8.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303291C3F977A004361A7 /* DemoVC8.m */; }; + 485303441C3F977A004361A7 /* Demo9Model.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853032C1C3F977A004361A7 /* Demo9Model.m */; }; + 485303451C3F977A004361A7 /* DemoVC9.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853032E1C3F977A004361A7 /* DemoVC9.m */; }; + 485303461C3F977A004361A7 /* DemoVC9Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303301C3F977A004361A7 /* DemoVC9Cell.m */; }; + 485303471C3F977A004361A7 /* DemoVC9HeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303321C3F977A004361A7 /* DemoVC9HeaderView.m */; }; + 485303481C3F977A004361A7 /* SDWeiXinPhotoContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303341C3F977A004361A7 /* SDWeiXinPhotoContainerView.m */; }; + 485303501C3F97AA004361A7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853034B1C3F97AA004361A7 /* AppDelegate.m */; }; + 485303511C3F97AA004361A7 /* DemoTableViewControler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853034D1C3F97AA004361A7 /* DemoTableViewControler.m */; }; + 485303521C3F97AA004361A7 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853034F1C3F97AA004361A7 /* ViewController.m */; }; + 485303551C3F97E6004361A7 /* DemoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303541C3F97E6004361A7 /* DemoCell.m */; }; 487D3EB71BCB9EC700A66173 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EB61BCB9EC700A66173 /* main.m */; }; - 487D3EBA1BCB9EC700A66173 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EB91BCB9EC700A66173 /* AppDelegate.m */; }; - 487D3EBD1BCB9EC700A66173 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EBC1BCB9EC700A66173 /* ViewController.m */; }; 487D3EC01BCB9EC700A66173 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 487D3EBE1BCB9EC700A66173 /* Main.storyboard */; }; 487D3EC21BCB9EC700A66173 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 487D3EC11BCB9EC700A66173 /* Images.xcassets */; }; 487D3EC51BCB9EC700A66173 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 487D3EC31BCB9EC700A66173 /* LaunchScreen.xib */; }; 487D3ED11BCB9EC700A66173 /* SDAutoLayout____DemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3ED01BCB9EC700A66173 /* SDAutoLayout____DemoTests.m */; }; - 487D3EE11BCBA55700A66173 /* DemoVC0.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EE01BCBA55700A66173 /* DemoVC0.m */; }; - 487D3EE41BCBA6CA00A66173 /* DemoVC1.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EE31BCBA6CA00A66173 /* DemoVC1.m */; }; - 487D3EE71BCBA78B00A66173 /* DemoTableViewControler.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EE61BCBA78B00A66173 /* DemoTableViewControler.m */; }; - 487D3EEA1BCBACF500A66173 /* DemoVC2.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EE91BCBACF500A66173 /* DemoVC2.m */; }; - 487D3EF01BCBB61A00A66173 /* TestCell2.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EED1BCBB61A00A66173 /* TestCell2.m */; }; - 487D3EF41BCBB71500A66173 /* DemoVC3.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EF31BCBB71500A66173 /* DemoVC3.m */; }; - 48D632331BD0A7B500F86A88 /* DemoVC4.m in Sources */ = {isa = PBXBuildFile; fileRef = 48D632321BD0A7B500F86A88 /* DemoVC4.m */; }; 48DA2B001BFB529200A771E6 /* UITableView+SDAutoTableViewCellHeight.m in Sources */ = {isa = PBXBuildFile; fileRef = 48DA2AFD1BFB529200A771E6 /* UITableView+SDAutoTableViewCellHeight.m */; }; 48DA2B011BFB529200A771E6 /* UIView+SDAutoLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 48DA2AFF1BFB529200A771E6 /* UIView+SDAutoLayout.m */; }; - 48DBCD081C01D884002EC476 /* DemoVC5CellTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 48DBCD071C01D884002EC476 /* DemoVC5CellTableViewCell.m */; }; - 48DBCD0B1C01D89C002EC476 /* DemoVC5.m in Sources */ = {isa = PBXBuildFile; fileRef = 48DBCD0A1C01D89C002EC476 /* DemoVC5.m */; }; - 48DBCD0E1C01DA1E002EC476 /* DemoVC5Model.m in Sources */ = {isa = PBXBuildFile; fileRef = 48DBCD0D1C01DA1E002EC476 /* DemoVC5Model.m */; }; 48DBCD1A1C01E045002EC476 /* icon0.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD101C01E045002EC476 /* icon0.jpg */; }; 48DBCD1B1C01E045002EC476 /* icon1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD111C01E045002EC476 /* icon1.jpg */; }; 48DBCD1C1C01E045002EC476 /* icon2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD121C01E045002EC476 /* icon2.jpg */; }; @@ -72,11 +85,6 @@ 48DBCD211C01E045002EC476 /* pic2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD171C01E045002EC476 /* pic2.jpg */; }; 48DBCD221C01E045002EC476 /* pic3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD181C01E045002EC476 /* pic3.jpg */; }; 48DBCD231C01E045002EC476 /* pic4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD191C01E045002EC476 /* pic4.jpg */; }; - 99E728A71BE5E22D00771161 /* sdRefeshView_arrow@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 99E7289D1BE5E22D00771161 /* sdRefeshView_arrow@2x.png */; }; - 99E728A81BE5E22D00771161 /* SDRefreshFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 99E728A01BE5E22D00771161 /* SDRefreshFooterView.m */; }; - 99E728A91BE5E22D00771161 /* SDRefreshHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 99E728A21BE5E22D00771161 /* SDRefreshHeaderView.m */; }; - 99E728AA1BE5E22D00771161 /* SDRefreshView.m in Sources */ = {isa = PBXBuildFile; fileRef = 99E728A41BE5E22D00771161 /* SDRefreshView.m */; }; - 99E728AB1BE5E22D00771161 /* UIView+SDExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 99E728A61BE5E22D00771161 /* UIView+SDExtension.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -90,111 +98,137 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 4841F5D91C2A8275004979F4 /* DemoVC9.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC9.h; sourceTree = ""; }; - 4841F5DA1C2A8275004979F4 /* DemoVC9.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC9.m; sourceTree = ""; }; - 4841F5DC1C2A8632004979F4 /* DemoVC9Cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC9Cell.h; sourceTree = ""; }; - 4841F5DD1C2A8632004979F4 /* DemoVC9Cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC9Cell.m; sourceTree = ""; }; - 4841F5DF1C2A90CF004979F4 /* Demo9Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Demo9Model.h; sourceTree = ""; }; - 4841F5E01C2A90CF004979F4 /* Demo9Model.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Demo9Model.m; sourceTree = ""; }; - 4841F5E21C2A94ED004979F4 /* SDWeiXinPhotoContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWeiXinPhotoContainerView.h; sourceTree = ""; }; - 4841F5E31C2A94ED004979F4 /* SDWeiXinPhotoContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWeiXinPhotoContainerView.m; sourceTree = ""; }; 4841F5E51C2ABC60004979F4 /* pic5.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic5.jpg; sourceTree = ""; }; 4841F5E61C2ABC60004979F4 /* pic6.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic6.jpg; sourceTree = ""; }; 4841F5E71C2ABC60004979F4 /* pic7.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic7.jpg; sourceTree = ""; }; 4841F5E81C2ABC60004979F4 /* pic8.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic8.jpg; sourceTree = ""; }; - 4841F5ED1C2AC7D6004979F4 /* DemoVC9HeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC9HeaderView.h; sourceTree = ""; }; - 4841F5EE1C2AC7D6004979F4 /* DemoVC9HeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC9HeaderView.m; sourceTree = ""; }; 4841F5F01C2ACC2B004979F4 /* pbg.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pbg.jpg; sourceTree = ""; }; 4841F5F11C2ACC2B004979F4 /* picon.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = picon.jpg; sourceTree = ""; }; - 4841F5F51C2AD949004979F4 /* SDBrowserImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDBrowserImageView.h; sourceTree = ""; }; - 4841F5F61C2AD949004979F4 /* SDBrowserImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDBrowserImageView.m; sourceTree = ""; }; - 4841F5F71C2AD949004979F4 /* SDPhotoBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDPhotoBrowser.h; sourceTree = ""; }; - 4841F5F81C2AD949004979F4 /* SDPhotoBrowser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDPhotoBrowser.m; sourceTree = ""; }; - 4841F5F91C2AD949004979F4 /* SDPhotoBrowserConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDPhotoBrowserConfig.h; sourceTree = ""; }; - 4841F5FA1C2AD949004979F4 /* SDWaitingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWaitingView.h; sourceTree = ""; }; - 4841F5FB1C2AD949004979F4 /* SDWaitingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWaitingView.m; sourceTree = ""; }; - 4841F6321C2ADCAE004979F4 /* MKAnnotationView+WebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MKAnnotationView+WebCache.h"; sourceTree = ""; }; - 4841F6331C2ADCAE004979F4 /* MKAnnotationView+WebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MKAnnotationView+WebCache.m"; sourceTree = ""; }; - 4841F6341C2ADCAE004979F4 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+ImageContentType.h"; sourceTree = ""; }; - 4841F6351C2ADCAE004979F4 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+ImageContentType.m"; sourceTree = ""; }; - 4841F6361C2ADCAE004979F4 /* SDImageCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDImageCache.h; sourceTree = ""; }; - 4841F6371C2ADCAE004979F4 /* SDImageCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDImageCache.m; sourceTree = ""; }; - 4841F6381C2ADCAE004979F4 /* SDWebImageCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageCompat.h; sourceTree = ""; }; - 4841F6391C2ADCAE004979F4 /* SDWebImageCompat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageCompat.m; sourceTree = ""; }; - 4841F63A1C2ADCAE004979F4 /* SDWebImageDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageDecoder.h; sourceTree = ""; }; - 4841F63B1C2ADCAE004979F4 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageDecoder.m; sourceTree = ""; }; - 4841F63C1C2ADCAE004979F4 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageDownloader.h; sourceTree = ""; }; - 4841F63D1C2ADCAE004979F4 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageDownloader.m; sourceTree = ""; }; - 4841F63E1C2ADCAE004979F4 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageDownloaderOperation.h; sourceTree = ""; }; - 4841F63F1C2ADCAE004979F4 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageDownloaderOperation.m; sourceTree = ""; }; - 4841F6401C2ADCAE004979F4 /* SDWebImageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageManager.h; sourceTree = ""; }; - 4841F6411C2ADCAE004979F4 /* SDWebImageManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageManager.m; sourceTree = ""; }; - 4841F6421C2ADCAE004979F4 /* SDWebImageOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageOperation.h; sourceTree = ""; }; - 4841F6431C2ADCAE004979F4 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImagePrefetcher.h; sourceTree = ""; }; - 4841F6441C2ADCAE004979F4 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImagePrefetcher.m; sourceTree = ""; }; - 4841F6451C2ADCAE004979F4 /* UIButton+WebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+WebCache.h"; sourceTree = ""; }; - 4841F6461C2ADCAE004979F4 /* UIButton+WebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+WebCache.m"; sourceTree = ""; }; - 4841F6471C2ADCAE004979F4 /* UIImage+GIF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+GIF.h"; sourceTree = ""; }; - 4841F6481C2ADCAE004979F4 /* UIImage+GIF.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+GIF.m"; sourceTree = ""; }; - 4841F6491C2ADCAE004979F4 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+MultiFormat.h"; sourceTree = ""; }; - 4841F64A1C2ADCAE004979F4 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+MultiFormat.m"; sourceTree = ""; }; - 4841F64B1C2ADCAE004979F4 /* UIImage+WebP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+WebP.h"; sourceTree = ""; }; - 4841F64C1C2ADCAE004979F4 /* UIImage+WebP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+WebP.m"; sourceTree = ""; }; - 4841F64D1C2ADCAE004979F4 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; - 4841F64E1C2ADCAE004979F4 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; - 4841F64F1C2ADCAE004979F4 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+WebCache.h"; sourceTree = ""; }; - 4841F6501C2ADCAE004979F4 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+WebCache.m"; sourceTree = ""; }; - 4841F6511C2ADCAE004979F4 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+WebCacheOperation.h"; sourceTree = ""; }; - 4841F6521C2ADCAE004979F4 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+WebCacheOperation.m"; sourceTree = ""; }; - 484511671C2439830071BE2C /* DemoVC7.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC7.h; sourceTree = ""; }; - 484511681C2439830071BE2C /* DemoVC7.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC7.m; sourceTree = ""; }; - 484511691C2439830071BE2C /* DemoVC7Cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC7Cell.h; sourceTree = ""; }; - 4845116A1C2439830071BE2C /* DemoVC7Cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC7Cell.m; sourceTree = ""; }; - 4845116B1C2439830071BE2C /* DemoVC7Cell2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC7Cell2.h; sourceTree = ""; }; - 4845116C1C2439830071BE2C /* DemoVC7Cell2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC7Cell2.m; sourceTree = ""; }; - 4845116D1C2439830071BE2C /* DemoVC7Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC7Model.h; sourceTree = ""; }; - 4845116E1C2439830071BE2C /* DemoVC7Model.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC7Model.m; sourceTree = ""; }; - 4867A48D1C292EF800BE8767 /* DemoVC8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC8.h; sourceTree = ""; }; - 4867A48E1C292EF800BE8767 /* DemoVC8.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC8.m; sourceTree = ""; }; - 486A382B1C0D852C000D43E5 /* DemoVC6.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC6.h; sourceTree = ""; }; - 486A382C1C0D852C000D43E5 /* DemoVC6.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC6.m; sourceTree = ""; }; + 485302981C3F648F004361A7 /* SDBrowserImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDBrowserImageView.h; sourceTree = ""; }; + 485302991C3F6490004361A7 /* SDBrowserImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDBrowserImageView.m; sourceTree = ""; }; + 4853029A1C3F6490004361A7 /* SDPhotoBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDPhotoBrowser.h; sourceTree = ""; }; + 4853029B1C3F6490004361A7 /* SDPhotoBrowser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDPhotoBrowser.m; sourceTree = ""; }; + 4853029C1C3F6490004361A7 /* SDPhotoBrowserConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDPhotoBrowserConfig.h; sourceTree = ""; }; + 4853029D1C3F6490004361A7 /* SDWaitingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWaitingView.h; sourceTree = ""; }; + 4853029E1C3F6490004361A7 /* SDWaitingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWaitingView.m; sourceTree = ""; }; + 485302A01C3F6490004361A7 /* sdRefeshView_arrow@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sdRefeshView_arrow@2x.png"; sourceTree = ""; }; + 485302A11C3F6490004361A7 /* SDRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDRefresh.h; sourceTree = ""; }; + 485302A21C3F6490004361A7 /* SDRefreshFooterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDRefreshFooterView.h; sourceTree = ""; }; + 485302A31C3F6490004361A7 /* SDRefreshFooterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDRefreshFooterView.m; sourceTree = ""; }; + 485302A41C3F6490004361A7 /* SDRefreshHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDRefreshHeaderView.h; sourceTree = ""; }; + 485302A51C3F6490004361A7 /* SDRefreshHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDRefreshHeaderView.m; sourceTree = ""; }; + 485302A61C3F6490004361A7 /* SDRefreshView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDRefreshView.h; sourceTree = ""; }; + 485302A71C3F6490004361A7 /* SDRefreshView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDRefreshView.m; sourceTree = ""; }; + 485302A81C3F6490004361A7 /* UIView+SDExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+SDExtension.h"; sourceTree = ""; }; + 485302A91C3F6490004361A7 /* UIView+SDExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+SDExtension.m"; sourceTree = ""; }; + 485302AB1C3F6490004361A7 /* MKAnnotationView+WebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MKAnnotationView+WebCache.h"; sourceTree = ""; }; + 485302AC1C3F6490004361A7 /* MKAnnotationView+WebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MKAnnotationView+WebCache.m"; sourceTree = ""; }; + 485302AD1C3F6490004361A7 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+ImageContentType.h"; sourceTree = ""; }; + 485302AE1C3F6490004361A7 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+ImageContentType.m"; sourceTree = ""; }; + 485302AF1C3F6490004361A7 /* SDImageCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDImageCache.h; sourceTree = ""; }; + 485302B01C3F6490004361A7 /* SDImageCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDImageCache.m; sourceTree = ""; }; + 485302B11C3F6490004361A7 /* SDWebImageCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageCompat.h; sourceTree = ""; }; + 485302B21C3F6490004361A7 /* SDWebImageCompat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageCompat.m; sourceTree = ""; }; + 485302B31C3F6490004361A7 /* SDWebImageDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageDecoder.h; sourceTree = ""; }; + 485302B41C3F6490004361A7 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageDecoder.m; sourceTree = ""; }; + 485302B51C3F6490004361A7 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageDownloader.h; sourceTree = ""; }; + 485302B61C3F6490004361A7 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageDownloader.m; sourceTree = ""; }; + 485302B71C3F6490004361A7 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageDownloaderOperation.h; sourceTree = ""; }; + 485302B81C3F6490004361A7 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageDownloaderOperation.m; sourceTree = ""; }; + 485302B91C3F6490004361A7 /* SDWebImageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageManager.h; sourceTree = ""; }; + 485302BA1C3F6490004361A7 /* SDWebImageManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageManager.m; sourceTree = ""; }; + 485302BB1C3F6490004361A7 /* SDWebImageOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageOperation.h; sourceTree = ""; }; + 485302BC1C3F6490004361A7 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImagePrefetcher.h; sourceTree = ""; }; + 485302BD1C3F6490004361A7 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImagePrefetcher.m; sourceTree = ""; }; + 485302BE1C3F6490004361A7 /* UIButton+WebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+WebCache.h"; sourceTree = ""; }; + 485302BF1C3F6490004361A7 /* UIButton+WebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+WebCache.m"; sourceTree = ""; }; + 485302C01C3F6490004361A7 /* UIImage+GIF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+GIF.h"; sourceTree = ""; }; + 485302C11C3F6490004361A7 /* UIImage+GIF.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+GIF.m"; sourceTree = ""; }; + 485302C21C3F6490004361A7 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+MultiFormat.h"; sourceTree = ""; }; + 485302C31C3F6490004361A7 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+MultiFormat.m"; sourceTree = ""; }; + 485302C41C3F6490004361A7 /* UIImage+WebP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+WebP.h"; sourceTree = ""; }; + 485302C51C3F6490004361A7 /* UIImage+WebP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+WebP.m"; sourceTree = ""; }; + 485302C61C3F6490004361A7 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + 485302C71C3F6490004361A7 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + 485302C81C3F6490004361A7 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+WebCache.h"; sourceTree = ""; }; + 485302C91C3F6490004361A7 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+WebCache.m"; sourceTree = ""; }; + 485302CA1C3F6490004361A7 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+WebCacheOperation.h"; sourceTree = ""; }; + 485302CB1C3F6490004361A7 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+WebCacheOperation.m"; sourceTree = ""; }; + 485302E61C3F65EE004361A7 /* TAAbstractDotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAAbstractDotView.h; sourceTree = ""; }; + 485302E71C3F65EE004361A7 /* TAAbstractDotView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TAAbstractDotView.m; sourceTree = ""; }; + 485302E81C3F65EE004361A7 /* TAAnimatedDotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAAnimatedDotView.h; sourceTree = ""; }; + 485302E91C3F65EE004361A7 /* TAAnimatedDotView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TAAnimatedDotView.m; sourceTree = ""; }; + 485302EA1C3F65EE004361A7 /* TADotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TADotView.h; sourceTree = ""; }; + 485302EB1C3F65EE004361A7 /* TADotView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TADotView.m; sourceTree = ""; }; + 485302EC1C3F65EE004361A7 /* TAPageControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAPageControl.h; sourceTree = ""; }; + 485302ED1C3F65EE004361A7 /* TAPageControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TAPageControl.m; sourceTree = ""; }; + 485302EE1C3F65EE004361A7 /* SDCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDCollectionViewCell.h; sourceTree = ""; }; + 485302EF1C3F65EE004361A7 /* SDCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDCollectionViewCell.m; sourceTree = ""; }; + 485302F01C3F65EE004361A7 /* SDCycleScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDCycleScrollView.h; sourceTree = ""; }; + 485302F11C3F65EE004361A7 /* SDCycleScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDCycleScrollView.m; sourceTree = ""; }; + 485302F21C3F65EE004361A7 /* UIView+SDExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+SDExtension.h"; sourceTree = ""; }; + 485302F31C3F65EE004361A7 /* UIView+SDExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+SDExtension.m"; sourceTree = ""; }; + 485303041C3F977A004361A7 /* DemoVC0.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC0.h; sourceTree = ""; }; + 485303051C3F977A004361A7 /* DemoVC0.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC0.m; sourceTree = ""; }; + 485303071C3F977A004361A7 /* DemoVC1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC1.h; sourceTree = ""; }; + 485303081C3F977A004361A7 /* DemoVC1.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC1.m; sourceTree = ""; }; + 4853030A1C3F977A004361A7 /* DemoVC2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC2.h; sourceTree = ""; }; + 4853030B1C3F977A004361A7 /* DemoVC2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC2.m; sourceTree = ""; }; + 4853030D1C3F977A004361A7 /* DemoVC3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC3.h; sourceTree = ""; }; + 4853030E1C3F977A004361A7 /* DemoVC3.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC3.m; sourceTree = ""; }; + 4853030F1C3F977A004361A7 /* TestCell2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestCell2.h; sourceTree = ""; }; + 485303101C3F977A004361A7 /* TestCell2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestCell2.m; sourceTree = ""; }; + 485303121C3F977A004361A7 /* DemoVC4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC4.h; sourceTree = ""; }; + 485303131C3F977A004361A7 /* DemoVC4.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC4.m; sourceTree = ""; }; + 485303151C3F977A004361A7 /* DemoVC5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC5.h; sourceTree = ""; }; + 485303161C3F977A004361A7 /* DemoVC5.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC5.m; sourceTree = ""; }; + 485303171C3F977A004361A7 /* DemoVC5CellTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC5CellTableViewCell.h; sourceTree = ""; }; + 485303181C3F977A004361A7 /* DemoVC5CellTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC5CellTableViewCell.m; sourceTree = ""; }; + 485303191C3F977A004361A7 /* DemoVC5Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC5Model.h; sourceTree = ""; }; + 4853031A1C3F977A004361A7 /* DemoVC5Model.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC5Model.m; sourceTree = ""; }; + 4853031C1C3F977A004361A7 /* DemoVC6.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC6.h; sourceTree = ""; }; + 4853031D1C3F977A004361A7 /* DemoVC6.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC6.m; sourceTree = ""; }; + 4853031F1C3F977A004361A7 /* DemoVC7.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC7.h; sourceTree = ""; }; + 485303201C3F977A004361A7 /* DemoVC7.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC7.m; sourceTree = ""; }; + 485303211C3F977A004361A7 /* DemoVC7Cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC7Cell.h; sourceTree = ""; }; + 485303221C3F977A004361A7 /* DemoVC7Cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC7Cell.m; sourceTree = ""; }; + 485303231C3F977A004361A7 /* DemoVC7Cell2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC7Cell2.h; sourceTree = ""; }; + 485303241C3F977A004361A7 /* DemoVC7Cell2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC7Cell2.m; sourceTree = ""; }; + 485303251C3F977A004361A7 /* DemoVC7Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC7Model.h; sourceTree = ""; }; + 485303261C3F977A004361A7 /* DemoVC7Model.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC7Model.m; sourceTree = ""; }; + 485303281C3F977A004361A7 /* DemoVC8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC8.h; sourceTree = ""; }; + 485303291C3F977A004361A7 /* DemoVC8.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC8.m; sourceTree = ""; }; + 4853032B1C3F977A004361A7 /* Demo9Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Demo9Model.h; sourceTree = ""; }; + 4853032C1C3F977A004361A7 /* Demo9Model.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Demo9Model.m; sourceTree = ""; }; + 4853032D1C3F977A004361A7 /* DemoVC9.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC9.h; sourceTree = ""; }; + 4853032E1C3F977A004361A7 /* DemoVC9.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC9.m; sourceTree = ""; }; + 4853032F1C3F977A004361A7 /* DemoVC9Cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC9Cell.h; sourceTree = ""; }; + 485303301C3F977A004361A7 /* DemoVC9Cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC9Cell.m; sourceTree = ""; }; + 485303311C3F977A004361A7 /* DemoVC9HeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC9HeaderView.h; sourceTree = ""; }; + 485303321C3F977A004361A7 /* DemoVC9HeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC9HeaderView.m; sourceTree = ""; }; + 485303331C3F977A004361A7 /* SDWeiXinPhotoContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWeiXinPhotoContainerView.h; sourceTree = ""; }; + 485303341C3F977A004361A7 /* SDWeiXinPhotoContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWeiXinPhotoContainerView.m; sourceTree = ""; }; + 4853034A1C3F97AA004361A7 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 4853034B1C3F97AA004361A7 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 4853034C1C3F97AA004361A7 /* DemoTableViewControler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoTableViewControler.h; sourceTree = ""; }; + 4853034D1C3F97AA004361A7 /* DemoTableViewControler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoTableViewControler.m; sourceTree = ""; }; + 4853034E1C3F97AA004361A7 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + 4853034F1C3F97AA004361A7 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + 485303531C3F97E6004361A7 /* DemoCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoCell.h; sourceTree = ""; }; + 485303541C3F97E6004361A7 /* DemoCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoCell.m; sourceTree = ""; }; 487D3EB11BCB9EC700A66173 /* SDAutoLayout 测试 Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SDAutoLayout 测试 Demo.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 487D3EB51BCB9EC700A66173 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 487D3EB61BCB9EC700A66173 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 487D3EB81BCB9EC700A66173 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 487D3EB91BCB9EC700A66173 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 487D3EBB1BCB9EC700A66173 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - 487D3EBC1BCB9EC700A66173 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 487D3EBF1BCB9EC700A66173 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 487D3EC11BCB9EC700A66173 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 487D3EC41BCB9EC700A66173 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 487D3ECA1BCB9EC700A66173 /* SDAutoLayout 测试 DemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SDAutoLayout 测试 DemoTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 487D3ECF1BCB9EC700A66173 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 487D3ED01BCB9EC700A66173 /* SDAutoLayout____DemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "SDAutoLayout____DemoTests.m"; sourceTree = ""; }; - 487D3EDF1BCBA55700A66173 /* DemoVC0.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC0.h; sourceTree = ""; }; - 487D3EE01BCBA55700A66173 /* DemoVC0.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC0.m; sourceTree = ""; }; - 487D3EE21BCBA6CA00A66173 /* DemoVC1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC1.h; sourceTree = ""; }; - 487D3EE31BCBA6CA00A66173 /* DemoVC1.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC1.m; sourceTree = ""; }; - 487D3EE51BCBA78B00A66173 /* DemoTableViewControler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoTableViewControler.h; sourceTree = ""; }; - 487D3EE61BCBA78B00A66173 /* DemoTableViewControler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoTableViewControler.m; sourceTree = ""; }; - 487D3EE81BCBACF500A66173 /* DemoVC2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC2.h; sourceTree = ""; }; - 487D3EE91BCBACF500A66173 /* DemoVC2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC2.m; sourceTree = ""; }; - 487D3EEC1BCBB61A00A66173 /* TestCell2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestCell2.h; sourceTree = ""; }; - 487D3EED1BCBB61A00A66173 /* TestCell2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestCell2.m; sourceTree = ""; }; - 487D3EF21BCBB71500A66173 /* DemoVC3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC3.h; sourceTree = ""; }; - 487D3EF31BCBB71500A66173 /* DemoVC3.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC3.m; sourceTree = ""; }; - 48D632311BD0A7B500F86A88 /* DemoVC4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC4.h; sourceTree = ""; }; - 48D632321BD0A7B500F86A88 /* DemoVC4.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC4.m; sourceTree = ""; }; 48DA2AFC1BFB529200A771E6 /* UITableView+SDAutoTableViewCellHeight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITableView+SDAutoTableViewCellHeight.h"; sourceTree = ""; }; 48DA2AFD1BFB529200A771E6 /* UITableView+SDAutoTableViewCellHeight.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITableView+SDAutoTableViewCellHeight.m"; sourceTree = ""; }; 48DA2AFE1BFB529200A771E6 /* UIView+SDAutoLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+SDAutoLayout.h"; sourceTree = ""; }; 48DA2AFF1BFB529200A771E6 /* UIView+SDAutoLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+SDAutoLayout.m"; sourceTree = ""; }; - 48DBCD061C01D884002EC476 /* DemoVC5CellTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC5CellTableViewCell.h; sourceTree = ""; }; - 48DBCD071C01D884002EC476 /* DemoVC5CellTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC5CellTableViewCell.m; sourceTree = ""; }; - 48DBCD091C01D89C002EC476 /* DemoVC5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC5.h; sourceTree = ""; }; - 48DBCD0A1C01D89C002EC476 /* DemoVC5.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC5.m; sourceTree = ""; }; - 48DBCD0C1C01DA1E002EC476 /* DemoVC5Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC5Model.h; sourceTree = ""; }; - 48DBCD0D1C01DA1E002EC476 /* DemoVC5Model.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC5Model.m; sourceTree = ""; }; 48DBCD101C01E045002EC476 /* icon0.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = icon0.jpg; sourceTree = ""; }; 48DBCD111C01E045002EC476 /* icon1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = icon1.jpg; sourceTree = ""; }; 48DBCD121C01E045002EC476 /* icon2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = icon2.jpg; sourceTree = ""; }; @@ -205,16 +239,6 @@ 48DBCD171C01E045002EC476 /* pic2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic2.jpg; sourceTree = ""; }; 48DBCD181C01E045002EC476 /* pic3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic3.jpg; sourceTree = ""; }; 48DBCD191C01E045002EC476 /* pic4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic4.jpg; sourceTree = ""; }; - 99E7289D1BE5E22D00771161 /* sdRefeshView_arrow@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sdRefeshView_arrow@2x.png"; sourceTree = ""; }; - 99E7289E1BE5E22D00771161 /* SDRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDRefresh.h; sourceTree = ""; }; - 99E7289F1BE5E22D00771161 /* SDRefreshFooterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDRefreshFooterView.h; sourceTree = ""; }; - 99E728A01BE5E22D00771161 /* SDRefreshFooterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDRefreshFooterView.m; sourceTree = ""; }; - 99E728A11BE5E22D00771161 /* SDRefreshHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDRefreshHeaderView.h; sourceTree = ""; }; - 99E728A21BE5E22D00771161 /* SDRefreshHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDRefreshHeaderView.m; sourceTree = ""; }; - 99E728A31BE5E22D00771161 /* SDRefreshView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDRefreshView.h; sourceTree = ""; }; - 99E728A41BE5E22D00771161 /* SDRefreshView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDRefreshView.m; sourceTree = ""; }; - 99E728A51BE5E22D00771161 /* UIView+SDExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+SDExtension.h"; sourceTree = ""; }; - 99E728A61BE5E22D00771161 /* UIView+SDExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+SDExtension.m"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -235,108 +259,257 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 4841F5D81C2A8256004979F4 /* DemoVC9 */ = { + 485302961C3F648F004361A7 /* Vender */ = { isa = PBXGroup; children = ( - 4841F5D91C2A8275004979F4 /* DemoVC9.h */, - 4841F5DA1C2A8275004979F4 /* DemoVC9.m */, - 4841F5DC1C2A8632004979F4 /* DemoVC9Cell.h */, - 4841F5DD1C2A8632004979F4 /* DemoVC9Cell.m */, - 4841F5DF1C2A90CF004979F4 /* Demo9Model.h */, - 4841F5E01C2A90CF004979F4 /* Demo9Model.m */, - 4841F5E21C2A94ED004979F4 /* SDWeiXinPhotoContainerView.h */, - 4841F5E31C2A94ED004979F4 /* SDWeiXinPhotoContainerView.m */, - 4841F5ED1C2AC7D6004979F4 /* DemoVC9HeaderView.h */, - 4841F5EE1C2AC7D6004979F4 /* DemoVC9HeaderView.m */, - ); - name = DemoVC9; + 485302E41C3F65EE004361A7 /* SDCycleScrollView */, + 485302971C3F648F004361A7 /* SDPhotoBrowser */, + 4853029F1C3F6490004361A7 /* SDRefeshView */, + 485302AA1C3F6490004361A7 /* SDWebImage */, + ); + path = Vender; sourceTree = ""; }; - 4841F5F41C2AD949004979F4 /* SDPhotoBrowser */ = { + 485302971C3F648F004361A7 /* SDPhotoBrowser */ = { isa = PBXGroup; children = ( - 4841F5F51C2AD949004979F4 /* SDBrowserImageView.h */, - 4841F5F61C2AD949004979F4 /* SDBrowserImageView.m */, - 4841F5F71C2AD949004979F4 /* SDPhotoBrowser.h */, - 4841F5F81C2AD949004979F4 /* SDPhotoBrowser.m */, - 4841F5F91C2AD949004979F4 /* SDPhotoBrowserConfig.h */, - 4841F5FA1C2AD949004979F4 /* SDWaitingView.h */, - 4841F5FB1C2AD949004979F4 /* SDWaitingView.m */, + 485302981C3F648F004361A7 /* SDBrowserImageView.h */, + 485302991C3F6490004361A7 /* SDBrowserImageView.m */, + 4853029A1C3F6490004361A7 /* SDPhotoBrowser.h */, + 4853029B1C3F6490004361A7 /* SDPhotoBrowser.m */, + 4853029C1C3F6490004361A7 /* SDPhotoBrowserConfig.h */, + 4853029D1C3F6490004361A7 /* SDWaitingView.h */, + 4853029E1C3F6490004361A7 /* SDWaitingView.m */, ); path = SDPhotoBrowser; sourceTree = ""; }; - 4841F6311C2ADCAE004979F4 /* SDWebImage */ = { + 4853029F1C3F6490004361A7 /* SDRefeshView */ = { + isa = PBXGroup; + children = ( + 485302A01C3F6490004361A7 /* sdRefeshView_arrow@2x.png */, + 485302A11C3F6490004361A7 /* SDRefresh.h */, + 485302A21C3F6490004361A7 /* SDRefreshFooterView.h */, + 485302A31C3F6490004361A7 /* SDRefreshFooterView.m */, + 485302A41C3F6490004361A7 /* SDRefreshHeaderView.h */, + 485302A51C3F6490004361A7 /* SDRefreshHeaderView.m */, + 485302A61C3F6490004361A7 /* SDRefreshView.h */, + 485302A71C3F6490004361A7 /* SDRefreshView.m */, + 485302A81C3F6490004361A7 /* UIView+SDExtension.h */, + 485302A91C3F6490004361A7 /* UIView+SDExtension.m */, + ); + path = SDRefeshView; + sourceTree = ""; + }; + 485302AA1C3F6490004361A7 /* SDWebImage */ = { isa = PBXGroup; children = ( - 4841F6321C2ADCAE004979F4 /* MKAnnotationView+WebCache.h */, - 4841F6331C2ADCAE004979F4 /* MKAnnotationView+WebCache.m */, - 4841F6341C2ADCAE004979F4 /* NSData+ImageContentType.h */, - 4841F6351C2ADCAE004979F4 /* NSData+ImageContentType.m */, - 4841F6361C2ADCAE004979F4 /* SDImageCache.h */, - 4841F6371C2ADCAE004979F4 /* SDImageCache.m */, - 4841F6381C2ADCAE004979F4 /* SDWebImageCompat.h */, - 4841F6391C2ADCAE004979F4 /* SDWebImageCompat.m */, - 4841F63A1C2ADCAE004979F4 /* SDWebImageDecoder.h */, - 4841F63B1C2ADCAE004979F4 /* SDWebImageDecoder.m */, - 4841F63C1C2ADCAE004979F4 /* SDWebImageDownloader.h */, - 4841F63D1C2ADCAE004979F4 /* SDWebImageDownloader.m */, - 4841F63E1C2ADCAE004979F4 /* SDWebImageDownloaderOperation.h */, - 4841F63F1C2ADCAE004979F4 /* SDWebImageDownloaderOperation.m */, - 4841F6401C2ADCAE004979F4 /* SDWebImageManager.h */, - 4841F6411C2ADCAE004979F4 /* SDWebImageManager.m */, - 4841F6421C2ADCAE004979F4 /* SDWebImageOperation.h */, - 4841F6431C2ADCAE004979F4 /* SDWebImagePrefetcher.h */, - 4841F6441C2ADCAE004979F4 /* SDWebImagePrefetcher.m */, - 4841F6451C2ADCAE004979F4 /* UIButton+WebCache.h */, - 4841F6461C2ADCAE004979F4 /* UIButton+WebCache.m */, - 4841F6471C2ADCAE004979F4 /* UIImage+GIF.h */, - 4841F6481C2ADCAE004979F4 /* UIImage+GIF.m */, - 4841F6491C2ADCAE004979F4 /* UIImage+MultiFormat.h */, - 4841F64A1C2ADCAE004979F4 /* UIImage+MultiFormat.m */, - 4841F64B1C2ADCAE004979F4 /* UIImage+WebP.h */, - 4841F64C1C2ADCAE004979F4 /* UIImage+WebP.m */, - 4841F64D1C2ADCAE004979F4 /* UIImageView+HighlightedWebCache.h */, - 4841F64E1C2ADCAE004979F4 /* UIImageView+HighlightedWebCache.m */, - 4841F64F1C2ADCAE004979F4 /* UIImageView+WebCache.h */, - 4841F6501C2ADCAE004979F4 /* UIImageView+WebCache.m */, - 4841F6511C2ADCAE004979F4 /* UIView+WebCacheOperation.h */, - 4841F6521C2ADCAE004979F4 /* UIView+WebCacheOperation.m */, + 485302AB1C3F6490004361A7 /* MKAnnotationView+WebCache.h */, + 485302AC1C3F6490004361A7 /* MKAnnotationView+WebCache.m */, + 485302AD1C3F6490004361A7 /* NSData+ImageContentType.h */, + 485302AE1C3F6490004361A7 /* NSData+ImageContentType.m */, + 485302AF1C3F6490004361A7 /* SDImageCache.h */, + 485302B01C3F6490004361A7 /* SDImageCache.m */, + 485302B11C3F6490004361A7 /* SDWebImageCompat.h */, + 485302B21C3F6490004361A7 /* SDWebImageCompat.m */, + 485302B31C3F6490004361A7 /* SDWebImageDecoder.h */, + 485302B41C3F6490004361A7 /* SDWebImageDecoder.m */, + 485302B51C3F6490004361A7 /* SDWebImageDownloader.h */, + 485302B61C3F6490004361A7 /* SDWebImageDownloader.m */, + 485302B71C3F6490004361A7 /* SDWebImageDownloaderOperation.h */, + 485302B81C3F6490004361A7 /* SDWebImageDownloaderOperation.m */, + 485302B91C3F6490004361A7 /* SDWebImageManager.h */, + 485302BA1C3F6490004361A7 /* SDWebImageManager.m */, + 485302BB1C3F6490004361A7 /* SDWebImageOperation.h */, + 485302BC1C3F6490004361A7 /* SDWebImagePrefetcher.h */, + 485302BD1C3F6490004361A7 /* SDWebImagePrefetcher.m */, + 485302BE1C3F6490004361A7 /* UIButton+WebCache.h */, + 485302BF1C3F6490004361A7 /* UIButton+WebCache.m */, + 485302C01C3F6490004361A7 /* UIImage+GIF.h */, + 485302C11C3F6490004361A7 /* UIImage+GIF.m */, + 485302C21C3F6490004361A7 /* UIImage+MultiFormat.h */, + 485302C31C3F6490004361A7 /* UIImage+MultiFormat.m */, + 485302C41C3F6490004361A7 /* UIImage+WebP.h */, + 485302C51C3F6490004361A7 /* UIImage+WebP.m */, + 485302C61C3F6490004361A7 /* UIImageView+HighlightedWebCache.h */, + 485302C71C3F6490004361A7 /* UIImageView+HighlightedWebCache.m */, + 485302C81C3F6490004361A7 /* UIImageView+WebCache.h */, + 485302C91C3F6490004361A7 /* UIImageView+WebCache.m */, + 485302CA1C3F6490004361A7 /* UIView+WebCacheOperation.h */, + 485302CB1C3F6490004361A7 /* UIView+WebCacheOperation.m */, ); path = SDWebImage; sourceTree = ""; }; - 484511661C24395F0071BE2C /* DemoVC7 */ = { + 485302E41C3F65EE004361A7 /* SDCycleScrollView */ = { + isa = PBXGroup; + children = ( + 485302E51C3F65EE004361A7 /* PageControl */, + 485302EE1C3F65EE004361A7 /* SDCollectionViewCell.h */, + 485302EF1C3F65EE004361A7 /* SDCollectionViewCell.m */, + 485302F01C3F65EE004361A7 /* SDCycleScrollView.h */, + 485302F11C3F65EE004361A7 /* SDCycleScrollView.m */, + 485302F21C3F65EE004361A7 /* UIView+SDExtension.h */, + 485302F31C3F65EE004361A7 /* UIView+SDExtension.m */, + ); + path = SDCycleScrollView; + sourceTree = ""; + }; + 485302E51C3F65EE004361A7 /* PageControl */ = { + isa = PBXGroup; + children = ( + 485302E61C3F65EE004361A7 /* TAAbstractDotView.h */, + 485302E71C3F65EE004361A7 /* TAAbstractDotView.m */, + 485302E81C3F65EE004361A7 /* TAAnimatedDotView.h */, + 485302E91C3F65EE004361A7 /* TAAnimatedDotView.m */, + 485302EA1C3F65EE004361A7 /* TADotView.h */, + 485302EB1C3F65EE004361A7 /* TADotView.m */, + 485302EC1C3F65EE004361A7 /* TAPageControl.h */, + 485302ED1C3F65EE004361A7 /* TAPageControl.m */, + ); + path = PageControl; + sourceTree = ""; + }; + 485303021C3F977A004361A7 /* DemoVC */ = { + isa = PBXGroup; + children = ( + 485303031C3F977A004361A7 /* DemoVC0 */, + 485303061C3F977A004361A7 /* DemoVC1 */, + 485303091C3F977A004361A7 /* DemoVC2 */, + 4853030C1C3F977A004361A7 /* DemoVC3 */, + 485303111C3F977A004361A7 /* DemoVC4 */, + 485303141C3F977A004361A7 /* DemoVC5 */, + 4853031B1C3F977A004361A7 /* DemoVC6 */, + 4853031E1C3F977A004361A7 /* DemoVC7 */, + 485303271C3F977A004361A7 /* DemoVC8 */, + 4853032A1C3F977A004361A7 /* DemoVC9 */, + ); + path = DemoVC; + sourceTree = ""; + }; + 485303031C3F977A004361A7 /* DemoVC0 */ = { isa = PBXGroup; children = ( - 484511671C2439830071BE2C /* DemoVC7.h */, - 484511681C2439830071BE2C /* DemoVC7.m */, - 484511691C2439830071BE2C /* DemoVC7Cell.h */, - 4845116A1C2439830071BE2C /* DemoVC7Cell.m */, - 4845116B1C2439830071BE2C /* DemoVC7Cell2.h */, - 4845116C1C2439830071BE2C /* DemoVC7Cell2.m */, - 4845116D1C2439830071BE2C /* DemoVC7Model.h */, - 4845116E1C2439830071BE2C /* DemoVC7Model.m */, - ); - name = DemoVC7; + 485303041C3F977A004361A7 /* DemoVC0.h */, + 485303051C3F977A004361A7 /* DemoVC0.m */, + ); + path = DemoVC0; + sourceTree = ""; + }; + 485303061C3F977A004361A7 /* DemoVC1 */ = { + isa = PBXGroup; + children = ( + 485303071C3F977A004361A7 /* DemoVC1.h */, + 485303081C3F977A004361A7 /* DemoVC1.m */, + ); + path = DemoVC1; sourceTree = ""; }; - 4867A48C1C292EB500BE8767 /* DemoVC8 */ = { + 485303091C3F977A004361A7 /* DemoVC2 */ = { isa = PBXGroup; children = ( - 4867A48D1C292EF800BE8767 /* DemoVC8.h */, - 4867A48E1C292EF800BE8767 /* DemoVC8.m */, + 4853030A1C3F977A004361A7 /* DemoVC2.h */, + 4853030B1C3F977A004361A7 /* DemoVC2.m */, ); - name = DemoVC8; + path = DemoVC2; sourceTree = ""; }; - 486A382A1C0D8499000D43E5 /* DemoVC6 */ = { + 4853030C1C3F977A004361A7 /* DemoVC3 */ = { isa = PBXGroup; children = ( - 486A382B1C0D852C000D43E5 /* DemoVC6.h */, - 486A382C1C0D852C000D43E5 /* DemoVC6.m */, + 4853030D1C3F977A004361A7 /* DemoVC3.h */, + 4853030E1C3F977A004361A7 /* DemoVC3.m */, + 4853030F1C3F977A004361A7 /* TestCell2.h */, + 485303101C3F977A004361A7 /* TestCell2.m */, ); - name = DemoVC6; + path = DemoVC3; + sourceTree = ""; + }; + 485303111C3F977A004361A7 /* DemoVC4 */ = { + isa = PBXGroup; + children = ( + 485303121C3F977A004361A7 /* DemoVC4.h */, + 485303131C3F977A004361A7 /* DemoVC4.m */, + ); + path = DemoVC4; + sourceTree = ""; + }; + 485303141C3F977A004361A7 /* DemoVC5 */ = { + isa = PBXGroup; + children = ( + 485303151C3F977A004361A7 /* DemoVC5.h */, + 485303161C3F977A004361A7 /* DemoVC5.m */, + 485303171C3F977A004361A7 /* DemoVC5CellTableViewCell.h */, + 485303181C3F977A004361A7 /* DemoVC5CellTableViewCell.m */, + 485303191C3F977A004361A7 /* DemoVC5Model.h */, + 4853031A1C3F977A004361A7 /* DemoVC5Model.m */, + ); + path = DemoVC5; + sourceTree = ""; + }; + 4853031B1C3F977A004361A7 /* DemoVC6 */ = { + isa = PBXGroup; + children = ( + 4853031C1C3F977A004361A7 /* DemoVC6.h */, + 4853031D1C3F977A004361A7 /* DemoVC6.m */, + ); + path = DemoVC6; + sourceTree = ""; + }; + 4853031E1C3F977A004361A7 /* DemoVC7 */ = { + isa = PBXGroup; + children = ( + 4853031F1C3F977A004361A7 /* DemoVC7.h */, + 485303201C3F977A004361A7 /* DemoVC7.m */, + 485303211C3F977A004361A7 /* DemoVC7Cell.h */, + 485303221C3F977A004361A7 /* DemoVC7Cell.m */, + 485303231C3F977A004361A7 /* DemoVC7Cell2.h */, + 485303241C3F977A004361A7 /* DemoVC7Cell2.m */, + 485303251C3F977A004361A7 /* DemoVC7Model.h */, + 485303261C3F977A004361A7 /* DemoVC7Model.m */, + ); + path = DemoVC7; + sourceTree = ""; + }; + 485303271C3F977A004361A7 /* DemoVC8 */ = { + isa = PBXGroup; + children = ( + 485303281C3F977A004361A7 /* DemoVC8.h */, + 485303291C3F977A004361A7 /* DemoVC8.m */, + ); + path = DemoVC8; + sourceTree = ""; + }; + 4853032A1C3F977A004361A7 /* DemoVC9 */ = { + isa = PBXGroup; + children = ( + 4853032B1C3F977A004361A7 /* Demo9Model.h */, + 4853032C1C3F977A004361A7 /* Demo9Model.m */, + 4853032D1C3F977A004361A7 /* DemoVC9.h */, + 4853032E1C3F977A004361A7 /* DemoVC9.m */, + 4853032F1C3F977A004361A7 /* DemoVC9Cell.h */, + 485303301C3F977A004361A7 /* DemoVC9Cell.m */, + 485303311C3F977A004361A7 /* DemoVC9HeaderView.h */, + 485303321C3F977A004361A7 /* DemoVC9HeaderView.m */, + 485303331C3F977A004361A7 /* SDWeiXinPhotoContainerView.h */, + 485303341C3F977A004361A7 /* SDWeiXinPhotoContainerView.m */, + ); + path = DemoVC9; + sourceTree = ""; + }; + 485303491C3F97AA004361A7 /* Others */ = { + isa = PBXGroup; + children = ( + 4853034A1C3F97AA004361A7 /* AppDelegate.h */, + 4853034B1C3F97AA004361A7 /* AppDelegate.m */, + 4853034C1C3F97AA004361A7 /* DemoTableViewControler.h */, + 4853034D1C3F97AA004361A7 /* DemoTableViewControler.m */, + 4853034E1C3F97AA004361A7 /* ViewController.h */, + 4853034F1C3F97AA004361A7 /* ViewController.m */, + 485303531C3F97E6004361A7 /* DemoCell.h */, + 485303541C3F97E6004361A7 /* DemoCell.m */, + ); + path = Others; sourceTree = ""; }; 487D3EA81BCB9EC700A66173 = { @@ -360,15 +533,10 @@ 487D3EB31BCB9EC700A66173 /* SDAutoLayout 测试 Demo */ = { isa = PBXGroup; children = ( - 4841F6311C2ADCAE004979F4 /* SDWebImage */, - 4841F5F41C2AD949004979F4 /* SDPhotoBrowser */, + 485303491C3F97AA004361A7 /* Others */, + 485303021C3F977A004361A7 /* DemoVC */, + 485302961C3F648F004361A7 /* Vender */, 48DA2AFB1BFB529200A771E6 /* SDAutoLayout */, - 99E7289C1BE5E22D00771161 /* SDRefeshView */, - 487D3EDE1BCBA52900A66173 /* DemoVC */, - 487D3EB81BCB9EC700A66173 /* AppDelegate.h */, - 487D3EB91BCB9EC700A66173 /* AppDelegate.m */, - 487D3EE51BCBA78B00A66173 /* DemoTableViewControler.h */, - 487D3EE61BCBA78B00A66173 /* DemoTableViewControler.m */, 487D3EBE1BCB9EC700A66173 /* Main.storyboard */, 487D3EC11BCB9EC700A66173 /* Images.xcassets */, 487D3EC31BCB9EC700A66173 /* LaunchScreen.xib */, @@ -404,40 +572,6 @@ name = "Supporting Files"; sourceTree = ""; }; - 487D3EDE1BCBA52900A66173 /* DemoVC */ = { - isa = PBXGroup; - children = ( - 4841F5D81C2A8256004979F4 /* DemoVC9 */, - 4867A48C1C292EB500BE8767 /* DemoVC8 */, - 484511661C24395F0071BE2C /* DemoVC7 */, - 486A382A1C0D8499000D43E5 /* DemoVC6 */, - 48DBCD051C01D82A002EC476 /* DemoVC5 */, - 487D3EBB1BCB9EC700A66173 /* ViewController.h */, - 487D3EBC1BCB9EC700A66173 /* ViewController.m */, - 487D3EDF1BCBA55700A66173 /* DemoVC0.h */, - 487D3EE01BCBA55700A66173 /* DemoVC0.m */, - 487D3EE21BCBA6CA00A66173 /* DemoVC1.h */, - 487D3EE31BCBA6CA00A66173 /* DemoVC1.m */, - 487D3EE81BCBACF500A66173 /* DemoVC2.h */, - 487D3EE91BCBACF500A66173 /* DemoVC2.m */, - 487D3EEB1BCBB5A400A66173 /* DemoVC3 */, - 48D632311BD0A7B500F86A88 /* DemoVC4.h */, - 48D632321BD0A7B500F86A88 /* DemoVC4.m */, - ); - name = DemoVC; - sourceTree = ""; - }; - 487D3EEB1BCBB5A400A66173 /* DemoVC3 */ = { - isa = PBXGroup; - children = ( - 487D3EEC1BCBB61A00A66173 /* TestCell2.h */, - 487D3EED1BCBB61A00A66173 /* TestCell2.m */, - 487D3EF21BCBB71500A66173 /* DemoVC3.h */, - 487D3EF31BCBB71500A66173 /* DemoVC3.m */, - ); - name = DemoVC3; - sourceTree = ""; - }; 48DA2AFB1BFB529200A771E6 /* SDAutoLayout */ = { isa = PBXGroup; children = ( @@ -449,19 +583,6 @@ path = SDAutoLayout; sourceTree = ""; }; - 48DBCD051C01D82A002EC476 /* DemoVC5 */ = { - isa = PBXGroup; - children = ( - 48DBCD061C01D884002EC476 /* DemoVC5CellTableViewCell.h */, - 48DBCD071C01D884002EC476 /* DemoVC5CellTableViewCell.m */, - 48DBCD091C01D89C002EC476 /* DemoVC5.h */, - 48DBCD0A1C01D89C002EC476 /* DemoVC5.m */, - 48DBCD0C1C01DA1E002EC476 /* DemoVC5Model.h */, - 48DBCD0D1C01DA1E002EC476 /* DemoVC5Model.m */, - ); - name = DemoVC5; - sourceTree = ""; - }; 48DBCD0F1C01DEB1002EC476 /* Images */ = { isa = PBXGroup; children = ( @@ -485,23 +606,6 @@ path = Images; sourceTree = ""; }; - 99E7289C1BE5E22D00771161 /* SDRefeshView */ = { - isa = PBXGroup; - children = ( - 99E7289D1BE5E22D00771161 /* sdRefeshView_arrow@2x.png */, - 99E7289E1BE5E22D00771161 /* SDRefresh.h */, - 99E7289F1BE5E22D00771161 /* SDRefreshFooterView.h */, - 99E728A01BE5E22D00771161 /* SDRefreshFooterView.m */, - 99E728A11BE5E22D00771161 /* SDRefreshHeaderView.h */, - 99E728A21BE5E22D00771161 /* SDRefreshHeaderView.m */, - 99E728A31BE5E22D00771161 /* SDRefreshView.h */, - 99E728A41BE5E22D00771161 /* SDRefreshView.m */, - 99E728A51BE5E22D00771161 /* UIView+SDExtension.h */, - 99E728A61BE5E22D00771161 /* UIView+SDExtension.m */, - ); - path = SDRefeshView; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -590,6 +694,7 @@ 48DBCD211C01E045002EC476 /* pic2.jpg in Resources */, 48DBCD231C01E045002EC476 /* pic4.jpg in Resources */, 48DBCD1F1C01E045002EC476 /* pic0.jpg in Resources */, + 485302CF1C3F6490004361A7 /* sdRefeshView_arrow@2x.png in Resources */, 4841F5F21C2ACC2B004979F4 /* pbg.jpg in Resources */, 487D3EC01BCB9EC700A66173 /* Main.storyboard in Resources */, 4841F5F31C2ACC2B004979F4 /* picon.jpg in Resources */, @@ -601,7 +706,6 @@ 4841F5EC1C2ABC60004979F4 /* pic8.jpg in Resources */, 487D3EC21BCB9EC700A66173 /* Images.xcassets in Resources */, 48DBCD1C1C01E045002EC476 /* icon2.jpg in Resources */, - 99E728A71BE5E22D00771161 /* sdRefeshView_arrow@2x.png in Resources */, 48DBCD1E1C01E045002EC476 /* icon4.jpg in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -620,55 +724,63 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 487D3EE71BCBA78B00A66173 /* DemoTableViewControler.m in Sources */, - 487D3EBD1BCB9EC700A66173 /* ViewController.m in Sources */, + 485303411C3F977A004361A7 /* DemoVC7Cell2.m in Sources */, + 4853033C1C3F977A004361A7 /* DemoVC5CellTableViewCell.m in Sources */, + 485303501C3F97AA004361A7 /* AppDelegate.m in Sources */, + 485302F61C3F65EE004361A7 /* TADotView.m in Sources */, 48DA2B011BFB529200A771E6 /* UIView+SDAutoLayout.m in Sources */, - 4841F65A1C2ADCAE004979F4 /* SDWebImageManager.m in Sources */, - 487D3EF41BCBB71500A66173 /* DemoVC3.m in Sources */, - 486A382D1C0D852C000D43E5 /* DemoVC6.m in Sources */, - 4841F5DE1C2A8632004979F4 /* DemoVC9Cell.m in Sources */, - 4841F65E1C2ADCAE004979F4 /* UIImage+MultiFormat.m in Sources */, - 4841F5DB1C2A8275004979F4 /* DemoVC9.m in Sources */, - 4841F6581C2ADCAE004979F4 /* SDWebImageDownloader.m in Sources */, - 48DBCD0E1C01DA1E002EC476 /* DemoVC5Model.m in Sources */, - 4841F65F1C2ADCAE004979F4 /* UIImage+WebP.m in Sources */, - 4841F5FE1C2AD949004979F4 /* SDWaitingView.m in Sources */, - 484511711C2439830071BE2C /* DemoVC7Cell2.m in Sources */, - 4841F5FC1C2AD949004979F4 /* SDBrowserImageView.m in Sources */, - 484511721C2439830071BE2C /* DemoVC7Model.m in Sources */, - 4841F6601C2ADCAE004979F4 /* UIImageView+HighlightedWebCache.m in Sources */, - 4841F6571C2ADCAE004979F4 /* SDWebImageDecoder.m in Sources */, - 4841F65B1C2ADCAE004979F4 /* SDWebImagePrefetcher.m in Sources */, - 4867A48F1C292EF800BE8767 /* DemoVC8.m in Sources */, - 487D3EBA1BCB9EC700A66173 /* AppDelegate.m in Sources */, - 48DBCD0B1C01D89C002EC476 /* DemoVC5.m in Sources */, - 4841F5E41C2A94ED004979F4 /* SDWeiXinPhotoContainerView.m in Sources */, - 4845116F1C2439830071BE2C /* DemoVC7.m in Sources */, - 4841F5FD1C2AD949004979F4 /* SDPhotoBrowser.m in Sources */, - 4841F65D1C2ADCAE004979F4 /* UIImage+GIF.m in Sources */, - 4841F6611C2ADCAE004979F4 /* UIImageView+WebCache.m in Sources */, - 484511701C2439830071BE2C /* DemoVC7Cell.m in Sources */, - 4841F6551C2ADCAE004979F4 /* SDImageCache.m in Sources */, + 485303481C3F977A004361A7 /* SDWeiXinPhotoContainerView.m in Sources */, + 485302DB1C3F6490004361A7 /* SDWebImageManager.m in Sources */, + 485302F51C3F65EE004361A7 /* TAAnimatedDotView.m in Sources */, + 485302FA1C3F65EE004361A7 /* UIView+SDExtension.m in Sources */, + 485302D31C3F6490004361A7 /* UIView+SDExtension.m in Sources */, + 485303431C3F977A004361A7 /* DemoVC8.m in Sources */, + 485303471C3F977A004361A7 /* DemoVC9HeaderView.m in Sources */, + 485303421C3F977A004361A7 /* DemoVC7Model.m in Sources */, + 485302CE1C3F6490004361A7 /* SDWaitingView.m in Sources */, + 485302DF1C3F6490004361A7 /* UIImage+MultiFormat.m in Sources */, + 485302D91C3F6490004361A7 /* SDWebImageDownloader.m in Sources */, + 485303361C3F977A004361A7 /* DemoVC1.m in Sources */, + 485302F71C3F65EE004361A7 /* TAPageControl.m in Sources */, + 485302E01C3F6490004361A7 /* UIImage+WebP.m in Sources */, + 4853033E1C3F977A004361A7 /* DemoVC6.m in Sources */, + 485302D11C3F6490004361A7 /* SDRefreshHeaderView.m in Sources */, + 485302E11C3F6490004361A7 /* UIImageView+HighlightedWebCache.m in Sources */, + 485303441C3F977A004361A7 /* Demo9Model.m in Sources */, + 485303401C3F977A004361A7 /* DemoVC7Cell.m in Sources */, + 485303351C3F977A004361A7 /* DemoVC0.m in Sources */, + 485302D81C3F6490004361A7 /* SDWebImageDecoder.m in Sources */, + 485302DC1C3F6490004361A7 /* SDWebImagePrefetcher.m in Sources */, + 485302D21C3F6490004361A7 /* SDRefreshView.m in Sources */, + 4853033D1C3F977A004361A7 /* DemoVC5Model.m in Sources */, + 485302DE1C3F6490004361A7 /* UIImage+GIF.m in Sources */, + 485302F91C3F65EE004361A7 /* SDCycleScrollView.m in Sources */, + 485302E21C3F6490004361A7 /* UIImageView+WebCache.m in Sources */, + 485303451C3F977A004361A7 /* DemoVC9.m in Sources */, + 485302D61C3F6490004361A7 /* SDImageCache.m in Sources */, + 485303551C3F97E6004361A7 /* DemoCell.m in Sources */, + 485303391C3F977A004361A7 /* TestCell2.m in Sources */, + 485302CC1C3F6490004361A7 /* SDBrowserImageView.m in Sources */, + 485302CD1C3F6490004361A7 /* SDPhotoBrowser.m in Sources */, + 485303511C3F97AA004361A7 /* DemoTableViewControler.m in Sources */, + 485302F41C3F65EE004361A7 /* TAAbstractDotView.m in Sources */, + 485302F81C3F65EE004361A7 /* SDCollectionViewCell.m in Sources */, 48DA2B001BFB529200A771E6 /* UITableView+SDAutoTableViewCellHeight.m in Sources */, - 99E728AA1BE5E22D00771161 /* SDRefreshView.m in Sources */, - 48D632331BD0A7B500F86A88 /* DemoVC4.m in Sources */, - 487D3EE11BCBA55700A66173 /* DemoVC0.m in Sources */, - 4841F6591C2ADCAE004979F4 /* SDWebImageDownloaderOperation.m in Sources */, - 99E728AB1BE5E22D00771161 /* UIView+SDExtension.m in Sources */, - 99E728A81BE5E22D00771161 /* SDRefreshFooterView.m in Sources */, - 4841F6561C2ADCAE004979F4 /* SDWebImageCompat.m in Sources */, - 4841F6541C2ADCAE004979F4 /* NSData+ImageContentType.m in Sources */, - 48DBCD081C01D884002EC476 /* DemoVC5CellTableViewCell.m in Sources */, - 487D3EEA1BCBACF500A66173 /* DemoVC2.m in Sources */, - 99E728A91BE5E22D00771161 /* SDRefreshHeaderView.m in Sources */, - 4841F65C1C2ADCAE004979F4 /* UIButton+WebCache.m in Sources */, - 487D3EF01BCBB61A00A66173 /* TestCell2.m in Sources */, + 485302DA1C3F6490004361A7 /* SDWebImageDownloaderOperation.m in Sources */, + 485303521C3F97AA004361A7 /* ViewController.m in Sources */, + 485302D71C3F6490004361A7 /* SDWebImageCompat.m in Sources */, + 485303461C3F977A004361A7 /* DemoVC9Cell.m in Sources */, + 485302D51C3F6490004361A7 /* NSData+ImageContentType.m in Sources */, + 485303381C3F977A004361A7 /* DemoVC3.m in Sources */, + 485302D01C3F6490004361A7 /* SDRefreshFooterView.m in Sources */, + 485302DD1C3F6490004361A7 /* UIButton+WebCache.m in Sources */, + 485303371C3F977A004361A7 /* DemoVC2.m in Sources */, 487D3EB71BCB9EC700A66173 /* main.m in Sources */, - 4841F5EF1C2AC7D6004979F4 /* DemoVC9HeaderView.m in Sources */, - 4841F6621C2ADCAE004979F4 /* UIView+WebCacheOperation.m in Sources */, - 4841F6531C2ADCAE004979F4 /* MKAnnotationView+WebCache.m in Sources */, - 4841F5E11C2A90CF004979F4 /* Demo9Model.m in Sources */, - 487D3EE41BCBA6CA00A66173 /* DemoVC1.m in Sources */, + 4853033F1C3F977A004361A7 /* DemoVC7.m in Sources */, + 485302E31C3F6490004361A7 /* UIView+WebCacheOperation.m in Sources */, + 4853033A1C3F977A004361A7 /* DemoVC4.m in Sources */, + 485302D41C3F6490004361A7 /* MKAnnotationView+WebCache.m in Sources */, + 4853033B1C3F977A004361A7 /* DemoVC5.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" index d1afbb08883d81ac737f748e91ef3cbb27dd0706..755570cdf50328adfd4454cf4eb9f7114becaef6 100644 GIT binary patch delta 20051 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 delta 17488 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 diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC0.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC0.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC0.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC0.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC1.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC1/DemoVC1.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC1.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC1/DemoVC1.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC1.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC1/DemoVC1.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC1.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC1/DemoVC1.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC2.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC2/DemoVC2.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC2.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC2/DemoVC2.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC2.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC2/DemoVC2.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC2.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC2/DemoVC2.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC3.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/DemoVC3.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC3.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/DemoVC3.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC3.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/DemoVC3.m" similarity index 99% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC3.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/DemoVC3.m" index 4d0d43a..a8fb3e3 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC3.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/DemoVC3.m" @@ -23,7 +23,7 @@ #import "DemoVC3.h" #import "TestCell2.h" -#import "SDRefeshView/SDRefresh.h" +#import "SDRefresh.h" #import "UITableView+SDAutoTableViewCellHeight.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/TestCell2.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/TestCell2.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/TestCell2.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/TestCell2.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/TestCell2.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/TestCell2.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/TestCell2.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/TestCell2.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC4.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC4/DemoVC4.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC4.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC4/DemoVC4.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC4.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC4/DemoVC4.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC4.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC4/DemoVC4.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5.m" similarity index 78% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5.m" index 8fba8ef..6d391c0 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5.m" @@ -26,10 +26,14 @@ #import "DemoVC5CellTableViewCell.h" -#import "SDRefeshView/SDRefresh.h" +#import "SDRefresh.h" #import "UITableView+SDAutoTableViewCellHeight.h" +#import "SDCycleScrollView.h" + +#import "UIView+SDAutoLayout.h" + @interface DemoVC5 () @property (nonatomic, strong) NSMutableArray *modelsArray; @@ -47,6 +51,8 @@ - (void)viewDidLoad // self.tableView.estimatedRowHeight = 100; + [self setupHeaderView]; + [self creatModelsWithCount:10]; __weak typeof(self) weakSelf = self; @@ -64,6 +70,54 @@ - (void)viewDidLoad }; } +- (void)setupHeaderView +{ + UIView *header = [UIView new]; + + NSArray *picImageNamesArray = @[ @"pic1.jpg", + @"pic2.jpg", + @"pic3.jpg", + @"pic4.jpg", + ]; + + SDCycleScrollView *scrollView = [SDCycleScrollView new]; + scrollView.localizationImageNamesGroup = picImageNamesArray; + [header addSubview:scrollView]; + + UILabel *tagLabel = [UILabel new]; + tagLabel.font = [UIFont systemFontOfSize:13]; + tagLabel.textColor = [UIColor lightGrayColor]; + tagLabel.text = @"更新时间:2016.01.08"; + [header addSubview:tagLabel]; + + UIView *bottomLine = [UIView new]; + bottomLine.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.3]; + [header addSubview:bottomLine]; + + scrollView.sd_layout + .leftSpaceToView(header, 0) + .topSpaceToView(header, 0) + .rightSpaceToView(header, 0) + .heightIs(150); + + tagLabel.sd_layout + .leftSpaceToView(header, 10) + .topSpaceToView(scrollView, 0) + .heightIs(25) + .rightSpaceToView(header, 0); + + bottomLine.sd_layout + .topSpaceToView(tagLabel, 0) + .leftSpaceToView(header, 0) + .rightSpaceToView(header, 0) + .heightIs(1); + + [header setupAutoHeightWithBottomView:bottomLine bottomMargin:0]; + [header layoutSubviews]; + + self.tableView.tableHeaderView = header; +} + - (void)creatModelsWithCount:(NSInteger)count { if (!_modelsArray) { diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5CellTableViewCell.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5CellTableViewCell.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5CellTableViewCell.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5CellTableViewCell.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5Model.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5Model.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5Model.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5Model.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5Model.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5Model.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC5Model.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5Model.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC6.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC6/DemoVC6.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC6.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC6/DemoVC6.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC6.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC6/DemoVC6.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC6.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC6/DemoVC6.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell2.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell2.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell2.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell2.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell2.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell2.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Cell2.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell2.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Model.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Model.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Model.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Model.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Model.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Model.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC7Model.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Model.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC8.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC8/DemoVC8.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC8.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC8/DemoVC8.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC8.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC8/DemoVC8.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC8.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC8/DemoVC8.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/Demo9Model.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/Demo9Model.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/Demo9Model.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Demo9Model.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/Demo9Model.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.m" similarity index 99% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.m" index 5748224..4d99081 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.m" @@ -30,7 +30,7 @@ #import "DemoVC5CellTableViewCell.h" -#import "SDRefeshView/SDRefresh.h" +#import "SDRefresh.h" #import "UITableView+SDAutoTableViewCellHeight.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9Cell.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9Cell.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9Cell.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9Cell.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9Cell.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9HeaderView.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9HeaderView.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9HeaderView.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC9HeaderView.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9HeaderView.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWeiXinPhotoContainerView.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/AppDelegate.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Others/AppDelegate.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/AppDelegate.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Others/AppDelegate.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/AppDelegate.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Others/AppDelegate.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/AppDelegate.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Others/AppDelegate.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoCell.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoCell.h" new file mode 100644 index 0000000..019c521 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoCell.h" @@ -0,0 +1,16 @@ +// +// DemoCell.h +// SDAutoLayout 测试 Demo +// +// Created by gsd on 16/1/8. +// Copyright © 2016年 gsd. All rights reserved. +// + +#import + +@interface DemoCell : UITableViewCell + +@property (nonatomic, weak) UILabel *titleLabel; +@property (nonatomic, weak) UILabel *contentLabel; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoCell.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoCell.m" new file mode 100644 index 0000000..b223e99 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoCell.m" @@ -0,0 +1,54 @@ +// +// DemoCell.m +// SDAutoLayout 测试 Demo +// +// Created by gsd on 16/1/8. +// Copyright © 2016年 gsd. All rights reserved. +// + +#import "DemoCell.h" + +#import "UIView+SDAutoLayout.h" + +@implementation DemoCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + [self setup]; + } + return self; +} + +- (void)setup +{ + UILabel *titleLabel = [UILabel new]; + titleLabel.textColor = [UIColor grayColor]; + titleLabel.font = [UIFont systemFontOfSize:15]; + [self.contentView addSubview:titleLabel]; + self.titleLabel = titleLabel; + + UILabel *contentLabel = [UILabel new]; + contentLabel.textColor = [UIColor lightGrayColor]; + contentLabel.font = [UIFont systemFontOfSize:14]; + [self.contentView addSubview:contentLabel]; + self.contentLabel = contentLabel; + + CGFloat margin = 10; + + self.titleLabel.sd_layout + .leftSpaceToView(self.contentView, margin) + .topSpaceToView(self.contentView, margin) + .rightSpaceToView(self.contentView, margin) + .heightIs(20); + + self.contentLabel.sd_layout + .leftEqualToView(self.titleLabel) + .rightEqualToView(self.titleLabel) + .topSpaceToView(self.titleLabel, margin) + .autoHeightRatio(0); + + [self setupAutoHeightWithBottomView:self.contentLabel bottomMargin:margin]; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoTableViewControler.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoTableViewControler.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoTableViewControler.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.m" similarity index 51% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoTableViewControler.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.m" index 03da057..6e90829 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoTableViewControler.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.m" @@ -23,9 +23,25 @@ #import "DemoTableViewControler.h" -#import "DemoVC5.h" +#import "UITableView+SDAutoTableViewCellHeight.h" + +#import "DemoCell.h" + +NSString * const demo0Content = @"自动布局动画,修改一个view的布局约束,其他view也会自动重新排布"; +NSString * const demo1Content = @"布局示例,其中view1用到了普通view的内容自适应功能,view1内部的label用到了文字自适应功能"; +NSString * const demo2Content = @"展示自动布局环境下父view修改布局约束对子view自动的自动调整"; +NSString * const demo3Content = @"简单tableview展示"; +NSString * const demo4Content = @"类cell的自动布局展示"; +NSString * const demo5Content = @"1.利用普通view的内容自适应功能添加tableheaderview\n2.利用自动布局功能实现cell内部图文排布,图片可根据原始尺寸按比例缩放后展示\n3.利用“普通版tableview的cell高度自适应”完成tableview的排布"; +NSString * const demo6Content = @"展示scrollview的内容自适应和普通view的动态圆角处理"; +NSString * const demo7Content = @"利用“普通版tableview的《多cell》高度自适应”2步设置完成tableview的排布"; +NSString * const demo8Content = @"利用“升级版tableview的《多cell》高度自适应”1步完成tableview的排布"; +NSString * const demo9Content = @"利用SDAutoLayout仿制微信朋友圈。高仿微信计划:\n 1.高仿朋友圈 \n2.完善细节 \n3.高仿完整微信app \nPS:代码会持续在我的github更新"; @implementation DemoTableViewControler +{ + NSArray *_contenArray; +} - (void)viewDidLoad { @@ -35,6 +51,8 @@ - (void)viewDidLoad [self.navigationController pushViewController:[NSClassFromString(@"DemoVC9") new] animated:YES]; + + _contenArray = @[demo0Content, demo1Content, demo2Content, demo3Content, demo4Content, demo5Content, demo6Content, demo7Content, demo8Content, demo9Content]; } #pragma mark - tableview datasourece and delegate @@ -47,11 +65,12 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *ID = @"test"; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; + DemoCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; if (!cell) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID]; + cell = [[DemoCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID]; } - cell.textLabel.text = [NSString stringWithFormat:@"Demo -- %ld", indexPath.row]; + cell.titleLabel.text = [NSString stringWithFormat:@"Demo -- %ld", indexPath.row]; + cell.contentLabel.text = _contenArray[indexPath.row]; return cell; } @@ -65,7 +84,7 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - return 60; + return [self cellHeightForIndexPath:indexPath cellContentViewWidth:[UIScreen mainScreen].bounds.size.width]; } @end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/ViewController.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Others/ViewController.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/ViewController.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Others/ViewController.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/ViewController.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Others/ViewController.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/ViewController.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Others/ViewController.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" index 9fc99c6..46b4c5b 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" @@ -76,69 +76,69 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); /* 设置距离其它view的间距 */ -/** 左边到其参照view之间的间距,参数为“(参照view,间距数值)” */ +/** 左边到其参照view之间的间距,参数为“(View, CGFloat)” */ @property (nonatomic, copy, readonly) MarginToView leftSpaceToView; -/** 右边到其参照view之间的间距,参数为“(参照view,间距数值)” */ +/** 右边到其参照view之间的间距,参数为“(View, CGFloat)” */ @property (nonatomic, copy, readonly) MarginToView rightSpaceToView; -/** 顶部到其参照view之间的间距,参数为“(参照view,间距数值)” */ +/** 顶部到其参照view之间的间距,参数为“(View, CGFloat)” */ @property (nonatomic, copy, readonly) MarginToView topSpaceToView; -/** 底部到其参照view之间的间距,参数为“(参照view,间距数值)” */ +/** 底部到其参照view之间的间距,参数为“(View, CGFloat)” */ @property (nonatomic, copy, readonly) MarginToView bottomSpaceToView; /* 设置x、y、width、height、centerX、centerY 值 */ -/** x值,参数为“(CGFloat数值)” */ +/** x值,参数为“(CGFloat)” */ @property (nonatomic, copy, readonly) Margin xIs; -/** y值,参数为“(CGFloat数值)” */ +/** y值,参数为“(CGFloat)” */ @property (nonatomic, copy, readonly) Margin yIs; -/** centerX值,参数为“(CGFloat数值)” */ +/** centerX值,参数为“(CGFloat)” */ @property (nonatomic, copy, readonly) Margin centerXIs; -/** centerY值,参数为“(CGFloat数值)” */ +/** centerY值,参数为“(CGFloat)” */ @property (nonatomic, copy, readonly) Margin centerYIs; -/** 宽度值,参数为“(CGFloat数值)” */ +/** 宽度值,参数为“(CGFloat)” */ @property (nonatomic, copy, readonly) WidthHeight widthIs; -/** 高度值,参数为“(CGFloat数值)” */ +/** 高度值,参数为“(CGFloat)” */ @property (nonatomic, copy, readonly) WidthHeight heightIs; /* 设置最大宽度和高度、最小宽度和高度 */ -/** 最大宽度值,参数为“(CGFloat数值)” */ +/** 最大宽度值,参数为“(CGFloat)” */ @property (nonatomic, copy, readonly) WidthHeight maxWidthIs; -/** 最大高度值,参数为“(CGFloat数值)” */ +/** 最大高度值,参数为“(CGFloat)” */ @property (nonatomic, copy, readonly) WidthHeight maxHeightIs; -/** 最小宽度值,参数为“(CGFloat数值)” */ +/** 最小宽度值,参数为“(CGFloat)” */ @property (nonatomic, copy, readonly) WidthHeight minWidthIs; -/** 最小高度值,参数为“(CGFloat数值)” */ +/** 最小高度值,参数为“(CGFloat)” */ @property (nonatomic, copy, readonly) WidthHeight minHeightIs; /* 设置和某个参照view的边距相同 */ -/** 左间距与参照view相同,参数为“(参照view)” */ +/** 左间距与参照view相同,参数为“(View)” */ @property (nonatomic, copy, readonly) MarginEqualToView leftEqualToView; -/** 右间距与参照view相同,参数为“(参照view)” */ +/** 右间距与参照view相同,参数为“(View)” */ @property (nonatomic, copy, readonly) MarginEqualToView rightEqualToView; -/** 顶部间距与参照view相同,参数为“(参照view)” */ +/** 顶部间距与参照view相同,参数为“(View)” */ @property (nonatomic, copy, readonly) MarginEqualToView topEqualToView; -/** 底部间距与参照view相同,参数为“(参照view)” */ +/** 底部间距与参照view相同,参数为“(View)” */ @property (nonatomic, copy, readonly) MarginEqualToView bottomEqualToView; -/** centerX与参照view相同,参数为“(参照view)” */ +/** centerX与参照view相同,参数为“(View)” */ @property (nonatomic, copy, readonly) MarginEqualToView centerXEqualToView; -/** centerY与参照view相同,参数为“(参照view)” */ +/** centerY与参照view相同,参数为“(View)” */ @property (nonatomic, copy, readonly) MarginEqualToView centerYEqualToView; /* 设置宽度或者高度等于参照view的多少倍 */ -/** 宽度是参照view宽度的多少倍,参数为“(参照view,比例数值)” */ +/** 宽度是参照view宽度的多少倍,参数为“(View, CGFloat)” */ @property (nonatomic, copy, readonly) WidthHeightEqualToView widthRatioToView; -/** 高度是参照view宽度的多少倍,参数为“(参照view,比例数值)” */ +/** 高度是参照view宽度的多少倍,参数为“(View, CGFloat)” */ @property (nonatomic, copy, readonly) WidthHeightEqualToView heightRatioToView; /** 设置一个view的宽度和它的高度相同,参数为空“()” */ @property (nonatomic, copy, readonly) SameWidthHeight widthEqualToHeight; diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.h" new file mode 100755 index 0000000..bcf91f3 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.h" @@ -0,0 +1,24 @@ +// +// TAAbstractDotView.h +// TAPageControl +// +// Created by Tanguy Aladenise on 2015-01-22. +// Copyright (c) 2015 Tanguy Aladenise. All rights reserved. +// + +#import + + +@interface TAAbstractDotView : UIView + + +/** + * A method call let view know which state appearance it should take. Active meaning it's current page. Inactive not the current page. + * + * @param active BOOL to tell if view is active or not + */ +- (void)changeActivityState:(BOOL)active; + + +@end + diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.m" new file mode 100755 index 0000000..d39c4b5 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.m" @@ -0,0 +1,30 @@ +// +// TAAbstractDotView.m +// TAPageControl +// +// Created by Tanguy Aladenise on 2015-01-22. +// Copyright (c) 2015 Tanguy Aladenise. All rights reserved. +// + +#import "TAAbstractDotView.h" + + +@implementation TAAbstractDotView + + +- (id)init +{ + @throw [NSException exceptionWithName:NSInternalInconsistencyException + reason:[NSString stringWithFormat:@"You must override %@ in %@", NSStringFromSelector(_cmd), self.class] + userInfo:nil]; +} + + +- (void)changeActivityState:(BOOL)active +{ + @throw [NSException exceptionWithName:NSInternalInconsistencyException + reason:[NSString stringWithFormat:@"You must override %@ in %@", NSStringFromSelector(_cmd), self.class] + userInfo:nil]; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.h" new file mode 100755 index 0000000..7214e06 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.h" @@ -0,0 +1,15 @@ +// +// TAAnimatedDotView.h +// TAPageControl +// +// Created by Tanguy Aladenise on 2015-01-22. +// Copyright (c) 2015 Tanguy Aladenise. All rights reserved. +// + +#import "TAAbstractDotView.h" + +@interface TAAnimatedDotView : TAAbstractDotView + +@property (nonatomic, strong) UIColor *dotColor; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.m" new file mode 100755 index 0000000..e6202bb --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.m" @@ -0,0 +1,88 @@ +// +// TAAnimatedDotView.m +// TAPageControl +// +// Created by Tanguy Aladenise on 2015-01-22. +// Copyright (c) 2015 Tanguy Aladenise. All rights reserved. +// + +#import "TAAnimatedDotView.h" + +static CGFloat const kAnimateDuration = 1; + +@implementation TAAnimatedDotView + +- (instancetype)init +{ + self = [super init]; + if (self) { + [self initialization]; + } + + return self; +} + + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self initialization]; + } + return self; +} + + +- (id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super initWithCoder:aDecoder]; + if (self) { + [self initialization]; + } + + return self; +} + +- (void)setDotColor:(UIColor *)dotColor +{ + _dotColor = dotColor; + self.layer.borderColor = dotColor.CGColor; +} + +- (void)initialization +{ + _dotColor = [UIColor whiteColor]; + self.backgroundColor = [UIColor clearColor]; + self.layer.cornerRadius = CGRectGetWidth(self.frame) / 2; + self.layer.borderColor = [UIColor whiteColor].CGColor; + self.layer.borderWidth = 2; +} + + +- (void)changeActivityState:(BOOL)active +{ + if (active) { + [self animateToActiveState]; + } else { + [self animateToDeactiveState]; + } +} + + +- (void)animateToActiveState +{ + [UIView animateWithDuration:kAnimateDuration delay:0 usingSpringWithDamping:.5 initialSpringVelocity:-20 options:UIViewAnimationOptionCurveLinear animations:^{ + self.backgroundColor = _dotColor; + self.transform = CGAffineTransformMakeScale(1.4, 1.4); + } completion:nil]; +} + +- (void)animateToDeactiveState +{ + [UIView animateWithDuration:kAnimateDuration delay:0 usingSpringWithDamping:.5 initialSpringVelocity:0 options:UIViewAnimationOptionCurveLinear animations:^{ + self.backgroundColor = [UIColor clearColor]; + self.transform = CGAffineTransformIdentity; + } completion:nil]; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TADotView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TADotView.h" new file mode 100755 index 0000000..cf984cc --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TADotView.h" @@ -0,0 +1,13 @@ +// +// TADotView.h +// TAPageControl +// +// Created by Tanguy Aladenise on 2015-01-22. +// Copyright (c) 2015 Tanguy Aladenise. All rights reserved. +// + +#import "TAAbstractDotView.h" + +@interface TADotView : TAAbstractDotView + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TADotView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TADotView.m" new file mode 100755 index 0000000..092170a --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TADotView.m" @@ -0,0 +1,63 @@ +// +// TADotView.m +// TAPageControl +// +// Created by Tanguy Aladenise on 2015-01-22. +// Copyright (c) 2015 Tanguy Aladenise. All rights reserved. +// + +#import "TADotView.h" + +@implementation TADotView + + +- (instancetype)init +{ + self = [super init]; + if (self) { + [self initialization]; + } + + return self; +} + + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self initialization]; + } + return self; +} + + +- (id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super initWithCoder:aDecoder]; + if (self) { + [self initialization]; + } + + return self; +} + +- (void)initialization +{ + self.backgroundColor = [UIColor clearColor]; + self.layer.cornerRadius = CGRectGetWidth(self.frame) / 2; + self.layer.borderColor = [UIColor whiteColor].CGColor; + self.layer.borderWidth = 2; +} + + +- (void)changeActivityState:(BOOL)active +{ + if (active) { + self.backgroundColor = [UIColor whiteColor]; + } else { + self.backgroundColor = [UIColor clearColor]; + } +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAPageControl.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAPageControl.h" new file mode 100755 index 0000000..366ff47 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAPageControl.h" @@ -0,0 +1,106 @@ +// +// TAPageControl.h +// TAPageControl +// +// Created by Tanguy Aladenise on 2015-01-21. +// Copyright (c) 2015 Tanguy Aladenise. All rights reserved. +// + +#import + +@protocol TAPageControlDelegate; + + +@interface TAPageControl : UIControl + + +/** + * Dot view customization properties + */ + +/** + * The Class of your custom UIView, make sure to respect the TAAbstractDotView class. + */ +@property (nonatomic) Class dotViewClass; + + +/** + * UIImage to represent a dot. + */ +@property (nonatomic) UIImage *dotImage; + + +/** + * UIImage to represent current page dot. + */ +@property (nonatomic) UIImage *currentDotImage; + + +/** + * Dot size for dot views. Default is 8 by 8. + */ +@property (nonatomic) CGSize dotSize; + + +@property (nonatomic, strong) UIColor *dotColor; + +/** + * Spacing between two dot views. Default is 8. + */ +@property (nonatomic) NSInteger spacingBetweenDots; + + +/** + * Page control setup properties + */ + + +/** + * Delegate for TAPageControl + */ +@property(nonatomic,assign) id delegate; + + +/** + * Number of pages for control. Default is 0. + */ +@property (nonatomic) NSInteger numberOfPages; + + +/** + * Current page on which control is active. Default is 0. + */ +@property (nonatomic) NSInteger currentPage; + + +/** + * Hide the control if there is only one page. Default is NO. + */ +@property (nonatomic) BOOL hidesForSinglePage; + + +/** + * Let the control know if should grow bigger by keeping center, or just get longer (right side expanding). By default YES. + */ +@property (nonatomic) BOOL shouldResizeFromCenter; + + +/** + * Return the minimum size required to display control properly for the given page count. + * + * @param pageCount Number of dots that will require display + * + * @return The CGSize being the minimum size required. + */ +- (CGSize)sizeForNumberOfPages:(NSInteger)pageCount; + + +@end + + +@protocol TAPageControlDelegate + +@optional +- (void)TAPageControl:(TAPageControl *)pageControl didSelectPageAtIndex:(NSInteger)index; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAPageControl.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAPageControl.m" new file mode 100755 index 0000000..4475517 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAPageControl.m" @@ -0,0 +1,364 @@ +// +// TAPageControl.m +// TAPageControl +// +// Created by Tanguy Aladenise on 2015-01-21. +// Copyright (c) 2015 Tanguy Aladenise. All rights reserved. +// + +#import "TAPageControl.h" +#import "TAAbstractDotView.h" +#import "TAAnimatedDotView.h" +#import "TADotView.h" + +/** + * Default number of pages for initialization + */ +static NSInteger const kDefaultNumberOfPages = 0; + +/** + * Default current page for initialization + */ +static NSInteger const kDefaultCurrentPage = 0; + +/** + * Default setting for hide for single page feature. For initialization + */ +static BOOL const kDefaultHideForSinglePage = NO; + +/** + * Default setting for shouldResizeFromCenter. For initialiation + */ +static BOOL const kDefaultShouldResizeFromCenter = YES; + +/** + * Default spacing between dots + */ +static NSInteger const kDefaultSpacingBetweenDots = 8; + +/** + * Default dot size + */ +static CGSize const kDefaultDotSize = {8, 8}; + + +@interface TAPageControl() + + +/** + * Array of dot views for reusability and touch events. + */ +@property (strong, nonatomic) NSMutableArray *dots; + + +@end + +@implementation TAPageControl + + +#pragma mark - Lifecycle + + +- (id)init +{ + self = [super init]; + if (self) { + [self initialization]; + } + + return self; +} + + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self initialization]; + } + return self; +} + + +- (id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super initWithCoder:aDecoder]; + if (self) { + [self initialization]; + } + + return self; +} + + +/** + * Default setup when initiating control + */ +- (void)initialization +{ + self.dotViewClass = [TAAnimatedDotView class]; + self.spacingBetweenDots = kDefaultSpacingBetweenDots; + self.numberOfPages = kDefaultNumberOfPages; + self.currentPage = kDefaultCurrentPage; + self.hidesForSinglePage = kDefaultHideForSinglePage; + self.shouldResizeFromCenter = kDefaultShouldResizeFromCenter; +} + + +#pragma mark - Touch event + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event +{ + UITouch *touch = [touches anyObject]; + if (touch.view != self) { + NSInteger index = [self.dots indexOfObject:touch.view]; + if ([self.delegate respondsToSelector:@selector(TAPageControl:didSelectPageAtIndex:)]) { + [self.delegate TAPageControl:self didSelectPageAtIndex:index]; + } + } +} + +#pragma mark - Layout + + +/** + * Resizes and moves the receiver view so it just encloses its subviews. + */ +- (void)sizeToFit +{ + [self updateFrame:YES]; +} + + +- (CGSize)sizeForNumberOfPages:(NSInteger)pageCount +{ + return CGSizeMake((self.dotSize.width + self.spacingBetweenDots) * pageCount - self.spacingBetweenDots , self.dotSize.height); +} + + +/** + * Will update dots display and frame. Reuse existing views or instantiate one if required. Update their position in case frame changed. + */ +- (void)updateDots +{ + if (self.numberOfPages == 0) { + return; + } + + for (NSInteger i = 0; i < self.numberOfPages; i++) { + + UIView *dot; + if (i < self.dots.count) { + dot = [self.dots objectAtIndex:i]; + } else { + dot = [self generateDotView]; + } + + [self updateDotFrame:dot atIndex:i]; + } + + [self changeActivity:YES atIndex:self.currentPage]; + + [self hideForSinglePage]; +} + + +/** + * Update frame control to fit current number of pages. It will apply required size if authorize and required. + * + * @param overrideExistingFrame BOOL to allow frame to be overriden. Meaning the required size will be apply no mattter what. + */ +- (void)updateFrame:(BOOL)overrideExistingFrame +{ + CGPoint center = self.center; + CGSize requiredSize = [self sizeForNumberOfPages:self.numberOfPages]; + + // We apply requiredSize only if authorize to and necessary + if (overrideExistingFrame || ((CGRectGetWidth(self.frame) < requiredSize.width || CGRectGetHeight(self.frame) < requiredSize.height) && !overrideExistingFrame)) { + self.frame = CGRectMake(CGRectGetMinX(self.frame), CGRectGetMinY(self.frame), requiredSize.width, requiredSize.height); + if (self.shouldResizeFromCenter) { + self.center = center; + } + } + + [self resetDotViews]; +} + + +/** + * Update the frame of a specific dot at a specific index + * + * @param dot Dot view + * @param index Page index of dot + */ +- (void)updateDotFrame:(UIView *)dot atIndex:(NSInteger)index +{ + // Dots are always centered within view + CGFloat x = (self.dotSize.width + self.spacingBetweenDots) * index + ( (CGRectGetWidth(self.frame) - [self sizeForNumberOfPages:self.numberOfPages].width) / 2); + CGFloat y = (CGRectGetHeight(self.frame) - self.dotSize.height) / 2; + + dot.frame = CGRectMake(x, y, self.dotSize.width, self.dotSize.height); +} + + +#pragma mark - Utils + + +/** + * Generate a dot view and add it to the collection + * + * @return The UIView object representing a dot + */ +- (UIView *)generateDotView +{ + UIView *dotView; + + if (self.dotViewClass) { + dotView = [[self.dotViewClass alloc] initWithFrame:CGRectMake(0, 0, self.dotSize.width, self.dotSize.height)]; + if ([dotView isKindOfClass:[TAAnimatedDotView class]] && self.dotColor) { + ((TAAnimatedDotView *)dotView).dotColor = self.dotColor; + } + } else { + dotView = [[UIImageView alloc] initWithImage:self.dotImage]; + dotView.frame = CGRectMake(0, 0, self.dotSize.width, self.dotSize.height); + } + + if (dotView) { + [self addSubview:dotView]; + [self.dots addObject:dotView]; + } + + dotView.userInteractionEnabled = YES; + return dotView; +} + + +/** + * Change activity state of a dot view. Current/not currrent. + * + * @param active Active state to apply + * @param index Index of dot for state update + */ +- (void)changeActivity:(BOOL)active atIndex:(NSInteger)index +{ + if (self.dotViewClass) { + TAAbstractDotView *abstractDotView = (TAAbstractDotView *)[self.dots objectAtIndex:index]; + if ([abstractDotView respondsToSelector:@selector(changeActivityState:)]) { + [abstractDotView changeActivityState:active]; + } else { + NSLog(@"Custom view : %@ must implement an 'changeActivityState' method or you can subclass %@ to help you.", self.dotViewClass, [TAAbstractDotView class]); + } + } else if (self.dotImage && self.currentDotImage) { + UIImageView *dotView = (UIImageView *)[self.dots objectAtIndex:index]; + dotView.image = (active) ? self.currentDotImage : self.dotImage; + } +} + + +- (void)resetDotViews +{ + for (UIView *dotView in self.dots) { + [dotView removeFromSuperview]; + } + + [self.dots removeAllObjects]; + [self updateDots]; +} + + +- (void)hideForSinglePage +{ + if (self.dots.count == 1 && self.hidesForSinglePage) { + self.hidden = YES; + } else { + self.hidden = NO; + } +} + +#pragma mark - Setters + + +- (void)setNumberOfPages:(NSInteger)numberOfPages +{ + _numberOfPages = numberOfPages; + + // Update dot position to fit new number of pages + [self resetDotViews]; +} + + +- (void)setSpacingBetweenDots:(NSInteger)spacingBetweenDots +{ + _spacingBetweenDots = spacingBetweenDots; + + [self resetDotViews]; +} + + +- (void)setCurrentPage:(NSInteger)currentPage +{ + // If no pages, no current page to treat. + if (self.numberOfPages == 0 || currentPage == _currentPage) { + _currentPage = currentPage; + return; + } + + // Pre set + [self changeActivity:NO atIndex:_currentPage]; + _currentPage = currentPage; + // Post set + [self changeActivity:YES atIndex:_currentPage]; +} + + +- (void)setDotImage:(UIImage *)dotImage +{ + _dotImage = dotImage; + [self resetDotViews]; + self.dotViewClass = nil; +} + + +- (void)setCurrentDotImage:(UIImage *)currentDotimage +{ + _currentDotImage = currentDotimage; + [self resetDotViews]; + self.dotViewClass = nil; +} + + +- (void)setDotViewClass:(Class)dotViewClass +{ + _dotViewClass = dotViewClass; + self.dotSize = CGSizeZero; + [self resetDotViews]; +} + + +#pragma mark - Getters + + +- (NSMutableArray *)dots +{ + if (!_dots) { + _dots = [[NSMutableArray alloc] init]; + } + + return _dots; +} + + +- (CGSize)dotSize +{ + // Dot size logic depending on the source of the dot view + if (self.dotImage && CGSizeEqualToSize(_dotSize, CGSizeZero)) { + _dotSize = self.dotImage.size; + } else if (self.dotViewClass && CGSizeEqualToSize(_dotSize, CGSizeZero)) { + _dotSize = kDefaultDotSize; + return _dotSize; + } + + return _dotSize; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCollectionViewCell.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCollectionViewCell.h" new file mode 100644 index 0000000..4d307ab --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCollectionViewCell.h" @@ -0,0 +1,47 @@ +// +// SDCollectionViewCell.h +// SDCycleScrollView +// +// Created by aier on 15-3-22. +// Copyright (c) 2015年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * 🌟🌟🌟 新建SDCycleScrollView交流QQ群:185534916 🌟🌟🌟 + * + * 在您使用此自动轮播库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 + * 帮您解决问题。 + * 新浪微博:GSD_iOS + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios + * + * 另(我的自动布局库SDAutoLayout): + * 一行代码搞定自动布局!支持Cell和Tableview高度自适应,Label和ScrollView内容自适应,致力于 + * 做最简单易用的AutoLayout库。 + * 视频教程:http://www.letv.com/ptv/vplay/24038772.html + * 用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * GitHub:https://github.com/gsdios/SDAutoLayout + ********************************************************************************* + + */ + + + +#import + +@interface SDCollectionViewCell : UICollectionViewCell + +@property (weak, nonatomic) UIImageView *imageView; +@property (copy, nonatomic) NSString *title; + +@property (nonatomic, strong) UIColor *titleLabelTextColor; +@property (nonatomic, strong) UIFont *titleLabelTextFont; +@property (nonatomic, strong) UIColor *titleLabelBackgroundColor; +@property (nonatomic, assign) CGFloat titleLabelHeight; + +@property (nonatomic, assign) BOOL hasConfigured; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCollectionViewCell.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCollectionViewCell.m" new file mode 100644 index 0000000..cd3cfda --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCollectionViewCell.m" @@ -0,0 +1,106 @@ +// +// SDCollectionViewCell.m +// SDCycleScrollView +// +// Created by aier on 15-3-22. +// Copyright (c) 2015年 GSD. All rights reserved. +// + + +/* + + ********************************************************************************* + * + * 🌟🌟🌟 新建SDCycleScrollView交流QQ群:185534916 🌟🌟🌟 + * + * 在您使用此自动轮播库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 + * 帮您解决问题。 + * 新浪微博:GSD_iOS + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios + * + * 另(我的自动布局库SDAutoLayout): + * 一行代码搞定自动布局!支持Cell和Tableview高度自适应,Label和ScrollView内容自适应,致力于 + * 做最简单易用的AutoLayout库。 + * 视频教程:http://www.letv.com/ptv/vplay/24038772.html + * 用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * GitHub:https://github.com/gsdios/SDAutoLayout + ********************************************************************************* + + */ + + +#import "SDCollectionViewCell.h" +#import "UIView+SDExtension.h" + +@implementation SDCollectionViewCell +{ + __weak UILabel *_titleLabel; +} + + +- (instancetype)initWithFrame:(CGRect)frame +{ + if (self = [super initWithFrame:frame]) { + [self setupImageView]; + [self setupTitleLabel]; + } + + return self; +} + +- (void)setTitleLabelBackgroundColor:(UIColor *)titleLabelBackgroundColor +{ + _titleLabelBackgroundColor = titleLabelBackgroundColor; + _titleLabel.backgroundColor = titleLabelBackgroundColor; +} + +- (void)setTitleLabelTextColor:(UIColor *)titleLabelTextColor +{ + _titleLabelTextColor = titleLabelTextColor; + _titleLabel.textColor = titleLabelTextColor; +} + +- (void)setTitleLabelTextFont:(UIFont *)titleLabelTextFont +{ + _titleLabelTextFont = titleLabelTextFont; + _titleLabel.font = titleLabelTextFont; +} + +- (void)setupImageView +{ + UIImageView *imageView = [[UIImageView alloc] init]; + _imageView = imageView; + [self addSubview:imageView]; +} + +- (void)setupTitleLabel +{ + UILabel *titleLabel = [[UILabel alloc] init]; + _titleLabel = titleLabel; + _titleLabel.hidden = YES; + [self addSubview:titleLabel]; +} + +- (void)setTitle:(NSString *)title +{ + _title = [title copy]; + _titleLabel.text = [NSString stringWithFormat:@" %@", title]; +} + + +- (void)layoutSubviews +{ + [super layoutSubviews]; + + _imageView.frame = self.bounds; + + CGFloat titleLabelW = self.sd_width; + CGFloat titleLabelH = _titleLabelHeight; + CGFloat titleLabelX = 0; + CGFloat titleLabelY = self.sd_height - titleLabelH; + _titleLabel.frame = CGRectMake(titleLabelX, titleLabelY, titleLabelW, titleLabelH); + _titleLabel.hidden = !_titleLabel.text; +} + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCycleScrollView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCycleScrollView.h" new file mode 100644 index 0000000..ee695f7 --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCycleScrollView.h" @@ -0,0 +1,167 @@ +// +// SDCycleScrollView.h +// SDCycleScrollView +// +// Created by aier on 15-3-22. +// Copyright (c) 2015年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * 🌟🌟🌟 新建SDCycleScrollView交流QQ群:185534916 🌟🌟🌟 + * + * 在您使用此自动轮播库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 + * 帮您解决问题。 + * 新浪微博:GSD_iOS + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios + * + * 另(我的自动布局库SDAutoLayout): + * 一行代码搞定自动布局!支持Cell和Tableview高度自适应,Label和ScrollView内容自适应,致力于 + * 做最简单易用的AutoLayout库。 + * 视频教程:http://www.letv.com/ptv/vplay/24038772.html + * 用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * GitHub:https://github.com/gsdios/SDAutoLayout + ********************************************************************************* + + */ + + +#import + +typedef enum { + SDCycleScrollViewPageContolAlimentRight, + SDCycleScrollViewPageContolAlimentCenter +} SDCycleScrollViewPageContolAliment; + +typedef enum { + SDCycleScrollViewPageContolStyleClassic, // 系统自带经典样式 + SDCycleScrollViewPageContolStyleAnimated, // 动画效果pagecontrol + SDCycleScrollViewPageContolStyleNone // 不显示pagecontrol +} SDCycleScrollViewPageContolStyle; + +@class SDCycleScrollView; + +@protocol SDCycleScrollViewDelegate + +@optional + +/** 点击图片回调 */ +- (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index; + +/** 图片滚动回调 */ +- (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didScrollToIndex:(NSInteger)index; + +@end + +@interface SDCycleScrollView : UIView + + + +// >>>>>>>>>>>>>>>>>>>>>>>>>> 数据源接口 + +/** 本地图片数组 */ +@property (nonatomic, strong) NSArray *localizationImageNamesGroup; + +/** 网络图片 url string 数组 */ +@property (nonatomic, strong) NSArray *imageURLStringsGroup; + +/** 每张图片对应要显示的文字数组 */ +@property (nonatomic, strong) NSArray *titlesGroup; + + + + + +// >>>>>>>>>>>>>>>>>>>>>>>>> 滚动控制接口 + +/** 自动滚动间隔时间,默认2s */ +@property (nonatomic, assign) CGFloat autoScrollTimeInterval; + +/** 是否无限循环,默认Yes */ +@property(nonatomic,assign) BOOL infiniteLoop; + +/** 是否自动滚动,默认Yes */ +@property(nonatomic,assign) BOOL autoScroll; + +@property (nonatomic, weak) id delegate; + +/** block监听点击方式 */ +@property (nonatomic, copy) void (^clickItemOperationBlock)(NSInteger currentIndex); + + +// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 自定义样式接口 + +/** 轮播图片的ContentMode */ +@property (nonatomic, assign) UIViewContentMode bannerImageViewContentMode; + +/** 占位图,用于网络未加载到图片时 */ +@property (nonatomic, strong) UIImage *placeholderImage; + + + +/** 是否显示分页控件 */ +@property (nonatomic, assign) BOOL showPageControl; + +/** 是否在只有一张图时隐藏pagecontrol,默认为YES */ +@property(nonatomic) BOOL hidesForSinglePage; + +/** pagecontrol 样式,默认为动画样式 */ +@property (nonatomic, assign) SDCycleScrollViewPageContolStyle pageControlStyle; + +/** 分页控件位置 */ +@property (nonatomic, assign) SDCycleScrollViewPageContolAliment pageControlAliment; + +/** 分页控件小圆标大小 */ +@property (nonatomic, assign) CGSize pageControlDotSize; + +/** 当前分页控件小圆标颜色 */ +@property (nonatomic, strong) UIColor *currentPageDotColor; + +/** 其他分页控件小圆标颜色 */ +@property (nonatomic, strong) UIColor *pageDotColor; + +/** 当前分页控件小圆标图片 */ +@property (nonatomic, strong) UIImage *currentPageDotImage; + +/** 其他分页控件小圆标图片 */ +@property (nonatomic, strong) UIImage *pageDotImage; + + + +/** 轮播文字label字体颜色 */ +@property (nonatomic, strong) UIColor *titleLabelTextColor; + +/** 轮播文字label字体大小 */ +@property (nonatomic, strong) UIFont *titleLabelTextFont; + +/** 轮播文字label背景颜色 */ +@property (nonatomic, strong) UIColor *titleLabelBackgroundColor; + +/** 轮播文字label高度 */ +@property (nonatomic, assign) CGFloat titleLabelHeight; + + + +// 网络图片轮播初始化方式 + ++ (instancetype)cycleScrollViewWithFrame:(CGRect)frame delegate:(id)delegate placeholderImage:(UIImage *)placeholderImage; + ++ (instancetype)cycleScrollViewWithFrame:(CGRect)frame imageURLStringsGroup:(NSArray *)imageURLStringsGroup; + + +// 本地图片轮播初始化方式 ++ (instancetype)cycleScrollViewWithFrame:(CGRect)frame imageNamesGroup:(NSArray *)imageNamesGroup; + + +// >>>>>>>>>>>>>>>>>>>>>>>>> 清除缓存接口 + +/** 清除图片缓存(此次升级后统一使用SDWebImage管理图片加载和缓存) */ ++ (void)clearImagesCache; + +/** 清除图片缓存(兼容旧版本方法) */ +- (void)clearCache; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCycleScrollView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCycleScrollView.m" new file mode 100644 index 0000000..cdd2d6b --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCycleScrollView.m" @@ -0,0 +1,542 @@ +// +// SDCycleScrollView.m +// SDCycleScrollView +// +// Created by aier on 15-3-22. +// Copyright (c) 2015年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * 🌟🌟🌟 新建SDCycleScrollView交流QQ群:185534916 🌟🌟🌟 + * + * 在您使用此自动轮播库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 + * 帮您解决问题。 + * 新浪微博:GSD_iOS + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios + * + * 另(我的自动布局库SDAutoLayout): + * 一行代码搞定自动布局!支持Cell和Tableview高度自适应,Label和ScrollView内容自适应,致力于 + * 做最简单易用的AutoLayout库。 + * 视频教程:http://www.letv.com/ptv/vplay/24038772.html + * 用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * GitHub:https://github.com/gsdios/SDAutoLayout + ********************************************************************************* + + */ + + +#import "SDCycleScrollView.h" +#import "SDCollectionViewCell.h" +#import "UIView+SDExtension.h" +#import "TAPageControl.h" +#import "UIImageView+WebCache.h" +#import "SDImageCache.h" + + + +NSString * const ID = @"cycleCell"; + +@interface SDCycleScrollView () + + +@property (nonatomic, weak) UICollectionView *mainView; // 显示图片的collectionView +@property (nonatomic, weak) UICollectionViewFlowLayout *flowLayout; +@property (nonatomic, strong) NSArray *imageURLsGroup; +@property (nonatomic, weak) NSTimer *timer; +@property (nonatomic, assign) NSInteger totalItemsCount; +@property (nonatomic, weak) UIControl *pageControl; + +@property (nonatomic, weak) UIImageView *backgroundImageView; // 当imageURLs为空时的背景图 + +@property (nonatomic, assign) NSInteger networkFailedRetryCount; + +@end + +@implementation SDCycleScrollView + +- (instancetype)initWithFrame:(CGRect)frame +{ + if (self = [super initWithFrame:frame]) { + [self initialization]; + [self setupMainView]; + } + return self; +} + +- (void)awakeFromNib +{ + [self initialization]; + [self setupMainView]; +} + +- (void)initialization +{ + _pageControlAliment = SDCycleScrollViewPageContolAlimentCenter; + _autoScrollTimeInterval = 2.0; + _titleLabelTextColor = [UIColor whiteColor]; + _titleLabelTextFont= [UIFont systemFontOfSize:14]; + _titleLabelBackgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]; + _titleLabelHeight = 30; + _autoScroll = YES; + _infiniteLoop = YES; + _showPageControl = YES; + _pageControlDotSize = CGSizeMake(10, 10); + _pageControlStyle = SDCycleScrollViewPageContolStyleClassic; + _hidesForSinglePage = YES; + _currentPageDotColor = [UIColor whiteColor]; + _pageDotColor = [UIColor lightGrayColor]; + _bannerImageViewContentMode = UIViewContentModeScaleToFill; + + self.backgroundColor = [UIColor lightGrayColor]; + +} + ++ (instancetype)cycleScrollViewWithFrame:(CGRect)frame imageNamesGroup:(NSArray *)imageNamesGroup +{ + SDCycleScrollView *cycleScrollView = [[self alloc] initWithFrame:frame]; + cycleScrollView.localizationImageNamesGroup = [NSMutableArray arrayWithArray:imageNamesGroup]; + return cycleScrollView; +} + ++ (instancetype)cycleScrollViewWithFrame:(CGRect)frame imageURLStringsGroup:(NSArray *)imageURLsGroup +{ + SDCycleScrollView *cycleScrollView = [[self alloc] initWithFrame:frame]; + cycleScrollView.imageURLStringsGroup = [NSMutableArray arrayWithArray:imageURLsGroup]; + return cycleScrollView; +} + ++ (instancetype)cycleScrollViewWithFrame:(CGRect)frame delegate:(id)delegate placeholderImage:(UIImage *)placeholderImage +{ + SDCycleScrollView *cycleScrollView = [[self alloc] initWithFrame:frame]; + cycleScrollView.delegate = delegate; + cycleScrollView.placeholderImage = placeholderImage; + + return cycleScrollView; +} + +// 设置显示图片的collectionView +- (void)setupMainView +{ + UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; + flowLayout.minimumLineSpacing = 0; + flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + _flowLayout = flowLayout; + + UICollectionView *mainView = [[UICollectionView alloc] initWithFrame:self.bounds collectionViewLayout:flowLayout]; + mainView.backgroundColor = [UIColor clearColor]; + mainView.pagingEnabled = YES; + mainView.showsHorizontalScrollIndicator = NO; + mainView.showsVerticalScrollIndicator = NO; + [mainView registerClass:[SDCollectionViewCell class] forCellWithReuseIdentifier:ID]; + mainView.dataSource = self; + mainView.delegate = self; + [self addSubview:mainView]; + _mainView = mainView; +} + + +#pragma mark - properties + + +- (void)setFrame:(CGRect)frame +{ + [super setFrame:frame]; + + _flowLayout.itemSize = self.frame.size; +} + +- (void)setPlaceholderImage:(UIImage *)placeholderImage +{ + _placeholderImage = placeholderImage; + + if (!self.backgroundImageView) { + UIImageView *bgImageView = [UIImageView new]; + [self insertSubview:bgImageView belowSubview:self.mainView]; + self.backgroundImageView = bgImageView; + } + + self.backgroundImageView.image = placeholderImage; +} + +- (void)setPageControlDotSize:(CGSize)pageControlDotSize +{ + _pageControlDotSize = pageControlDotSize; + [self setupPageControl]; + if ([self.pageControl isKindOfClass:[TAPageControl class]]) { + TAPageControl *pageContol = (TAPageControl *)_pageControl; + pageContol.dotSize = pageControlDotSize; + } +} + +- (void)setShowPageControl:(BOOL)showPageControl +{ + _showPageControl = showPageControl; + + _pageControl.hidden = !showPageControl; +} + +- (void)setCurrentPageDotColor:(UIColor *)currentPageDotColor +{ + _currentPageDotColor = currentPageDotColor; + if ([self.pageControl isKindOfClass:[TAPageControl class]]) { + TAPageControl *pageControl = (TAPageControl *)_pageControl; + pageControl.dotColor = currentPageDotColor; + } else { + UIPageControl *pageControl = (UIPageControl *)_pageControl; + pageControl.currentPageIndicatorTintColor = currentPageDotColor; + } + +} + +- (void)setPageDotColor:(UIColor *)pageDotColor +{ + _pageDotColor = pageDotColor; + + if ([self.pageDotColor isKindOfClass:[UIPageControl class]]) { + UIPageControl *pageControl = (UIPageControl *)_pageControl; + pageControl.pageIndicatorTintColor = pageDotColor; + } +} + +- (void)setCurrentPageDotImage:(UIImage *)currentPageDotImage +{ + _currentPageDotImage = currentPageDotImage; + + [self setCustomPageControlDotImage:currentPageDotImage isCurrentPageDot:YES]; +} + +- (void)setPageDotImage:(UIImage *)pageDotImage +{ + _pageDotImage = pageDotImage; + + [self setCustomPageControlDotImage:pageDotImage isCurrentPageDot:NO]; +} + +- (void)setCustomPageControlDotImage:(UIImage *)image isCurrentPageDot:(BOOL)isCurrentPageDot +{ + if (!image || !self.pageControl) return; + + if ([self.pageControl isKindOfClass:[TAPageControl class]]) { + TAPageControl *pageControl = (TAPageControl *)_pageControl; + if (isCurrentPageDot) { + pageControl.currentDotImage = image; + } else { + pageControl.dotImage = image; + } + } else { + UIPageControl *pageControl = (UIPageControl *)_pageControl; + if (isCurrentPageDot) { + [pageControl setValue:image forKey:@"_currentPageImage"]; + } else { + [pageControl setValue:image forKey:@"_pageImage"]; + } + } +} + +-(void)setAutoScroll:(BOOL)autoScroll{ + _autoScroll = autoScroll; + [_timer invalidate]; + _timer = nil; + + if (_autoScroll) { + [self setupTimer]; + } +} + +- (void)setAutoScrollTimeInterval:(CGFloat)autoScrollTimeInterval +{ + _autoScrollTimeInterval = autoScrollTimeInterval; + + [self setAutoScroll:self.autoScroll]; +} + +- (void)setPageControlStyle:(SDCycleScrollViewPageContolStyle)pageControlStyle +{ + _pageControlStyle = pageControlStyle; + + [self setupPageControl]; +} + +- (void)setImageURLsGroup:(NSArray *)imageURLsGroup +{ + _imageURLsGroup = imageURLsGroup; + + _totalItemsCount = self.infiniteLoop ? self.imageURLsGroup.count * 100 : self.imageURLsGroup.count; + + if (imageURLsGroup.count != 1) { + self.mainView.scrollEnabled = YES; + [self setAutoScroll:self.autoScroll]; + } else { + self.mainView.scrollEnabled = NO; + } + + [self setupPageControl]; + [self.mainView reloadData]; +} + +- (void)setImageURLStringsGroup:(NSArray *)imageURLStringsGroup +{ + _imageURLStringsGroup = imageURLStringsGroup; + + NSMutableArray *temp = [NSMutableArray new]; + [_imageURLStringsGroup enumerateObjectsUsingBlock:^(NSString * obj, NSUInteger idx, BOOL * stop) { + NSURL *url; + if ([obj isKindOfClass:[NSString class]]) { + url = [NSURL URLWithString:obj]; + } else if ([obj isKindOfClass:[NSURL class]]) { + url = (NSURL *)obj; + } + if (url) { + [temp addObject:url]; + } + }]; + self.imageURLsGroup = [temp copy]; +} + +- (void)setLocalizationImageNamesGroup:(NSArray *)localizationImageNamesGroup +{ + _localizationImageNamesGroup = localizationImageNamesGroup; + + NSMutableArray *temp = [NSMutableArray new]; + [_localizationImageNamesGroup enumerateObjectsUsingBlock:^(NSString * obj, NSUInteger idx, BOOL * stop) { + NSURL *url = [[NSBundle mainBundle] URLForResource:obj withExtension:nil]; + if (url) { + [temp addObject:url]; + } + }]; + self.imageURLsGroup = [temp copy]; +} + +#pragma mark - actions + + +- (void)setupPageControl +{ + if (_pageControl) [_pageControl removeFromSuperview]; // 重新加载数据时调整 + + if ((self.imageURLsGroup.count <= 1) && self.hidesForSinglePage) { + return; + } + + switch (self.pageControlStyle) { + case SDCycleScrollViewPageContolStyleAnimated: + { + TAPageControl *pageControl = [[TAPageControl alloc] init]; + pageControl.numberOfPages = self.imageURLsGroup.count; + pageControl.dotColor = self.currentPageDotColor; + pageControl.userInteractionEnabled = NO; + [self addSubview:pageControl]; + _pageControl = pageControl; + } + break; + + case SDCycleScrollViewPageContolStyleClassic: + { + UIPageControl *pageControl = [[UIPageControl alloc] init]; + pageControl.numberOfPages = self.imageURLsGroup.count; + pageControl.currentPageIndicatorTintColor = self.currentPageDotColor; + pageControl.pageIndicatorTintColor = self.pageDotColor; + pageControl.userInteractionEnabled = NO; + [self addSubview:pageControl]; + _pageControl = pageControl; + } + break; + + default: + break; + } + + // 重设pagecontroldot图片 + self.currentPageDotImage = self.currentPageDotImage; + self.pageDotImage = self.pageDotImage; +} + + +- (void)automaticScroll +{ + if (0 == _totalItemsCount) return; + int currentIndex = _mainView.contentOffset.x / _flowLayout.itemSize.width; + int targetIndex = currentIndex + 1; + if (targetIndex == _totalItemsCount) { + if (self.infiniteLoop) { + targetIndex = _totalItemsCount * 0.5; + }else{ + return; + } + [_mainView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:targetIndex inSection:0] atScrollPosition:UICollectionViewScrollPositionNone animated:NO]; + } + [_mainView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:targetIndex inSection:0] atScrollPosition:UICollectionViewScrollPositionNone animated:YES]; +} + +- (void)setupTimer +{ + NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:self.autoScrollTimeInterval target:self selector:@selector(automaticScroll) userInfo:nil repeats:YES]; + _timer = timer; + [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; +} + +- (void)clearCache +{ + [[self class] clearImagesCache]; +} + ++ (void)clearImagesCache +{ + [[[SDWebImageManager sharedManager] imageCache] clearDisk]; +} + +#pragma mark - life circles + +- (void)layoutSubviews +{ + [super layoutSubviews]; + + _flowLayout.itemSize = self.frame.size; + + _mainView.frame = self.bounds; + if (_mainView.contentOffset.x == 0 && _totalItemsCount) { + int targetIndex = 0; + if (self.infiniteLoop) { + targetIndex = _totalItemsCount * 0.5; + }else{ + targetIndex = 0; + } + [_mainView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:targetIndex inSection:0] atScrollPosition:UICollectionViewScrollPositionNone animated:NO]; + } + + CGSize size = CGSizeZero; + if ([self.pageControl isKindOfClass:[TAPageControl class]]) { + TAPageControl *pageControl = (TAPageControl *)_pageControl; + size = [pageControl sizeForNumberOfPages:self.imageURLsGroup.count]; + } else { + size = CGSizeMake(self.imageURLsGroup.count * self.pageControlDotSize.width * 1.2, self.pageControlDotSize.height); + } + CGFloat x = (self.sd_width - size.width) * 0.5; + if (self.pageControlAliment == SDCycleScrollViewPageContolAlimentRight) { + x = self.mainView.sd_width - size.width - 10; + } + CGFloat y = self.mainView.sd_height - size.height - 10; + + if ([self.pageControl isKindOfClass:[TAPageControl class]]) { + TAPageControl *pageControl = (TAPageControl *)_pageControl; + [pageControl sizeToFit]; + } + + self.pageControl.frame = CGRectMake(x, y, size.width, size.height); + self.pageControl.hidden = !_showPageControl; + + if (self.backgroundImageView) { + self.backgroundImageView.frame = self.bounds; + } + +} + +//解决当父View释放时,当前视图因为被Timer强引用而不能释放的问题 +- (void)willMoveToSuperview:(UIView *)newSuperview +{ + if (!newSuperview) { + [_timer invalidate]; + _timer = nil; + } +} + +//解决当timer释放后 回调scrollViewDidScroll时访问野指针导致崩溃 +- (void)dealloc { + _mainView.delegate = nil; + _mainView.dataSource = nil; +} + +#pragma mark - public actions + + +#pragma mark - UICollectionViewDataSource + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section +{ + return _totalItemsCount; +} + +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath +{ + SDCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ID forIndexPath:indexPath]; + long itemIndex = indexPath.item % self.imageURLsGroup.count; + + NSURL *url = self.imageURLsGroup[itemIndex]; + [cell.imageView sd_setImageWithURL:url placeholderImage:self.placeholderImage]; + + if (_titlesGroup.count) { + cell.title = _titlesGroup[itemIndex]; + } + + if (!cell.hasConfigured) { + cell.titleLabelBackgroundColor = self.titleLabelBackgroundColor; + cell.titleLabelHeight = self.titleLabelHeight; + cell.titleLabelTextColor = self.titleLabelTextColor; + cell.titleLabelTextFont = self.titleLabelTextFont; + cell.hasConfigured = YES; + cell.imageView.contentMode = self.bannerImageViewContentMode; + } + + return cell; +} + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath +{ + if ([self.delegate respondsToSelector:@selector(cycleScrollView:didSelectItemAtIndex:)]) { + [self.delegate cycleScrollView:self didSelectItemAtIndex:indexPath.item % self.imageURLsGroup.count]; + } + if (self.clickItemOperationBlock) { + self.clickItemOperationBlock(indexPath.item % self.imageURLsGroup.count); + } +} + + +#pragma mark - UIScrollViewDelegate + +- (void)scrollViewDidScroll:(UIScrollView *)scrollView +{ + int itemIndex = (scrollView.contentOffset.x + self.mainView.sd_width * 0.5) / self.mainView.sd_width; + if (!self.imageURLsGroup.count) return; // 解决清除timer时偶尔会出现的问题 + int indexOnPageControl = itemIndex % self.imageURLsGroup.count; + + if ([self.pageControl isKindOfClass:[TAPageControl class]]) { + TAPageControl *pageControl = (TAPageControl *)_pageControl; + pageControl.currentPage = indexOnPageControl; + } else { + UIPageControl *pageControl = (UIPageControl *)_pageControl; + pageControl.currentPage = indexOnPageControl; + } +} + +- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView +{ + if (self.autoScroll) { + [_timer invalidate]; + _timer = nil; + } +} + +- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate +{ + if (self.autoScroll) { + [self setupTimer]; + } +} + +- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView +{ + int itemIndex = (scrollView.contentOffset.x + self.mainView.sd_width * 0.5) / self.mainView.sd_width; + if (!self.imageURLsGroup.count) return; // 解决清除timer时偶尔会出现的问题 + int indexOnPageControl = itemIndex % self.imageURLsGroup.count; + + if ([self.delegate respondsToSelector:@selector(cycleScrollView:didScrollToIndex:)]) { + [self.delegate cycleScrollView:self didScrollToIndex:indexOnPageControl]; + } +} + + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/UIView+SDExtension.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/UIView+SDExtension.h" new file mode 100644 index 0000000..7fa220e --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/UIView+SDExtension.h" @@ -0,0 +1,44 @@ +// +// UIView+SDExtension.h +// SDRefreshView +// +// Created by aier on 15-2-23. +// Copyright (c) 2015年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * 🌟🌟🌟 新建SDCycleScrollView交流QQ群:185534916 🌟🌟🌟 + * + * 在您使用此自动轮播库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 + * 帮您解决问题。 + * 新浪微博:GSD_iOS + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios + * + * 另(我的自动布局库SDAutoLayout): + * 一行代码搞定自动布局!支持Cell和Tableview高度自适应,Label和ScrollView内容自适应,致力于 + * 做最简单易用的AutoLayout库。 + * 视频教程:http://www.letv.com/ptv/vplay/24038772.html + * 用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * GitHub:https://github.com/gsdios/SDAutoLayout + ********************************************************************************* + + */ + +#import + +#define SDColorCreater(r, g, b, a) [UIColor colorWithRed:(r / 255.0) green:(g / 255.0) blue:(b / 255.0) alpha:a] + + +@interface UIView (SDExtension) + +@property (nonatomic, assign) CGFloat sd_height; +@property (nonatomic, assign) CGFloat sd_width; + +@property (nonatomic, assign) CGFloat sd_y; +@property (nonatomic, assign) CGFloat sd_x; + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/UIView+SDExtension.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/UIView+SDExtension.m" new file mode 100644 index 0000000..1be615d --- /dev/null +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/UIView+SDExtension.m" @@ -0,0 +1,107 @@ +// +// UIView+SDExtension.m +// SDRefreshView +// +// Created by aier on 15-2-23. +// Copyright (c) 2015年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * 🌟🌟🌟 新建SDCycleScrollView交流QQ群:185534916 🌟🌟🌟 + * + * 在您使用此自动轮播库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 + * 帮您解决问题。 + * 新浪微博:GSD_iOS + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios + * + * 另(我的自动布局库SDAutoLayout): + * 一行代码搞定自动布局!支持Cell和Tableview高度自适应,Label和ScrollView内容自适应,致力于 + * 做最简单易用的AutoLayout库。 + * 视频教程:http://www.letv.com/ptv/vplay/24038772.html + * 用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * GitHub:https://github.com/gsdios/SDAutoLayout + ********************************************************************************* + + */ + +/* + + ********************************************************************************* + * + * 在您使用此自动轮播库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 + * 帮您解决问题。 + * 新浪微博:GSD_iOS + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios + * + * 另(我的自动布局库SDAutoLayout): + * 一行代码搞定自动布局!支持Cell和Tableview高度自适应,Label和ScrollView内容自适应,致力于 + * 做最简单易用的AutoLayout库。 + * 视频教程:http://www.letv.com/ptv/vplay/24038772.html + * 用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * GitHub:https://github.com/gsdios/SDAutoLayout + ********************************************************************************* + + */ + + +#import "UIView+SDExtension.h" + +@implementation UIView (SDExtension) + +- (CGFloat)sd_height +{ + return self.frame.size.height; +} + +- (void)setSd_height:(CGFloat)sd_height +{ + CGRect temp = self.frame; + temp.size.height = sd_height; + self.frame = temp; +} + +- (CGFloat)sd_width +{ + return self.frame.size.width; +} + +- (void)setSd_width:(CGFloat)sd_width +{ + CGRect temp = self.frame; + temp.size.width = sd_width; + self.frame = temp; +} + + +- (CGFloat)sd_y +{ + return self.frame.origin.y; +} + +- (void)setSd_y:(CGFloat)sd_y +{ + CGRect temp = self.frame; + temp.origin.y = sd_y; + self.frame = temp; +} + +- (CGFloat)sd_x +{ + return self.frame.origin.x; +} + +- (void)setSd_x:(CGFloat)sd_x +{ + CGRect temp = self.frame; + temp.origin.x = sd_x; + self.frame = temp; +} + + + +@end diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDBrowserImageView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDBrowserImageView.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDBrowserImageView.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDBrowserImageView.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDBrowserImageView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDBrowserImageView.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDBrowserImageView.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDBrowserImageView.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowser.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowser.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowser.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowser.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowser.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowser.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowser.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowser.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowserConfig.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowserConfig.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDPhotoBrowserConfig.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowserConfig.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDWaitingView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDWaitingView.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDWaitingView.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDWaitingView.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDWaitingView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDWaitingView.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDPhotoBrowser/SDWaitingView.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDWaitingView.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefresh.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefresh.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefresh.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefresh.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshFooterView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshFooterView.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshFooterView.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshFooterView.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshFooterView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshFooterView.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshFooterView.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshFooterView.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshHeaderView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshHeaderView.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshHeaderView.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshHeaderView.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshHeaderView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshHeaderView.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshHeaderView.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshHeaderView.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshView.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshView.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshView.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshView.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshView.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/SDRefreshView.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshView.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/UIView+SDExtension.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/UIView+SDExtension.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/UIView+SDExtension.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/UIView+SDExtension.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/UIView+SDExtension.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/UIView+SDExtension.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/UIView+SDExtension.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/UIView+SDExtension.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/sdRefeshView_arrow@2x.png" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/sdRefeshView_arrow@2x.png" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDRefeshView/sdRefeshView_arrow@2x.png" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/sdRefeshView_arrow@2x.png" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/MKAnnotationView+WebCache.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/MKAnnotationView+WebCache.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/MKAnnotationView+WebCache.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/MKAnnotationView+WebCache.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/MKAnnotationView+WebCache.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/MKAnnotationView+WebCache.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/MKAnnotationView+WebCache.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/MKAnnotationView+WebCache.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/NSData+ImageContentType.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/NSData+ImageContentType.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/NSData+ImageContentType.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/NSData+ImageContentType.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/NSData+ImageContentType.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/NSData+ImageContentType.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/NSData+ImageContentType.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/NSData+ImageContentType.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDImageCache.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDImageCache.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDImageCache.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDImageCache.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDImageCache.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDImageCache.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDImageCache.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDImageCache.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageCompat.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageCompat.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageCompat.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageCompat.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageCompat.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageCompat.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageCompat.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageCompat.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDecoder.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDecoder.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDecoder.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDecoder.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDecoder.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDecoder.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDecoder.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDecoder.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloader.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloader.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloader.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloader.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloader.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloader.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloader.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloader.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloaderOperation.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloaderOperation.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloaderOperation.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloaderOperation.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloaderOperation.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloaderOperation.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageDownloaderOperation.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloaderOperation.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageManager.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageManager.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageManager.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageManager.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageManager.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageManager.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageManager.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageManager.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageOperation.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageOperation.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImageOperation.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageOperation.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImagePrefetcher.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImagePrefetcher.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImagePrefetcher.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImagePrefetcher.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImagePrefetcher.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImagePrefetcher.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/SDWebImagePrefetcher.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImagePrefetcher.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIButton+WebCache.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIButton+WebCache.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIButton+WebCache.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIButton+WebCache.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIButton+WebCache.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIButton+WebCache.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIButton+WebCache.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIButton+WebCache.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+GIF.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+GIF.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+GIF.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+GIF.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+GIF.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+GIF.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+GIF.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+GIF.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+MultiFormat.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+MultiFormat.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+MultiFormat.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+MultiFormat.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+MultiFormat.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+MultiFormat.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+MultiFormat.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+MultiFormat.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+WebP.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+WebP.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+WebP.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+WebP.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+WebP.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+WebP.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImage+WebP.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+WebP.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+HighlightedWebCache.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+HighlightedWebCache.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+HighlightedWebCache.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+HighlightedWebCache.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+HighlightedWebCache.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+HighlightedWebCache.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+HighlightedWebCache.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+HighlightedWebCache.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+WebCache.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+WebCache.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+WebCache.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+WebCache.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+WebCache.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+WebCache.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIImageView+WebCache.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+WebCache.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIView+WebCacheOperation.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIView+WebCacheOperation.h" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIView+WebCacheOperation.h" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIView+WebCacheOperation.h" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIView+WebCacheOperation.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIView+WebCacheOperation.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDWebImage/UIView+WebCacheOperation.m" rename to "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIView+WebCacheOperation.m" From 3761203c9f26d25a09927202423bbab3a260ba4a Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Fri, 8 Jan 2016 16:12:26 +0800 Subject: [PATCH 025/276] =?UTF-8?q?=E6=95=B4=E7=90=86=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=BB=93=E6=9E=84=EF=BC=8C=E5=A2=9E=E5=8A=A0demo=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate" | Bin 41512 -> 41512 bytes .../Others/DemoTableViewControler.m" | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" index 755570cdf50328adfd4454cf4eb9f7114becaef6..aea0379b1eeba8bbb610e8678c4ab38eac78e167 100644 GIT binary patch delta 98 zcmZ2+glWYQrVXi1;>&LCG4YA6wlp))Q7|+#F|3WOHncD^-dy7(CeONT_1D_$$R==nAApA8=4s#Zmw|>lV@ExD^a(6^7KR_ kc4G!B1``I$%@-24aD(*RF~*{2cJ6s5CUc|BIR$$R0dsI5&j0`b diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.m" index 6e90829..22a2e4c 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.m" @@ -36,7 +36,7 @@ NSString * const demo6Content = @"展示scrollview的内容自适应和普通view的动态圆角处理"; NSString * const demo7Content = @"利用“普通版tableview的《多cell》高度自适应”2步设置完成tableview的排布"; NSString * const demo8Content = @"利用“升级版tableview的《多cell》高度自适应”1步完成tableview的排布"; -NSString * const demo9Content = @"利用SDAutoLayout仿制微信朋友圈。高仿微信计划:\n 1.高仿朋友圈 \n2.完善细节 \n3.高仿完整微信app \nPS:代码会持续在我的github更新"; +NSString * const demo9Content = @"利用SDAutoLayout仿制微信朋友圈。高仿微信计划:\n1.高仿朋友圈 \n2.完善细节 \n3.高仿完整微信app \nPS:代码会持续在我的github更新"; @implementation DemoTableViewControler { From 55e76c78c684c69fb55f73c7b3e0e6357657ca35 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Fri, 8 Jan 2016 22:27:16 +0800 Subject: [PATCH 026/276] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate" | Bin 41512 -> 46406 bytes .../Base.lproj/Main.storyboard" | 7 +++++-- .../DemoVC/DemoVC0/DemoVC0.m" | 1 + .../UITableView+SDAutoTableViewCellHeight.m" | 15 +++++++++++++++ .../SDAutoLayout/UIView+SDAutoLayout.m" | 11 +++++++++++ 5 files changed, 32 insertions(+), 2 deletions(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" index aea0379b1eeba8bbb610e8678c4ab38eac78e167..908f0c31a65f07696fd4a7248ba248c6456dfe16 100644 GIT binary patch literal 46406 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 GVDZ1biVG9~ diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Base.lproj/Main.storyboard" "b/SDAutoLayout \346\265\213\350\257\225 Demo/Base.lproj/Main.storyboard" index 418c62c..9a70357 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/Base.lproj/Main.storyboard" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/Base.lproj/Main.storyboard" @@ -1,7 +1,8 @@ - + - + + @@ -11,6 +12,7 @@ + @@ -32,6 +34,7 @@ + diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.m" index f9f5806..6e4e90d 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.m" @@ -84,6 +84,7 @@ - (void)viewDidLoad // .topSpaceToView(self.view0, 50) // .heightRatioToView(self.view, 1) // .widthRatioToView(self.view5, 1); + } diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" index 94f9cd2..3957eb4 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" @@ -98,6 +98,21 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPa if (cacheHeight) { return [cacheHeight floatValue]; } else { + if (!self.modelCell) { + return 0; + } + + + /* + 如果程序卡在了这里说明你的cell还没有调用“setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法或者你传递的bottomView为nil,请检查并修改。例: + + //注意:bottomView不能为nil + [cell setupAutoHeightWithBottomView:bottomView bottomMargin:bottomMargin]; + */ + NSAssert(self.modelCell.sd_bottomView, @">>>>>> 你的cell还没有调用“setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法或者你传递的bottomView为nil,请检查并修改"); + + + if (model && keyPath) { [self.modelCell setValue:model forKey:keyPath]; } diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" index 3ab4f18..fc8c16b 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" @@ -616,6 +616,17 @@ - (void)setOwnLayoutModel:(SDAutoLayoutModel *)ownLayoutModel - (SDAutoLayoutModel *)sd_layout { + /* + 卡在这里说明你的要自动布局的view在没有添加到父view的情况下就开始设置布局,你需要这样: + 1. UIView *view = [UIView new]; + 2. [superView addSubview:view]; + 3. view.sd_layout + .leftEqualToView()... + */ + NSAssert(self.superview, @">>>>>>>>>在加入父view之后才可以做自动布局设置"); + + + SDAutoLayoutModel *model = [self ownLayoutModel]; if (!model) { model = [SDAutoLayoutModel new]; From b6c04306a244ae270a2940e323ff49339ace4f7f Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Fri, 8 Jan 2016 22:28:45 +0800 Subject: [PATCH 027/276] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=B8=AD=E6=96=AD=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate" | Bin 46406 -> 46770 bytes .../UITableView+SDAutoTableViewCellHeight.m" | 1 + 2 files changed, 1 insertion(+) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" index 908f0c31a65f07696fd4a7248ba248c6456dfe16..b236e78099a58fb41581370f86c3373be6d8a682 100644 GIT binary patch delta 20246 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 AfB*mh delta 19975 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 CF6!I> diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" index 3957eb4..2528b02 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" @@ -103,6 +103,7 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPa } + /* 如果程序卡在了这里说明你的cell还没有调用“setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法或者你传递的bottomView为nil,请检查并修改。例: From 6684d195fa9e2f0c601ddba75757ccb1a0d79c10 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sat, 9 Jan 2016 12:14:09 +0800 Subject: [PATCH 028/276] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E7=89=88cell=E9=AB=98=E5=BA=A6=E8=87=AA=E9=80=82=E5=BA=94?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DemoVC5/DemoVC5CellTableViewCell.m" | 2 ++ .../UITableView+SDAutoTableViewCellHeight.h" | 2 ++ .../UITableView+SDAutoTableViewCellHeight.m" | 29 +++++++++---------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m" index dcece84..2921bb4 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m" @@ -111,6 +111,8 @@ - (void)setup [_view1 setSingleLineAutoResizeWithMaxWidth:200]; + [self setupAutoHeightWithBottomView:_view3 bottomMargin:0]; + } - (void)setModel:(DemoVC5Model *)model diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" index 1d16263..cb557c5 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" @@ -124,6 +124,8 @@ - (void)clearHeightCache; +- (NSNumber *)heightCacheForIndexPath:(NSIndexPath *)indexPath; + - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath; - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass; diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" index 2528b02..1a20ef7 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" @@ -91,10 +91,16 @@ - (void)clearHeightCache [_cacheDictionary removeAllObjects]; } -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath +- (NSNumber *)heightCacheForIndexPath:(NSIndexPath *)indexPath { NSString *cacheKey = [NSString stringWithFormat:@"%ld%ld", (long)indexPath.section, (long)indexPath.row]; - NSNumber *cacheHeight = [_cacheDictionary objectForKey:cacheKey]; + return (NSNumber *)[_cacheDictionary objectForKey:cacheKey]; +} + +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath +{ + + NSNumber *cacheHeight = [self heightCacheForIndexPath:indexPath]; if (cacheHeight) { return [cacheHeight floatValue]; } else { @@ -118,6 +124,7 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPa [self.modelCell setValue:model forKey:keyPath]; } [self.modelCell.contentView layoutSubviews]; + NSString *cacheKey = [NSString stringWithFormat:@"%ld%ld", (long)indexPath.section, (long)indexPath.row]; [_cacheDictionary setObject:@(self.modelCell.autoHeight) forKey:cacheKey]; return self.modelCell.autoHeight; } @@ -236,20 +243,7 @@ @implementation UITableViewController (SDTableViewControllerAutoCellHeight) - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width { - - if (!self.tableView.cellAutoHeightManager) { - self.tableView.cellAutoHeightManager = [[SDCellAutoHeightManager alloc] init]; - } - if (self.tableView.cellAutoHeightManager.contentViewWidth != width) { - self.tableView.cellAutoHeightManager.contentViewWidth = width; - [self.tableView.cellAutoHeightManager clearHeightCache]; - } - UITableViewCell *cell = [self.tableView.dataSource tableView:self.tableView cellForRowAtIndexPath:indexPath]; - self.tableView.cellAutoHeightManager.modelCell = cell; - if (cell.contentView.width != width) { - cell.contentView.width = width; - } - return [[self.tableView cellAutoHeightManager] cellHeightForIndexPath:indexPath model:nil keyPath:nil]; + return [self cellHeightForIndexPath:indexPath cellContentViewWidth:width tableView:self.tableView]; } @end @@ -265,6 +259,9 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth: tableView.cellAutoHeightManager.contentViewWidth = width; [tableView.cellAutoHeightManager clearHeightCache]; } + if ([tableView.cellAutoHeightManager heightCacheForIndexPath:indexPath]) { + return [[tableView.cellAutoHeightManager heightCacheForIndexPath:indexPath] floatValue]; + } UITableViewCell *cell = [tableView.dataSource tableView:tableView cellForRowAtIndexPath:indexPath]; tableView.cellAutoHeightManager.modelCell = cell; if (cell.contentView.width != width) { From 0cf74df0bf82395bad9e76c84e4880afc58b3c38 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sat, 9 Jan 2016 13:13:29 +0800 Subject: [PATCH 029/276] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E7=89=88cell=E9=AB=98=E5=BA=A6=E8=87=AA=E9=80=82=E5=BA=94?= =?UTF-8?q?=E6=96=B9=E6=B3=95=20=E4=BB=A5=E5=8F=8A=20=20demo9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DemoVC9/SDWeiXinPhotoContainerView.m" | 41 +++++++++++++++---- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.m" index 978fd84..65e1d99 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.m" @@ -30,16 +30,46 @@ @interface SDWeiXinPhotoContainerView () +@property (nonatomic, strong) NSArray *imageViewsArray; + @end @implementation SDWeiXinPhotoContainerView +- (instancetype)initWithFrame:(CGRect)frame +{ + if (self = [super initWithFrame:frame]) { + [self setup]; + } + return self; +} + +- (void)setup +{ + NSMutableArray *temp = [NSMutableArray new]; + + for (int i = 0; i < 9; i++) { + UIImageView *imageView = [UIImageView new]; + [self addSubview:imageView]; + imageView.userInteractionEnabled = YES; + imageView.tag = i; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; + [imageView addGestureRecognizer:tap]; + [temp addObject:imageView]; + } + + self.imageViewsArray = [temp copy]; +} + - (void)setPicPathStringsArray:(NSArray *)picPathStringsArray { _picPathStringsArray = picPathStringsArray; - [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + for (long i = _picPathStringsArray.count; i < self.imageViewsArray.count; i++) { + UIImageView *imageView = [self.imageViewsArray objectAtIndex:i]; + imageView.hidden = YES; + } if (_picPathStringsArray.count == 0) { self.height = 0; @@ -63,15 +93,10 @@ - (void)setPicPathStringsArray:(NSArray *)picPathStringsArray [_picPathStringsArray enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { long columnIndex = idx % perRowItemCount; long rowIndex = idx / perRowItemCount; - UIImageView *imageView = [UIImageView new]; + UIImageView *imageView = [_imageViewsArray objectAtIndex:idx]; + imageView.hidden = NO; imageView.image = [UIImage imageNamed:obj]; imageView.frame = CGRectMake(columnIndex * (itemW + margin), rowIndex * (itemH + margin), itemW, itemH); - [self addSubview:imageView]; - - imageView.userInteractionEnabled = YES; - imageView.tag = idx; - UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; - [imageView addGestureRecognizer:tap]; }]; CGFloat w = perRowItemCount * itemW + (perRowItemCount - 1) * margin; From b8129b26d81697d1463bc08ab1c9bfb54c52689e Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sat, 9 Jan 2016 17:25:02 +0800 Subject: [PATCH 030/276] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9029368..e7f42d1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -# SDAutoLayout(新建QQ交流群:497140713) +# SDAutoLayout(一行代码搞定自动布局!) +#(新建QQ交流群:497140713(已满)519489682(新开)) ☆☆ SDAutoLayout 视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ From e551e05ea362015411602b8f86b3174d307ee0f3 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sat, 9 Jan 2016 17:25:52 +0800 Subject: [PATCH 031/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e7f42d1..77f85d0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # SDAutoLayout(一行代码搞定自动布局!) -#(新建QQ交流群:497140713(已满)519489682(新开)) +# 新建QQ交流群:497140713(已满)519489682(新开) ☆☆ SDAutoLayout 视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ From 5ea39ccc5fbbfb097db0c6167ecc42f51b6c1e61 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sat, 9 Jan 2016 17:26:12 +0800 Subject: [PATCH 032/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 77f85d0..f4f00f8 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # SDAutoLayout(一行代码搞定自动布局!) -# 新建QQ交流群:497140713(已满)519489682(新开) +# QQ交流群:497140713(已满)519489682(新开) ☆☆ SDAutoLayout 视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ From 13e68d5aaac572c46dcc4072b53a61d492b73eb3 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sat, 9 Jan 2016 18:01:29 +0800 Subject: [PATCH 033/276] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E7=89=88cell=E9=AB=98=E5=BA=A6=E8=87=AA=E9=80=82=E5=BA=94?= =?UTF-8?q?=E6=96=B9=E6=B3=95=20=E4=BB=A5=E5=8F=8A=20=20demo9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DemoVC/DemoVC5/DemoVC5CellTableViewCell.m" | 2 -- .../UITableView+SDAutoTableViewCellHeight.m" | 9 +++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m" index 2921bb4..dcece84 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m" @@ -111,8 +111,6 @@ - (void)setup [_view1 setSingleLineAutoResizeWithMaxWidth:200]; - [self setupAutoHeightWithBottomView:_view3 bottomMargin:0]; - } - (void)setModel:(DemoVC5Model *)model diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" index 1a20ef7..d5e08b1 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" @@ -108,6 +108,10 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPa return 0; } + if (model && keyPath) { + [self.modelCell setValue:model forKey:keyPath]; + } + /* @@ -119,10 +123,7 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPa NSAssert(self.modelCell.sd_bottomView, @">>>>>> 你的cell还没有调用“setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法或者你传递的bottomView为nil,请检查并修改"); - - if (model && keyPath) { - [self.modelCell setValue:model forKey:keyPath]; - } + [self.modelCell.contentView layoutSubviews]; NSString *cacheKey = [NSString stringWithFormat:@"%ld%ld", (long)indexPath.section, (long)indexPath.row]; [_cacheDictionary setObject:@(self.modelCell.autoHeight) forKey:cacheKey]; From 62372b91c6fb1fc5648d5768c6b30966eca2548d Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 10 Jan 2016 12:10:57 +0800 Subject: [PATCH 034/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20=E4=B8=BB=E5=8A=A8?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=B8=83=E5=B1=80=20=E7=9A=84=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xcdebugger/Breakpoints_v2.xcbkptlist" | 592 ++++++++++++++++++ .../DemoVC/DemoVC0/DemoVC0.m" | 4 +- .../SDAutoLayout/UIView+SDAutoLayout.h" | 3 + .../SDAutoLayout/UIView+SDAutoLayout.m" | 5 + 4 files changed, 602 insertions(+), 2 deletions(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/aier.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/aier.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist" index 8f94031..0cc4714 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/aier.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/aier.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist" @@ -13,5 +13,597 @@ stopOnStyle = "0"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.m" index 6e4e90d..9b62d37 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.m" @@ -100,8 +100,8 @@ - (void)animation [UIView animateWithDuration:0.8 animations:^{ self.view0.sd_layout .widthRatioToView(self.view, _widthRatio); - [self.view layoutSubviews]; - [self.view0 layoutSubviews]; + [self.view0 updateLayout]; + [self.view5 updateLayout]; }]; diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" index 46b4c5b..db8e517 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" @@ -166,6 +166,9 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); /** 设置Cell的高度自适应,也可用于设置普通view内容自适应 */ - (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin; +/** 主动刷新布局(如果你需要设置完布局代码就获得view的frame请调用此方法) */ +- (void)updateLayout; + @property (nonatomic) CGFloat autoHeight; @property (nonatomic) UIView *sd_bottomView; diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" index fc8c16b..949b372 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" @@ -414,6 +414,11 @@ - (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat self.sd_bottomViewBottomMargin = bottomMargin; } +- (void)updateLayout +{ + [self.superview layoutSubviews]; +} + - (CGFloat)autoHeight { return [objc_getAssociatedObject(self, _cmd) floatValue]; From c4f3f3905fdbb2d4b2ccacc2992f80ca6579bee1 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 10 Jan 2016 15:18:30 +0800 Subject: [PATCH 035/276] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj" | 40 +- SDAutoLayout.podspec | 100 +- .../UITableView+SDAutoTableViewCellHeight.h | 136 +++ .../UITableView+SDAutoTableViewCellHeight.m | 275 +++++ SDAutoLayout/UIView+SDAutoLayout.h | 299 +++++ SDAutoLayout/UIView+SDAutoLayout.m | 1073 +++++++++++++++++ 6 files changed, 1804 insertions(+), 119 deletions(-) create mode 100644 SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h create mode 100644 SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m create mode 100644 SDAutoLayout/UIView+SDAutoLayout.h create mode 100644 SDAutoLayout/UIView+SDAutoLayout.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" index 9840acc..0a11813 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" @@ -73,8 +73,6 @@ 487D3EC21BCB9EC700A66173 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 487D3EC11BCB9EC700A66173 /* Images.xcassets */; }; 487D3EC51BCB9EC700A66173 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 487D3EC31BCB9EC700A66173 /* LaunchScreen.xib */; }; 487D3ED11BCB9EC700A66173 /* SDAutoLayout____DemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3ED01BCB9EC700A66173 /* SDAutoLayout____DemoTests.m */; }; - 48DA2B001BFB529200A771E6 /* UITableView+SDAutoTableViewCellHeight.m in Sources */ = {isa = PBXBuildFile; fileRef = 48DA2AFD1BFB529200A771E6 /* UITableView+SDAutoTableViewCellHeight.m */; }; - 48DA2B011BFB529200A771E6 /* UIView+SDAutoLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 48DA2AFF1BFB529200A771E6 /* UIView+SDAutoLayout.m */; }; 48DBCD1A1C01E045002EC476 /* icon0.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD101C01E045002EC476 /* icon0.jpg */; }; 48DBCD1B1C01E045002EC476 /* icon1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD111C01E045002EC476 /* icon1.jpg */; }; 48DBCD1C1C01E045002EC476 /* icon2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD121C01E045002EC476 /* icon2.jpg */; }; @@ -85,6 +83,8 @@ 48DBCD211C01E045002EC476 /* pic2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD171C01E045002EC476 /* pic2.jpg */; }; 48DBCD221C01E045002EC476 /* pic3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD181C01E045002EC476 /* pic3.jpg */; }; 48DBCD231C01E045002EC476 /* pic4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD191C01E045002EC476 /* pic4.jpg */; }; + 99A697741C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m in Sources */ = {isa = PBXBuildFile; fileRef = 99A697711C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m */; }; + 99A697751C423B0D004EA699 /* UIView+SDAutoLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 99A697731C423B0D004EA699 /* UIView+SDAutoLayout.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -225,10 +225,6 @@ 487D3ECA1BCB9EC700A66173 /* SDAutoLayout 测试 DemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SDAutoLayout 测试 DemoTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 487D3ECF1BCB9EC700A66173 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 487D3ED01BCB9EC700A66173 /* SDAutoLayout____DemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "SDAutoLayout____DemoTests.m"; sourceTree = ""; }; - 48DA2AFC1BFB529200A771E6 /* UITableView+SDAutoTableViewCellHeight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITableView+SDAutoTableViewCellHeight.h"; sourceTree = ""; }; - 48DA2AFD1BFB529200A771E6 /* UITableView+SDAutoTableViewCellHeight.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITableView+SDAutoTableViewCellHeight.m"; sourceTree = ""; }; - 48DA2AFE1BFB529200A771E6 /* UIView+SDAutoLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+SDAutoLayout.h"; sourceTree = ""; }; - 48DA2AFF1BFB529200A771E6 /* UIView+SDAutoLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+SDAutoLayout.m"; sourceTree = ""; }; 48DBCD101C01E045002EC476 /* icon0.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = icon0.jpg; sourceTree = ""; }; 48DBCD111C01E045002EC476 /* icon1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = icon1.jpg; sourceTree = ""; }; 48DBCD121C01E045002EC476 /* icon2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = icon2.jpg; sourceTree = ""; }; @@ -239,6 +235,10 @@ 48DBCD171C01E045002EC476 /* pic2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic2.jpg; sourceTree = ""; }; 48DBCD181C01E045002EC476 /* pic3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic3.jpg; sourceTree = ""; }; 48DBCD191C01E045002EC476 /* pic4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic4.jpg; sourceTree = ""; }; + 99A697701C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITableView+SDAutoTableViewCellHeight.h"; sourceTree = ""; }; + 99A697711C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITableView+SDAutoTableViewCellHeight.m"; sourceTree = ""; }; + 99A697721C423B0D004EA699 /* UIView+SDAutoLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+SDAutoLayout.h"; sourceTree = ""; }; + 99A697731C423B0D004EA699 /* UIView+SDAutoLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+SDAutoLayout.m"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -533,10 +533,10 @@ 487D3EB31BCB9EC700A66173 /* SDAutoLayout 测试 Demo */ = { isa = PBXGroup; children = ( + 99A6976F1C423B0D004EA699 /* SDAutoLayout */, 485303491C3F97AA004361A7 /* Others */, 485303021C3F977A004361A7 /* DemoVC */, 485302961C3F648F004361A7 /* Vender */, - 48DA2AFB1BFB529200A771E6 /* SDAutoLayout */, 487D3EBE1BCB9EC700A66173 /* Main.storyboard */, 487D3EC11BCB9EC700A66173 /* Images.xcassets */, 487D3EC31BCB9EC700A66173 /* LaunchScreen.xib */, @@ -572,17 +572,6 @@ name = "Supporting Files"; sourceTree = ""; }; - 48DA2AFB1BFB529200A771E6 /* SDAutoLayout */ = { - isa = PBXGroup; - children = ( - 48DA2AFC1BFB529200A771E6 /* UITableView+SDAutoTableViewCellHeight.h */, - 48DA2AFD1BFB529200A771E6 /* UITableView+SDAutoTableViewCellHeight.m */, - 48DA2AFE1BFB529200A771E6 /* UIView+SDAutoLayout.h */, - 48DA2AFF1BFB529200A771E6 /* UIView+SDAutoLayout.m */, - ); - path = SDAutoLayout; - sourceTree = ""; - }; 48DBCD0F1C01DEB1002EC476 /* Images */ = { isa = PBXGroup; children = ( @@ -606,6 +595,17 @@ path = Images; sourceTree = ""; }; + 99A6976F1C423B0D004EA699 /* SDAutoLayout */ = { + isa = PBXGroup; + children = ( + 99A697701C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.h */, + 99A697711C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m */, + 99A697721C423B0D004EA699 /* UIView+SDAutoLayout.h */, + 99A697731C423B0D004EA699 /* UIView+SDAutoLayout.m */, + ); + path = SDAutoLayout; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -728,7 +728,6 @@ 4853033C1C3F977A004361A7 /* DemoVC5CellTableViewCell.m in Sources */, 485303501C3F97AA004361A7 /* AppDelegate.m in Sources */, 485302F61C3F65EE004361A7 /* TADotView.m in Sources */, - 48DA2B011BFB529200A771E6 /* UIView+SDAutoLayout.m in Sources */, 485303481C3F977A004361A7 /* SDWeiXinPhotoContainerView.m in Sources */, 485302DB1C3F6490004361A7 /* SDWebImageManager.m in Sources */, 485302F51C3F65EE004361A7 /* TAAnimatedDotView.m in Sources */, @@ -751,6 +750,7 @@ 485303351C3F977A004361A7 /* DemoVC0.m in Sources */, 485302D81C3F6490004361A7 /* SDWebImageDecoder.m in Sources */, 485302DC1C3F6490004361A7 /* SDWebImagePrefetcher.m in Sources */, + 99A697751C423B0D004EA699 /* UIView+SDAutoLayout.m in Sources */, 485302D21C3F6490004361A7 /* SDRefreshView.m in Sources */, 4853033D1C3F977A004361A7 /* DemoVC5Model.m in Sources */, 485302DE1C3F6490004361A7 /* UIImage+GIF.m in Sources */, @@ -765,9 +765,9 @@ 485303511C3F97AA004361A7 /* DemoTableViewControler.m in Sources */, 485302F41C3F65EE004361A7 /* TAAbstractDotView.m in Sources */, 485302F81C3F65EE004361A7 /* SDCollectionViewCell.m in Sources */, - 48DA2B001BFB529200A771E6 /* UITableView+SDAutoTableViewCellHeight.m in Sources */, 485302DA1C3F6490004361A7 /* SDWebImageDownloaderOperation.m in Sources */, 485303521C3F97AA004361A7 /* ViewController.m in Sources */, + 99A697741C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m in Sources */, 485302D71C3F6490004361A7 /* SDWebImageCompat.m in Sources */, 485303461C3F977A004361A7 /* DemoVC9Cell.m in Sources */, 485302D51C3F6490004361A7 /* NSData+ImageContentType.m in Sources */, diff --git a/SDAutoLayout.podspec b/SDAutoLayout.podspec index 9df7993..4104d0f 100644 --- a/SDAutoLayout.podspec +++ b/SDAutoLayout.podspec @@ -1,20 +1,5 @@ -# -# Be sure to run `pod spec lint SDAutoLayout.podspec' to ensure this is a -# valid spec and to remove all comments including this before submitting the spec. -# -# To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html -# To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ -# - Pod::Spec.new do |s| - # ――― Spec Metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # - # - # These will help people to find your library, and whilst it - # can feel like a chore to fill in it's definitely to your advantage. The - # summary should be tweet-length, and the description more in depth. - # - s.name = "SDAutoLayout" s.version = "1.1" s.summary = "一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout." @@ -22,105 +7,22 @@ Pod::Spec.new do |s| s.homepage = "https://github.com/gsdios/SDAutoLayout" # s.screenshots = "https://camo.githubusercontent.com/5d9e879c7006297b3d6e12c20c6cd1e15bf83016/687474703a2f2f7777332e73696e61696d672e636e2f626d6964646c652f39623831343665646777316578346d756b69787236673230396730376c6864742e676966" - - # ――― Spec License ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # - # - # Licensing your code is important. See http://choosealicense.com for more info. - # CocoaPods will detect a license file if there is a named LICENSE* - # Popular ones are 'MIT', 'BSD' and 'Apache License, Version 2.0'. - # - s.license = "MIT" - # s.license = { :type => "MIT", :file => "FILE_LICENSE" } - - - # ――― Author Metadata ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # - # - # Specify the authors of the library, with email addresses. Email addresses - # of the authors are extracted from the SCM log. E.g. $ git log. CocoaPods also - # accepts just a name if you'd rather not provide an email address. - # - # Specify a social_media_url where others can refer to, for example a twitter - # profile URL. - # s.author = { "GSD_iOS" => "gsdios@126.com" } - # Or just: s.author = "GSD_iOS" - # s.authors = { "GSD_iOS" => "gsdios@126.com" } - # s.social_media_url = "http://twitter.com/GSD_iOS" - - # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― # - # - # If this Pod runs only on iOS or OS X, then specify the platform and - # the deployment target. You can optionally include the target after the platform. - # s.platform = :ios s.platform = :ios, "7.0" - # When using multiple platforms - # s.ios.deployment_target = "5.0" - # s.osx.deployment_target = "10.7" - - - # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # - # - # Specify the location from where the source should be retrieved. - # Supports git, hg, bzr, svn and HTTP. - # - s.source = { :git => "https://github.com/gsdios/SDAutoLayout.git", :tag => "1.1"} - - # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # - # - # CocoaPods is smart about how it includes source code. For source files - # giving a folder will include any swift, h, m, mm, c & cpp files. - # For header files it will include any header in the folder. - # Not including the public_header_files will make all headers public. - # - s.source_files = "SDAutoLayout 测试 Demo/SDAutoLayout/**/*.{h,m}" # s.public_header_files = "Classes/**/*.h" - # ――― Resources ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # - # - # A list of resources included with the Pod. These are copied into the - # target bundle with a build phase script. Anything else will be cleaned. - # You can preserve files from being cleaned, please don't preserve - # non-essential files like tests, examples and documentation. - # - - # s.resource = "icon.png" - # s.resources = "Resources/*.png" - - # s.preserve_paths = "FilesToSave", "MoreFilesToSave" - - - # ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # - # - # Link your library with frameworks, or libraries. Libraries do not include - # the lib prefix of their name. - # - - # s.framework = "SomeFramework" - # s.frameworks = "SomeFramework", "AnotherFramework" - - # s.library = "iconv" - # s.libraries = "iconv", "xml2" - - - # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # - # - # If your library depends on compiler flags you can set them in the xcconfig hash - # where they will only apply to your library. If you depend on other Podspecs - # you can include multiple dependencies to ensure it works. - s.requires_arc = true - # s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" } - # s.dependency "JSONKit", "~> 1.4" + # s.dependency "JSONKit", "~> 1.4" end diff --git a/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h b/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h new file mode 100644 index 0000000..cb557c5 --- /dev/null +++ b/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h @@ -0,0 +1,136 @@ +// +// UITableView+SDAutoTableViewCellHeight.h +// SDAutoLayout 测试 Demo +// +// Created by aier on 15/11/1. +// Copyright © 2015年 gsd. All rights reserved. +// + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * QQ : 2689718696(gsdios) * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * * + ********************************************************************************* + + */ + + + + +/* + + cell高度自适应有“普通版”和“升级版”两个版本: + + 1.普通版:两行代码(两步设置)搞定tableview的cell高度自适应(单cell详见demo5,多cell详见demo7) + + 2.升级版:只需一步设置即可实现,见下方category“UITableViewController (SDTableViewControllerAutoCellHeight)”) + + PS:cell高度自适应前提>>应该调用cell的“- (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法进行cell的自动高度设置 + */ + +#import + +@class SDCellAutoHeightManager; + +#define kSDModelCellTag 199206 + + +/* 普通版!两行代码(两步设置)搞定tableview的cell高度自适应(单cell详见demo5,多cell详见demo7) */ + +@interface UITableView (SDAutoTableViewCellHeight) + +@property (nonatomic, strong) SDCellAutoHeightManager *cellAutoHeightManager; + + + +// >>>>>>>>>>>>>> 单个cell情景下调用以下方法(详细用法见demo5) >>>>>>>>>>>>>> + +/** 开启高度自适应,建议在tableview的数据源方法“- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section”中调用此方法,详细用法见demo5 */ +- (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth; + +/** 返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key)*/ +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath; + + + +// >>>>>>>>>>>>>> 多cell情景下调用以下方法(详细用法见demo7) >>>>>>>>>>>>>>>>> + +/** cellClassArray 为所有cell的类组成的数组,详细用法见demo7 */ +- (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth; + +/** 返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key) */ +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass; + +@end + + + + + +/* 升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell(详见demo8) */ + +@interface UITableViewController (SDTableViewControllerAutoCellHeight) + +/** (UITableViewController方法)升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell */ +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width; + +@end + + + +/* 升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell */ + +@interface NSObject (SDAnyObjectAutoCellHeight) + +/** (NSObject方法)升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell */ +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width tableView:(UITableView *)tableView; + +@end + + + + + + + + + + + + + + + + + +// ------------------------------- 以下为库内部使用无须了解 -------------------- + +@interface SDCellAutoHeightManager : NSObject + +@property (nonatomic, assign) CGFloat contentViewWidth; + +@property (nonatomic, assign) Class cellClass; + +@property (nonatomic, assign) CGFloat cellHeight; + +@property (nonatomic, strong) UITableViewCell *modelCell; + +- (void)clearHeightCache; + +- (NSNumber *)heightCacheForIndexPath:(NSIndexPath *)indexPath; + +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath; + +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass; + +- (instancetype)initWithCellClass:(Class)cellClass; ++ (instancetype)managerWithCellClass:(Class)cellClass; +@end + diff --git a/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m b/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m new file mode 100644 index 0000000..d5e08b1 --- /dev/null +++ b/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m @@ -0,0 +1,275 @@ +// +// UITableView+SDAutoTableViewCellHeight.m +// SDAutoLayout 测试 Demo +// +// Created by aier on 15/11/1. +// Copyright © 2015年 gsd. All rights reserved. +// + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * QQ : 2689718696(gsdios) * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * * + ********************************************************************************* + + */ + +#import "UITableView+SDAutoTableViewCellHeight.h" +#import "UIView+SDAutoLayout.h" +#import + +@implementation SDCellAutoHeightManager +{ + NSMutableDictionary *_cacheDictionary; + UITableView *_modelTableview; +} + +- (instancetype)init +{ + if (self = [super init]) { + _cacheDictionary = [NSMutableDictionary new]; + } + return self; +} + +- (instancetype)initWithCellClass:(Class)cellClass +{ + if (self = [super init]) { + _modelTableview = [UITableView new]; + [self registerCellWithCellClass:cellClass]; + _cacheDictionary = [NSMutableDictionary new]; + } + return self; +} + +- (instancetype)initWithCellClasses:(NSArray *)cellClassArray +{ + if (self = [super init]) { + _modelTableview = [UITableView new]; + [cellClassArray enumerateObjectsUsingBlock:^(Class _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + [self registerCellWithCellClass:obj]; + }]; + _cacheDictionary = [NSMutableDictionary new]; + } + return self; +} + +- (void)registerCellWithCellClass:(Class)cellClass +{ + [_modelTableview registerClass:cellClass forCellReuseIdentifier:NSStringFromClass(cellClass)]; + self.modelCell = [_modelTableview dequeueReusableCellWithIdentifier:NSStringFromClass(cellClass)]; + if (!self.modelCell.contentView.subviews.count) { + self.modelCell = nil; + [_modelTableview registerNib:[UINib nibWithNibName:NSStringFromClass(cellClass) bundle:nil] forCellReuseIdentifier:NSStringFromClass(cellClass)]; + self.modelCell = [_modelTableview dequeueReusableCellWithIdentifier:NSStringFromClass(cellClass)]; + } +} + ++ (instancetype)managerWithCellClass:(Class)cellClass +{ + SDCellAutoHeightManager *manager = [[self alloc] initWithCellClass:cellClass]; + return manager; +} + +- (UITableViewCell *)modelCell +{ + if (_modelCell.tag != kSDModelCellTag) { + _modelCell.contentView.tag = kSDModelCellTag; + } + return _modelCell; +} + +- (void)clearHeightCache +{ + [_cacheDictionary removeAllObjects]; +} + +- (NSNumber *)heightCacheForIndexPath:(NSIndexPath *)indexPath +{ + NSString *cacheKey = [NSString stringWithFormat:@"%ld%ld", (long)indexPath.section, (long)indexPath.row]; + return (NSNumber *)[_cacheDictionary objectForKey:cacheKey]; +} + +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath +{ + + NSNumber *cacheHeight = [self heightCacheForIndexPath:indexPath]; + if (cacheHeight) { + return [cacheHeight floatValue]; + } else { + if (!self.modelCell) { + return 0; + } + + if (model && keyPath) { + [self.modelCell setValue:model forKey:keyPath]; + } + + + + /* + 如果程序卡在了这里说明你的cell还没有调用“setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法或者你传递的bottomView为nil,请检查并修改。例: + + //注意:bottomView不能为nil + [cell setupAutoHeightWithBottomView:bottomView bottomMargin:bottomMargin]; + */ + NSAssert(self.modelCell.sd_bottomView, @">>>>>> 你的cell还没有调用“setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法或者你传递的bottomView为nil,请检查并修改"); + + + + [self.modelCell.contentView layoutSubviews]; + NSString *cacheKey = [NSString stringWithFormat:@"%ld%ld", (long)indexPath.section, (long)indexPath.row]; + [_cacheDictionary setObject:@(self.modelCell.autoHeight) forKey:cacheKey]; + return self.modelCell.autoHeight; + } +} + +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass +{ + if (![self.modelCell isKindOfClass:cellClass]) { + self.modelCell = nil; + self.modelCell = [_modelTableview dequeueReusableCellWithIdentifier:NSStringFromClass(cellClass)]; + if (!self.modelCell) { + [self registerCellWithCellClass:cellClass]; + } + _modelCell.contentView.tag = kSDModelCellTag; + } + if (self.modelCell.contentView.width != self.contentViewWidth) { + _modelCell.contentView.width = self.contentViewWidth; + } + return [self cellHeightForIndexPath:indexPath model:model keyPath:keyPath]; +} + +- (void)setContentViewWidth:(CGFloat)contentViewWidth +{ + if (_contentViewWidth != contentViewWidth) { + [self clearHeightCache]; + } + _contentViewWidth = contentViewWidth; + + self.modelCell.contentView.width = self.contentViewWidth; +} + +@end + + +@implementation UITableView (SDAutoTableViewCellHeight) + ++ (void)load { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + Method reloadData = class_getInstanceMethod(self, @selector(reloadData)); + Method sd_reloadData = class_getInstanceMethod(self, @selector(sd_reloadData)); + method_exchangeImplementations(reloadData, sd_reloadData); + }); +} + +- (void)sd_reloadData +{ + [self.cellAutoHeightManager clearHeightCache]; + [self sd_reloadData]; +} +/* + * 下一步即将实现的功能 + + - (void)sd_insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation + { + [self sd_insertRowsAtIndexPaths:indexPaths withRowAnimation:animation]; + } + + - (void)sd_deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation + { + [self sd_deleteRowsAtIndexPaths:indexPaths withRowAnimation:animation]; + } + + - (void)sd_reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation + { + [self sd_reloadRowsAtIndexPaths:indexPaths withRowAnimation:animation]; + } + + - (void)sd_moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath + { + [self sd_moveRowAtIndexPath:indexPath toIndexPath:newIndexPath]; + } + + */ + +- (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth +{ + if (!self.cellAutoHeightManager) { + self.cellAutoHeightManager = [SDCellAutoHeightManager managerWithCellClass:cellClass]; + } + self.cellAutoHeightManager.contentViewWidth = contentViewWidth; +} + +- (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth +{ + if (!self.cellAutoHeightManager) { + self.cellAutoHeightManager = [[SDCellAutoHeightManager alloc] initWithCellClasses:cellClassArray]; + } + self.cellAutoHeightManager.contentViewWidth = contentViewWidth; +} + +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath +{ + return [self.cellAutoHeightManager cellHeightForIndexPath:indexPath model:model keyPath:keyPath]; +} + +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass +{ + return [self.cellAutoHeightManager cellHeightForIndexPath:indexPath model:model keyPath:keyPath cellClass:cellClass]; +} + +- (SDCellAutoHeightManager *)cellAutoHeightManager +{ + return objc_getAssociatedObject(self, _cmd); +} + +- (void)setCellAutoHeightManager:(SDCellAutoHeightManager *)cellAutoHeightManager +{ + objc_setAssociatedObject(self, @selector(cellAutoHeightManager), cellAutoHeightManager, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end + + +@implementation UITableViewController (SDTableViewControllerAutoCellHeight) + +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width +{ + return [self cellHeightForIndexPath:indexPath cellContentViewWidth:width tableView:self.tableView]; +} + +@end + +@implementation NSObject (SDAnyObjectAutoCellHeight) + +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width tableView:(UITableView *)tableView +{ + if (!tableView.cellAutoHeightManager) { + tableView.cellAutoHeightManager = [[SDCellAutoHeightManager alloc] init]; + } + if (tableView.cellAutoHeightManager.contentViewWidth != width) { + tableView.cellAutoHeightManager.contentViewWidth = width; + [tableView.cellAutoHeightManager clearHeightCache]; + } + if ([tableView.cellAutoHeightManager heightCacheForIndexPath:indexPath]) { + return [[tableView.cellAutoHeightManager heightCacheForIndexPath:indexPath] floatValue]; + } + UITableViewCell *cell = [tableView.dataSource tableView:tableView cellForRowAtIndexPath:indexPath]; + tableView.cellAutoHeightManager.modelCell = cell; + if (cell.contentView.width != width) { + cell.contentView.width = width; + } + return [[tableView cellAutoHeightManager] cellHeightForIndexPath:indexPath model:nil keyPath:nil]; +} + +@end + diff --git a/SDAutoLayout/UIView+SDAutoLayout.h b/SDAutoLayout/UIView+SDAutoLayout.h new file mode 100644 index 0000000..db8e517 --- /dev/null +++ b/SDAutoLayout/UIView+SDAutoLayout.h @@ -0,0 +1,299 @@ +// +// UIView+SDAutoLayout.h +// +// Created by gsd on 15/10/6. +// Copyright (c) 2015年 gsd. All rights reserved. +// + +/* + ************************************************************************* + + --------- INTRODUCTION --------- + + USAGE: + + MODE 1. >>>>>>>>>>>>>>> You can use it in this way: + + Demo.sd_layout + .topSpaceToView(v1, 100) + .bottomSpaceToView(v3, 100) + .leftSpaceToView(v0, 150) + .rightSpaceToView(v2, 150); + + MODE 2. >>>>>>>>>>>>>>> You can also use it in this way that is more brevity: + + Demo.sd_layout.topSpaceToView(v1, 100).bottomSpaceToView(v3, 100).leftSpaceToView(v0, 150).rightSpaceToView(v2, 150); + + + ************************************************************************* + */ + + +/* + + ********************************************************************************* + * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 + * 帮您解决问题。 + * QQ : 2689718696(gsdios) + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios + * 新浪微博:GSD_iOS + * + * 视频教程:http://www.letv.com/ptv/vplay/24038772.html + * 用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import + +@class SDAutoLayoutModel; + +typedef SDAutoLayoutModel *(^MarginToView)(UIView *toView, CGFloat value); +typedef SDAutoLayoutModel *(^Margin)(CGFloat value); +typedef SDAutoLayoutModel *(^MarginEqualToView)(UIView *toView); +typedef SDAutoLayoutModel *(^WidthHeight)(CGFloat value); +typedef SDAutoLayoutModel *(^WidthHeightEqualToView)(UIView *toView, CGFloat ratioValue); +typedef SDAutoLayoutModel *(^AutoHeight)(CGFloat ratioValue); +typedef SDAutoLayoutModel *(^SameWidthHeight)(); +typedef void (^SpaceToSuperView)(UIEdgeInsets insets); + +@interface SDAutoLayoutModel : NSObject + +/* + *************************说明************************ + + 方法名中带有“SpaceToView”的需要传递2个参数:(UIView)参照view 和 (CGFloat)间距数值 + 方法名中带有“RatioToView”的需要传递2个参数:(UIView)参照view 和 (CGFloat)倍数 + 方法名中带有“EqualToView”的需要传递1个参数:(UIView)参照view + 方法名中带有“Is”的需要传递1个参数:(CGFloat)数值 + + ***************************************************** + */ + + +/* 设置距离其它view的间距 */ + +/** 左边到其参照view之间的间距,参数为“(View, CGFloat)” */ +@property (nonatomic, copy, readonly) MarginToView leftSpaceToView; +/** 右边到其参照view之间的间距,参数为“(View, CGFloat)” */ +@property (nonatomic, copy, readonly) MarginToView rightSpaceToView; +/** 顶部到其参照view之间的间距,参数为“(View, CGFloat)” */ +@property (nonatomic, copy, readonly) MarginToView topSpaceToView; +/** 底部到其参照view之间的间距,参数为“(View, CGFloat)” */ +@property (nonatomic, copy, readonly) MarginToView bottomSpaceToView; + + + +/* 设置x、y、width、height、centerX、centerY 值 */ + +/** x值,参数为“(CGFloat)” */ +@property (nonatomic, copy, readonly) Margin xIs; +/** y值,参数为“(CGFloat)” */ +@property (nonatomic, copy, readonly) Margin yIs; +/** centerX值,参数为“(CGFloat)” */ +@property (nonatomic, copy, readonly) Margin centerXIs; +/** centerY值,参数为“(CGFloat)” */ +@property (nonatomic, copy, readonly) Margin centerYIs; +/** 宽度值,参数为“(CGFloat)” */ +@property (nonatomic, copy, readonly) WidthHeight widthIs; +/** 高度值,参数为“(CGFloat)” */ +@property (nonatomic, copy, readonly) WidthHeight heightIs; + + + +/* 设置最大宽度和高度、最小宽度和高度 */ + +/** 最大宽度值,参数为“(CGFloat)” */ +@property (nonatomic, copy, readonly) WidthHeight maxWidthIs; +/** 最大高度值,参数为“(CGFloat)” */ +@property (nonatomic, copy, readonly) WidthHeight maxHeightIs; +/** 最小宽度值,参数为“(CGFloat)” */ +@property (nonatomic, copy, readonly) WidthHeight minWidthIs; +/** 最小高度值,参数为“(CGFloat)” */ +@property (nonatomic, copy, readonly) WidthHeight minHeightIs; + + + +/* 设置和某个参照view的边距相同 */ + +/** 左间距与参照view相同,参数为“(View)” */ +@property (nonatomic, copy, readonly) MarginEqualToView leftEqualToView; +/** 右间距与参照view相同,参数为“(View)” */ +@property (nonatomic, copy, readonly) MarginEqualToView rightEqualToView; +/** 顶部间距与参照view相同,参数为“(View)” */ +@property (nonatomic, copy, readonly) MarginEqualToView topEqualToView; +/** 底部间距与参照view相同,参数为“(View)” */ +@property (nonatomic, copy, readonly) MarginEqualToView bottomEqualToView; +/** centerX与参照view相同,参数为“(View)” */ +@property (nonatomic, copy, readonly) MarginEqualToView centerXEqualToView; +/** centerY与参照view相同,参数为“(View)” */ +@property (nonatomic, copy, readonly) MarginEqualToView centerYEqualToView; + + + +/* 设置宽度或者高度等于参照view的多少倍 */ + +/** 宽度是参照view宽度的多少倍,参数为“(View, CGFloat)” */ +@property (nonatomic, copy, readonly) WidthHeightEqualToView widthRatioToView; +/** 高度是参照view宽度的多少倍,参数为“(View, CGFloat)” */ +@property (nonatomic, copy, readonly) WidthHeightEqualToView heightRatioToView; +/** 设置一个view的宽度和它的高度相同,参数为空“()” */ +@property (nonatomic, copy, readonly) SameWidthHeight widthEqualToHeight; +/** 设置一个view的高度和它的宽度相同,参数为空“()” */ +@property (nonatomic, copy, readonly) SameWidthHeight heightEqualToWidth; +/** 自适应高度,传入高宽比值,label可以传0实现文字高度自适应 */ +@property (nonatomic, copy, readonly) AutoHeight autoHeightRatio; + + + +/* 填充父view(快捷方法) */ + +/** 传入UIEdgeInsetsMake(top, left, bottom, right),可以快捷设置view到其父view上左下右的间距 */ +@property (nonatomic, copy, readonly) SpaceToSuperView spaceToSuperView; + +@property (nonatomic, weak) UIView *needsAutoResizeView; + +@end + + + + +@interface UIView (SDAutoHeightWidth) + +/** 设置Cell的高度自适应,也可用于设置普通view内容自适应 */ +- (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin; + +/** 主动刷新布局(如果你需要设置完布局代码就获得view的frame请调用此方法) */ +- (void)updateLayout; + +@property (nonatomic) CGFloat autoHeight; + +@property (nonatomic) UIView *sd_bottomView; +@property (nonatomic) CGFloat sd_bottomViewBottomMargin; + +@property (nonatomic) UIView *sd_rightView; +@property (nonatomic) CGFloat sd_rightMargin; + +@end + +@interface UIView (SDLayoutExtention) + +/* 设置圆角 */ + +/** 设置圆角半径值 */ +@property (nonatomic, strong) NSNumber *sd_cornerRadius; +/** 设置圆角半径值为view宽度的多少倍 */ +@property (nonatomic, strong) NSNumber *sd_cornerRadiusFromWidthRatio; +/** 设置圆角半径值为view高度的多少倍 */ +@property (nonatomic, strong) NSNumber *sd_cornerRadiusFromHeightRatio; + +/** 设置等宽子view(子view需要在同一水平方向) */ +@property (nonatomic, strong) NSArray *sd_equalWidthSubviews; + +@end + + +@interface UIScrollView (SDAutoContentSize) + +/** 设置scrollview内容竖向自适应 */ +- (void)setupAutoContentSizeWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin; + +/** 设置scrollview内容横向自适应 */ +- (void)setupAutoContentSizeWithRightView:(UIView *)rightView rightMargin:(CGFloat)rightMargin; + +@end + + +@interface UILabel (SDLabelAutoResize) + +/** 设置单行文本label宽度自适应 */ +- (void)setSingleLineAutoResizeWithMaxWidth:(CGFloat)maxWidth; + +@end + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// ----------------- 以下为此库内部需要用到的类和方法(可以不用看)---------------- + +@interface SDAutoLayoutModelItem : NSObject + +@property (nonatomic, strong) NSNumber *value; +@property (nonatomic, weak) UIView *refView; + +@end + +@interface UIView (SDAutoLayout) + +- (NSMutableArray *)autoLayoutModelsArray; + +/** 开始自动布局 */ +- (SDAutoLayoutModel *)sd_layout; + +/** 清空之前的自动布局设置,重新开始自动布局 */ +- (SDAutoLayoutModel *)sd_resetLayout; + +- (void)addAutoLayoutModel:(SDAutoLayoutModel *)model; + +@property (nonatomic, strong) NSNumber *fixedWith; +@property (nonatomic, strong) NSNumber *fixedHeight; + +@property (nonatomic, strong) NSNumber *sd_maxWidth; + +@property (nonatomic, strong) NSNumber *autoHeightRatioValue; + +@end + + +@interface UIView (SDChangeFrame) + +@property (nonatomic) CGFloat left; +@property (nonatomic) CGFloat top; +@property (nonatomic) CGFloat right; +@property (nonatomic) CGFloat bottom; +@property (nonatomic) CGFloat centerX; +@property (nonatomic) CGFloat centerY; + +@property (nonatomic) CGFloat width; +@property (nonatomic) CGFloat height; + + +@property (nonatomic) CGPoint origin; +@property (nonatomic) CGSize size; + +@end + diff --git a/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayout/UIView+SDAutoLayout.m new file mode 100644 index 0000000..949b372 --- /dev/null +++ b/SDAutoLayout/UIView+SDAutoLayout.m @@ -0,0 +1,1073 @@ +// +// UIView+SDAutoLayout.m +// +// Created by gsd on 15/10/6. +// Copyright (c) 2015年 gsd. All rights reserved. +// + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * QQ : 2689718696(gsdios) * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * * + ********************************************************************************* + + */ + +#import "UIView+SDAutoLayout.h" +#import "UITableView+SDAutoTableViewCellHeight.h" + +#import + +@interface SDAutoLayoutModel () + +@property (nonatomic, strong) SDAutoLayoutModelItem *width; +@property (nonatomic, strong) SDAutoLayoutModelItem *height; +@property (nonatomic, strong) SDAutoLayoutModelItem *left; +@property (nonatomic, strong) SDAutoLayoutModelItem *top; +@property (nonatomic, strong) SDAutoLayoutModelItem *right; +@property (nonatomic, strong) SDAutoLayoutModelItem *bottom; +@property (nonatomic, strong) NSNumber *centerX; +@property (nonatomic, strong) NSNumber *centerY; + +@property (nonatomic, strong) NSNumber *maxWidth; +@property (nonatomic, strong) NSNumber *maxHeight; +@property (nonatomic, strong) NSNumber *minWidth; +@property (nonatomic, strong) NSNumber *minHeight; + +@property (nonatomic, strong) SDAutoLayoutModelItem *ratio_width; +@property (nonatomic, strong) SDAutoLayoutModelItem *ratio_height; +@property (nonatomic, strong) SDAutoLayoutModelItem *ratio_left; +@property (nonatomic, strong) SDAutoLayoutModelItem *ratio_top; +@property (nonatomic, strong) SDAutoLayoutModelItem *ratio_right; +@property (nonatomic, strong) SDAutoLayoutModelItem *ratio_bottom; + +@property (nonatomic, strong) SDAutoLayoutModelItem *equalLeft; +@property (nonatomic, strong) SDAutoLayoutModelItem *equalRight; +@property (nonatomic, strong) SDAutoLayoutModelItem *equalTop; +@property (nonatomic, strong) SDAutoLayoutModelItem *equalBottom; +@property (nonatomic, strong) SDAutoLayoutModelItem *equalCenterX; +@property (nonatomic, strong) SDAutoLayoutModelItem *equalCenterY; + +@property (nonatomic, strong) SDAutoLayoutModelItem *widthEqualHeight; +@property (nonatomic, strong) SDAutoLayoutModelItem *heightEqualWidth; + +@end + +@implementation SDAutoLayoutModel + +@synthesize leftSpaceToView = _leftSpaceToView; +@synthesize rightSpaceToView = _rightSpaceToView; +@synthesize topSpaceToView = _topSpaceToView; +@synthesize bottomSpaceToView = _bottomSpaceToView; +@synthesize widthIs = _widthIs; +@synthesize heightIs = _heightIs; +@synthesize widthRatioToView = _widthRatioToView; +@synthesize heightRatioToView = _heightRatioToView; +@synthesize leftEqualToView = _leftEqualToView; +@synthesize rightEqualToView = _rightEqualToView; +@synthesize topEqualToView = _topEqualToView; +@synthesize bottomEqualToView = _bottomEqualToView; +@synthesize centerXEqualToView = _centerXEqualToView; +@synthesize centerYEqualToView = _centerYEqualToView; +@synthesize xIs = _xIs; +@synthesize yIs = _yIs; +@synthesize centerXIs = _centerXIs; +@synthesize centerYIs = _centerYIs; +@synthesize autoHeightRatio = _autoHeightRatio; +@synthesize spaceToSuperView = _spaceToSuperView; +@synthesize maxWidthIs = _maxWidthIs; +@synthesize maxHeightIs = _maxHeightIs; +@synthesize minWidthIs = _minWidthIs; +@synthesize minHeightIs = _minHeightIs; +@synthesize widthEqualToHeight = _widthEqualToHeight; +@synthesize heightEqualToWidth = _heightEqualToWidth; + +- (MarginToView)leftSpaceToView +{ + if (!_leftSpaceToView) { + _leftSpaceToView = [self marginToViewblockWithKey:@"left"]; + } + return _leftSpaceToView; +} + +- (MarginToView)rightSpaceToView +{ + if (!_rightSpaceToView) { + _rightSpaceToView = [self marginToViewblockWithKey:@"right"]; + } + return _rightSpaceToView; +} + +- (MarginToView)topSpaceToView +{ + if (!_topSpaceToView) { + _topSpaceToView = [self marginToViewblockWithKey:@"top"]; + } + return _topSpaceToView; +} + +- (MarginToView)bottomSpaceToView +{ + if (!_bottomSpaceToView) { + _bottomSpaceToView = [self marginToViewblockWithKey:@"bottom"]; + } + return _bottomSpaceToView; +} + +- (MarginToView)marginToViewblockWithKey:(NSString *)key +{ + __weak typeof(self) weakSelf = self; + return ^(UIView *view, CGFloat value) { + SDAutoLayoutModelItem *item = [SDAutoLayoutModelItem new]; + item.value = @(value); + item.refView = view; + [weakSelf setValue:item forKey:key]; + return weakSelf; + }; +} + +- (WidthHeight)widthIs +{ + if (!_widthIs) { + __weak typeof(self) weakSelf = self; + _widthIs = ^(CGFloat value) { + weakSelf.needsAutoResizeView.width = value; + weakSelf.needsAutoResizeView.fixedWith = @(value); + return weakSelf; + }; + } + return _widthIs; +} + +- (WidthHeight)heightIs +{ + if (!_heightIs) { + __weak typeof(self) weakSelf = self; + _heightIs = ^(CGFloat value) { + weakSelf.needsAutoResizeView.height = value; + weakSelf.needsAutoResizeView.fixedHeight = @(value); + return weakSelf; + }; + } + return _heightIs; +} + +- (WidthHeightEqualToView)widthRatioToView +{ + if (!_widthRatioToView) { + __weak typeof(self) weakSelf = self; + _widthRatioToView = ^(UIView *view, CGFloat value) { + weakSelf.ratio_width = [SDAutoLayoutModelItem new]; + weakSelf.ratio_width.value = @(value); + weakSelf.ratio_width.refView = view; + return weakSelf; + }; + } + return _widthRatioToView; +} + +- (WidthHeightEqualToView)heightRatioToView +{ + if (!_heightRatioToView) { + __weak typeof(self) weakSelf = self; + _heightRatioToView = ^(UIView *view, CGFloat value) { + weakSelf.ratio_height = [SDAutoLayoutModelItem new]; + weakSelf.ratio_height.refView = view; + weakSelf.ratio_height.value = @(value); + return weakSelf; + }; + } + return _heightRatioToView; +} + +- (WidthHeight)maxWidthIs +{ + if (!_maxWidthIs) { + _maxWidthIs = [self limitingWidthHeightWithKey:@"maxWidth"]; + } + return _maxWidthIs; +} + +- (WidthHeight)maxHeightIs +{ + if (!_maxHeightIs) { + _maxHeightIs = [self limitingWidthHeightWithKey:@"maxHeight"]; + } + return _maxHeightIs; +} + +- (WidthHeight)minWidthIs +{ + if (!_minWidthIs) { + _minWidthIs = [self limitingWidthHeightWithKey:@"minWidth"]; + } + return _minWidthIs; +} + +- (WidthHeight)minHeightIs +{ + if (!_minHeightIs) { + _minHeightIs = [self limitingWidthHeightWithKey:@"minHeight"]; + } + return _minHeightIs; +} + + +- (WidthHeight)limitingWidthHeightWithKey:(NSString *)key +{ + __weak typeof(self) weakSelf = self; + + return ^(CGFloat value) { + [weakSelf setValue:@(value) forKey:key]; + + return weakSelf; + }; +} + + +- (MarginEqualToView)marginEqualToViewBlockWithKey:(NSString *)key +{ + __weak typeof(self) weakSelf = self; + + return ^(UIView *view) { + SDAutoLayoutModelItem *item = [SDAutoLayoutModelItem new]; + item.refView = view; + [weakSelf setValue:item forKey:key]; + return weakSelf; + }; +} + +- (MarginEqualToView)leftEqualToView +{ + if (!_leftEqualToView) { + _leftEqualToView = [self marginEqualToViewBlockWithKey:@"equalLeft"]; + } + return _leftEqualToView; +} + +- (MarginEqualToView)rightEqualToView +{ + if (!_rightEqualToView) { + _rightEqualToView = [self marginEqualToViewBlockWithKey:@"equalRight"]; + } + return _rightEqualToView; +} + +- (MarginEqualToView)topEqualToView +{ + if (!_topEqualToView) { + _topEqualToView = [self marginEqualToViewBlockWithKey:@"equalTop"]; + } + return _topEqualToView; +} + +- (MarginEqualToView)bottomEqualToView +{ + if (!_bottomEqualToView) { + _bottomEqualToView = [self marginEqualToViewBlockWithKey:@"equalBottom"]; + } + return _bottomEqualToView; +} + +- (MarginEqualToView)centerXEqualToView +{ + if (!_centerXEqualToView) { + _centerXEqualToView = [self marginEqualToViewBlockWithKey:@"equalCenterX"]; + } + return _centerXEqualToView; +} + +- (MarginEqualToView)centerYEqualToView +{ + if (!_centerYEqualToView) { + _centerYEqualToView = [self marginEqualToViewBlockWithKey:@"equalCenterY"]; + } + return _centerYEqualToView; +} + + +- (Margin)marginBlockWithKey:(NSString *)key +{ + __weak typeof(self) weakSelf = self; + + return ^(CGFloat value) { + + if ([key isEqualToString:@"x"]) { + weakSelf.needsAutoResizeView.left = value; + } else if ([key isEqualToString:@"y"]) { + weakSelf.needsAutoResizeView.top = value; + } else if ([key isEqualToString:@"centerX"]) { + weakSelf.centerX = @(value); + } else if ([key isEqualToString:@"centerY"]) { + weakSelf.centerY = @(value); + } + + return weakSelf; + }; +} + +- (Margin)xIs +{ + if (!_xIs) { + _xIs = [self marginBlockWithKey:@"x"]; + } + return _xIs; +} + +- (Margin)yIs +{ + if (!_yIs) { + _yIs = [self marginBlockWithKey:@"y"]; + } + return _yIs; +} + +- (Margin)centerXIs +{ + if (!_centerXIs) { + _centerXIs = [self marginBlockWithKey:@"centerX"]; + } + return _centerXIs; +} + +- (Margin)centerYIs +{ + if (!_centerYIs) { + _centerYIs = [self marginBlockWithKey:@"centerY"]; + } + return _centerYIs; +} + +- (AutoHeight)autoHeightRatio +{ + __weak typeof(self) weakSelf = self; + + if (!_autoHeightRatio) { + _autoHeightRatio = ^(CGFloat ratioaValue) { + weakSelf.needsAutoResizeView.autoHeightRatioValue = @(ratioaValue); + return weakSelf; + }; + } + return _autoHeightRatio; +} + +- (SpaceToSuperView)spaceToSuperView +{ + __weak typeof(self) weakSelf = self; + + if (!_spaceToSuperView) { + _spaceToSuperView = ^(UIEdgeInsets insets) { + UIView *superView = weakSelf.needsAutoResizeView.superview; + if (superView) { + weakSelf.needsAutoResizeView.sd_layout + .leftSpaceToView(superView, insets.left) + .topSpaceToView(superView, insets.top) + .rightSpaceToView(superView, insets.right) + .bottomSpaceToView(superView, insets.bottom); + } + }; + } + return _spaceToSuperView; +} + +- (SameWidthHeight)widthEqualToHeight +{ + __weak typeof(self) weakSelf = self; + + if (!_widthEqualToHeight) { + _widthEqualToHeight = ^() { + weakSelf.widthEqualHeight = [SDAutoLayoutModelItem new]; + return weakSelf; + }; + } + return _widthEqualToHeight; +} + +- (SameWidthHeight)heightEqualToWidth +{ + __weak typeof(self) weakSelf = self; + + if (!_heightEqualToWidth) { + _heightEqualToWidth = ^() { + weakSelf.heightEqualWidth = [SDAutoLayoutModelItem new]; + return weakSelf; + }; + } + return _heightEqualToWidth; +} + +@end + + +@implementation UIView (SDAutoHeightWidth) + +- (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin +{ + self.sd_bottomView = bottomView; + self.sd_bottomViewBottomMargin = bottomMargin; +} + +- (void)updateLayout +{ + [self.superview layoutSubviews]; +} + +- (CGFloat)autoHeight +{ + return [objc_getAssociatedObject(self, _cmd) floatValue]; +} + +- (void)setAutoHeight:(CGFloat)autoHeight +{ + objc_setAssociatedObject(self, @selector(autoHeight), @(autoHeight), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (UIView *)sd_bottomView +{ + return objc_getAssociatedObject(self, _cmd); +} + +- (void)setSd_bottomView:(UIView *)sd_bottomView +{ + objc_setAssociatedObject(self, @selector(sd_bottomView), sd_bottomView, OBJC_ASSOCIATION_ASSIGN); +} + +- (CGFloat)sd_bottomViewBottomMargin +{ + return [objc_getAssociatedObject(self, _cmd) floatValue]; +} + +- (void)setSd_bottomViewBottomMargin:(CGFloat)sd_bottomViewBottomMargin +{ + objc_setAssociatedObject(self, @selector(sd_bottomViewBottomMargin), @(sd_bottomViewBottomMargin), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (UIView *)sd_rightView +{ + return objc_getAssociatedObject(self, _cmd); +} + +- (void)setSd_rightView:(UIView *)sd_rightView +{ + objc_setAssociatedObject(self, @selector(sd_rightView), sd_rightView, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (CGFloat)sd_rightMargin +{ + return [objc_getAssociatedObject(self, _cmd) floatValue]; +} + +- (void)setSd_rightMargin:(CGFloat)sd_rightMargin +{ + objc_setAssociatedObject(self, @selector(sd_rightMargin), @(sd_rightMargin), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end + +@implementation UIView (SDLayoutExtention) + +- (NSNumber *)sd_cornerRadius +{ + return objc_getAssociatedObject(self, _cmd); +} + +- (void)setSd_cornerRadius:(NSNumber *)sd_cornerRadius +{ + objc_setAssociatedObject(self, @selector(sd_cornerRadius), sd_cornerRadius, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + + +- (NSNumber *)sd_cornerRadiusFromWidthRatio +{ + return objc_getAssociatedObject(self, _cmd); +} + +- (void)setSd_cornerRadiusFromWidthRatio:(NSNumber *)sd_cornerRadiusFromWidthRatio +{ + objc_setAssociatedObject(self, @selector(sd_cornerRadiusFromWidthRatio), sd_cornerRadiusFromWidthRatio, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + + +- (NSNumber *)sd_cornerRadiusFromHeightRatio +{ + return objc_getAssociatedObject(self, _cmd); +} + +- (void)setSd_cornerRadiusFromHeightRatio:(NSNumber *)sd_cornerRadiusFromHeightRatio +{ + objc_setAssociatedObject(self, @selector(sd_cornerRadiusFromHeightRatio), sd_cornerRadiusFromHeightRatio, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (NSArray *)sd_equalWidthSubviews +{ + return objc_getAssociatedObject(self, _cmd); +} + +- (void)setSd_equalWidthSubviews:(NSArray *)sd_equalWidthSubviews +{ + objc_setAssociatedObject(self, @selector(sd_equalWidthSubviews), sd_equalWidthSubviews, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end + +@implementation UIScrollView (SDAutoContentSize) + +- (void)setupAutoContentSizeWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin +{ + [self setupAutoHeightWithBottomView:bottomView bottomMargin:bottomMargin]; +} + +- (void)setupAutoContentSizeWithRightView:(UIView *)rightView rightMargin:(CGFloat)rightMargin +{ + [self setSd_rightView:rightView]; + [self setSd_rightMargin:rightMargin]; +} + +@end + +@implementation UILabel (SDLabelAutoResize) + +- (void)setSingleLineAutoResizeWithMaxWidth:(CGFloat)maxWidth +{ + self.sd_maxWidth = @(maxWidth); +} + +@end + + +@implementation SDAutoLayoutModelItem + +@end + + +@implementation UIView (SDAutoLayout) + ++ (void)load +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + Method layoutSubviews = class_getInstanceMethod(self, @selector(layoutSubviews)); + Method sd_autolayout = class_getInstanceMethod(self, @selector(sd_autolayout)); + method_exchangeImplementations(layoutSubviews, sd_autolayout); + }); +} + +#pragma mark - properties + +- (NSMutableArray *)autoLayoutModelsArray +{ + if (!objc_getAssociatedObject(self, _cmd)) { + objc_setAssociatedObject(self, _cmd, [NSMutableArray array], OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + return objc_getAssociatedObject(self, _cmd); +} + +- (NSNumber *)fixedWith +{ + return objc_getAssociatedObject(self, _cmd); +} + +- (void)setFixedWith:(NSNumber *)fixedWith +{ + objc_setAssociatedObject(self, @selector(fixedWith), fixedWith, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (NSNumber *)fixedHeight +{ + return objc_getAssociatedObject(self, _cmd); +} + +- (void)setFixedHeight:(NSNumber *)fixedHeight +{ + objc_setAssociatedObject(self, @selector(fixedHeight), fixedHeight, OBJC_ASSOCIATION_RETAIN); +} + +- (NSNumber *)autoHeightRatioValue +{ + return objc_getAssociatedObject(self, _cmd); +} + +- (void)setAutoHeightRatioValue:(NSNumber *)autoHeightRatioValue +{ + objc_setAssociatedObject(self, @selector(autoHeightRatioValue), autoHeightRatioValue, OBJC_ASSOCIATION_RETAIN); +} + +- (NSNumber *)sd_maxWidth +{ + return objc_getAssociatedObject(self, _cmd); +} + +- (void)setSd_maxWidth:(NSNumber *)sd_maxWidth +{ + objc_setAssociatedObject(self, @selector(sd_maxWidth), sd_maxWidth, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (SDAutoLayoutModel *)ownLayoutModel +{ + return objc_getAssociatedObject(self, _cmd); +} + +- (void)setOwnLayoutModel:(SDAutoLayoutModel *)ownLayoutModel +{ + objc_setAssociatedObject(self, @selector(ownLayoutModel), ownLayoutModel, OBJC_ASSOCIATION_RETAIN); +} + +- (SDAutoLayoutModel *)sd_layout +{ + /* + 卡在这里说明你的要自动布局的view在没有添加到父view的情况下就开始设置布局,你需要这样: + 1. UIView *view = [UIView new]; + 2. [superView addSubview:view]; + 3. view.sd_layout + .leftEqualToView()... + */ + NSAssert(self.superview, @">>>>>>>>>在加入父view之后才可以做自动布局设置"); + + + + SDAutoLayoutModel *model = [self ownLayoutModel]; + if (!model) { + model = [SDAutoLayoutModel new]; + model.needsAutoResizeView = self; + [self setOwnLayoutModel:model]; + [self.superview.autoLayoutModelsArray addObject:model]; + } + + return model; +} + +- (SDAutoLayoutModel *)sd_resetLayout +{ + SDAutoLayoutModel *model = [self ownLayoutModel]; + if (model) { + [self.superview.autoLayoutModelsArray removeObject:model]; + [self setOwnLayoutModel:nil]; + } + return [self sd_layout]; +} + +- (void)sd_autolayout +{ + [self sd_autolayout]; + + if (self.sd_equalWidthSubviews.count) { + __block CGFloat totalMargin = 0; + [self.sd_equalWidthSubviews enumerateObjectsUsingBlock:^(UIView * _Nonnull view, NSUInteger idx, BOOL * _Nonnull stop) { + SDAutoLayoutModel *model = view.sd_layout; + totalMargin += ([model.left.value floatValue] + [model.right.value floatValue]); + }]; + CGFloat averageWidth = (self.width - totalMargin) / self.sd_equalWidthSubviews.count; + [self.sd_equalWidthSubviews enumerateObjectsUsingBlock:^(UIView * _Nonnull view, NSUInteger idx, BOOL * _Nonnull stop) { + view.width = averageWidth; + view.fixedWith = @(averageWidth); + }]; + } + + if (self.autoLayoutModelsArray.count) { + [self.autoLayoutModelsArray enumerateObjectsUsingBlock:^(SDAutoLayoutModel *model, NSUInteger idx, BOOL *stop) { + [self sd_resizeWithModel:model]; + }]; + } + + if (self.tag == kSDModelCellTag && [self isKindOfClass:NSClassFromString(@"UITableViewCellContentView")]) { + UITableViewCell *cell = (UITableViewCell *)(self.superview); + if ([cell isKindOfClass:NSClassFromString(@"UITableViewCellScrollView")]) { + cell = (UITableViewCell *)cell.superview; + } + if ([cell isKindOfClass:[UITableViewCell class]]) { + cell.autoHeight = cell.sd_bottomView.bottom + cell.sd_bottomViewBottomMargin; + } + } else if (![self isKindOfClass:[UITableViewCell class]] && (self.sd_bottomView || self.sd_rightView)) { + CGFloat contentHeight = 0; + CGFloat contentWidth = 0; + if (self.sd_bottomView) { + contentHeight = self.sd_bottomView.bottom + self.sd_bottomViewBottomMargin; + } + if (self.sd_rightView) { + contentWidth = self.sd_rightView.right + self.sd_rightMargin; + } + if ([self isKindOfClass:[UIScrollView class]]) { + UIScrollView *scrollView = (UIScrollView *)self; + CGSize contentSize = scrollView.contentSize; + if (contentHeight > 0) { + contentSize.height = contentHeight; + } + if (contentWidth > 0) { + contentSize.width = contentWidth; + } + if (contentSize.width <= 0) { + contentSize.width = scrollView.width; + } + scrollView.contentSize = contentSize; + } else { + // 如果这里出现循环调用情况请把demo发送到gsdios@126.com,谢谢配合。 + self.height = contentHeight; + } + } +} + +- (void)sd_resizeWithModel:(SDAutoLayoutModel *)model +{ + UIView *view = model.needsAutoResizeView; + + if (view.sd_maxWidth && (model.rightSpaceToView || model.rightEqualToView)) { // 靠右布局前提设置 + if ([view isKindOfClass:[UILabel class]]) { + UILabel *label = (UILabel *)view; + CGFloat width = [view.sd_maxWidth floatValue] > 0 ? [view.sd_maxWidth floatValue] : MAXFLOAT; + label.numberOfLines = 1; + if (label.text.length) { + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.width = rect.size.width; + label.fixedWith = @(label.width); + } else { + label.width = 0; + } + } + } + + if (view.autoHeightRatioValue && view.width > 0 && (model.bottomEqualToView || model.bottomSpaceToView)) { // 底部布局前提设置 + if ([view.autoHeightRatioValue floatValue] > 0) { + view.height = view.width * [view.autoHeightRatioValue floatValue]; + } else { + if ([view isKindOfClass:[UILabel class]]) { + UILabel *label = (UILabel *)view; + label.numberOfLines = 0; + if (label.text.length) { + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.height = rect.size.height; + } else { + label.height = 0; + } + } else { + view.height = 0; + } + } + } + + if (model.width) { + view.width = [model.width.value floatValue]; + view.fixedWith = @(view.width); + } else if (model.ratio_width) { + view.width = model.ratio_width.refView.width * [model.ratio_width.value floatValue]; + view.fixedWith = @(view.width); + } + + if (model.height) { + view.height = [model.height.value floatValue]; + view.fixedHeight = @(view.height); + } else if (model.ratio_height) { + view.height = [model.ratio_height.value floatValue] * model.ratio_height.refView.height; + view.fixedHeight = @(view.height); + } + + if (model.left) { + if (view.superview == model.left.refView) { + if (!view.fixedWith) { // view.autoLeft && view.autoRight + view.width = view.right - [model.left.value floatValue]; + } + view.left = [model.left.value floatValue]; + } else { + if (!view.fixedWith) { // view.autoLeft && view.autoRight + view.width = view.right - model.left.refView.right - [model.left.value floatValue]; + } + view.left = model.left.refView.right + [model.left.value floatValue]; + } + + } else if (model.equalLeft) { + if (!view.fixedWith) { + view.width = view.right - model.equalLeft.refView.left; + } + if (view.superview == model.equalLeft.refView) { + view.left = 0; + } else { + view.left = model.equalLeft.refView.left; + } + } else if (model.equalCenterX) { + if (view.superview == model.equalCenterX.refView) { + view.centerX = model.equalCenterX.refView.width * 0.5; + } else { + view.centerX = model.equalCenterX.refView.centerX; + } + } else if (model.centerX) { + view.centerX = [model.centerX floatValue]; + } + + if (model.right) { + if (view.superview == model.right.refView) { + if (!view.fixedWith) { // view.autoLeft && view.autoRight + view.width = model.right.refView.width - view.left - [model.right.value floatValue]; + } + view.right = model.right.refView.width - [model.right.value floatValue]; + } else { + if (!view.fixedWith) { // view.autoLeft && view.autoRight + view.width = model.right.refView.left - view.left - [model.right.value floatValue]; + } + view.right = model.right.refView.left - [model.right.value floatValue]; + } + } else if (model.equalRight) { + if (!view.fixedWith) { + view.width = model.equalRight.refView.right - view.left; + } + + view.right = model.equalRight.refView.right; + if (view.superview == model.equalRight.refView) { + view.right = model.equalRight.refView.width; + } + + } + + if (model.top) { + if (view.superview == model.top.refView) { + if (!view.fixedHeight) { // view.autoTop && view.autoBottom && view.bottom + view.height = view.bottom - [model.top.value floatValue]; + } + view.top = [model.top.value floatValue]; + } else { + if (!view.fixedHeight) { // view.autoTop && view.autoBottom && view.bottom + view.height = view.bottom - model.top.refView.bottom - [model.top.value floatValue]; + } + view.top = model.top.refView.bottom + [model.top.value floatValue]; + } + } else if (model.equalTop) { + if (view.superview == model.equalTop.refView) { + if (!view.fixedHeight) { + view.height = view.bottom; + } + view.top = 0; + } else { + if (!view.fixedHeight) { + view.height = view.bottom - model.equalTop.refView.top; + } + view.top = model.equalTop.refView.top; + } + } else if (model.equalCenterY) { + if (view.superview == model.equalCenterY.refView) { + view.centerY = model.equalCenterY.refView.height * 0.5; + } else { + view.centerY = model.equalCenterY.refView.centerY; + } + } else if (model.centerY) { + view.centerY = [model.centerY floatValue]; + } + + if (model.bottom) { + if (view.superview == model.bottom.refView) { + if (!view.fixedHeight) { + view.height = view.superview.height - view.top - [model.bottom.value floatValue]; + } + view.bottom = model.bottom.refView.height - [model.bottom.value floatValue]; + } else { + if (!view.fixedHeight) { + view.height = model.bottom.refView.top - view.top - [model.bottom.value floatValue]; + } + view.bottom = model.bottom.refView.top - [model.bottom.value floatValue]; + } + + } else if (model.equalBottom) { + if (view.superview == model.equalBottom.refView) { + if (!view.fixedHeight) { + view.height = view.superview.height - view.top; + } + view.bottom = model.equalBottom.refView.height; + } else { + if (!view.fixedHeight) { + view.height = model.equalBottom.refView.bottom - view.top; + } + view.bottom = model.equalBottom.refView.bottom; + } + } + + if (view.autoHeightRatioValue && view.width > 0) { + if ([view.autoHeightRatioValue floatValue] > 0) { + view.height = view.width * [view.autoHeightRatioValue floatValue]; + } else { + if ([view isKindOfClass:[UILabel class]]) { + UILabel *label = (UILabel *)view; + label.numberOfLines = 0; + if (label.text.length) { + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.height = rect.size.height; + } else { + label.height = 0; + } + } else { + view.height = 0; + } + } + } + + if (view.sd_maxWidth) { + if ([view isKindOfClass:[UILabel class]]) { + UILabel *label = (UILabel *)view; + CGFloat width = [view.sd_maxWidth floatValue] > 0 ? [view.sd_maxWidth floatValue] : MAXFLOAT; + label.numberOfLines = 1; + if (label.text.length) { + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.width = rect.size.width; + } else { + label.width = 0; + } + } + } + + if (model.maxWidth && [model.maxWidth floatValue] < view.width) { + view.width = [model.maxWidth floatValue]; + } + + if (model.minWidth && [model.minWidth floatValue] > view.width) { + view.width = [model.minWidth floatValue]; + } + + if (model.maxHeight && [model.maxHeight floatValue] < view.height) { + view.height = [model.maxHeight floatValue]; + } + + if (model.minHeight && [model.minHeight floatValue] > view.height) { + view.height = [model.minHeight floatValue]; + } + + if (model.widthEqualHeight) { + view.width = view.height; + } + + if (model.heightEqualWidth) { + view.height = view.width; + } + + CGFloat cornerRadius = view.layer.cornerRadius; + CGFloat newCornerRadius = 0; + + if (view.sd_cornerRadius && (cornerRadius != [view.sd_cornerRadius floatValue])) { + newCornerRadius = [view.sd_cornerRadius floatValue]; + } else if (view.sd_cornerRadiusFromWidthRatio && (cornerRadius != [view.sd_cornerRadiusFromWidthRatio floatValue] * view.width)) { + newCornerRadius = view.width * [view.sd_cornerRadiusFromWidthRatio floatValue]; + } else if (view.sd_cornerRadiusFromHeightRatio && (cornerRadius != view.height * [view.sd_cornerRadiusFromHeightRatio floatValue])) { + newCornerRadius = view.height * [view.sd_cornerRadiusFromHeightRatio floatValue]; + } + + if (newCornerRadius > 0) { + view.layer.cornerRadius = newCornerRadius; + view.clipsToBounds = YES; + } + +} + +- (void)addAutoLayoutModel:(SDAutoLayoutModel *)model +{ + [self.autoLayoutModelsArray addObject:model]; +} + +@end + + +@implementation UIView (SDChangeFrame) + +- (CGFloat)left { + return self.frame.origin.x; +} + +- (void)setLeft:(CGFloat)x { + CGRect frame = self.frame; + frame.origin.x = x; + self.frame = frame; +} + +- (CGFloat)top { + return self.frame.origin.y; +} + +- (void)setTop:(CGFloat)y { + CGRect frame = self.frame; + frame.origin.y = y; + self.frame = frame; +} + +- (CGFloat)right { + return self.frame.origin.x + self.frame.size.width; +} + +- (void)setRight:(CGFloat)right { + CGRect frame = self.frame; + frame.origin.x = right - frame.size.width; + self.frame = frame; +} + +- (CGFloat)bottom { + return self.frame.origin.y + self.frame.size.height; +} + +- (void)setBottom:(CGFloat)bottom { + CGRect frame = self.frame; + frame.origin.y = bottom - frame.size.height; + self.frame = frame; +} + +- (CGFloat)centerX +{ + return self.left + self.width * 0.5; +} + +- (void)setCenterX:(CGFloat)centerX +{ + self.left = centerX - self.width * 0.5; +} + +- (CGFloat)centerY +{ + return self.top + self.height * 0.5; +} + +- (void)setCenterY:(CGFloat)centerY +{ + self.top = centerY - self.height * 0.5; +} + +- (CGFloat)width { + return self.frame.size.width; +} + +- (void)setWidth:(CGFloat)width { + CGRect frame = self.frame; + frame.size.width = width; + self.frame = frame; +} + +- (CGFloat)height { + return self.frame.size.height; +} + +- (void)setHeight:(CGFloat)height { + CGRect frame = self.frame; + frame.size.height = height; + self.frame = frame; +} + +- (CGPoint)origin { + return self.frame.origin; +} + +- (void)setOrigin:(CGPoint)origin { + CGRect frame = self.frame; + frame.origin = origin; + self.frame = frame; +} + +- (CGSize)size { + return self.frame.size; +} + +- (void)setSize:(CGSize)size { + CGRect frame = self.frame; + frame.size = size; + self.frame = frame; +} + +@end + From 475b5244cd9d52165e6dc21a93440c19e328ad68 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 10 Jan 2016 15:29:15 +0800 Subject: [PATCH 036/276] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UITableView+SDAutoTableViewCellHeight.h | 136 --- .../UITableView+SDAutoTableViewCellHeight.m | 275 ----- SDAutoLayout/UIView+SDAutoLayout.h | 299 ----- SDAutoLayout/UIView+SDAutoLayout.m | 1073 ----------------- 4 files changed, 1783 deletions(-) delete mode 100644 SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h delete mode 100644 SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m delete mode 100644 SDAutoLayout/UIView+SDAutoLayout.h delete mode 100644 SDAutoLayout/UIView+SDAutoLayout.m diff --git a/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h b/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h deleted file mode 100644 index cb557c5..0000000 --- a/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h +++ /dev/null @@ -1,136 +0,0 @@ -// -// UITableView+SDAutoTableViewCellHeight.h -// SDAutoLayout 测试 Demo -// -// Created by aier on 15/11/1. -// Copyright © 2015年 gsd. All rights reserved. -// - -/* - - ********************************************************************************* - * * - * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * - * 帮您解决问题。 * - * QQ : 2689718696(gsdios) * - * Email : gsdios@126.com * - * GitHub: https://github.com/gsdios * - * 新浪微博:GSD_iOS * - * * - ********************************************************************************* - - */ - - - - -/* - - cell高度自适应有“普通版”和“升级版”两个版本: - - 1.普通版:两行代码(两步设置)搞定tableview的cell高度自适应(单cell详见demo5,多cell详见demo7) - - 2.升级版:只需一步设置即可实现,见下方category“UITableViewController (SDTableViewControllerAutoCellHeight)”) - - PS:cell高度自适应前提>>应该调用cell的“- (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法进行cell的自动高度设置 - */ - -#import - -@class SDCellAutoHeightManager; - -#define kSDModelCellTag 199206 - - -/* 普通版!两行代码(两步设置)搞定tableview的cell高度自适应(单cell详见demo5,多cell详见demo7) */ - -@interface UITableView (SDAutoTableViewCellHeight) - -@property (nonatomic, strong) SDCellAutoHeightManager *cellAutoHeightManager; - - - -// >>>>>>>>>>>>>> 单个cell情景下调用以下方法(详细用法见demo5) >>>>>>>>>>>>>> - -/** 开启高度自适应,建议在tableview的数据源方法“- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section”中调用此方法,详细用法见demo5 */ -- (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth; - -/** 返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key)*/ -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath; - - - -// >>>>>>>>>>>>>> 多cell情景下调用以下方法(详细用法见demo7) >>>>>>>>>>>>>>>>> - -/** cellClassArray 为所有cell的类组成的数组,详细用法见demo7 */ -- (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth; - -/** 返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key) */ -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass; - -@end - - - - - -/* 升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell(详见demo8) */ - -@interface UITableViewController (SDTableViewControllerAutoCellHeight) - -/** (UITableViewController方法)升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell */ -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width; - -@end - - - -/* 升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell */ - -@interface NSObject (SDAnyObjectAutoCellHeight) - -/** (NSObject方法)升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell */ -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width tableView:(UITableView *)tableView; - -@end - - - - - - - - - - - - - - - - - -// ------------------------------- 以下为库内部使用无须了解 -------------------- - -@interface SDCellAutoHeightManager : NSObject - -@property (nonatomic, assign) CGFloat contentViewWidth; - -@property (nonatomic, assign) Class cellClass; - -@property (nonatomic, assign) CGFloat cellHeight; - -@property (nonatomic, strong) UITableViewCell *modelCell; - -- (void)clearHeightCache; - -- (NSNumber *)heightCacheForIndexPath:(NSIndexPath *)indexPath; - -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath; - -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass; - -- (instancetype)initWithCellClass:(Class)cellClass; -+ (instancetype)managerWithCellClass:(Class)cellClass; -@end - diff --git a/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m b/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m deleted file mode 100644 index d5e08b1..0000000 --- a/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m +++ /dev/null @@ -1,275 +0,0 @@ -// -// UITableView+SDAutoTableViewCellHeight.m -// SDAutoLayout 测试 Demo -// -// Created by aier on 15/11/1. -// Copyright © 2015年 gsd. All rights reserved. -// - -/* - - ********************************************************************************* - * * - * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * - * 帮您解决问题。 * - * QQ : 2689718696(gsdios) * - * Email : gsdios@126.com * - * GitHub: https://github.com/gsdios * - * 新浪微博:GSD_iOS * - * * - ********************************************************************************* - - */ - -#import "UITableView+SDAutoTableViewCellHeight.h" -#import "UIView+SDAutoLayout.h" -#import - -@implementation SDCellAutoHeightManager -{ - NSMutableDictionary *_cacheDictionary; - UITableView *_modelTableview; -} - -- (instancetype)init -{ - if (self = [super init]) { - _cacheDictionary = [NSMutableDictionary new]; - } - return self; -} - -- (instancetype)initWithCellClass:(Class)cellClass -{ - if (self = [super init]) { - _modelTableview = [UITableView new]; - [self registerCellWithCellClass:cellClass]; - _cacheDictionary = [NSMutableDictionary new]; - } - return self; -} - -- (instancetype)initWithCellClasses:(NSArray *)cellClassArray -{ - if (self = [super init]) { - _modelTableview = [UITableView new]; - [cellClassArray enumerateObjectsUsingBlock:^(Class _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - [self registerCellWithCellClass:obj]; - }]; - _cacheDictionary = [NSMutableDictionary new]; - } - return self; -} - -- (void)registerCellWithCellClass:(Class)cellClass -{ - [_modelTableview registerClass:cellClass forCellReuseIdentifier:NSStringFromClass(cellClass)]; - self.modelCell = [_modelTableview dequeueReusableCellWithIdentifier:NSStringFromClass(cellClass)]; - if (!self.modelCell.contentView.subviews.count) { - self.modelCell = nil; - [_modelTableview registerNib:[UINib nibWithNibName:NSStringFromClass(cellClass) bundle:nil] forCellReuseIdentifier:NSStringFromClass(cellClass)]; - self.modelCell = [_modelTableview dequeueReusableCellWithIdentifier:NSStringFromClass(cellClass)]; - } -} - -+ (instancetype)managerWithCellClass:(Class)cellClass -{ - SDCellAutoHeightManager *manager = [[self alloc] initWithCellClass:cellClass]; - return manager; -} - -- (UITableViewCell *)modelCell -{ - if (_modelCell.tag != kSDModelCellTag) { - _modelCell.contentView.tag = kSDModelCellTag; - } - return _modelCell; -} - -- (void)clearHeightCache -{ - [_cacheDictionary removeAllObjects]; -} - -- (NSNumber *)heightCacheForIndexPath:(NSIndexPath *)indexPath -{ - NSString *cacheKey = [NSString stringWithFormat:@"%ld%ld", (long)indexPath.section, (long)indexPath.row]; - return (NSNumber *)[_cacheDictionary objectForKey:cacheKey]; -} - -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath -{ - - NSNumber *cacheHeight = [self heightCacheForIndexPath:indexPath]; - if (cacheHeight) { - return [cacheHeight floatValue]; - } else { - if (!self.modelCell) { - return 0; - } - - if (model && keyPath) { - [self.modelCell setValue:model forKey:keyPath]; - } - - - - /* - 如果程序卡在了这里说明你的cell还没有调用“setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法或者你传递的bottomView为nil,请检查并修改。例: - - //注意:bottomView不能为nil - [cell setupAutoHeightWithBottomView:bottomView bottomMargin:bottomMargin]; - */ - NSAssert(self.modelCell.sd_bottomView, @">>>>>> 你的cell还没有调用“setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法或者你传递的bottomView为nil,请检查并修改"); - - - - [self.modelCell.contentView layoutSubviews]; - NSString *cacheKey = [NSString stringWithFormat:@"%ld%ld", (long)indexPath.section, (long)indexPath.row]; - [_cacheDictionary setObject:@(self.modelCell.autoHeight) forKey:cacheKey]; - return self.modelCell.autoHeight; - } -} - -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass -{ - if (![self.modelCell isKindOfClass:cellClass]) { - self.modelCell = nil; - self.modelCell = [_modelTableview dequeueReusableCellWithIdentifier:NSStringFromClass(cellClass)]; - if (!self.modelCell) { - [self registerCellWithCellClass:cellClass]; - } - _modelCell.contentView.tag = kSDModelCellTag; - } - if (self.modelCell.contentView.width != self.contentViewWidth) { - _modelCell.contentView.width = self.contentViewWidth; - } - return [self cellHeightForIndexPath:indexPath model:model keyPath:keyPath]; -} - -- (void)setContentViewWidth:(CGFloat)contentViewWidth -{ - if (_contentViewWidth != contentViewWidth) { - [self clearHeightCache]; - } - _contentViewWidth = contentViewWidth; - - self.modelCell.contentView.width = self.contentViewWidth; -} - -@end - - -@implementation UITableView (SDAutoTableViewCellHeight) - -+ (void)load { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - Method reloadData = class_getInstanceMethod(self, @selector(reloadData)); - Method sd_reloadData = class_getInstanceMethod(self, @selector(sd_reloadData)); - method_exchangeImplementations(reloadData, sd_reloadData); - }); -} - -- (void)sd_reloadData -{ - [self.cellAutoHeightManager clearHeightCache]; - [self sd_reloadData]; -} -/* - * 下一步即将实现的功能 - - - (void)sd_insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation - { - [self sd_insertRowsAtIndexPaths:indexPaths withRowAnimation:animation]; - } - - - (void)sd_deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation - { - [self sd_deleteRowsAtIndexPaths:indexPaths withRowAnimation:animation]; - } - - - (void)sd_reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation - { - [self sd_reloadRowsAtIndexPaths:indexPaths withRowAnimation:animation]; - } - - - (void)sd_moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath - { - [self sd_moveRowAtIndexPath:indexPath toIndexPath:newIndexPath]; - } - - */ - -- (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth -{ - if (!self.cellAutoHeightManager) { - self.cellAutoHeightManager = [SDCellAutoHeightManager managerWithCellClass:cellClass]; - } - self.cellAutoHeightManager.contentViewWidth = contentViewWidth; -} - -- (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth -{ - if (!self.cellAutoHeightManager) { - self.cellAutoHeightManager = [[SDCellAutoHeightManager alloc] initWithCellClasses:cellClassArray]; - } - self.cellAutoHeightManager.contentViewWidth = contentViewWidth; -} - -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath -{ - return [self.cellAutoHeightManager cellHeightForIndexPath:indexPath model:model keyPath:keyPath]; -} - -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass -{ - return [self.cellAutoHeightManager cellHeightForIndexPath:indexPath model:model keyPath:keyPath cellClass:cellClass]; -} - -- (SDCellAutoHeightManager *)cellAutoHeightManager -{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setCellAutoHeightManager:(SDCellAutoHeightManager *)cellAutoHeightManager -{ - objc_setAssociatedObject(self, @selector(cellAutoHeightManager), cellAutoHeightManager, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end - - -@implementation UITableViewController (SDTableViewControllerAutoCellHeight) - -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width -{ - return [self cellHeightForIndexPath:indexPath cellContentViewWidth:width tableView:self.tableView]; -} - -@end - -@implementation NSObject (SDAnyObjectAutoCellHeight) - -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width tableView:(UITableView *)tableView -{ - if (!tableView.cellAutoHeightManager) { - tableView.cellAutoHeightManager = [[SDCellAutoHeightManager alloc] init]; - } - if (tableView.cellAutoHeightManager.contentViewWidth != width) { - tableView.cellAutoHeightManager.contentViewWidth = width; - [tableView.cellAutoHeightManager clearHeightCache]; - } - if ([tableView.cellAutoHeightManager heightCacheForIndexPath:indexPath]) { - return [[tableView.cellAutoHeightManager heightCacheForIndexPath:indexPath] floatValue]; - } - UITableViewCell *cell = [tableView.dataSource tableView:tableView cellForRowAtIndexPath:indexPath]; - tableView.cellAutoHeightManager.modelCell = cell; - if (cell.contentView.width != width) { - cell.contentView.width = width; - } - return [[tableView cellAutoHeightManager] cellHeightForIndexPath:indexPath model:nil keyPath:nil]; -} - -@end - diff --git a/SDAutoLayout/UIView+SDAutoLayout.h b/SDAutoLayout/UIView+SDAutoLayout.h deleted file mode 100644 index db8e517..0000000 --- a/SDAutoLayout/UIView+SDAutoLayout.h +++ /dev/null @@ -1,299 +0,0 @@ -// -// UIView+SDAutoLayout.h -// -// Created by gsd on 15/10/6. -// Copyright (c) 2015年 gsd. All rights reserved. -// - -/* - ************************************************************************* - - --------- INTRODUCTION --------- - - USAGE: - - MODE 1. >>>>>>>>>>>>>>> You can use it in this way: - - Demo.sd_layout - .topSpaceToView(v1, 100) - .bottomSpaceToView(v3, 100) - .leftSpaceToView(v0, 150) - .rightSpaceToView(v2, 150); - - MODE 2. >>>>>>>>>>>>>>> You can also use it in this way that is more brevity: - - Demo.sd_layout.topSpaceToView(v1, 100).bottomSpaceToView(v3, 100).leftSpaceToView(v0, 150).rightSpaceToView(v2, 150); - - - ************************************************************************* - */ - - -/* - - ********************************************************************************* - * - * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 - * 帮您解决问题。 - * QQ : 2689718696(gsdios) - * Email : gsdios@126.com - * GitHub: https://github.com/gsdios - * 新浪微博:GSD_iOS - * - * 视频教程:http://www.letv.com/ptv/vplay/24038772.html - * 用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md - * - ********************************************************************************* - - */ - -#import - -@class SDAutoLayoutModel; - -typedef SDAutoLayoutModel *(^MarginToView)(UIView *toView, CGFloat value); -typedef SDAutoLayoutModel *(^Margin)(CGFloat value); -typedef SDAutoLayoutModel *(^MarginEqualToView)(UIView *toView); -typedef SDAutoLayoutModel *(^WidthHeight)(CGFloat value); -typedef SDAutoLayoutModel *(^WidthHeightEqualToView)(UIView *toView, CGFloat ratioValue); -typedef SDAutoLayoutModel *(^AutoHeight)(CGFloat ratioValue); -typedef SDAutoLayoutModel *(^SameWidthHeight)(); -typedef void (^SpaceToSuperView)(UIEdgeInsets insets); - -@interface SDAutoLayoutModel : NSObject - -/* - *************************说明************************ - - 方法名中带有“SpaceToView”的需要传递2个参数:(UIView)参照view 和 (CGFloat)间距数值 - 方法名中带有“RatioToView”的需要传递2个参数:(UIView)参照view 和 (CGFloat)倍数 - 方法名中带有“EqualToView”的需要传递1个参数:(UIView)参照view - 方法名中带有“Is”的需要传递1个参数:(CGFloat)数值 - - ***************************************************** - */ - - -/* 设置距离其它view的间距 */ - -/** 左边到其参照view之间的间距,参数为“(View, CGFloat)” */ -@property (nonatomic, copy, readonly) MarginToView leftSpaceToView; -/** 右边到其参照view之间的间距,参数为“(View, CGFloat)” */ -@property (nonatomic, copy, readonly) MarginToView rightSpaceToView; -/** 顶部到其参照view之间的间距,参数为“(View, CGFloat)” */ -@property (nonatomic, copy, readonly) MarginToView topSpaceToView; -/** 底部到其参照view之间的间距,参数为“(View, CGFloat)” */ -@property (nonatomic, copy, readonly) MarginToView bottomSpaceToView; - - - -/* 设置x、y、width、height、centerX、centerY 值 */ - -/** x值,参数为“(CGFloat)” */ -@property (nonatomic, copy, readonly) Margin xIs; -/** y值,参数为“(CGFloat)” */ -@property (nonatomic, copy, readonly) Margin yIs; -/** centerX值,参数为“(CGFloat)” */ -@property (nonatomic, copy, readonly) Margin centerXIs; -/** centerY值,参数为“(CGFloat)” */ -@property (nonatomic, copy, readonly) Margin centerYIs; -/** 宽度值,参数为“(CGFloat)” */ -@property (nonatomic, copy, readonly) WidthHeight widthIs; -/** 高度值,参数为“(CGFloat)” */ -@property (nonatomic, copy, readonly) WidthHeight heightIs; - - - -/* 设置最大宽度和高度、最小宽度和高度 */ - -/** 最大宽度值,参数为“(CGFloat)” */ -@property (nonatomic, copy, readonly) WidthHeight maxWidthIs; -/** 最大高度值,参数为“(CGFloat)” */ -@property (nonatomic, copy, readonly) WidthHeight maxHeightIs; -/** 最小宽度值,参数为“(CGFloat)” */ -@property (nonatomic, copy, readonly) WidthHeight minWidthIs; -/** 最小高度值,参数为“(CGFloat)” */ -@property (nonatomic, copy, readonly) WidthHeight minHeightIs; - - - -/* 设置和某个参照view的边距相同 */ - -/** 左间距与参照view相同,参数为“(View)” */ -@property (nonatomic, copy, readonly) MarginEqualToView leftEqualToView; -/** 右间距与参照view相同,参数为“(View)” */ -@property (nonatomic, copy, readonly) MarginEqualToView rightEqualToView; -/** 顶部间距与参照view相同,参数为“(View)” */ -@property (nonatomic, copy, readonly) MarginEqualToView topEqualToView; -/** 底部间距与参照view相同,参数为“(View)” */ -@property (nonatomic, copy, readonly) MarginEqualToView bottomEqualToView; -/** centerX与参照view相同,参数为“(View)” */ -@property (nonatomic, copy, readonly) MarginEqualToView centerXEqualToView; -/** centerY与参照view相同,参数为“(View)” */ -@property (nonatomic, copy, readonly) MarginEqualToView centerYEqualToView; - - - -/* 设置宽度或者高度等于参照view的多少倍 */ - -/** 宽度是参照view宽度的多少倍,参数为“(View, CGFloat)” */ -@property (nonatomic, copy, readonly) WidthHeightEqualToView widthRatioToView; -/** 高度是参照view宽度的多少倍,参数为“(View, CGFloat)” */ -@property (nonatomic, copy, readonly) WidthHeightEqualToView heightRatioToView; -/** 设置一个view的宽度和它的高度相同,参数为空“()” */ -@property (nonatomic, copy, readonly) SameWidthHeight widthEqualToHeight; -/** 设置一个view的高度和它的宽度相同,参数为空“()” */ -@property (nonatomic, copy, readonly) SameWidthHeight heightEqualToWidth; -/** 自适应高度,传入高宽比值,label可以传0实现文字高度自适应 */ -@property (nonatomic, copy, readonly) AutoHeight autoHeightRatio; - - - -/* 填充父view(快捷方法) */ - -/** 传入UIEdgeInsetsMake(top, left, bottom, right),可以快捷设置view到其父view上左下右的间距 */ -@property (nonatomic, copy, readonly) SpaceToSuperView spaceToSuperView; - -@property (nonatomic, weak) UIView *needsAutoResizeView; - -@end - - - - -@interface UIView (SDAutoHeightWidth) - -/** 设置Cell的高度自适应,也可用于设置普通view内容自适应 */ -- (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin; - -/** 主动刷新布局(如果你需要设置完布局代码就获得view的frame请调用此方法) */ -- (void)updateLayout; - -@property (nonatomic) CGFloat autoHeight; - -@property (nonatomic) UIView *sd_bottomView; -@property (nonatomic) CGFloat sd_bottomViewBottomMargin; - -@property (nonatomic) UIView *sd_rightView; -@property (nonatomic) CGFloat sd_rightMargin; - -@end - -@interface UIView (SDLayoutExtention) - -/* 设置圆角 */ - -/** 设置圆角半径值 */ -@property (nonatomic, strong) NSNumber *sd_cornerRadius; -/** 设置圆角半径值为view宽度的多少倍 */ -@property (nonatomic, strong) NSNumber *sd_cornerRadiusFromWidthRatio; -/** 设置圆角半径值为view高度的多少倍 */ -@property (nonatomic, strong) NSNumber *sd_cornerRadiusFromHeightRatio; - -/** 设置等宽子view(子view需要在同一水平方向) */ -@property (nonatomic, strong) NSArray *sd_equalWidthSubviews; - -@end - - -@interface UIScrollView (SDAutoContentSize) - -/** 设置scrollview内容竖向自适应 */ -- (void)setupAutoContentSizeWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin; - -/** 设置scrollview内容横向自适应 */ -- (void)setupAutoContentSizeWithRightView:(UIView *)rightView rightMargin:(CGFloat)rightMargin; - -@end - - -@interface UILabel (SDLabelAutoResize) - -/** 设置单行文本label宽度自适应 */ -- (void)setSingleLineAutoResizeWithMaxWidth:(CGFloat)maxWidth; - -@end - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// ----------------- 以下为此库内部需要用到的类和方法(可以不用看)---------------- - -@interface SDAutoLayoutModelItem : NSObject - -@property (nonatomic, strong) NSNumber *value; -@property (nonatomic, weak) UIView *refView; - -@end - -@interface UIView (SDAutoLayout) - -- (NSMutableArray *)autoLayoutModelsArray; - -/** 开始自动布局 */ -- (SDAutoLayoutModel *)sd_layout; - -/** 清空之前的自动布局设置,重新开始自动布局 */ -- (SDAutoLayoutModel *)sd_resetLayout; - -- (void)addAutoLayoutModel:(SDAutoLayoutModel *)model; - -@property (nonatomic, strong) NSNumber *fixedWith; -@property (nonatomic, strong) NSNumber *fixedHeight; - -@property (nonatomic, strong) NSNumber *sd_maxWidth; - -@property (nonatomic, strong) NSNumber *autoHeightRatioValue; - -@end - - -@interface UIView (SDChangeFrame) - -@property (nonatomic) CGFloat left; -@property (nonatomic) CGFloat top; -@property (nonatomic) CGFloat right; -@property (nonatomic) CGFloat bottom; -@property (nonatomic) CGFloat centerX; -@property (nonatomic) CGFloat centerY; - -@property (nonatomic) CGFloat width; -@property (nonatomic) CGFloat height; - - -@property (nonatomic) CGPoint origin; -@property (nonatomic) CGSize size; - -@end - diff --git a/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayout/UIView+SDAutoLayout.m deleted file mode 100644 index 949b372..0000000 --- a/SDAutoLayout/UIView+SDAutoLayout.m +++ /dev/null @@ -1,1073 +0,0 @@ -// -// UIView+SDAutoLayout.m -// -// Created by gsd on 15/10/6. -// Copyright (c) 2015年 gsd. All rights reserved. -// - -/* - - ********************************************************************************* - * * - * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * - * 帮您解决问题。 * - * QQ : 2689718696(gsdios) * - * Email : gsdios@126.com * - * GitHub: https://github.com/gsdios * - * 新浪微博:GSD_iOS * - * * - ********************************************************************************* - - */ - -#import "UIView+SDAutoLayout.h" -#import "UITableView+SDAutoTableViewCellHeight.h" - -#import - -@interface SDAutoLayoutModel () - -@property (nonatomic, strong) SDAutoLayoutModelItem *width; -@property (nonatomic, strong) SDAutoLayoutModelItem *height; -@property (nonatomic, strong) SDAutoLayoutModelItem *left; -@property (nonatomic, strong) SDAutoLayoutModelItem *top; -@property (nonatomic, strong) SDAutoLayoutModelItem *right; -@property (nonatomic, strong) SDAutoLayoutModelItem *bottom; -@property (nonatomic, strong) NSNumber *centerX; -@property (nonatomic, strong) NSNumber *centerY; - -@property (nonatomic, strong) NSNumber *maxWidth; -@property (nonatomic, strong) NSNumber *maxHeight; -@property (nonatomic, strong) NSNumber *minWidth; -@property (nonatomic, strong) NSNumber *minHeight; - -@property (nonatomic, strong) SDAutoLayoutModelItem *ratio_width; -@property (nonatomic, strong) SDAutoLayoutModelItem *ratio_height; -@property (nonatomic, strong) SDAutoLayoutModelItem *ratio_left; -@property (nonatomic, strong) SDAutoLayoutModelItem *ratio_top; -@property (nonatomic, strong) SDAutoLayoutModelItem *ratio_right; -@property (nonatomic, strong) SDAutoLayoutModelItem *ratio_bottom; - -@property (nonatomic, strong) SDAutoLayoutModelItem *equalLeft; -@property (nonatomic, strong) SDAutoLayoutModelItem *equalRight; -@property (nonatomic, strong) SDAutoLayoutModelItem *equalTop; -@property (nonatomic, strong) SDAutoLayoutModelItem *equalBottom; -@property (nonatomic, strong) SDAutoLayoutModelItem *equalCenterX; -@property (nonatomic, strong) SDAutoLayoutModelItem *equalCenterY; - -@property (nonatomic, strong) SDAutoLayoutModelItem *widthEqualHeight; -@property (nonatomic, strong) SDAutoLayoutModelItem *heightEqualWidth; - -@end - -@implementation SDAutoLayoutModel - -@synthesize leftSpaceToView = _leftSpaceToView; -@synthesize rightSpaceToView = _rightSpaceToView; -@synthesize topSpaceToView = _topSpaceToView; -@synthesize bottomSpaceToView = _bottomSpaceToView; -@synthesize widthIs = _widthIs; -@synthesize heightIs = _heightIs; -@synthesize widthRatioToView = _widthRatioToView; -@synthesize heightRatioToView = _heightRatioToView; -@synthesize leftEqualToView = _leftEqualToView; -@synthesize rightEqualToView = _rightEqualToView; -@synthesize topEqualToView = _topEqualToView; -@synthesize bottomEqualToView = _bottomEqualToView; -@synthesize centerXEqualToView = _centerXEqualToView; -@synthesize centerYEqualToView = _centerYEqualToView; -@synthesize xIs = _xIs; -@synthesize yIs = _yIs; -@synthesize centerXIs = _centerXIs; -@synthesize centerYIs = _centerYIs; -@synthesize autoHeightRatio = _autoHeightRatio; -@synthesize spaceToSuperView = _spaceToSuperView; -@synthesize maxWidthIs = _maxWidthIs; -@synthesize maxHeightIs = _maxHeightIs; -@synthesize minWidthIs = _minWidthIs; -@synthesize minHeightIs = _minHeightIs; -@synthesize widthEqualToHeight = _widthEqualToHeight; -@synthesize heightEqualToWidth = _heightEqualToWidth; - -- (MarginToView)leftSpaceToView -{ - if (!_leftSpaceToView) { - _leftSpaceToView = [self marginToViewblockWithKey:@"left"]; - } - return _leftSpaceToView; -} - -- (MarginToView)rightSpaceToView -{ - if (!_rightSpaceToView) { - _rightSpaceToView = [self marginToViewblockWithKey:@"right"]; - } - return _rightSpaceToView; -} - -- (MarginToView)topSpaceToView -{ - if (!_topSpaceToView) { - _topSpaceToView = [self marginToViewblockWithKey:@"top"]; - } - return _topSpaceToView; -} - -- (MarginToView)bottomSpaceToView -{ - if (!_bottomSpaceToView) { - _bottomSpaceToView = [self marginToViewblockWithKey:@"bottom"]; - } - return _bottomSpaceToView; -} - -- (MarginToView)marginToViewblockWithKey:(NSString *)key -{ - __weak typeof(self) weakSelf = self; - return ^(UIView *view, CGFloat value) { - SDAutoLayoutModelItem *item = [SDAutoLayoutModelItem new]; - item.value = @(value); - item.refView = view; - [weakSelf setValue:item forKey:key]; - return weakSelf; - }; -} - -- (WidthHeight)widthIs -{ - if (!_widthIs) { - __weak typeof(self) weakSelf = self; - _widthIs = ^(CGFloat value) { - weakSelf.needsAutoResizeView.width = value; - weakSelf.needsAutoResizeView.fixedWith = @(value); - return weakSelf; - }; - } - return _widthIs; -} - -- (WidthHeight)heightIs -{ - if (!_heightIs) { - __weak typeof(self) weakSelf = self; - _heightIs = ^(CGFloat value) { - weakSelf.needsAutoResizeView.height = value; - weakSelf.needsAutoResizeView.fixedHeight = @(value); - return weakSelf; - }; - } - return _heightIs; -} - -- (WidthHeightEqualToView)widthRatioToView -{ - if (!_widthRatioToView) { - __weak typeof(self) weakSelf = self; - _widthRatioToView = ^(UIView *view, CGFloat value) { - weakSelf.ratio_width = [SDAutoLayoutModelItem new]; - weakSelf.ratio_width.value = @(value); - weakSelf.ratio_width.refView = view; - return weakSelf; - }; - } - return _widthRatioToView; -} - -- (WidthHeightEqualToView)heightRatioToView -{ - if (!_heightRatioToView) { - __weak typeof(self) weakSelf = self; - _heightRatioToView = ^(UIView *view, CGFloat value) { - weakSelf.ratio_height = [SDAutoLayoutModelItem new]; - weakSelf.ratio_height.refView = view; - weakSelf.ratio_height.value = @(value); - return weakSelf; - }; - } - return _heightRatioToView; -} - -- (WidthHeight)maxWidthIs -{ - if (!_maxWidthIs) { - _maxWidthIs = [self limitingWidthHeightWithKey:@"maxWidth"]; - } - return _maxWidthIs; -} - -- (WidthHeight)maxHeightIs -{ - if (!_maxHeightIs) { - _maxHeightIs = [self limitingWidthHeightWithKey:@"maxHeight"]; - } - return _maxHeightIs; -} - -- (WidthHeight)minWidthIs -{ - if (!_minWidthIs) { - _minWidthIs = [self limitingWidthHeightWithKey:@"minWidth"]; - } - return _minWidthIs; -} - -- (WidthHeight)minHeightIs -{ - if (!_minHeightIs) { - _minHeightIs = [self limitingWidthHeightWithKey:@"minHeight"]; - } - return _minHeightIs; -} - - -- (WidthHeight)limitingWidthHeightWithKey:(NSString *)key -{ - __weak typeof(self) weakSelf = self; - - return ^(CGFloat value) { - [weakSelf setValue:@(value) forKey:key]; - - return weakSelf; - }; -} - - -- (MarginEqualToView)marginEqualToViewBlockWithKey:(NSString *)key -{ - __weak typeof(self) weakSelf = self; - - return ^(UIView *view) { - SDAutoLayoutModelItem *item = [SDAutoLayoutModelItem new]; - item.refView = view; - [weakSelf setValue:item forKey:key]; - return weakSelf; - }; -} - -- (MarginEqualToView)leftEqualToView -{ - if (!_leftEqualToView) { - _leftEqualToView = [self marginEqualToViewBlockWithKey:@"equalLeft"]; - } - return _leftEqualToView; -} - -- (MarginEqualToView)rightEqualToView -{ - if (!_rightEqualToView) { - _rightEqualToView = [self marginEqualToViewBlockWithKey:@"equalRight"]; - } - return _rightEqualToView; -} - -- (MarginEqualToView)topEqualToView -{ - if (!_topEqualToView) { - _topEqualToView = [self marginEqualToViewBlockWithKey:@"equalTop"]; - } - return _topEqualToView; -} - -- (MarginEqualToView)bottomEqualToView -{ - if (!_bottomEqualToView) { - _bottomEqualToView = [self marginEqualToViewBlockWithKey:@"equalBottom"]; - } - return _bottomEqualToView; -} - -- (MarginEqualToView)centerXEqualToView -{ - if (!_centerXEqualToView) { - _centerXEqualToView = [self marginEqualToViewBlockWithKey:@"equalCenterX"]; - } - return _centerXEqualToView; -} - -- (MarginEqualToView)centerYEqualToView -{ - if (!_centerYEqualToView) { - _centerYEqualToView = [self marginEqualToViewBlockWithKey:@"equalCenterY"]; - } - return _centerYEqualToView; -} - - -- (Margin)marginBlockWithKey:(NSString *)key -{ - __weak typeof(self) weakSelf = self; - - return ^(CGFloat value) { - - if ([key isEqualToString:@"x"]) { - weakSelf.needsAutoResizeView.left = value; - } else if ([key isEqualToString:@"y"]) { - weakSelf.needsAutoResizeView.top = value; - } else if ([key isEqualToString:@"centerX"]) { - weakSelf.centerX = @(value); - } else if ([key isEqualToString:@"centerY"]) { - weakSelf.centerY = @(value); - } - - return weakSelf; - }; -} - -- (Margin)xIs -{ - if (!_xIs) { - _xIs = [self marginBlockWithKey:@"x"]; - } - return _xIs; -} - -- (Margin)yIs -{ - if (!_yIs) { - _yIs = [self marginBlockWithKey:@"y"]; - } - return _yIs; -} - -- (Margin)centerXIs -{ - if (!_centerXIs) { - _centerXIs = [self marginBlockWithKey:@"centerX"]; - } - return _centerXIs; -} - -- (Margin)centerYIs -{ - if (!_centerYIs) { - _centerYIs = [self marginBlockWithKey:@"centerY"]; - } - return _centerYIs; -} - -- (AutoHeight)autoHeightRatio -{ - __weak typeof(self) weakSelf = self; - - if (!_autoHeightRatio) { - _autoHeightRatio = ^(CGFloat ratioaValue) { - weakSelf.needsAutoResizeView.autoHeightRatioValue = @(ratioaValue); - return weakSelf; - }; - } - return _autoHeightRatio; -} - -- (SpaceToSuperView)spaceToSuperView -{ - __weak typeof(self) weakSelf = self; - - if (!_spaceToSuperView) { - _spaceToSuperView = ^(UIEdgeInsets insets) { - UIView *superView = weakSelf.needsAutoResizeView.superview; - if (superView) { - weakSelf.needsAutoResizeView.sd_layout - .leftSpaceToView(superView, insets.left) - .topSpaceToView(superView, insets.top) - .rightSpaceToView(superView, insets.right) - .bottomSpaceToView(superView, insets.bottom); - } - }; - } - return _spaceToSuperView; -} - -- (SameWidthHeight)widthEqualToHeight -{ - __weak typeof(self) weakSelf = self; - - if (!_widthEqualToHeight) { - _widthEqualToHeight = ^() { - weakSelf.widthEqualHeight = [SDAutoLayoutModelItem new]; - return weakSelf; - }; - } - return _widthEqualToHeight; -} - -- (SameWidthHeight)heightEqualToWidth -{ - __weak typeof(self) weakSelf = self; - - if (!_heightEqualToWidth) { - _heightEqualToWidth = ^() { - weakSelf.heightEqualWidth = [SDAutoLayoutModelItem new]; - return weakSelf; - }; - } - return _heightEqualToWidth; -} - -@end - - -@implementation UIView (SDAutoHeightWidth) - -- (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin -{ - self.sd_bottomView = bottomView; - self.sd_bottomViewBottomMargin = bottomMargin; -} - -- (void)updateLayout -{ - [self.superview layoutSubviews]; -} - -- (CGFloat)autoHeight -{ - return [objc_getAssociatedObject(self, _cmd) floatValue]; -} - -- (void)setAutoHeight:(CGFloat)autoHeight -{ - objc_setAssociatedObject(self, @selector(autoHeight), @(autoHeight), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (UIView *)sd_bottomView -{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setSd_bottomView:(UIView *)sd_bottomView -{ - objc_setAssociatedObject(self, @selector(sd_bottomView), sd_bottomView, OBJC_ASSOCIATION_ASSIGN); -} - -- (CGFloat)sd_bottomViewBottomMargin -{ - return [objc_getAssociatedObject(self, _cmd) floatValue]; -} - -- (void)setSd_bottomViewBottomMargin:(CGFloat)sd_bottomViewBottomMargin -{ - objc_setAssociatedObject(self, @selector(sd_bottomViewBottomMargin), @(sd_bottomViewBottomMargin), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (UIView *)sd_rightView -{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setSd_rightView:(UIView *)sd_rightView -{ - objc_setAssociatedObject(self, @selector(sd_rightView), sd_rightView, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (CGFloat)sd_rightMargin -{ - return [objc_getAssociatedObject(self, _cmd) floatValue]; -} - -- (void)setSd_rightMargin:(CGFloat)sd_rightMargin -{ - objc_setAssociatedObject(self, @selector(sd_rightMargin), @(sd_rightMargin), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end - -@implementation UIView (SDLayoutExtention) - -- (NSNumber *)sd_cornerRadius -{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setSd_cornerRadius:(NSNumber *)sd_cornerRadius -{ - objc_setAssociatedObject(self, @selector(sd_cornerRadius), sd_cornerRadius, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - - -- (NSNumber *)sd_cornerRadiusFromWidthRatio -{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setSd_cornerRadiusFromWidthRatio:(NSNumber *)sd_cornerRadiusFromWidthRatio -{ - objc_setAssociatedObject(self, @selector(sd_cornerRadiusFromWidthRatio), sd_cornerRadiusFromWidthRatio, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - - -- (NSNumber *)sd_cornerRadiusFromHeightRatio -{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setSd_cornerRadiusFromHeightRatio:(NSNumber *)sd_cornerRadiusFromHeightRatio -{ - objc_setAssociatedObject(self, @selector(sd_cornerRadiusFromHeightRatio), sd_cornerRadiusFromHeightRatio, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (NSArray *)sd_equalWidthSubviews -{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setSd_equalWidthSubviews:(NSArray *)sd_equalWidthSubviews -{ - objc_setAssociatedObject(self, @selector(sd_equalWidthSubviews), sd_equalWidthSubviews, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end - -@implementation UIScrollView (SDAutoContentSize) - -- (void)setupAutoContentSizeWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin -{ - [self setupAutoHeightWithBottomView:bottomView bottomMargin:bottomMargin]; -} - -- (void)setupAutoContentSizeWithRightView:(UIView *)rightView rightMargin:(CGFloat)rightMargin -{ - [self setSd_rightView:rightView]; - [self setSd_rightMargin:rightMargin]; -} - -@end - -@implementation UILabel (SDLabelAutoResize) - -- (void)setSingleLineAutoResizeWithMaxWidth:(CGFloat)maxWidth -{ - self.sd_maxWidth = @(maxWidth); -} - -@end - - -@implementation SDAutoLayoutModelItem - -@end - - -@implementation UIView (SDAutoLayout) - -+ (void)load -{ - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - Method layoutSubviews = class_getInstanceMethod(self, @selector(layoutSubviews)); - Method sd_autolayout = class_getInstanceMethod(self, @selector(sd_autolayout)); - method_exchangeImplementations(layoutSubviews, sd_autolayout); - }); -} - -#pragma mark - properties - -- (NSMutableArray *)autoLayoutModelsArray -{ - if (!objc_getAssociatedObject(self, _cmd)) { - objc_setAssociatedObject(self, _cmd, [NSMutableArray array], OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - return objc_getAssociatedObject(self, _cmd); -} - -- (NSNumber *)fixedWith -{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setFixedWith:(NSNumber *)fixedWith -{ - objc_setAssociatedObject(self, @selector(fixedWith), fixedWith, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (NSNumber *)fixedHeight -{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setFixedHeight:(NSNumber *)fixedHeight -{ - objc_setAssociatedObject(self, @selector(fixedHeight), fixedHeight, OBJC_ASSOCIATION_RETAIN); -} - -- (NSNumber *)autoHeightRatioValue -{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setAutoHeightRatioValue:(NSNumber *)autoHeightRatioValue -{ - objc_setAssociatedObject(self, @selector(autoHeightRatioValue), autoHeightRatioValue, OBJC_ASSOCIATION_RETAIN); -} - -- (NSNumber *)sd_maxWidth -{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setSd_maxWidth:(NSNumber *)sd_maxWidth -{ - objc_setAssociatedObject(self, @selector(sd_maxWidth), sd_maxWidth, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (SDAutoLayoutModel *)ownLayoutModel -{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setOwnLayoutModel:(SDAutoLayoutModel *)ownLayoutModel -{ - objc_setAssociatedObject(self, @selector(ownLayoutModel), ownLayoutModel, OBJC_ASSOCIATION_RETAIN); -} - -- (SDAutoLayoutModel *)sd_layout -{ - /* - 卡在这里说明你的要自动布局的view在没有添加到父view的情况下就开始设置布局,你需要这样: - 1. UIView *view = [UIView new]; - 2. [superView addSubview:view]; - 3. view.sd_layout - .leftEqualToView()... - */ - NSAssert(self.superview, @">>>>>>>>>在加入父view之后才可以做自动布局设置"); - - - - SDAutoLayoutModel *model = [self ownLayoutModel]; - if (!model) { - model = [SDAutoLayoutModel new]; - model.needsAutoResizeView = self; - [self setOwnLayoutModel:model]; - [self.superview.autoLayoutModelsArray addObject:model]; - } - - return model; -} - -- (SDAutoLayoutModel *)sd_resetLayout -{ - SDAutoLayoutModel *model = [self ownLayoutModel]; - if (model) { - [self.superview.autoLayoutModelsArray removeObject:model]; - [self setOwnLayoutModel:nil]; - } - return [self sd_layout]; -} - -- (void)sd_autolayout -{ - [self sd_autolayout]; - - if (self.sd_equalWidthSubviews.count) { - __block CGFloat totalMargin = 0; - [self.sd_equalWidthSubviews enumerateObjectsUsingBlock:^(UIView * _Nonnull view, NSUInteger idx, BOOL * _Nonnull stop) { - SDAutoLayoutModel *model = view.sd_layout; - totalMargin += ([model.left.value floatValue] + [model.right.value floatValue]); - }]; - CGFloat averageWidth = (self.width - totalMargin) / self.sd_equalWidthSubviews.count; - [self.sd_equalWidthSubviews enumerateObjectsUsingBlock:^(UIView * _Nonnull view, NSUInteger idx, BOOL * _Nonnull stop) { - view.width = averageWidth; - view.fixedWith = @(averageWidth); - }]; - } - - if (self.autoLayoutModelsArray.count) { - [self.autoLayoutModelsArray enumerateObjectsUsingBlock:^(SDAutoLayoutModel *model, NSUInteger idx, BOOL *stop) { - [self sd_resizeWithModel:model]; - }]; - } - - if (self.tag == kSDModelCellTag && [self isKindOfClass:NSClassFromString(@"UITableViewCellContentView")]) { - UITableViewCell *cell = (UITableViewCell *)(self.superview); - if ([cell isKindOfClass:NSClassFromString(@"UITableViewCellScrollView")]) { - cell = (UITableViewCell *)cell.superview; - } - if ([cell isKindOfClass:[UITableViewCell class]]) { - cell.autoHeight = cell.sd_bottomView.bottom + cell.sd_bottomViewBottomMargin; - } - } else if (![self isKindOfClass:[UITableViewCell class]] && (self.sd_bottomView || self.sd_rightView)) { - CGFloat contentHeight = 0; - CGFloat contentWidth = 0; - if (self.sd_bottomView) { - contentHeight = self.sd_bottomView.bottom + self.sd_bottomViewBottomMargin; - } - if (self.sd_rightView) { - contentWidth = self.sd_rightView.right + self.sd_rightMargin; - } - if ([self isKindOfClass:[UIScrollView class]]) { - UIScrollView *scrollView = (UIScrollView *)self; - CGSize contentSize = scrollView.contentSize; - if (contentHeight > 0) { - contentSize.height = contentHeight; - } - if (contentWidth > 0) { - contentSize.width = contentWidth; - } - if (contentSize.width <= 0) { - contentSize.width = scrollView.width; - } - scrollView.contentSize = contentSize; - } else { - // 如果这里出现循环调用情况请把demo发送到gsdios@126.com,谢谢配合。 - self.height = contentHeight; - } - } -} - -- (void)sd_resizeWithModel:(SDAutoLayoutModel *)model -{ - UIView *view = model.needsAutoResizeView; - - if (view.sd_maxWidth && (model.rightSpaceToView || model.rightEqualToView)) { // 靠右布局前提设置 - if ([view isKindOfClass:[UILabel class]]) { - UILabel *label = (UILabel *)view; - CGFloat width = [view.sd_maxWidth floatValue] > 0 ? [view.sd_maxWidth floatValue] : MAXFLOAT; - label.numberOfLines = 1; - if (label.text.length) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.width = rect.size.width; - label.fixedWith = @(label.width); - } else { - label.width = 0; - } - } - } - - if (view.autoHeightRatioValue && view.width > 0 && (model.bottomEqualToView || model.bottomSpaceToView)) { // 底部布局前提设置 - if ([view.autoHeightRatioValue floatValue] > 0) { - view.height = view.width * [view.autoHeightRatioValue floatValue]; - } else { - if ([view isKindOfClass:[UILabel class]]) { - UILabel *label = (UILabel *)view; - label.numberOfLines = 0; - if (label.text.length) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.height = rect.size.height; - } else { - label.height = 0; - } - } else { - view.height = 0; - } - } - } - - if (model.width) { - view.width = [model.width.value floatValue]; - view.fixedWith = @(view.width); - } else if (model.ratio_width) { - view.width = model.ratio_width.refView.width * [model.ratio_width.value floatValue]; - view.fixedWith = @(view.width); - } - - if (model.height) { - view.height = [model.height.value floatValue]; - view.fixedHeight = @(view.height); - } else if (model.ratio_height) { - view.height = [model.ratio_height.value floatValue] * model.ratio_height.refView.height; - view.fixedHeight = @(view.height); - } - - if (model.left) { - if (view.superview == model.left.refView) { - if (!view.fixedWith) { // view.autoLeft && view.autoRight - view.width = view.right - [model.left.value floatValue]; - } - view.left = [model.left.value floatValue]; - } else { - if (!view.fixedWith) { // view.autoLeft && view.autoRight - view.width = view.right - model.left.refView.right - [model.left.value floatValue]; - } - view.left = model.left.refView.right + [model.left.value floatValue]; - } - - } else if (model.equalLeft) { - if (!view.fixedWith) { - view.width = view.right - model.equalLeft.refView.left; - } - if (view.superview == model.equalLeft.refView) { - view.left = 0; - } else { - view.left = model.equalLeft.refView.left; - } - } else if (model.equalCenterX) { - if (view.superview == model.equalCenterX.refView) { - view.centerX = model.equalCenterX.refView.width * 0.5; - } else { - view.centerX = model.equalCenterX.refView.centerX; - } - } else if (model.centerX) { - view.centerX = [model.centerX floatValue]; - } - - if (model.right) { - if (view.superview == model.right.refView) { - if (!view.fixedWith) { // view.autoLeft && view.autoRight - view.width = model.right.refView.width - view.left - [model.right.value floatValue]; - } - view.right = model.right.refView.width - [model.right.value floatValue]; - } else { - if (!view.fixedWith) { // view.autoLeft && view.autoRight - view.width = model.right.refView.left - view.left - [model.right.value floatValue]; - } - view.right = model.right.refView.left - [model.right.value floatValue]; - } - } else if (model.equalRight) { - if (!view.fixedWith) { - view.width = model.equalRight.refView.right - view.left; - } - - view.right = model.equalRight.refView.right; - if (view.superview == model.equalRight.refView) { - view.right = model.equalRight.refView.width; - } - - } - - if (model.top) { - if (view.superview == model.top.refView) { - if (!view.fixedHeight) { // view.autoTop && view.autoBottom && view.bottom - view.height = view.bottom - [model.top.value floatValue]; - } - view.top = [model.top.value floatValue]; - } else { - if (!view.fixedHeight) { // view.autoTop && view.autoBottom && view.bottom - view.height = view.bottom - model.top.refView.bottom - [model.top.value floatValue]; - } - view.top = model.top.refView.bottom + [model.top.value floatValue]; - } - } else if (model.equalTop) { - if (view.superview == model.equalTop.refView) { - if (!view.fixedHeight) { - view.height = view.bottom; - } - view.top = 0; - } else { - if (!view.fixedHeight) { - view.height = view.bottom - model.equalTop.refView.top; - } - view.top = model.equalTop.refView.top; - } - } else if (model.equalCenterY) { - if (view.superview == model.equalCenterY.refView) { - view.centerY = model.equalCenterY.refView.height * 0.5; - } else { - view.centerY = model.equalCenterY.refView.centerY; - } - } else if (model.centerY) { - view.centerY = [model.centerY floatValue]; - } - - if (model.bottom) { - if (view.superview == model.bottom.refView) { - if (!view.fixedHeight) { - view.height = view.superview.height - view.top - [model.bottom.value floatValue]; - } - view.bottom = model.bottom.refView.height - [model.bottom.value floatValue]; - } else { - if (!view.fixedHeight) { - view.height = model.bottom.refView.top - view.top - [model.bottom.value floatValue]; - } - view.bottom = model.bottom.refView.top - [model.bottom.value floatValue]; - } - - } else if (model.equalBottom) { - if (view.superview == model.equalBottom.refView) { - if (!view.fixedHeight) { - view.height = view.superview.height - view.top; - } - view.bottom = model.equalBottom.refView.height; - } else { - if (!view.fixedHeight) { - view.height = model.equalBottom.refView.bottom - view.top; - } - view.bottom = model.equalBottom.refView.bottom; - } - } - - if (view.autoHeightRatioValue && view.width > 0) { - if ([view.autoHeightRatioValue floatValue] > 0) { - view.height = view.width * [view.autoHeightRatioValue floatValue]; - } else { - if ([view isKindOfClass:[UILabel class]]) { - UILabel *label = (UILabel *)view; - label.numberOfLines = 0; - if (label.text.length) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.height = rect.size.height; - } else { - label.height = 0; - } - } else { - view.height = 0; - } - } - } - - if (view.sd_maxWidth) { - if ([view isKindOfClass:[UILabel class]]) { - UILabel *label = (UILabel *)view; - CGFloat width = [view.sd_maxWidth floatValue] > 0 ? [view.sd_maxWidth floatValue] : MAXFLOAT; - label.numberOfLines = 1; - if (label.text.length) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.width = rect.size.width; - } else { - label.width = 0; - } - } - } - - if (model.maxWidth && [model.maxWidth floatValue] < view.width) { - view.width = [model.maxWidth floatValue]; - } - - if (model.minWidth && [model.minWidth floatValue] > view.width) { - view.width = [model.minWidth floatValue]; - } - - if (model.maxHeight && [model.maxHeight floatValue] < view.height) { - view.height = [model.maxHeight floatValue]; - } - - if (model.minHeight && [model.minHeight floatValue] > view.height) { - view.height = [model.minHeight floatValue]; - } - - if (model.widthEqualHeight) { - view.width = view.height; - } - - if (model.heightEqualWidth) { - view.height = view.width; - } - - CGFloat cornerRadius = view.layer.cornerRadius; - CGFloat newCornerRadius = 0; - - if (view.sd_cornerRadius && (cornerRadius != [view.sd_cornerRadius floatValue])) { - newCornerRadius = [view.sd_cornerRadius floatValue]; - } else if (view.sd_cornerRadiusFromWidthRatio && (cornerRadius != [view.sd_cornerRadiusFromWidthRatio floatValue] * view.width)) { - newCornerRadius = view.width * [view.sd_cornerRadiusFromWidthRatio floatValue]; - } else if (view.sd_cornerRadiusFromHeightRatio && (cornerRadius != view.height * [view.sd_cornerRadiusFromHeightRatio floatValue])) { - newCornerRadius = view.height * [view.sd_cornerRadiusFromHeightRatio floatValue]; - } - - if (newCornerRadius > 0) { - view.layer.cornerRadius = newCornerRadius; - view.clipsToBounds = YES; - } - -} - -- (void)addAutoLayoutModel:(SDAutoLayoutModel *)model -{ - [self.autoLayoutModelsArray addObject:model]; -} - -@end - - -@implementation UIView (SDChangeFrame) - -- (CGFloat)left { - return self.frame.origin.x; -} - -- (void)setLeft:(CGFloat)x { - CGRect frame = self.frame; - frame.origin.x = x; - self.frame = frame; -} - -- (CGFloat)top { - return self.frame.origin.y; -} - -- (void)setTop:(CGFloat)y { - CGRect frame = self.frame; - frame.origin.y = y; - self.frame = frame; -} - -- (CGFloat)right { - return self.frame.origin.x + self.frame.size.width; -} - -- (void)setRight:(CGFloat)right { - CGRect frame = self.frame; - frame.origin.x = right - frame.size.width; - self.frame = frame; -} - -- (CGFloat)bottom { - return self.frame.origin.y + self.frame.size.height; -} - -- (void)setBottom:(CGFloat)bottom { - CGRect frame = self.frame; - frame.origin.y = bottom - frame.size.height; - self.frame = frame; -} - -- (CGFloat)centerX -{ - return self.left + self.width * 0.5; -} - -- (void)setCenterX:(CGFloat)centerX -{ - self.left = centerX - self.width * 0.5; -} - -- (CGFloat)centerY -{ - return self.top + self.height * 0.5; -} - -- (void)setCenterY:(CGFloat)centerY -{ - self.top = centerY - self.height * 0.5; -} - -- (CGFloat)width { - return self.frame.size.width; -} - -- (void)setWidth:(CGFloat)width { - CGRect frame = self.frame; - frame.size.width = width; - self.frame = frame; -} - -- (CGFloat)height { - return self.frame.size.height; -} - -- (void)setHeight:(CGFloat)height { - CGRect frame = self.frame; - frame.size.height = height; - self.frame = frame; -} - -- (CGPoint)origin { - return self.frame.origin; -} - -- (void)setOrigin:(CGPoint)origin { - CGRect frame = self.frame; - frame.origin = origin; - self.frame = frame; -} - -- (CGSize)size { - return self.frame.size; -} - -- (void)setSize:(CGSize)size { - CGRect frame = self.frame; - frame.size = size; - self.frame = frame; -} - -@end - From f656767fd720a8a09b595e1b0bace32040e43f85 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 10 Jan 2016 15:53:16 +0800 Subject: [PATCH 037/276] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=97=A7=E7=89=88?= =?UTF-8?q?=E6=9C=AC=20xcode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aier.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist" | 2 +- .../DemoVC/DemoVC2/DemoVC2.m" | 2 +- .../SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" | 2 +- .../SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" | 6 +++--- .../SDAutoLayout/UIView+SDAutoLayout.m" | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/aier.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/aier.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist" index 0cc4714..a99c4bd 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/aier.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/aier.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist" @@ -137,7 +137,7 @@ endingColumnNumber = "9223372036854775807" startingLineNumber = "170" endingLineNumber = "170" - landmarkName = "-updateLatout" + landmarkName = "-updateLayout" landmarkType = "4"> >>>>>>>>>>>>> 多cell情景下调用以下方法(详细用法见demo7) >>>>>>>>>>>>>>>>> /** cellClassArray 为所有cell的类组成的数组,详细用法见demo7 */ -- (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth; +- (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth; /** 返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key) */ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass; diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" index d5e08b1..5f0d781 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" @@ -49,11 +49,11 @@ - (instancetype)initWithCellClass:(Class)cellClass return self; } -- (instancetype)initWithCellClasses:(NSArray *)cellClassArray +- (instancetype)initWithCellClasses:(NSArray *)cellClassArray { if (self = [super init]) { _modelTableview = [UITableView new]; - [cellClassArray enumerateObjectsUsingBlock:^(Class _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + [cellClassArray enumerateObjectsUsingBlock:^(Class obj, NSUInteger idx, BOOL *stop) { [self registerCellWithCellClass:obj]; }]; _cacheDictionary = [NSMutableDictionary new]; @@ -209,7 +209,7 @@ - (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFl self.cellAutoHeightManager.contentViewWidth = contentViewWidth; } -- (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth +- (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth { if (!self.cellAutoHeightManager) { self.cellAutoHeightManager = [[SDCellAutoHeightManager alloc] initWithCellClasses:cellClassArray]; diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" index 949b372..cb1a136 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" @@ -659,12 +659,12 @@ - (void)sd_autolayout if (self.sd_equalWidthSubviews.count) { __block CGFloat totalMargin = 0; - [self.sd_equalWidthSubviews enumerateObjectsUsingBlock:^(UIView * _Nonnull view, NSUInteger idx, BOOL * _Nonnull stop) { + [self.sd_equalWidthSubviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) { SDAutoLayoutModel *model = view.sd_layout; totalMargin += ([model.left.value floatValue] + [model.right.value floatValue]); }]; CGFloat averageWidth = (self.width - totalMargin) / self.sd_equalWidthSubviews.count; - [self.sd_equalWidthSubviews enumerateObjectsUsingBlock:^(UIView * _Nonnull view, NSUInteger idx, BOOL * _Nonnull stop) { + [self.sd_equalWidthSubviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) { view.width = averageWidth; view.fixedWith = @(averageWidth); }]; From 25471d0074bbf2319bc2069416dacb14efa61c31 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 10 Jan 2016 16:03:26 +0800 Subject: [PATCH 038/276] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20spec=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDAutoLayout.podspec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SDAutoLayout.podspec b/SDAutoLayout.podspec index 4104d0f..60f80b8 100644 --- a/SDAutoLayout.podspec +++ b/SDAutoLayout.podspec @@ -1,8 +1,8 @@ Pod::Spec.new do |s| s.name = "SDAutoLayout" - s.version = "1.1" - s.summary = "一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout." + s.version = "1.3" + s.summary = "一行代码搞定自动布局!支持Cell和Tableview高度自适应,Label和ScrollView内容自适应,致力于做最简单易用的AutoLayout库。The most easy way for autoLayout. Based Runtime." s.homepage = "https://github.com/gsdios/SDAutoLayout" # s.screenshots = "https://camo.githubusercontent.com/5d9e879c7006297b3d6e12c20c6cd1e15bf83016/687474703a2f2f7777332e73696e61696d672e636e2f626d6964646c652f39623831343665646777316578346d756b69787236673230396730376c6864742e676966" @@ -14,7 +14,7 @@ Pod::Spec.new do |s| s.platform = :ios s.platform = :ios, "7.0" - s.source = { :git => "https://github.com/gsdios/SDAutoLayout.git", :tag => "1.1"} + s.source = { :git => "https://github.com/gsdios/SDAutoLayout.git", :tag => "1.3"} s.source_files = "SDAutoLayout 测试 Demo/SDAutoLayout/**/*.{h,m}" From 210f4b6208cd612e91fcc15c2a4333a3bd7273d4 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 10 Jan 2016 17:44:40 +0800 Subject: [PATCH 039/276] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f4f00f8..68eee2e 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ 一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. +支持pod: pod 'SDAutoLayout', '~> 1.3' + # ☆新增:cell高度自适应 + label文字自适应☆ ![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif) From 406a1f988de7d9ce268f08f8ff4b7ccc33f460ea Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 10 Jan 2016 20:22:25 +0800 Subject: [PATCH 040/276] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 68eee2e..02b4e0c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ # SDAutoLayout(一行代码搞定自动布局!) # QQ交流群:497140713(已满)519489682(新开) -☆☆ SDAutoLayout 视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ +☆☆ SDAutoLayout 基础版视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ + +☆☆ SDAutoLayout 进阶版视频教程:http://www.letv.com/ptv/vplay/24381390.html ☆☆ 一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. From 696041f1ae42ff4b34b50d77e067bab127f68dfa Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 10 Jan 2016 20:23:33 +0800 Subject: [PATCH 041/276] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 02b4e0c..a509fed 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,10 @@ ☆☆ SDAutoLayout 进阶版视频教程:http://www.letv.com/ptv/vplay/24381390.html ☆☆ + + + + 一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. 支持pod: pod 'SDAutoLayout', '~> 1.3' From a57190eaaccdbf2b0f3eb9b378dd306520b437cb Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 10 Jan 2016 20:24:37 +0800 Subject: [PATCH 042/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a509fed..96adb9f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # SDAutoLayout(一行代码搞定自动布局!) -# QQ交流群:497140713(已满)519489682(新开) +## QQ交流群:497140713(已满)519489682(新开) ☆☆ SDAutoLayout 基础版视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ From f473f8048c417a08569cb32b4e6176ae45ab0efc Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 10 Jan 2016 20:25:20 +0800 Subject: [PATCH 043/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 96adb9f..a0928b6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # SDAutoLayout(一行代码搞定自动布局!) -## QQ交流群:497140713(已满)519489682(新开) +### QQ交流群:497140713(已满)519489682(新开) ☆☆ SDAutoLayout 基础版视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ From 8f89cbda3f3bfe28aae3c8997336f1cc42bfedee Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Wed, 13 Jan 2016 21:26:55 +0800 Subject: [PATCH 044/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=9C=A8=E4=B8=8D?= =?UTF-8?q?=E7=A1=AE=E5=AE=9Abottom=20view=E7=9A=84=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8B=E7=9A=84cell=E9=AB=98=E5=BA=A6=E8=87=AA=E9=80=82?= =?UTF-8?q?=E5=BA=94=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate" | Bin 46770 -> 49884 bytes .../DemoVC/DemoVC7/DemoVC7.m" | 2 +- .../DemoVC/DemoVC7/DemoVC7Cell.m" | 3 +- .../DemoVC/DemoVC9/DemoVC9.m" | 2 +- .../UITableView+SDAutoTableViewCellHeight.m" | 6 +- .../SDAutoLayout/UIView+SDAutoLayout.h" | 10 +++- .../SDAutoLayout/UIView+SDAutoLayout.m" | 53 +++++++++++++----- 7 files changed, 56 insertions(+), 20 deletions(-) diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" index b236e78099a58fb41581370f86c3373be6d8a682..1f0411be5dd679f05320d09dda6cf0a974fd1a6c 100644 GIT binary patch delta 22841 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 RJ?2a{yXdkti~euA`WFpj7P|ld delta 21480 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 diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7.m" index 2ac8157..9756071 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7.m" @@ -74,7 +74,7 @@ - (void)creatModelsWithCount:(NSInteger)count @"然后等比例拉伸到大屏。屏幕宽度返回 320否则在大屏上会显得字大", @"长期处于这种模式下,否则在大屏上会显得字大,内容少这种情况下对界面不会", @"但是建议不要长期处于这种模式下,否则在大屏上会显得字大,内容少,容易遭到用户投诉。", - @"屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任小。" + @"屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任小。但是建议不要长期处于这种模式下,否则在大屏上会显得字大,内容少,容易遭到用户投诉。但是建议不要长期处于这种模式下,否则在大屏上会显得字大,内容少,容易遭到用户投诉。" ]; for (int i = 0; i < count; i++) { diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell.m" index d9fb192..69e00a3 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell.m" @@ -55,7 +55,8 @@ - (void)setup .rightSpaceToView(contentView, margin) .heightIs(60); - [self setupAutoHeightWithBottomView:_imageView bottomMargin:margin]; + // 当你不确定哪个view在自动布局之后会排布在cell最下方的时候可以调用次方法将所有可能在最下方的view都传过去 + [self setupAutoHeightWithBottomViewsArray:@[_titleLabel, _imageView] bottomMargin:margin]; } - (void)setModel:(DemoVC7Model *)model diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.m" index 4d99081..7af4a88 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.m" @@ -150,7 +150,7 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - DemoVC5CellTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kDemoVC9CellId]; + DemoVC9Cell *cell = [tableView dequeueReusableCellWithIdentifier:kDemoVC9CellId]; cell.model = self.modelsArray[indexPath.row]; return cell; diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" index 5f0d781..147f506 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" @@ -113,16 +113,16 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPa } - +#ifdef SDDebugWithAssert /* 如果程序卡在了这里说明你的cell还没有调用“setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法或者你传递的bottomView为nil,请检查并修改。例: //注意:bottomView不能为nil [cell setupAutoHeightWithBottomView:bottomView bottomMargin:bottomMargin]; */ - NSAssert(self.modelCell.sd_bottomView, @">>>>>> 你的cell还没有调用“setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法或者你传递的bottomView为nil,请检查并修改"); - + NSAssert(self.modelCell.sd_bottomViewsArray.count, @">>>>>> 你的cell还没有调用“setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法或者你传递的bottomView为nil,请检查并修改"); +#endif [self.modelCell.contentView layoutSubviews]; NSString *cacheKey = [NSString stringWithFormat:@"%ld%ld", (long)indexPath.section, (long)indexPath.row]; diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" index db8e517..6fd3a45 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" @@ -47,6 +47,11 @@ */ + +// 如果需要用“断言”调试程序请打开此宏 + +//#define SDDebugWithAssert + #import @class SDAutoLayoutModel; @@ -166,12 +171,15 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); /** 设置Cell的高度自适应,也可用于设置普通view内容自适应 */ - (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin; +/** 设置Cell的高度自适应,也可用于设置普通view内容自适应(应用于当你不确定哪个view在自动布局之后会排布在最下方最为bottomView的时候可以调用次方法将所有可能在最下方的view都传过去) */ +- (void)setupAutoHeightWithBottomViewsArray:(NSArray *)bottomViewsArray bottomMargin:(CGFloat)bottomMargin; + /** 主动刷新布局(如果你需要设置完布局代码就获得view的frame请调用此方法) */ - (void)updateLayout; @property (nonatomic) CGFloat autoHeight; -@property (nonatomic) UIView *sd_bottomView; +@property (nonatomic, readonly) NSMutableArray *sd_bottomViewsArray; @property (nonatomic) CGFloat sd_bottomViewBottomMargin; @property (nonatomic) UIView *sd_rightView; diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" index cb1a136..942e57a 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" +++ "b/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" @@ -410,7 +410,15 @@ @implementation UIView (SDAutoHeightWidth) - (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin { - self.sd_bottomView = bottomView; + if (!bottomView) return; + [self.sd_bottomViewsArray addObject:bottomView]; + self.sd_bottomViewBottomMargin = bottomMargin; +} + +- (void)setupAutoHeightWithBottomViewsArray:(NSArray *)bottomViewsArray bottomMargin:(CGFloat)bottomMargin +{ + if (!bottomViewsArray) return; + [self.sd_bottomViewsArray addObjectsFromArray:bottomViewsArray]; self.sd_bottomViewBottomMargin = bottomMargin; } @@ -429,16 +437,15 @@ - (void)setAutoHeight:(CGFloat)autoHeight objc_setAssociatedObject(self, @selector(autoHeight), @(autoHeight), OBJC_ASSOCIATION_RETAIN_NONATOMIC); } -- (UIView *)sd_bottomView +- (NSMutableArray *)sd_bottomViewsArray { + NSMutableArray *array = objc_getAssociatedObject(self, _cmd); + if (!array) { + objc_setAssociatedObject(self, _cmd, [NSMutableArray new], OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } return objc_getAssociatedObject(self, _cmd); } -- (void)setSd_bottomView:(UIView *)sd_bottomView -{ - objc_setAssociatedObject(self, @selector(sd_bottomView), sd_bottomView, OBJC_ASSOCIATION_ASSIGN); -} - - (CGFloat)sd_bottomViewBottomMargin { return [objc_getAssociatedObject(self, _cmd) floatValue]; @@ -621,6 +628,8 @@ - (void)setOwnLayoutModel:(SDAutoLayoutModel *)ownLayoutModel - (SDAutoLayoutModel *)sd_layout { + +#ifdef SDDebugWithAssert /* 卡在这里说明你的要自动布局的view在没有添加到父view的情况下就开始设置布局,你需要这样: 1. UIView *view = [UIView new]; @@ -630,7 +639,7 @@ - (SDAutoLayoutModel *)sd_layout */ NSAssert(self.superview, @">>>>>>>>>在加入父view之后才可以做自动布局设置"); - +#endif SDAutoLayoutModel *model = [self ownLayoutModel]; if (!model) { @@ -682,13 +691,27 @@ - (void)sd_autolayout cell = (UITableViewCell *)cell.superview; } if ([cell isKindOfClass:[UITableViewCell class]]) { - cell.autoHeight = cell.sd_bottomView.bottom + cell.sd_bottomViewBottomMargin; + CGFloat height = 0; + for (UIView *view in cell.sd_bottomViewsArray) { + if (view.sd_bottomViewsArray.count) { + [view layoutSubviews]; + } + height = MAX(height, view.bottom); + } + cell.autoHeight = height + cell.sd_bottomViewBottomMargin; } - } else if (![self isKindOfClass:[UITableViewCell class]] && (self.sd_bottomView || self.sd_rightView)) { + } else if (![self isKindOfClass:[UITableViewCell class]] && (self.sd_bottomViewsArray.count || self.sd_rightView)) { CGFloat contentHeight = 0; CGFloat contentWidth = 0; - if (self.sd_bottomView) { - contentHeight = self.sd_bottomView.bottom + self.sd_bottomViewBottomMargin; + if (self.sd_bottomViewsArray) { + CGFloat height = 0; + for (UIView *view in self.sd_bottomViewsArray) { + if (view.sd_bottomViewsArray.count) { + [view layoutSubviews]; + } + height = MAX(height, view.bottom); + } + contentHeight = height + self.sd_bottomViewBottomMargin; } if (self.sd_rightView) { contentWidth = self.sd_rightView.right + self.sd_rightMargin; @@ -813,7 +836,11 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model } } else if (model.equalRight) { if (!view.fixedWith) { - view.width = model.equalRight.refView.right - view.left; + if (model.equalRight.refView == view.superview) { + view.width = model.equalRight.refView.width - view.left; + } else { + view.width = model.equalRight.refView.right - view.left; + } } view.right = model.equalRight.refView.right; From 41b21e897d926a0bea679d72fbd0c5ad77fc1be9 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Fri, 15 Jan 2016 11:11:41 +0800 Subject: [PATCH 045/276] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate" | Bin 49884 -> 0 bytes .../SDAutoLayoutDemoTests.m" | 0 .../project.pbxproj | 80 +++++++++--------- .../contents.xcworkspacedata | 2 +- ... \346\265\213\350\257\225 Demo.xccheckout" | 0 .../UserInterfaceState.xcuserstate | Bin 0 -> 54599 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 0 ...ut \346\265\213\350\257\225 Demo.xcscheme" | 0 .../xcschemes/xcschememanagement.plist | 0 .../xcdebugger/Breakpoints_v2.xcbkptlist | 0 .../xcschemes/SDAutoLayoutDemo.xcscheme | 36 ++++---- .../xcschemes/xcschememanagement.plist | 2 +- .../Base.lproj/LaunchScreen.xib | 9 +- .../Base.lproj/Main.storyboard | 0 .../DemoVC/DemoVC0/DemoVC0.h | 0 .../DemoVC/DemoVC0/DemoVC0.m | 0 .../DemoVC/DemoVC1/DemoVC1.h | 0 .../DemoVC/DemoVC1/DemoVC1.m | 0 .../DemoVC/DemoVC2/DemoVC2.h | 0 .../DemoVC/DemoVC2/DemoVC2.m | 0 .../DemoVC/DemoVC3/DemoVC3.h | 0 .../DemoVC/DemoVC3/DemoVC3.m | 0 .../DemoVC/DemoVC3/TestCell2.h | 0 .../DemoVC/DemoVC3/TestCell2.m | 0 .../DemoVC/DemoVC4/DemoVC4.h | 0 .../DemoVC/DemoVC4/DemoVC4.m | 0 .../DemoVC/DemoVC5/DemoVC5.h | 0 .../DemoVC/DemoVC5/DemoVC5.m | 0 .../DemoVC/DemoVC5/DemoVC5CellTableViewCell.h | 0 .../DemoVC/DemoVC5/DemoVC5CellTableViewCell.m | 0 .../DemoVC/DemoVC5/DemoVC5Model.h | 0 .../DemoVC/DemoVC5/DemoVC5Model.m | 0 .../DemoVC/DemoVC6/DemoVC6.h | 0 .../DemoVC/DemoVC6/DemoVC6.m | 0 .../DemoVC/DemoVC7/DemoVC7.h | 0 .../DemoVC/DemoVC7/DemoVC7.m | 0 .../DemoVC/DemoVC7/DemoVC7Cell.h | 0 .../DemoVC/DemoVC7/DemoVC7Cell.m | 0 .../DemoVC/DemoVC7/DemoVC7Cell2.h | 0 .../DemoVC/DemoVC7/DemoVC7Cell2.m | 0 .../DemoVC/DemoVC7/DemoVC7Model.h | 0 .../DemoVC/DemoVC7/DemoVC7Model.m | 0 .../DemoVC/DemoVC8/DemoVC8.h | 0 .../DemoVC/DemoVC8/DemoVC8.m | 0 .../DemoVC/DemoVC9/Demo9Model.h | 0 .../DemoVC/DemoVC9/Demo9Model.m | 0 .../DemoVC/DemoVC9/DemoVC9.h | 0 .../DemoVC/DemoVC9/DemoVC9.m | 0 .../DemoVC/DemoVC9/DemoVC9Cell.h | 0 .../DemoVC/DemoVC9/DemoVC9Cell.m | 0 .../DemoVC/DemoVC9/DemoVC9HeaderView.h | 0 .../DemoVC/DemoVC9/DemoVC9HeaderView.m | 0 .../DemoVC9/SDWeiXinPhotoContainerView.h | 0 .../DemoVC9/SDWeiXinPhotoContainerView.m | 0 .../AppIcon.appiconset/Contents.json | 0 .../Images/icon0.jpg | Bin .../Images/icon1.jpg | Bin .../Images/icon2.jpg | Bin .../Images/icon3.jpg | Bin .../Images/icon4.jpg | Bin .../Images/pbg.jpg | Bin .../Images/pic0.jpg | Bin .../Images/pic1.jpg | Bin .../Images/pic2.jpg | Bin .../Images/pic3.jpg | Bin .../Images/pic4.jpg | Bin .../Images/pic5.jpg | Bin .../Images/pic6.jpg | Bin .../Images/pic7.jpg | Bin .../Images/pic8.jpg | Bin .../Images/picon.jpg | Bin .../Info.plist | 2 +- .../Others/AppDelegate.h | 0 .../Others/AppDelegate.m | 0 .../Others/DemoCell.h | 0 .../Others/DemoCell.m | 0 .../Others/DemoTableViewControler.h | 0 .../Others/DemoTableViewControler.m | 0 .../Others/ViewController.h | 0 .../Others/ViewController.m | 0 .../UITableView+SDAutoTableViewCellHeight.h | 0 .../UITableView+SDAutoTableViewCellHeight.m | 0 .../SDAutoLayout/UIView+SDAutoLayout.h | 0 .../SDAutoLayout/UIView+SDAutoLayout.m | 0 .../PageControl/TAAbstractDotView.h | 0 .../PageControl/TAAbstractDotView.m | 0 .../PageControl/TAAnimatedDotView.h | 0 .../PageControl/TAAnimatedDotView.m | 0 .../SDCycleScrollView/PageControl/TADotView.h | 0 .../SDCycleScrollView/PageControl/TADotView.m | 0 .../PageControl/TAPageControl.h | 0 .../PageControl/TAPageControl.m | 0 .../SDCycleScrollView/SDCollectionViewCell.h | 0 .../SDCycleScrollView/SDCollectionViewCell.m | 0 .../SDCycleScrollView/SDCycleScrollView.h | 0 .../SDCycleScrollView/SDCycleScrollView.m | 0 .../SDCycleScrollView/UIView+SDExtension.h | 0 .../SDCycleScrollView/UIView+SDExtension.m | 0 .../SDPhotoBrowser/SDBrowserImageView.h | 0 .../SDPhotoBrowser/SDBrowserImageView.m | 0 .../Vender/SDPhotoBrowser/SDPhotoBrowser.h | 0 .../Vender/SDPhotoBrowser/SDPhotoBrowser.m | 0 .../SDPhotoBrowser/SDPhotoBrowserConfig.h | 0 .../Vender/SDPhotoBrowser/SDWaitingView.h | 0 .../Vender/SDPhotoBrowser/SDWaitingView.m | 0 .../Vender/SDRefeshView/SDRefresh.h | 0 .../Vender/SDRefeshView/SDRefreshFooterView.h | 0 .../Vender/SDRefeshView/SDRefreshFooterView.m | 0 .../Vender/SDRefeshView/SDRefreshHeaderView.h | 0 .../Vender/SDRefeshView/SDRefreshHeaderView.m | 0 .../Vender/SDRefeshView/SDRefreshView.h | 0 .../Vender/SDRefeshView/SDRefreshView.m | 0 .../Vender/SDRefeshView/UIView+SDExtension.h | 0 .../Vender/SDRefeshView/UIView+SDExtension.m | 0 .../SDRefeshView/sdRefeshView_arrow@2x.png | Bin .../SDWebImage/MKAnnotationView+WebCache.h | 0 .../SDWebImage/MKAnnotationView+WebCache.m | 0 .../SDWebImage/NSData+ImageContentType.h | 0 .../SDWebImage/NSData+ImageContentType.m | 0 .../Vender/SDWebImage/SDImageCache.h | 0 .../Vender/SDWebImage/SDImageCache.m | 0 .../Vender/SDWebImage/SDWebImageCompat.h | 0 .../Vender/SDWebImage/SDWebImageCompat.m | 0 .../Vender/SDWebImage/SDWebImageDecoder.h | 0 .../Vender/SDWebImage/SDWebImageDecoder.m | 0 .../Vender/SDWebImage/SDWebImageDownloader.h | 0 .../Vender/SDWebImage/SDWebImageDownloader.m | 0 .../SDWebImageDownloaderOperation.h | 0 .../SDWebImageDownloaderOperation.m | 0 .../Vender/SDWebImage/SDWebImageManager.h | 0 .../Vender/SDWebImage/SDWebImageManager.m | 0 .../Vender/SDWebImage/SDWebImageOperation.h | 0 .../Vender/SDWebImage/SDWebImagePrefetcher.h | 0 .../Vender/SDWebImage/SDWebImagePrefetcher.m | 0 .../Vender/SDWebImage/UIButton+WebCache.h | 0 .../Vender/SDWebImage/UIButton+WebCache.m | 0 .../Vender/SDWebImage/UIImage+GIF.h | 0 .../Vender/SDWebImage/UIImage+GIF.m | 0 .../Vender/SDWebImage/UIImage+MultiFormat.h | 0 .../Vender/SDWebImage/UIImage+MultiFormat.m | 0 .../Vender/SDWebImage/UIImage+WebP.h | 0 .../Vender/SDWebImage/UIImage+WebP.m | 0 .../UIImageView+HighlightedWebCache.h | 0 .../UIImageView+HighlightedWebCache.m | 0 .../Vender/SDWebImage/UIImageView+WebCache.h | 0 .../Vender/SDWebImage/UIImageView+WebCache.m | 0 .../SDWebImage/UIView+WebCacheOperation.h | 0 .../SDWebImage/UIView+WebCacheOperation.m | 0 .../main.m" => SDAutoLayoutDemo/main.m | 0 .../Info.plist | 0 SDAutoLayoutDemoTests/SDAutoLayoutDemoTests.m | 40 +++++++++ 151 files changed, 108 insertions(+), 63 deletions(-) delete mode 100644 "SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" rename "SDAutoLayout \346\265\213\350\257\225 DemoTests/SDAutoLayout____DemoTests.m" => "SDAutoLayout \346\265\213\350\257\225 DemoTests/SDAutoLayoutDemoTests.m" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" => SDAutoLayoutDemo.xcodeproj/project.pbxproj (95%) rename "SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata" => SDAutoLayoutDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata (51%) rename "SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcshareddata/SDAutoLayout \346\265\213\350\257\225 Demo.xccheckout" => "SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcshareddata/SDAutoLayout \346\265\213\350\257\225 Demo.xccheckout" (100%) create mode 100644 SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate rename "SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/aier.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist" => SDAutoLayoutDemo.xcodeproj/xcuserdata/aier.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/aier.xcuserdatad/xcschemes/SDAutoLayout \346\265\213\350\257\225 Demo.xcscheme" => "SDAutoLayoutDemo.xcodeproj/xcuserdata/aier.xcuserdatad/xcschemes/SDAutoLayout \346\265\213\350\257\225 Demo.xcscheme" (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/aier.xcuserdatad/xcschemes/xcschememanagement.plist" => SDAutoLayoutDemo.xcodeproj/xcuserdata/aier.xcuserdatad/xcschemes/xcschememanagement.plist (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist" => SDAutoLayoutDemo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcschemes/SDAutoLayout \346\265\213\350\257\225 Demo.xcscheme" => SDAutoLayoutDemo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcschemes/SDAutoLayoutDemo.xcscheme (70%) rename "SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcschemes/xcschememanagement.plist" => SDAutoLayoutDemo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcschemes/xcschememanagement.plist (91%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Base.lproj/LaunchScreen.xib" => SDAutoLayoutDemo/Base.lproj/LaunchScreen.xib (85%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Base.lproj/Main.storyboard" => SDAutoLayoutDemo/Base.lproj/Main.storyboard (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.h" => SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.m" => SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC1/DemoVC1.h" => SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC1/DemoVC1.m" => SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC2/DemoVC2.h" => SDAutoLayoutDemo/DemoVC/DemoVC2/DemoVC2.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC2/DemoVC2.m" => SDAutoLayoutDemo/DemoVC/DemoVC2/DemoVC2.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/DemoVC3.h" => SDAutoLayoutDemo/DemoVC/DemoVC3/DemoVC3.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/DemoVC3.m" => SDAutoLayoutDemo/DemoVC/DemoVC3/DemoVC3.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/TestCell2.h" => SDAutoLayoutDemo/DemoVC/DemoVC3/TestCell2.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/TestCell2.m" => SDAutoLayoutDemo/DemoVC/DemoVC3/TestCell2.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC4/DemoVC4.h" => SDAutoLayoutDemo/DemoVC/DemoVC4/DemoVC4.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC4/DemoVC4.m" => SDAutoLayoutDemo/DemoVC/DemoVC4/DemoVC4.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5.h" => SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5.m" => SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.h" => SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m" => SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5Model.h" => SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5Model.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5Model.m" => SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5Model.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC6/DemoVC6.h" => SDAutoLayoutDemo/DemoVC/DemoVC6/DemoVC6.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC6/DemoVC6.m" => SDAutoLayoutDemo/DemoVC/DemoVC6/DemoVC6.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7.h" => SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7.m" => SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell.h" => SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Cell.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell.m" => SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Cell.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell2.h" => SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Cell2.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell2.m" => SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Cell2.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Model.h" => SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Model.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Model.m" => SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Model.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC8/DemoVC8.h" => SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC8/DemoVC8.m" => SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/Demo9Model.h" => SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/Demo9Model.m" => SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.h" => SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.m" => SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9Cell.h" => SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9Cell.m" => SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9HeaderView.h" => SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9HeaderView.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9HeaderView.m" => SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9HeaderView.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.h" => SDAutoLayoutDemo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.m" => SDAutoLayoutDemo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images.xcassets/AppIcon.appiconset/Contents.json" => SDAutoLayoutDemo/Images.xcassets/AppIcon.appiconset/Contents.json (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images/icon0.jpg" => SDAutoLayoutDemo/Images/icon0.jpg (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images/icon1.jpg" => SDAutoLayoutDemo/Images/icon1.jpg (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images/icon2.jpg" => SDAutoLayoutDemo/Images/icon2.jpg (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images/icon3.jpg" => SDAutoLayoutDemo/Images/icon3.jpg (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images/icon4.jpg" => SDAutoLayoutDemo/Images/icon4.jpg (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pbg.jpg" => SDAutoLayoutDemo/Images/pbg.jpg (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic0.jpg" => SDAutoLayoutDemo/Images/pic0.jpg (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic1.jpg" => SDAutoLayoutDemo/Images/pic1.jpg (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic2.jpg" => SDAutoLayoutDemo/Images/pic2.jpg (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic3.jpg" => SDAutoLayoutDemo/Images/pic3.jpg (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic4.jpg" => SDAutoLayoutDemo/Images/pic4.jpg (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic5.jpg" => SDAutoLayoutDemo/Images/pic5.jpg (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic6.jpg" => SDAutoLayoutDemo/Images/pic6.jpg (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic7.jpg" => SDAutoLayoutDemo/Images/pic7.jpg (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic8.jpg" => SDAutoLayoutDemo/Images/pic8.jpg (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Images/picon.jpg" => SDAutoLayoutDemo/Images/picon.jpg (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Info.plist" => SDAutoLayoutDemo/Info.plist (96%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Others/AppDelegate.h" => SDAutoLayoutDemo/Others/AppDelegate.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Others/AppDelegate.m" => SDAutoLayoutDemo/Others/AppDelegate.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoCell.h" => SDAutoLayoutDemo/Others/DemoCell.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoCell.m" => SDAutoLayoutDemo/Others/DemoCell.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.h" => SDAutoLayoutDemo/Others/DemoTableViewControler.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.m" => SDAutoLayoutDemo/Others/DemoTableViewControler.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Others/ViewController.h" => SDAutoLayoutDemo/Others/ViewController.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Others/ViewController.m" => SDAutoLayoutDemo/Others/ViewController.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" => SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" => SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" => SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" => SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.h" => SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.m" => SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.h" => SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.m" => SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TADotView.h" => SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TADotView.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TADotView.m" => SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TADotView.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAPageControl.h" => SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAPageControl.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAPageControl.m" => SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAPageControl.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCollectionViewCell.h" => SDAutoLayoutDemo/Vender/SDCycleScrollView/SDCollectionViewCell.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCollectionViewCell.m" => SDAutoLayoutDemo/Vender/SDCycleScrollView/SDCollectionViewCell.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCycleScrollView.h" => SDAutoLayoutDemo/Vender/SDCycleScrollView/SDCycleScrollView.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCycleScrollView.m" => SDAutoLayoutDemo/Vender/SDCycleScrollView/SDCycleScrollView.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/UIView+SDExtension.h" => SDAutoLayoutDemo/Vender/SDCycleScrollView/UIView+SDExtension.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/UIView+SDExtension.m" => SDAutoLayoutDemo/Vender/SDCycleScrollView/UIView+SDExtension.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDBrowserImageView.h" => SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDBrowserImageView.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDBrowserImageView.m" => SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDBrowserImageView.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowser.h" => SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDPhotoBrowser.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowser.m" => SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDPhotoBrowser.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowserConfig.h" => SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDPhotoBrowserConfig.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDWaitingView.h" => SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDWaitingView.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDWaitingView.m" => SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDWaitingView.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefresh.h" => SDAutoLayoutDemo/Vender/SDRefeshView/SDRefresh.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshFooterView.h" => SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshFooterView.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshFooterView.m" => SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshFooterView.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshHeaderView.h" => SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshHeaderView.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshHeaderView.m" => SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshHeaderView.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshView.h" => SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshView.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshView.m" => SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshView.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/UIView+SDExtension.h" => SDAutoLayoutDemo/Vender/SDRefeshView/UIView+SDExtension.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/UIView+SDExtension.m" => SDAutoLayoutDemo/Vender/SDRefeshView/UIView+SDExtension.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/sdRefeshView_arrow@2x.png" => SDAutoLayoutDemo/Vender/SDRefeshView/sdRefeshView_arrow@2x.png (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/MKAnnotationView+WebCache.h" => SDAutoLayoutDemo/Vender/SDWebImage/MKAnnotationView+WebCache.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/MKAnnotationView+WebCache.m" => SDAutoLayoutDemo/Vender/SDWebImage/MKAnnotationView+WebCache.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/NSData+ImageContentType.h" => SDAutoLayoutDemo/Vender/SDWebImage/NSData+ImageContentType.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/NSData+ImageContentType.m" => SDAutoLayoutDemo/Vender/SDWebImage/NSData+ImageContentType.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDImageCache.h" => SDAutoLayoutDemo/Vender/SDWebImage/SDImageCache.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDImageCache.m" => SDAutoLayoutDemo/Vender/SDWebImage/SDImageCache.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageCompat.h" => SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageCompat.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageCompat.m" => SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageCompat.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDecoder.h" => SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDecoder.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDecoder.m" => SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDecoder.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloader.h" => SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDownloader.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloader.m" => SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDownloader.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloaderOperation.h" => SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDownloaderOperation.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloaderOperation.m" => SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDownloaderOperation.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageManager.h" => SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageManager.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageManager.m" => SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageManager.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageOperation.h" => SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageOperation.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImagePrefetcher.h" => SDAutoLayoutDemo/Vender/SDWebImage/SDWebImagePrefetcher.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImagePrefetcher.m" => SDAutoLayoutDemo/Vender/SDWebImage/SDWebImagePrefetcher.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIButton+WebCache.h" => SDAutoLayoutDemo/Vender/SDWebImage/UIButton+WebCache.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIButton+WebCache.m" => SDAutoLayoutDemo/Vender/SDWebImage/UIButton+WebCache.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+GIF.h" => SDAutoLayoutDemo/Vender/SDWebImage/UIImage+GIF.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+GIF.m" => SDAutoLayoutDemo/Vender/SDWebImage/UIImage+GIF.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+MultiFormat.h" => SDAutoLayoutDemo/Vender/SDWebImage/UIImage+MultiFormat.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+MultiFormat.m" => SDAutoLayoutDemo/Vender/SDWebImage/UIImage+MultiFormat.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+WebP.h" => SDAutoLayoutDemo/Vender/SDWebImage/UIImage+WebP.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+WebP.m" => SDAutoLayoutDemo/Vender/SDWebImage/UIImage+WebP.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+HighlightedWebCache.h" => SDAutoLayoutDemo/Vender/SDWebImage/UIImageView+HighlightedWebCache.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+HighlightedWebCache.m" => SDAutoLayoutDemo/Vender/SDWebImage/UIImageView+HighlightedWebCache.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+WebCache.h" => SDAutoLayoutDemo/Vender/SDWebImage/UIImageView+WebCache.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+WebCache.m" => SDAutoLayoutDemo/Vender/SDWebImage/UIImageView+WebCache.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIView+WebCacheOperation.h" => SDAutoLayoutDemo/Vender/SDWebImage/UIView+WebCacheOperation.h (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIView+WebCacheOperation.m" => SDAutoLayoutDemo/Vender/SDWebImage/UIView+WebCacheOperation.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 Demo/main.m" => SDAutoLayoutDemo/main.m (100%) rename "SDAutoLayout \346\265\213\350\257\225 DemoTests/Info.plist" => SDAutoLayoutDemoTests/Info.plist (100%) create mode 100644 SDAutoLayoutDemoTests/SDAutoLayoutDemoTests.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" "b/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate" deleted file mode 100644 index 1f0411be5dd679f05320d09dda6cf0a974fd1a6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49884 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 H_3r-x6k;Wf diff --git "a/SDAutoLayout \346\265\213\350\257\225 DemoTests/SDAutoLayout____DemoTests.m" "b/SDAutoLayout \346\265\213\350\257\225 DemoTests/SDAutoLayoutDemoTests.m" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 DemoTests/SDAutoLayout____DemoTests.m" rename to "SDAutoLayout \346\265\213\350\257\225 DemoTests/SDAutoLayoutDemoTests.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" b/SDAutoLayoutDemo.xcodeproj/project.pbxproj similarity index 95% rename from "SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" rename to SDAutoLayoutDemo.xcodeproj/project.pbxproj index 0a11813..68b0491 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.pbxproj" +++ b/SDAutoLayoutDemo.xcodeproj/project.pbxproj @@ -72,7 +72,7 @@ 487D3EC01BCB9EC700A66173 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 487D3EBE1BCB9EC700A66173 /* Main.storyboard */; }; 487D3EC21BCB9EC700A66173 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 487D3EC11BCB9EC700A66173 /* Images.xcassets */; }; 487D3EC51BCB9EC700A66173 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 487D3EC31BCB9EC700A66173 /* LaunchScreen.xib */; }; - 487D3ED11BCB9EC700A66173 /* SDAutoLayout____DemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3ED01BCB9EC700A66173 /* SDAutoLayout____DemoTests.m */; }; + 487D3ED11BCB9EC700A66173 /* SDAutoLayoutDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3ED01BCB9EC700A66173 /* SDAutoLayoutDemoTests.m */; }; 48DBCD1A1C01E045002EC476 /* icon0.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD101C01E045002EC476 /* icon0.jpg */; }; 48DBCD1B1C01E045002EC476 /* icon1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD111C01E045002EC476 /* icon1.jpg */; }; 48DBCD1C1C01E045002EC476 /* icon2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD121C01E045002EC476 /* icon2.jpg */; }; @@ -216,15 +216,15 @@ 4853034F1C3F97AA004361A7 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 485303531C3F97E6004361A7 /* DemoCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoCell.h; sourceTree = ""; }; 485303541C3F97E6004361A7 /* DemoCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoCell.m; sourceTree = ""; }; - 487D3EB11BCB9EC700A66173 /* SDAutoLayout 测试 Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SDAutoLayout 测试 Demo.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 487D3EB11BCB9EC700A66173 /* SDAutoLayoutDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SDAutoLayoutDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 487D3EB51BCB9EC700A66173 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 487D3EB61BCB9EC700A66173 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 487D3EBF1BCB9EC700A66173 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 487D3EC11BCB9EC700A66173 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 487D3EC41BCB9EC700A66173 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; - 487D3ECA1BCB9EC700A66173 /* SDAutoLayout 测试 DemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SDAutoLayout 测试 DemoTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 487D3ECA1BCB9EC700A66173 /* SDAutoLayoutDemo.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SDAutoLayoutDemo.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 487D3ECF1BCB9EC700A66173 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 487D3ED01BCB9EC700A66173 /* SDAutoLayout____DemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "SDAutoLayout____DemoTests.m"; sourceTree = ""; }; + 487D3ED01BCB9EC700A66173 /* SDAutoLayoutDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDAutoLayoutDemoTests.m; sourceTree = ""; }; 48DBCD101C01E045002EC476 /* icon0.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = icon0.jpg; sourceTree = ""; }; 48DBCD111C01E045002EC476 /* icon1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = icon1.jpg; sourceTree = ""; }; 48DBCD121C01E045002EC476 /* icon2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = icon2.jpg; sourceTree = ""; }; @@ -515,8 +515,8 @@ 487D3EA81BCB9EC700A66173 = { isa = PBXGroup; children = ( - 487D3EB31BCB9EC700A66173 /* SDAutoLayout 测试 Demo */, - 487D3ECD1BCB9EC700A66173 /* SDAutoLayout 测试 DemoTests */, + 487D3EB31BCB9EC700A66173 /* SDAutoLayoutDemo */, + 487D3ECD1BCB9EC700A66173 /* SDAutoLayoutDemoTests */, 487D3EB21BCB9EC700A66173 /* Products */, ); sourceTree = ""; @@ -524,13 +524,13 @@ 487D3EB21BCB9EC700A66173 /* Products */ = { isa = PBXGroup; children = ( - 487D3EB11BCB9EC700A66173 /* SDAutoLayout 测试 Demo.app */, - 487D3ECA1BCB9EC700A66173 /* SDAutoLayout 测试 DemoTests.xctest */, + 487D3EB11BCB9EC700A66173 /* SDAutoLayoutDemo.app */, + 487D3ECA1BCB9EC700A66173 /* SDAutoLayoutDemo.xctest */, ); name = Products; sourceTree = ""; }; - 487D3EB31BCB9EC700A66173 /* SDAutoLayout 测试 Demo */ = { + 487D3EB31BCB9EC700A66173 /* SDAutoLayoutDemo */ = { isa = PBXGroup; children = ( 99A6976F1C423B0D004EA699 /* SDAutoLayout */, @@ -542,7 +542,7 @@ 487D3EC31BCB9EC700A66173 /* LaunchScreen.xib */, 487D3EB41BCB9EC700A66173 /* Supporting Files */, ); - path = "SDAutoLayout 测试 Demo"; + path = SDAutoLayoutDemo; sourceTree = ""; }; 487D3EB41BCB9EC700A66173 /* Supporting Files */ = { @@ -555,13 +555,13 @@ name = "Supporting Files"; sourceTree = ""; }; - 487D3ECD1BCB9EC700A66173 /* SDAutoLayout 测试 DemoTests */ = { + 487D3ECD1BCB9EC700A66173 /* SDAutoLayoutDemoTests */ = { isa = PBXGroup; children = ( - 487D3ED01BCB9EC700A66173 /* SDAutoLayout____DemoTests.m */, + 487D3ED01BCB9EC700A66173 /* SDAutoLayoutDemoTests.m */, 487D3ECE1BCB9EC700A66173 /* Supporting Files */, ); - path = "SDAutoLayout 测试 DemoTests"; + path = SDAutoLayoutDemoTests; sourceTree = ""; }; 487D3ECE1BCB9EC700A66173 /* Supporting Files */ = { @@ -609,9 +609,9 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 487D3EB01BCB9EC700A66173 /* SDAutoLayout 测试 Demo */ = { + 487D3EB01BCB9EC700A66173 /* SDAutoLayoutDemo */ = { isa = PBXNativeTarget; - buildConfigurationList = 487D3ED41BCB9EC700A66173 /* Build configuration list for PBXNativeTarget "SDAutoLayout 测试 Demo" */; + buildConfigurationList = 487D3ED41BCB9EC700A66173 /* Build configuration list for PBXNativeTarget "SDAutoLayoutDemo" */; buildPhases = ( 487D3EAD1BCB9EC700A66173 /* Sources */, 487D3EAE1BCB9EC700A66173 /* Frameworks */, @@ -621,14 +621,14 @@ ); dependencies = ( ); - name = "SDAutoLayout 测试 Demo"; + name = SDAutoLayoutDemo; productName = "SDAutoLayout 测试 Demo"; - productReference = 487D3EB11BCB9EC700A66173 /* SDAutoLayout 测试 Demo.app */; + productReference = 487D3EB11BCB9EC700A66173 /* SDAutoLayoutDemo.app */; productType = "com.apple.product-type.application"; }; - 487D3EC91BCB9EC700A66173 /* SDAutoLayout 测试 DemoTests */ = { + 487D3EC91BCB9EC700A66173 /* SDAutoLayoutDemoTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 487D3ED71BCB9EC700A66173 /* Build configuration list for PBXNativeTarget "SDAutoLayout 测试 DemoTests" */; + buildConfigurationList = 487D3ED71BCB9EC700A66173 /* Build configuration list for PBXNativeTarget "SDAutoLayoutDemoTests" */; buildPhases = ( 487D3EC61BCB9EC700A66173 /* Sources */, 487D3EC71BCB9EC700A66173 /* Frameworks */, @@ -639,9 +639,9 @@ dependencies = ( 487D3ECC1BCB9EC700A66173 /* PBXTargetDependency */, ); - name = "SDAutoLayout 测试 DemoTests"; + name = SDAutoLayoutDemoTests; productName = "SDAutoLayout 测试 DemoTests"; - productReference = 487D3ECA1BCB9EC700A66173 /* SDAutoLayout 测试 DemoTests.xctest */; + productReference = 487D3ECA1BCB9EC700A66173 /* SDAutoLayoutDemo.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ @@ -663,7 +663,7 @@ }; }; }; - buildConfigurationList = 487D3EAC1BCB9EC700A66173 /* Build configuration list for PBXProject "SDAutoLayout 测试 Demo" */; + buildConfigurationList = 487D3EAC1BCB9EC700A66173 /* Build configuration list for PBXProject "SDAutoLayoutDemo" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -676,8 +676,8 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 487D3EB01BCB9EC700A66173 /* SDAutoLayout 测试 Demo */, - 487D3EC91BCB9EC700A66173 /* SDAutoLayout 测试 DemoTests */, + 487D3EB01BCB9EC700A66173 /* SDAutoLayoutDemo */, + 487D3EC91BCB9EC700A66173 /* SDAutoLayoutDemoTests */, ); }; /* End PBXProject section */ @@ -788,7 +788,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 487D3ED11BCB9EC700A66173 /* SDAutoLayout____DemoTests.m in Sources */, + 487D3ED11BCB9EC700A66173 /* SDAutoLayoutDemoTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -797,7 +797,7 @@ /* Begin PBXTargetDependency section */ 487D3ECC1BCB9EC700A66173 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 487D3EB01BCB9EC700A66173 /* SDAutoLayout 测试 Demo */; + target = 487D3EB01BCB9EC700A66173 /* SDAutoLayoutDemo */; targetProxy = 487D3ECB1BCB9EC700A66173 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -909,10 +909,11 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; - INFOPLIST_FILE = "SDAutoLayout 测试 Demo/Info.plist"; + INFOPLIST_FILE = SDAutoLayoutDemo/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 6.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_BUNDLE_IDENTIFIER = com.gsdios.test; + PRODUCT_NAME = SDAutoLayoutDemo; }; name = Debug; }; @@ -921,10 +922,11 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; - INFOPLIST_FILE = "SDAutoLayout 测试 Demo/Info.plist"; + INFOPLIST_FILE = SDAutoLayoutDemo/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 6.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_BUNDLE_IDENTIFIER = com.gsdios.test; + PRODUCT_NAME = SDAutoLayoutDemo; }; name = Release; }; @@ -940,10 +942,10 @@ "DEBUG=1", "$(inherited)", ); - INFOPLIST_FILE = "SDAutoLayout 测试 DemoTests/Info.plist"; + INFOPLIST_FILE = SDAutoLayoutDemoTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SDAutoLayout 测试 Demo.app/SDAutoLayout 测试 Demo"; + PRODUCT_NAME = SDAutoLayoutDemo; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SDAutoLayoutDemo.app/SDAutoLayoutDemo"; }; name = Debug; }; @@ -955,17 +957,17 @@ "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); - INFOPLIST_FILE = "SDAutoLayout 测试 DemoTests/Info.plist"; + INFOPLIST_FILE = SDAutoLayoutDemoTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SDAutoLayout 测试 Demo.app/SDAutoLayout 测试 Demo"; + PRODUCT_NAME = SDAutoLayoutDemo; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SDAutoLayoutDemo.app/SDAutoLayoutDemo"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 487D3EAC1BCB9EC700A66173 /* Build configuration list for PBXProject "SDAutoLayout 测试 Demo" */ = { + 487D3EAC1BCB9EC700A66173 /* Build configuration list for PBXProject "SDAutoLayoutDemo" */ = { isa = XCConfigurationList; buildConfigurations = ( 487D3ED21BCB9EC700A66173 /* Debug */, @@ -974,7 +976,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 487D3ED41BCB9EC700A66173 /* Build configuration list for PBXNativeTarget "SDAutoLayout 测试 Demo" */ = { + 487D3ED41BCB9EC700A66173 /* Build configuration list for PBXNativeTarget "SDAutoLayoutDemo" */ = { isa = XCConfigurationList; buildConfigurations = ( 487D3ED51BCB9EC700A66173 /* Debug */, @@ -983,7 +985,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 487D3ED71BCB9EC700A66173 /* Build configuration list for PBXNativeTarget "SDAutoLayout 测试 DemoTests" */ = { + 487D3ED71BCB9EC700A66173 /* Build configuration list for PBXNativeTarget "SDAutoLayoutDemoTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 487D3ED81BCB9EC700A66173 /* Debug */, diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata" b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 51% rename from "SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata" rename to SDAutoLayoutDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 83e88dc..495c374 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata" +++ b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:/Users/gsd/Desktop/开源/SDAutoLayout/SDAutoLayoutDemo.xcodeproj"> diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcshareddata/SDAutoLayout \346\265\213\350\257\225 Demo.xccheckout" "b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcshareddata/SDAutoLayout \346\265\213\350\257\225 Demo.xccheckout" similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/project.xcworkspace/xcshareddata/SDAutoLayout \346\265\213\350\257\225 Demo.xccheckout" rename to "SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcshareddata/SDAutoLayout \346\265\213\350\257\225 Demo.xccheckout" diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..96c8d53f6bed027c197bf9ba95fb04ff5a770e10 GIT binary patch literal 54599 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 + BuildableName = "SDAutoLayoutDemo.app" + BlueprintName = "SDAutoLayoutDemo" + ReferencedContainer = "container:SDAutoLayoutDemo.xcodeproj"> + BuildableName = "SDAutoLayoutDemo.xctest" + BlueprintName = "SDAutoLayoutDemoTests" + ReferencedContainer = "container:SDAutoLayoutDemo.xcodeproj"> @@ -47,9 +47,9 @@ + BuildableName = "SDAutoLayoutDemo.xctest" + BlueprintName = "SDAutoLayoutDemoTests" + ReferencedContainer = "container:SDAutoLayoutDemo.xcodeproj"> @@ -57,9 +57,9 @@ + BuildableName = "SDAutoLayoutDemo.app" + BlueprintName = "SDAutoLayoutDemo" + ReferencedContainer = "container:SDAutoLayoutDemo.xcodeproj"> @@ -80,9 +80,9 @@ + BuildableName = "SDAutoLayoutDemo.app" + BlueprintName = "SDAutoLayoutDemo" + ReferencedContainer = "container:SDAutoLayoutDemo.xcodeproj"> @@ -99,9 +99,9 @@ + BuildableName = "SDAutoLayoutDemo.app" + BlueprintName = "SDAutoLayoutDemo" + ReferencedContainer = "container:SDAutoLayoutDemo.xcodeproj"> diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcschemes/xcschememanagement.plist" b/SDAutoLayoutDemo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 91% rename from "SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcschemes/xcschememanagement.plist" rename to SDAutoLayoutDemo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcschemes/xcschememanagement.plist index 85e0a4c..eebe53d 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcschemes/xcschememanagement.plist" +++ b/SDAutoLayoutDemo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcschemes/xcschememanagement.plist @@ -4,7 +4,7 @@ SchemeUserState - SDAutoLayout 测试 Demo.xcscheme + SDAutoLayoutDemo.xcscheme orderHint 0 diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Base.lproj/LaunchScreen.xib" b/SDAutoLayoutDemo/Base.lproj/LaunchScreen.xib similarity index 85% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Base.lproj/LaunchScreen.xib" rename to SDAutoLayoutDemo/Base.lproj/LaunchScreen.xib index a1d5ca1..9083789 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/Base.lproj/LaunchScreen.xib" +++ b/SDAutoLayoutDemo/Base.lproj/LaunchScreen.xib @@ -1,7 +1,7 @@ - + - + @@ -13,17 +13,20 @@ - + diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Base.lproj/Main.storyboard" b/SDAutoLayoutDemo/Base.lproj/Main.storyboard similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Base.lproj/Main.storyboard" rename to SDAutoLayoutDemo/Base.lproj/Main.storyboard diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.h" b/SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.m" b/SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC0/DemoVC0.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC1/DemoVC1.h" b/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC1/DemoVC1.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC1/DemoVC1.m" b/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC1/DemoVC1.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC2/DemoVC2.h" b/SDAutoLayoutDemo/DemoVC/DemoVC2/DemoVC2.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC2/DemoVC2.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC2/DemoVC2.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC2/DemoVC2.m" b/SDAutoLayoutDemo/DemoVC/DemoVC2/DemoVC2.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC2/DemoVC2.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC2/DemoVC2.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/DemoVC3.h" b/SDAutoLayoutDemo/DemoVC/DemoVC3/DemoVC3.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/DemoVC3.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC3/DemoVC3.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/DemoVC3.m" b/SDAutoLayoutDemo/DemoVC/DemoVC3/DemoVC3.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/DemoVC3.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC3/DemoVC3.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/TestCell2.h" b/SDAutoLayoutDemo/DemoVC/DemoVC3/TestCell2.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/TestCell2.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC3/TestCell2.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/TestCell2.m" b/SDAutoLayoutDemo/DemoVC/DemoVC3/TestCell2.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC3/TestCell2.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC3/TestCell2.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC4/DemoVC4.h" b/SDAutoLayoutDemo/DemoVC/DemoVC4/DemoVC4.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC4/DemoVC4.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC4/DemoVC4.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC4/DemoVC4.m" b/SDAutoLayoutDemo/DemoVC/DemoVC4/DemoVC4.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC4/DemoVC4.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC4/DemoVC4.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5.h" b/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5.m" b/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.h" b/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m" b/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5Model.h" b/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5Model.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5Model.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5Model.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5Model.m" b/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5Model.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC5/DemoVC5Model.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5Model.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC6/DemoVC6.h" b/SDAutoLayoutDemo/DemoVC/DemoVC6/DemoVC6.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC6/DemoVC6.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC6/DemoVC6.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC6/DemoVC6.m" b/SDAutoLayoutDemo/DemoVC/DemoVC6/DemoVC6.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC6/DemoVC6.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC6/DemoVC6.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7.h" b/SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7.m" b/SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell.h" b/SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Cell.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Cell.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell.m" b/SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Cell.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Cell.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell2.h" b/SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Cell2.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell2.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Cell2.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell2.m" b/SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Cell2.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Cell2.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Cell2.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Model.h" b/SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Model.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Model.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Model.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Model.m" b/SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Model.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC7/DemoVC7Model.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7Model.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC8/DemoVC8.h" b/SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC8/DemoVC8.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC8/DemoVC8.m" b/SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC8/DemoVC8.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/Demo9Model.h" b/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/Demo9Model.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/Demo9Model.m" b/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/Demo9Model.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.h" b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.m" b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9Cell.h" b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9Cell.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9Cell.m" b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9Cell.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9HeaderView.h" b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9HeaderView.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9HeaderView.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9HeaderView.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9HeaderView.m" b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9HeaderView.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/DemoVC9HeaderView.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9HeaderView.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.h" b/SDAutoLayoutDemo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.h" rename to SDAutoLayoutDemo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.m" b/SDAutoLayoutDemo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.m" rename to SDAutoLayoutDemo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images.xcassets/AppIcon.appiconset/Contents.json" b/SDAutoLayoutDemo/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images.xcassets/AppIcon.appiconset/Contents.json" rename to SDAutoLayoutDemo/Images.xcassets/AppIcon.appiconset/Contents.json diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/icon0.jpg" b/SDAutoLayoutDemo/Images/icon0.jpg similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images/icon0.jpg" rename to SDAutoLayoutDemo/Images/icon0.jpg diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/icon1.jpg" b/SDAutoLayoutDemo/Images/icon1.jpg similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images/icon1.jpg" rename to SDAutoLayoutDemo/Images/icon1.jpg diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/icon2.jpg" b/SDAutoLayoutDemo/Images/icon2.jpg similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images/icon2.jpg" rename to SDAutoLayoutDemo/Images/icon2.jpg diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/icon3.jpg" b/SDAutoLayoutDemo/Images/icon3.jpg similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images/icon3.jpg" rename to SDAutoLayoutDemo/Images/icon3.jpg diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/icon4.jpg" b/SDAutoLayoutDemo/Images/icon4.jpg similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images/icon4.jpg" rename to SDAutoLayoutDemo/Images/icon4.jpg diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pbg.jpg" b/SDAutoLayoutDemo/Images/pbg.jpg similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pbg.jpg" rename to SDAutoLayoutDemo/Images/pbg.jpg diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic0.jpg" b/SDAutoLayoutDemo/Images/pic0.jpg similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic0.jpg" rename to SDAutoLayoutDemo/Images/pic0.jpg diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic1.jpg" b/SDAutoLayoutDemo/Images/pic1.jpg similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic1.jpg" rename to SDAutoLayoutDemo/Images/pic1.jpg diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic2.jpg" b/SDAutoLayoutDemo/Images/pic2.jpg similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic2.jpg" rename to SDAutoLayoutDemo/Images/pic2.jpg diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic3.jpg" b/SDAutoLayoutDemo/Images/pic3.jpg similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic3.jpg" rename to SDAutoLayoutDemo/Images/pic3.jpg diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic4.jpg" b/SDAutoLayoutDemo/Images/pic4.jpg similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic4.jpg" rename to SDAutoLayoutDemo/Images/pic4.jpg diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic5.jpg" b/SDAutoLayoutDemo/Images/pic5.jpg similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic5.jpg" rename to SDAutoLayoutDemo/Images/pic5.jpg diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic6.jpg" b/SDAutoLayoutDemo/Images/pic6.jpg similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic6.jpg" rename to SDAutoLayoutDemo/Images/pic6.jpg diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic7.jpg" b/SDAutoLayoutDemo/Images/pic7.jpg similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic7.jpg" rename to SDAutoLayoutDemo/Images/pic7.jpg diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic8.jpg" b/SDAutoLayoutDemo/Images/pic8.jpg similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images/pic8.jpg" rename to SDAutoLayoutDemo/Images/pic8.jpg diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Images/picon.jpg" b/SDAutoLayoutDemo/Images/picon.jpg similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Images/picon.jpg" rename to SDAutoLayoutDemo/Images/picon.jpg diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Info.plist" b/SDAutoLayoutDemo/Info.plist similarity index 96% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Info.plist" rename to SDAutoLayoutDemo/Info.plist index f140639..40c6215 100644 --- "a/SDAutoLayout \346\265\213\350\257\225 Demo/Info.plist" +++ b/SDAutoLayoutDemo/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - --.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Others/AppDelegate.h" b/SDAutoLayoutDemo/Others/AppDelegate.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Others/AppDelegate.h" rename to SDAutoLayoutDemo/Others/AppDelegate.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Others/AppDelegate.m" b/SDAutoLayoutDemo/Others/AppDelegate.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Others/AppDelegate.m" rename to SDAutoLayoutDemo/Others/AppDelegate.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoCell.h" b/SDAutoLayoutDemo/Others/DemoCell.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoCell.h" rename to SDAutoLayoutDemo/Others/DemoCell.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoCell.m" b/SDAutoLayoutDemo/Others/DemoCell.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoCell.m" rename to SDAutoLayoutDemo/Others/DemoCell.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.h" b/SDAutoLayoutDemo/Others/DemoTableViewControler.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.h" rename to SDAutoLayoutDemo/Others/DemoTableViewControler.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.m" b/SDAutoLayoutDemo/Others/DemoTableViewControler.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Others/DemoTableViewControler.m" rename to SDAutoLayoutDemo/Others/DemoTableViewControler.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Others/ViewController.h" b/SDAutoLayoutDemo/Others/ViewController.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Others/ViewController.h" rename to SDAutoLayoutDemo/Others/ViewController.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Others/ViewController.m" b/SDAutoLayoutDemo/Others/ViewController.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Others/ViewController.m" rename to SDAutoLayoutDemo/Others/ViewController.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h" rename to SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m" rename to SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.h" rename to SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/SDAutoLayout/UIView+SDAutoLayout.m" rename to SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.h" b/SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.h" rename to SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.m" b/SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.m" rename to SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAAbstractDotView.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.h" b/SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.h" rename to SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.m" b/SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.m" rename to SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAAnimatedDotView.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TADotView.h" b/SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TADotView.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TADotView.h" rename to SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TADotView.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TADotView.m" b/SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TADotView.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TADotView.m" rename to SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TADotView.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAPageControl.h" b/SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAPageControl.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAPageControl.h" rename to SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAPageControl.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAPageControl.m" b/SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAPageControl.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/PageControl/TAPageControl.m" rename to SDAutoLayoutDemo/Vender/SDCycleScrollView/PageControl/TAPageControl.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCollectionViewCell.h" b/SDAutoLayoutDemo/Vender/SDCycleScrollView/SDCollectionViewCell.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCollectionViewCell.h" rename to SDAutoLayoutDemo/Vender/SDCycleScrollView/SDCollectionViewCell.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCollectionViewCell.m" b/SDAutoLayoutDemo/Vender/SDCycleScrollView/SDCollectionViewCell.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCollectionViewCell.m" rename to SDAutoLayoutDemo/Vender/SDCycleScrollView/SDCollectionViewCell.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCycleScrollView.h" b/SDAutoLayoutDemo/Vender/SDCycleScrollView/SDCycleScrollView.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCycleScrollView.h" rename to SDAutoLayoutDemo/Vender/SDCycleScrollView/SDCycleScrollView.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCycleScrollView.m" b/SDAutoLayoutDemo/Vender/SDCycleScrollView/SDCycleScrollView.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/SDCycleScrollView.m" rename to SDAutoLayoutDemo/Vender/SDCycleScrollView/SDCycleScrollView.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/UIView+SDExtension.h" b/SDAutoLayoutDemo/Vender/SDCycleScrollView/UIView+SDExtension.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/UIView+SDExtension.h" rename to SDAutoLayoutDemo/Vender/SDCycleScrollView/UIView+SDExtension.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/UIView+SDExtension.m" b/SDAutoLayoutDemo/Vender/SDCycleScrollView/UIView+SDExtension.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDCycleScrollView/UIView+SDExtension.m" rename to SDAutoLayoutDemo/Vender/SDCycleScrollView/UIView+SDExtension.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDBrowserImageView.h" b/SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDBrowserImageView.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDBrowserImageView.h" rename to SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDBrowserImageView.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDBrowserImageView.m" b/SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDBrowserImageView.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDBrowserImageView.m" rename to SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDBrowserImageView.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowser.h" b/SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDPhotoBrowser.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowser.h" rename to SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDPhotoBrowser.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowser.m" b/SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDPhotoBrowser.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowser.m" rename to SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDPhotoBrowser.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowserConfig.h" b/SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDPhotoBrowserConfig.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDPhotoBrowserConfig.h" rename to SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDPhotoBrowserConfig.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDWaitingView.h" b/SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDWaitingView.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDWaitingView.h" rename to SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDWaitingView.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDWaitingView.m" b/SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDWaitingView.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDPhotoBrowser/SDWaitingView.m" rename to SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDWaitingView.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefresh.h" b/SDAutoLayoutDemo/Vender/SDRefeshView/SDRefresh.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefresh.h" rename to SDAutoLayoutDemo/Vender/SDRefeshView/SDRefresh.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshFooterView.h" b/SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshFooterView.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshFooterView.h" rename to SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshFooterView.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshFooterView.m" b/SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshFooterView.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshFooterView.m" rename to SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshFooterView.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshHeaderView.h" b/SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshHeaderView.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshHeaderView.h" rename to SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshHeaderView.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshHeaderView.m" b/SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshHeaderView.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshHeaderView.m" rename to SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshHeaderView.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshView.h" b/SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshView.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshView.h" rename to SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshView.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshView.m" b/SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshView.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/SDRefreshView.m" rename to SDAutoLayoutDemo/Vender/SDRefeshView/SDRefreshView.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/UIView+SDExtension.h" b/SDAutoLayoutDemo/Vender/SDRefeshView/UIView+SDExtension.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/UIView+SDExtension.h" rename to SDAutoLayoutDemo/Vender/SDRefeshView/UIView+SDExtension.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/UIView+SDExtension.m" b/SDAutoLayoutDemo/Vender/SDRefeshView/UIView+SDExtension.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/UIView+SDExtension.m" rename to SDAutoLayoutDemo/Vender/SDRefeshView/UIView+SDExtension.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/sdRefeshView_arrow@2x.png" b/SDAutoLayoutDemo/Vender/SDRefeshView/sdRefeshView_arrow@2x.png similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDRefeshView/sdRefeshView_arrow@2x.png" rename to SDAutoLayoutDemo/Vender/SDRefeshView/sdRefeshView_arrow@2x.png diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/MKAnnotationView+WebCache.h" b/SDAutoLayoutDemo/Vender/SDWebImage/MKAnnotationView+WebCache.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/MKAnnotationView+WebCache.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/MKAnnotationView+WebCache.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/MKAnnotationView+WebCache.m" b/SDAutoLayoutDemo/Vender/SDWebImage/MKAnnotationView+WebCache.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/MKAnnotationView+WebCache.m" rename to SDAutoLayoutDemo/Vender/SDWebImage/MKAnnotationView+WebCache.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/NSData+ImageContentType.h" b/SDAutoLayoutDemo/Vender/SDWebImage/NSData+ImageContentType.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/NSData+ImageContentType.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/NSData+ImageContentType.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/NSData+ImageContentType.m" b/SDAutoLayoutDemo/Vender/SDWebImage/NSData+ImageContentType.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/NSData+ImageContentType.m" rename to SDAutoLayoutDemo/Vender/SDWebImage/NSData+ImageContentType.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDImageCache.h" b/SDAutoLayoutDemo/Vender/SDWebImage/SDImageCache.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDImageCache.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/SDImageCache.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDImageCache.m" b/SDAutoLayoutDemo/Vender/SDWebImage/SDImageCache.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDImageCache.m" rename to SDAutoLayoutDemo/Vender/SDWebImage/SDImageCache.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageCompat.h" b/SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageCompat.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageCompat.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageCompat.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageCompat.m" b/SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageCompat.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageCompat.m" rename to SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageCompat.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDecoder.h" b/SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDecoder.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDecoder.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDecoder.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDecoder.m" b/SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDecoder.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDecoder.m" rename to SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDecoder.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloader.h" b/SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDownloader.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloader.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDownloader.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloader.m" b/SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDownloader.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloader.m" rename to SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDownloader.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloaderOperation.h" b/SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDownloaderOperation.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloaderOperation.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDownloaderOperation.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloaderOperation.m" b/SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDownloaderOperation.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageDownloaderOperation.m" rename to SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageDownloaderOperation.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageManager.h" b/SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageManager.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageManager.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageManager.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageManager.m" b/SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageManager.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageManager.m" rename to SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageManager.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageOperation.h" b/SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageOperation.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImageOperation.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/SDWebImageOperation.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImagePrefetcher.h" b/SDAutoLayoutDemo/Vender/SDWebImage/SDWebImagePrefetcher.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImagePrefetcher.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/SDWebImagePrefetcher.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImagePrefetcher.m" b/SDAutoLayoutDemo/Vender/SDWebImage/SDWebImagePrefetcher.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/SDWebImagePrefetcher.m" rename to SDAutoLayoutDemo/Vender/SDWebImage/SDWebImagePrefetcher.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIButton+WebCache.h" b/SDAutoLayoutDemo/Vender/SDWebImage/UIButton+WebCache.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIButton+WebCache.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/UIButton+WebCache.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIButton+WebCache.m" b/SDAutoLayoutDemo/Vender/SDWebImage/UIButton+WebCache.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIButton+WebCache.m" rename to SDAutoLayoutDemo/Vender/SDWebImage/UIButton+WebCache.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+GIF.h" b/SDAutoLayoutDemo/Vender/SDWebImage/UIImage+GIF.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+GIF.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/UIImage+GIF.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+GIF.m" b/SDAutoLayoutDemo/Vender/SDWebImage/UIImage+GIF.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+GIF.m" rename to SDAutoLayoutDemo/Vender/SDWebImage/UIImage+GIF.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+MultiFormat.h" b/SDAutoLayoutDemo/Vender/SDWebImage/UIImage+MultiFormat.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+MultiFormat.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/UIImage+MultiFormat.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+MultiFormat.m" b/SDAutoLayoutDemo/Vender/SDWebImage/UIImage+MultiFormat.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+MultiFormat.m" rename to SDAutoLayoutDemo/Vender/SDWebImage/UIImage+MultiFormat.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+WebP.h" b/SDAutoLayoutDemo/Vender/SDWebImage/UIImage+WebP.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+WebP.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/UIImage+WebP.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+WebP.m" b/SDAutoLayoutDemo/Vender/SDWebImage/UIImage+WebP.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImage+WebP.m" rename to SDAutoLayoutDemo/Vender/SDWebImage/UIImage+WebP.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+HighlightedWebCache.h" b/SDAutoLayoutDemo/Vender/SDWebImage/UIImageView+HighlightedWebCache.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+HighlightedWebCache.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/UIImageView+HighlightedWebCache.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+HighlightedWebCache.m" b/SDAutoLayoutDemo/Vender/SDWebImage/UIImageView+HighlightedWebCache.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+HighlightedWebCache.m" rename to SDAutoLayoutDemo/Vender/SDWebImage/UIImageView+HighlightedWebCache.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+WebCache.h" b/SDAutoLayoutDemo/Vender/SDWebImage/UIImageView+WebCache.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+WebCache.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/UIImageView+WebCache.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+WebCache.m" b/SDAutoLayoutDemo/Vender/SDWebImage/UIImageView+WebCache.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIImageView+WebCache.m" rename to SDAutoLayoutDemo/Vender/SDWebImage/UIImageView+WebCache.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIView+WebCacheOperation.h" b/SDAutoLayoutDemo/Vender/SDWebImage/UIView+WebCacheOperation.h similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIView+WebCacheOperation.h" rename to SDAutoLayoutDemo/Vender/SDWebImage/UIView+WebCacheOperation.h diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIView+WebCacheOperation.m" b/SDAutoLayoutDemo/Vender/SDWebImage/UIView+WebCacheOperation.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/Vender/SDWebImage/UIView+WebCacheOperation.m" rename to SDAutoLayoutDemo/Vender/SDWebImage/UIView+WebCacheOperation.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 Demo/main.m" b/SDAutoLayoutDemo/main.m similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 Demo/main.m" rename to SDAutoLayoutDemo/main.m diff --git "a/SDAutoLayout \346\265\213\350\257\225 DemoTests/Info.plist" b/SDAutoLayoutDemoTests/Info.plist similarity index 100% rename from "SDAutoLayout \346\265\213\350\257\225 DemoTests/Info.plist" rename to SDAutoLayoutDemoTests/Info.plist diff --git a/SDAutoLayoutDemoTests/SDAutoLayoutDemoTests.m b/SDAutoLayoutDemoTests/SDAutoLayoutDemoTests.m new file mode 100644 index 0000000..c0ea95a --- /dev/null +++ b/SDAutoLayoutDemoTests/SDAutoLayoutDemoTests.m @@ -0,0 +1,40 @@ +// +// SDAutoLayout____DemoTests.m +// SDAutoLayout 测试 DemoTests +// +// Created by gsd on 15/10/12. +// Copyright (c) 2015年 gsd. All rights reserved. +// + +#import +#import + +@interface SDAutoLayout____DemoTests : XCTestCase + +@end + +@implementation SDAutoLayout____DemoTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + XCTAssert(YES, @"Pass"); +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end From f132185be506c95e0df589ccc56de6b4632cc747 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Fri, 15 Jan 2016 11:12:17 +0800 Subject: [PATCH 046/276] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SDAutoLayoutDemoTests.m" | 40 ------------------- 1 file changed, 40 deletions(-) delete mode 100644 "SDAutoLayout \346\265\213\350\257\225 DemoTests/SDAutoLayoutDemoTests.m" diff --git "a/SDAutoLayout \346\265\213\350\257\225 DemoTests/SDAutoLayoutDemoTests.m" "b/SDAutoLayout \346\265\213\350\257\225 DemoTests/SDAutoLayoutDemoTests.m" deleted file mode 100644 index c0ea95a..0000000 --- "a/SDAutoLayout \346\265\213\350\257\225 DemoTests/SDAutoLayoutDemoTests.m" +++ /dev/null @@ -1,40 +0,0 @@ -// -// SDAutoLayout____DemoTests.m -// SDAutoLayout 测试 DemoTests -// -// Created by gsd on 15/10/12. -// Copyright (c) 2015年 gsd. All rights reserved. -// - -#import -#import - -@interface SDAutoLayout____DemoTests : XCTestCase - -@end - -@implementation SDAutoLayout____DemoTests - -- (void)setUp { - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown { - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample { - // This is an example of a functional test case. - XCTAssert(YES, @"Pass"); -} - -- (void)testPerformanceExample { - // This is an example of a performance test case. - [self measureBlock:^{ - // Put the code you want to measure the time of here. - }]; -} - -@end From 53110a31a7c26e47ac32fdde67d40e2964e05faf Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Fri, 15 Jan 2016 20:46:46 +0800 Subject: [PATCH 047/276] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E4=BA=86=20=E5=AE=BD=E7=AD=89=E4=BA=8E=E9=AB=98=E4=B9=8B?= =?UTF-8?q?=E5=90=8Ebottom=E8=AE=BE=E7=BD=AE=E5=A4=B1=E6=95=88=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 54599 -> 55882 bytes .../SDAutoLayout/UIView+SDAutoLayout.h | 6 ++++-- .../SDAutoLayout/UIView+SDAutoLayout.m | 12 ++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 96c8d53f6bed027c197bf9ba95fb04ff5a770e10..6936e1d10fcb88b70e4bf15cfe642f9d5beb46f6 100644 GIT binary patch delta 21329 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 diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h index 6fd3a45..4746cd1 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h @@ -267,16 +267,18 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @interface UIView (SDAutoLayout) -- (NSMutableArray *)autoLayoutModelsArray; - /** 开始自动布局 */ - (SDAutoLayoutModel *)sd_layout; /** 清空之前的自动布局设置,重新开始自动布局 */ - (SDAutoLayoutModel *)sd_resetLayout; +- (NSMutableArray *)autoLayoutModelsArray; + - (void)addAutoLayoutModel:(SDAutoLayoutModel *)model; +@property (nonatomic) SDAutoLayoutModel *ownLayoutModel; + @property (nonatomic, strong) NSNumber *fixedWith; @property (nonatomic, strong) NSNumber *fixedHeight; diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m index 942e57a..8cb9af5 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m @@ -1061,8 +1061,14 @@ - (CGFloat)width { } - (void)setWidth:(CGFloat)width { + if (self.ownLayoutModel.widthEqualHeight) { + if (width != self.height) return; + } CGRect frame = self.frame; frame.size.width = width; + if (self.ownLayoutModel.heightEqualWidth) { + frame.size.height = width; + } self.frame = frame; } @@ -1071,8 +1077,14 @@ - (CGFloat)height { } - (void)setHeight:(CGFloat)height { + if (self.ownLayoutModel.heightEqualWidth) { + if (height != self.width) return; + } CGRect frame = self.frame; frame.size.height = height; + if (self.ownLayoutModel.widthEqualHeight) { + frame.size.width = height; + } self.frame = frame; } From 8ac1f35a081c40599402d560b4bb0075d1a29207 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 18 Jan 2016 18:06:19 +0800 Subject: [PATCH 048/276] =?UTF-8?q?=E7=AE=80=E5=8C=96=E6=99=AE=E9=80=9A?= =?UTF-8?q?=E7=89=88=E6=96=B9=E6=B3=95=E4=B8=BA=E4=B8=80=E6=AD=A5=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 55882 -> 61414 bytes SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.m | 10 ++++-- SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m | 2 ++ SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m | 4 +-- .../Others/DemoTableViewControler.m | 1 + .../UITableView+SDAutoTableViewCellHeight.h | 30 +++++++++++++----- .../UITableView+SDAutoTableViewCellHeight.m | 26 +++++++++++---- 7 files changed, 54 insertions(+), 19 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 6936e1d10fcb88b70e4bf15cfe642f9d5beb46f6..1204fbd874dd87c40576c8879a7573a655ccfa88 100644 GIT binary patch literal 61414 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 literal 55882 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

s3U~G4GWrce16cw>f-Der0Gto#Ea9C!qe)?DnT9 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 lZ6muzAS3V* 1) { currentClass = [DemoVC7Cell2 class]; } - + /* + 普通版也可实现一步设置搞定高度自适应,不再推荐使用此套方法,具体参看“UITableView+SDAutoTableViewCellHeight”头文件 return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:currentClass]; + */ + + return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:currentClass contentViewWidth:[UIScreen mainScreen].bounds.size.width]; } @end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m b/SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m index 0bb50f3..d5ff264 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m @@ -132,6 +132,8 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPa { // >>>>>>>>>>>>>>>>>>>>> * cell自适应设置 * >>>>>>>>>>>>>>>>>>>>>>>> // 只需一行代码即可实现单cell以及多cell的tableview高度自适应 + + // 此升级版方法适用于cell的model有多个的情况下,性能比普通版稍微差一些,不建议在数据量大的tableview中使用,推荐使用“cellHeightForIndexPath:model:keyPath:cellClass:contentViewWidth:”方法同样是一步设置即可完成 return [self cellHeightForIndexPath:indexPath cellContentViewWidth:[UIScreen mainScreen].bounds.size.width]; } diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m index 7af4a88..753f557 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m @@ -159,8 +159,8 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // >>>>>>>>>>>>>>>>>>>>> * cell自适应 * >>>>>>>>>>>>>>>>>>>>>>>> - CGFloat h = [self cellHeightForIndexPath:indexPath cellContentViewWidth:[UIScreen mainScreen].bounds.size.width]; - return h; + id model = self.modelsArray[indexPath.row]; + return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:[DemoVC9Cell class] contentViewWidth:[UIScreen mainScreen].bounds.size.width]; } @end diff --git a/SDAutoLayoutDemo/Others/DemoTableViewControler.m b/SDAutoLayoutDemo/Others/DemoTableViewControler.m index 22a2e4c..864fa96 100644 --- a/SDAutoLayoutDemo/Others/DemoTableViewControler.m +++ b/SDAutoLayoutDemo/Others/DemoTableViewControler.m @@ -84,6 +84,7 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + // 此升级版方法适用于cell的model有多个的情况下,性能比普通版稍微差一些,不建议在数据量大的tableview中使用,推荐使用“cellHeightForIndexPath:model:keyPath:cellClass:contentViewWidth:”方法同样是一步设置即可完成 return [self cellHeightForIndexPath:indexPath cellContentViewWidth:[UIScreen mainScreen].bounds.size.width]; } diff --git a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h index c76bbde..780dd48 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h +++ b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h @@ -49,24 +49,40 @@ @property (nonatomic, strong) SDCellAutoHeightManager *cellAutoHeightManager; +// ☆☆☆☆☆☆☆☆☆☆☆【推荐使用方法(性能高+易用性好),详见demo7和demo9】☆☆☆☆☆☆☆☆☆☆☆ + +/** + * 返回计算出的cell高度(普通优化版方法,同样只需一步设置即可完成) + * model : cell的数据模型实例 + * keyPath : cell的数据模型属性的属性名字符串(即kvc原理中的key) + * cellClass : 当前的indexPath对应的cell的class + * contentViewWidth : cell的contentView的宽度 + */ +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth; + + +// ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ + + + // >>>>>>>>>>>>>> 单个cell情景下调用以下方法(详细用法见demo5) >>>>>>>>>>>>>> /** 开启高度自适应,建议在tableview的数据源方法“- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section”中调用此方法,详细用法见demo5 */ -- (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth; +- (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth NS_DEPRECATED(10_0, 10_4, 6_0, 6_0); /** 返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key)*/ -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath; +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath NS_DEPRECATED(10_0, 10_4, 6_0, 6_0); // >>>>>>>>>>>>>> 多cell情景下调用以下方法(详细用法见demo7) >>>>>>>>>>>>>>>>> /** cellClassArray 为所有cell的类组成的数组,详细用法见demo7 */ -- (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth; +- (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth NS_DEPRECATED(10_0, 10_4, 6_0, 6_0); /** 返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key) */ -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass; +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass NS_DEPRECATED(10_0, 10_4, 6_0, 6_0); @end @@ -78,18 +94,16 @@ @interface UITableViewController (SDTableViewControllerAutoCellHeight) -/** (UITableViewController方法)升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell */ +/** (UITableViewController方法)升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell,性能比普通版稍微差一些,不建议在数据量大的tableview中使用 */ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width; @end -/* 升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell */ - @interface NSObject (SDAnyObjectAutoCellHeight) -/** (NSObject方法)升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell */ +/** (NSObject方法)升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell,性能比普通版稍微差一些,不建议在数据量大的tableview中使用 */ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width tableView:(UITableView *)tableView; @end diff --git a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m index 147f506..8b97e9a 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m @@ -34,6 +34,7 @@ @implementation SDCellAutoHeightManager - (instancetype)init { if (self = [super init]) { + _modelTableview = [UITableView new]; _cacheDictionary = [NSMutableDictionary new]; } return self; @@ -149,9 +150,9 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPa - (void)setContentViewWidth:(CGFloat)contentViewWidth { - if (_contentViewWidth != contentViewWidth) { - [self clearHeightCache]; - } + if (_contentViewWidth == contentViewWidth) return; + + [self clearHeightCache]; _contentViewWidth = contentViewWidth; self.modelCell.contentView.width = self.contentViewWidth; @@ -201,7 +202,7 @@ - (void)sd_moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath */ -- (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth +- (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth NS_DEPRECATED(10_0, 10_4, 6_0, 6_0) { if (!self.cellAutoHeightManager) { self.cellAutoHeightManager = [SDCellAutoHeightManager managerWithCellClass:cellClass]; @@ -209,7 +210,7 @@ - (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFl self.cellAutoHeightManager.contentViewWidth = contentViewWidth; } -- (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth +- (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth NS_DEPRECATED(10_0, 10_4, 6_0, 6_0) { if (!self.cellAutoHeightManager) { self.cellAutoHeightManager = [[SDCellAutoHeightManager alloc] initWithCellClasses:cellClassArray]; @@ -217,13 +218,24 @@ - (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentView self.cellAutoHeightManager.contentViewWidth = contentViewWidth; } -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath NS_DEPRECATED(10_0, 10_4, 6_0, 6_0) { return [self.cellAutoHeightManager cellHeightForIndexPath:indexPath model:model keyPath:keyPath]; } -- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass NS_DEPRECATED(10_0, 10_4, 6_0, 6_0) +{ + return [self.cellAutoHeightManager cellHeightForIndexPath:indexPath model:model keyPath:keyPath cellClass:cellClass]; +} + +- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth { + if (!self.cellAutoHeightManager) { + self.cellAutoHeightManager = [[SDCellAutoHeightManager alloc] init]; + } + + self.cellAutoHeightManager.contentViewWidth = contentViewWidth; + return [self.cellAutoHeightManager cellHeightForIndexPath:indexPath model:model keyPath:keyPath cellClass:cellClass]; } From 8f7ecf5347ce524a0a5da5de27c5d9cabc186b62 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Wed, 20 Jan 2016 20:18:20 +0800 Subject: [PATCH 049/276] =?UTF-8?q?=E6=8E=A8=E8=8D=90=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E2=80=9C=E6=99=AE=E9=80=9A=E7=AE=80=E5=8C=96=E7=89=88=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E2=80=9D=EF=BC=9B=E9=80=82=E9=85=8Dios7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDAutoLayoutDemo.xcodeproj/project.pbxproj | 3 ++- .../UserInterfaceState.xcuserstate | Bin 61414 -> 62827 bytes SDAutoLayoutDemo/DemoVC/DemoVC3/DemoVC3.m | 21 +++++++++++----- SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.m | 23 +++++++++++++----- SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.m | 17 ++++++++++++- SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m | 16 +++++++++++- SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m | 16 +++++++++++- .../UITableView+SDAutoTableViewCellHeight.h | 12 ++++----- .../SDAutoLayout/UIView+SDAutoLayout.m | 3 +++ 9 files changed, 89 insertions(+), 22 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.pbxproj b/SDAutoLayoutDemo.xcodeproj/project.pbxproj index 68b0491..5fafae8 100644 --- a/SDAutoLayoutDemo.xcodeproj/project.pbxproj +++ b/SDAutoLayoutDemo.xcodeproj/project.pbxproj @@ -655,7 +655,6 @@ TargetAttributes = { 487D3EB01BCB9EC700A66173 = { CreatedOnToolsVersion = 6.4; - DevelopmentTeam = V4Q779DR3D; }; 487D3EC91BCB9EC700A66173 = { CreatedOnToolsVersion = 6.4; @@ -914,6 +913,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.gsdios.test; PRODUCT_NAME = SDAutoLayoutDemo; + PROVISIONING_PROFILE = "93045a84-2289-43e6-8406-321145a49475"; }; name = Debug; }; @@ -927,6 +927,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.gsdios.test; PRODUCT_NAME = SDAutoLayoutDemo; + PROVISIONING_PROFILE = "93045a84-2289-43e6-8406-321145a49475"; }; name = Release; }; diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 1204fbd874dd87c40576c8879a7573a655ccfa88..9a4f1faedea179f3d66567e7b717c960eaaa1c20 100644 GIT binary patch literal 62827 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 diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC3/DemoVC3.m b/SDAutoLayoutDemo/DemoVC/DemoVC3/DemoVC3.m index a8fb3e3..35b4cc0 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC3/DemoVC3.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC3/DemoVC3.m @@ -64,11 +64,6 @@ - (void)viewDidLoad - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - // >>>>>>>>>>>>>>>>>>>>> * cell自适应步骤1 * >>>>>>>>>>>>>>>>>>>>>>>> - - [self.tableView startAutoCellHeightWithCellClass:[TestCell2 class] contentViewWidth:[UIScreen mainScreen].bounds.size.width]; - - return _rowCount; } @@ -91,7 +86,21 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPa // >>>>>>>>>>>>>>>>>>>>> * cell自适应步骤2 * >>>>>>>>>>>>>>>>>>>>>>>> /* model 为模型实例, keyPath 为 model 的属性名,通过 kvc 统一赋值接口 */ - return [self.tableView cellHeightForIndexPath:indexPath model:str keyPath:@"text"]; + return [self.tableView cellHeightForIndexPath:indexPath model:str keyPath:@"text" cellClass:[TestCell2 class] contentViewWidth:[self cellContentViewWith]]; +} + + + + +- (CGFloat)cellContentViewWith +{ + CGFloat width = [UIScreen mainScreen].bounds.size.width; + + // 适配ios7 + if ([UIApplication sharedApplication].statusBarOrientation != UIInterfaceOrientationPortrait && [[UIDevice currentDevice].systemVersion floatValue] < 8) { + width = [UIScreen mainScreen].bounds.size.height; + } + return width; } @end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.m b/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.m index 6d391c0..a0b2101 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.m @@ -175,11 +175,6 @@ - (void)creatModelsWithCount:(NSInteger)count - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - // >>>>>>>>>>>>>>>>>>>>> * cell自适应步骤1 * >>>>>>>>>>>>>>>>>>>>>>>> - - [self.tableView startAutoCellHeightWithCellClass:[DemoVC5CellTableViewCell class] contentViewWidth:[UIScreen mainScreen].bounds.size.width]; - - return self.modelsArray.count; } @@ -198,7 +193,23 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPa { // >>>>>>>>>>>>>>>>>>>>> * cell自适应步骤2 * >>>>>>>>>>>>>>>>>>>>>>>> /* model 为模型实例, keyPath 为 model 的属性名,通过 kvc 统一赋值接口 */ - return [self.tableView cellHeightForIndexPath:indexPath model:self.modelsArray[indexPath.row] keyPath:@"model"]; + + return [self.tableView cellHeightForIndexPath:indexPath model:self.modelsArray[indexPath.row] keyPath:@"model" cellClass:[DemoVC5CellTableViewCell class] contentViewWidth:[self cellContentViewWith]]; +} + + + + + +- (CGFloat)cellContentViewWith +{ + CGFloat width = [UIScreen mainScreen].bounds.size.width; + + // 适配ios7 + if ([UIApplication sharedApplication].statusBarOrientation != UIInterfaceOrientationPortrait && [[UIDevice currentDevice].systemVersion floatValue] < 8) { + width = [UIScreen mainScreen].bounds.size.height; + } + return width; } diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.m b/SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.m index 5d312d7..bc5051c 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.m @@ -148,7 +148,22 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPa return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:currentClass]; */ - return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:currentClass contentViewWidth:[UIScreen mainScreen].bounds.size.width]; + // 推荐使用此普通简化版方法(一步设置搞定高度自适应,性能好,易用性好) + return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:currentClass contentViewWidth:[self cellContentViewWith]]; +} + + + + +- (CGFloat)cellContentViewWith +{ + CGFloat width = [UIScreen mainScreen].bounds.size.width; + + // 适配ios7 + if ([UIApplication sharedApplication].statusBarOrientation != UIInterfaceOrientationPortrait && [[UIDevice currentDevice].systemVersion floatValue] < 8) { + width = [UIScreen mainScreen].bounds.size.height; + } + return width; } @end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m b/SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m index d5ff264..82bef7c 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m @@ -134,7 +134,21 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPa // 只需一行代码即可实现单cell以及多cell的tableview高度自适应 // 此升级版方法适用于cell的model有多个的情况下,性能比普通版稍微差一些,不建议在数据量大的tableview中使用,推荐使用“cellHeightForIndexPath:model:keyPath:cellClass:contentViewWidth:”方法同样是一步设置即可完成 - return [self cellHeightForIndexPath:indexPath cellContentViewWidth:[UIScreen mainScreen].bounds.size.width]; + return [self cellHeightForIndexPath:indexPath cellContentViewWidth:[self cellContentViewWith]]; +} + + + + +- (CGFloat)cellContentViewWith +{ + CGFloat width = [UIScreen mainScreen].bounds.size.width; + + // 适配ios7 + if ([UIApplication sharedApplication].statusBarOrientation != UIInterfaceOrientationPortrait && [[UIDevice currentDevice].systemVersion floatValue] < 8) { + width = [UIScreen mainScreen].bounds.size.height; + } + return width; } diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m index 753f557..5eaa148 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m @@ -160,7 +160,21 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPa { // >>>>>>>>>>>>>>>>>>>>> * cell自适应 * >>>>>>>>>>>>>>>>>>>>>>>> id model = self.modelsArray[indexPath.row]; - return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:[DemoVC9Cell class] contentViewWidth:[UIScreen mainScreen].bounds.size.width]; + return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:[DemoVC9Cell class] contentViewWidth:[self cellContentViewWith]]; +} + + + + +- (CGFloat)cellContentViewWith +{ + CGFloat width = [UIScreen mainScreen].bounds.size.width; + + // 适配ios7 + if ([UIApplication sharedApplication].statusBarOrientation != UIInterfaceOrientationPortrait && [[UIDevice currentDevice].systemVersion floatValue] < 8) { + width = [UIScreen mainScreen].bounds.size.height; + } + return width; } @end diff --git a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h index 780dd48..6af712d 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h +++ b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h @@ -52,7 +52,7 @@ // ☆☆☆☆☆☆☆☆☆☆☆【推荐使用方法(性能高+易用性好),详见demo7和demo9】☆☆☆☆☆☆☆☆☆☆☆ /** - * 返回计算出的cell高度(普通优化版方法,同样只需一步设置即可完成) + * 返回计算出的cell高度(普通简化版方法,同样只需一步设置即可完成) * model : cell的数据模型实例 * keyPath : cell的数据模型属性的属性名字符串(即kvc原理中的key) * cellClass : 当前的indexPath对应的cell的class @@ -66,22 +66,22 @@ -// >>>>>>>>>>>>>> 单个cell情景下调用以下方法(详细用法见demo5) >>>>>>>>>>>>>> +// >>>>>>>>>>>>>> 单个cell情景下调用以下方法 >>>>>>>>>>>>>> -/** 开启高度自适应,建议在tableview的数据源方法“- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section”中调用此方法,详细用法见demo5 */ +/** (不再推荐使用此方法!)开启高度自适应,建议在tableview的数据源方法“- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section”中调用此方法*/ - (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth NS_DEPRECATED(10_0, 10_4, 6_0, 6_0); -/** 返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key)*/ +/** (不再推荐使用此方法!)返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key)*/ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath NS_DEPRECATED(10_0, 10_4, 6_0, 6_0); // >>>>>>>>>>>>>> 多cell情景下调用以下方法(详细用法见demo7) >>>>>>>>>>>>>>>>> -/** cellClassArray 为所有cell的类组成的数组,详细用法见demo7 */ +/** (不再推荐使用此方法!)cellClassArray 为所有cell的类组成的数组,详细用法见demo7 */ - (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth NS_DEPRECATED(10_0, 10_4, 6_0, 6_0); -/** 返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key) */ +/** (不再推荐使用此方法!)返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key) */ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass NS_DEPRECATED(10_0, 10_4, 6_0, 6_0); @end diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m index 8cb9af5..19593ae 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m @@ -731,6 +731,9 @@ - (void)sd_autolayout scrollView.contentSize = contentSize; } else { // 如果这里出现循环调用情况请把demo发送到gsdios@126.com,谢谢配合。 + if (floorf(contentHeight) == floorf(self.height)) { + return; + } self.height = contentHeight; } } From 48c30d3812864f26e89ae559a7293fd676ad6e42 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Wed, 20 Jan 2016 21:35:58 +0800 Subject: [PATCH 050/276] =?UTF-8?q?=E6=8E=A8=E8=8D=90=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E2=80=9C=E6=99=AE=E9=80=9A=E7=AE=80=E5=8C=96=E7=89=88=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E2=80=9D=EF=BC=9B=E9=80=82=E9=85=8Dios7;=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0SDAutoLayout=E5=BA=93=E4=BD=BF=E7=94=A8=E8=80=85?= =?UTF-8?q?=E8=B4=A1=E7=8C=AE=E7=9A=84=E7=BD=91=E6=98=93=E6=96=B0=E9=97=BB?= =?UTF-8?q?demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDAutoLayoutDemo.xcodeproj/project.pbxproj | 508 ++++++ .../UserInterfaceState.xcuserstate | Bin 62827 -> 63640 bytes SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.h | 13 + SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m | 206 +++ .../AFNetworking/AFHTTPRequestOperation.h | 70 + .../AFNetworking/AFHTTPRequestOperation.m | 206 +++ .../AFHTTPRequestOperationManager.h | 326 ++++ .../AFHTTPRequestOperationManager.m | 284 ++++ .../AFNetworking/AFHTTPSessionManager.h | 253 +++ .../AFNetworking/AFHTTPSessionManager.m | 323 ++++ .../AFNetworkReachabilityManager.h | 207 +++ .../AFNetworkReachabilityManager.m | 262 ++++ .../AFNetworking/AFNetworking/AFNetworking.h | 46 + .../AFNetworking/AFSecurityPolicy.h | 142 ++ .../AFNetworking/AFSecurityPolicy.m | 311 ++++ .../AFNetworking/AFURLConnectionOperation.h | 344 ++++ .../AFNetworking/AFURLConnectionOperation.m | 792 ++++++++++ .../AFNetworking/AFURLRequestSerialization.h | 473 ++++++ .../AFNetworking/AFURLRequestSerialization.m | 1397 +++++++++++++++++ .../AFNetworking/AFURLResponseSerialization.h | 311 ++++ .../AFNetworking/AFURLResponseSerialization.m | 825 ++++++++++ .../AFNetworking/AFURLSessionManager.h | 554 +++++++ .../AFNetworking/AFURLSessionManager.m | 1169 ++++++++++++++ .../DemoVC/DemoVC10/Lib/AFNetworking/LICENSE | 19 + .../DemoVC10/Lib/AFNetworking/README.md | 394 +++++ .../AFNetworkActivityIndicatorManager.h | 80 + .../AFNetworkActivityIndicatorManager.m | 170 ++ .../UIActivityIndicatorView+AFNetworking.h | 63 + .../UIActivityIndicatorView+AFNetworking.m | 171 ++ .../UIAlertView+AFNetworking.h | 99 ++ .../UIAlertView+AFNetworking.m | 141 ++ .../UIButton+AFNetworking.h | 184 +++ .../UIButton+AFNetworking.m | 293 ++++ .../UIKit+AFNetworking/UIImage+AFNetworking.h | 35 + .../UIImageView+AFNetworking.h | 146 ++ .../UIImageView+AFNetworking.m | 215 +++ .../UIKit+AFNetworking/UIKit+AFNetworking.h | 39 + .../UIProgressView+AFNetworking.h | 91 ++ .../UIProgressView+AFNetworking.m | 182 +++ .../UIRefreshControl+AFNetworking.h | 68 + .../UIRefreshControl+AFNetworking.m | 166 ++ .../UIWebView+AFNetworking.h | 86 + .../UIWebView+AFNetworking.m | 159 ++ .../Lib/MJExtension/MJDictionaryCache.h | 34 + .../Lib/MJExtension/MJDictionaryCache.m | 37 + .../DemoVC10/Lib/MJExtension/MJExtension.h | 15 + .../Lib/MJExtension/MJExtensionConst.h | 88 ++ .../Lib/MJExtension/MJExtensionConst.m | 27 + .../DemoVC10/Lib/MJExtension/MJFoundation.h | 13 + .../DemoVC10/Lib/MJExtension/MJFoundation.m | 48 + .../DemoVC10/Lib/MJExtension/MJProperty.h | 53 + .../DemoVC10/Lib/MJExtension/MJProperty.m | 177 +++ .../DemoVC10/Lib/MJExtension/MJPropertyKey.h | 30 + .../DemoVC10/Lib/MJExtension/MJPropertyKey.m | 25 + .../DemoVC10/Lib/MJExtension/MJPropertyType.h | 39 + .../DemoVC10/Lib/MJExtension/MJPropertyType.m | 68 + .../Lib/MJExtension/NSObject+MJClass.h | 90 ++ .../Lib/MJExtension/NSObject+MJClass.m | 147 ++ .../Lib/MJExtension/NSObject+MJCoding.h | 55 + .../Lib/MJExtension/NSObject+MJCoding.m | 54 + .../Lib/MJExtension/NSObject+MJKeyValue.h | 225 +++ .../Lib/MJExtension/NSObject+MJKeyValue.m | 701 +++++++++ .../Lib/MJExtension/NSObject+MJProperty.h | 79 + .../Lib/MJExtension/NSObject+MJProperty.m | 247 +++ .../Lib/MJExtension/NSString+MJExtension.h | 42 + .../Lib/MJExtension/NSString+MJExtension.m | 110 ++ .../DemoVC/DemoVC10/Lib/MJRefresh/LICENSE | 19 + .../MJRefresh/Base/MJRefreshAutoFooter.h | 17 + .../MJRefresh/Base/MJRefreshAutoFooter.m | 118 ++ .../MJRefresh/Base/MJRefreshBackFooter.h | 13 + .../MJRefresh/Base/MJRefreshBackFooter.m | 168 ++ .../MJRefresh/Base/MJRefreshComponent.h | 91 ++ .../MJRefresh/Base/MJRefreshComponent.m | 213 +++ .../MJRefresh/Base/MJRefreshFooter.h | 25 + .../MJRefresh/Base/MJRefreshFooter.m | 50 + .../MJRefresh/Base/MJRefreshHeader.h | 25 + .../MJRefresh/Base/MJRefreshHeader.m | 143 ++ .../Footer/Auto/MJRefreshAutoGifFooter.h | 15 + .../Footer/Auto/MJRefreshAutoGifFooter.m | 104 ++ .../Footer/Auto/MJRefreshAutoNormalFooter.h | 14 + .../Footer/Auto/MJRefreshAutoNormalFooter.m | 67 + .../Footer/Auto/MJRefreshAutoStateFooter.h | 20 + .../Footer/Auto/MJRefreshAutoStateFooter.m | 87 + .../Footer/Back/MJRefreshBackGifFooter.h | 15 + .../Footer/Back/MJRefreshBackGifFooter.m | 115 ++ .../Footer/Back/MJRefreshBackNormalFooter.h | 15 + .../Footer/Back/MJRefreshBackNormalFooter.m | 109 ++ .../Footer/Back/MJRefreshBackStateFooter.h | 16 + .../Footer/Back/MJRefreshBackStateFooter.m | 73 + .../Custom/Header/MJRefreshGifHeader.h | 15 + .../Custom/Header/MJRefreshGifHeader.m | 112 ++ .../Custom/Header/MJRefreshNormalHeader.h | 15 + .../Custom/Header/MJRefreshNormalHeader.m | 115 ++ .../Custom/Header/MJRefreshStateHeader.h | 23 + .../Custom/Header/MJRefreshStateHeader.m | 139 ++ .../MJRefresh/MJRefresh.bundle/arrow@2x.png | Bin 0 -> 1033 bytes .../Lib/MJRefresh/MJRefresh/MJRefresh.h | 14 + .../Lib/MJRefresh/MJRefresh/MJRefreshConst.h | 63 + .../Lib/MJRefresh/MJRefresh/MJRefreshConst.m | 28 + .../MJRefresh/UIScrollView+MJExtension.h | 23 + .../MJRefresh/UIScrollView+MJExtension.m | 110 ++ .../MJRefresh/UIScrollView+MJRefresh.h | 19 + .../MJRefresh/UIScrollView+MJRefresh.m | 60 + .../MJRefresh/MJRefresh/UIView+MJExtension.h | 19 + .../MJRefresh/MJRefresh/UIView+MJExtension.m | 84 + .../DemoVC/DemoVC10/Lib/MJRefresh/README.md | 286 ++++ .../DemoVC/DemoVC10/Lib/XYString/XYString.h | 60 + .../DemoVC/DemoVC10/Lib/XYString/XYString.m | 271 ++++ SDAutoLayoutDemo/DemoVC/DemoVC10/model/Ads.h | 19 + SDAutoLayoutDemo/DemoVC/DemoVC10/model/Ads.m | 13 + .../DemoVC/DemoVC10/model/Editor.h | 13 + .../DemoVC/DemoVC10/model/Editor.m | 13 + .../DemoVC/DemoVC10/model/Imgextra.h | 14 + .../DemoVC/DemoVC10/model/Imgextra.m | 13 + .../DemoVC/DemoVC10/model/ThreeModel.h | 129 ++ .../DemoVC/DemoVC10/model/ThreeModel.m | 22 + .../DemoVC/DemoVC10/view/ThreeBaseCell.h | 60 + .../DemoVC/DemoVC10/view/ThreeBaseCell.m | 62 + .../DemoVC/DemoVC10/view/ThreeFirstCell.h | 13 + .../DemoVC/DemoVC10/view/ThreeFirstCell.m | 67 + .../DemoVC/DemoVC10/view/ThreeFourthCell.h | 13 + .../DemoVC/DemoVC10/view/ThreeFourthCell.m | 65 + .../DemoVC/DemoVC10/view/ThreeSecondCell.h | 13 + .../DemoVC/DemoVC10/view/ThreeSecondCell.m | 78 + .../DemoVC/DemoVC10/view/ThreeThirdCell.h | 13 + .../DemoVC/DemoVC10/view/ThreeThirdCell.m | 65 + SDAutoLayoutDemo/Info.plist | 5 + .../Others/DemoTableViewControler.m | 7 +- 128 files changed, 17909 insertions(+), 3 deletions(-) create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPRequestOperation.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPRequestOperation.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPSessionManager.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPSessionManager.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFNetworking.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFSecurityPolicy.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFSecurityPolicy.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLConnectionOperation.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLConnectionOperation.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLRequestSerialization.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLRequestSerialization.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLResponseSerialization.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLResponseSerialization.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLSessionManager.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLSessionManager.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/LICENSE create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/README.md create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJDictionaryCache.h create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJDictionaryCache.m create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJExtension.h create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJExtensionConst.h create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJExtensionConst.m create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJFoundation.h create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJFoundation.m create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJProperty.h create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJProperty.m create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJPropertyKey.h create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJPropertyKey.m create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJPropertyType.h create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJPropertyType.m create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJClass.h create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJClass.m create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJCoding.h create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJCoding.m create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJKeyValue.h create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJKeyValue.m create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJProperty.h create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJProperty.m create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSString+MJExtension.h create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSString+MJExtension.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/LICENSE create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshComponent.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshComponent.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshFooter.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshFooter.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshHeader.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshHeader.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m create mode 100755 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/MJRefresh.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/MJRefreshConst.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/MJRefreshConst.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIScrollView+MJExtension.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIScrollView+MJExtension.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIView+MJExtension.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIView+MJExtension.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/README.md create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/XYString/XYString.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/XYString/XYString.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/model/Ads.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/model/Ads.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/model/Editor.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/model/Editor.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/model/Imgextra.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/model/Imgextra.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/model/ThreeModel.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/model/ThreeModel.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeBaseCell.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeBaseCell.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeFirstCell.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeFirstCell.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeFourthCell.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeFourthCell.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeSecondCell.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeSecondCell.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeThirdCell.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeThirdCell.m diff --git a/SDAutoLayoutDemo.xcodeproj/project.pbxproj b/SDAutoLayoutDemo.xcodeproj/project.pbxproj index 5fafae8..b040467 100644 --- a/SDAutoLayoutDemo.xcodeproj/project.pbxproj +++ b/SDAutoLayoutDemo.xcodeproj/project.pbxproj @@ -83,6 +83,68 @@ 48DBCD211C01E045002EC476 /* pic2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD171C01E045002EC476 /* pic2.jpg */; }; 48DBCD221C01E045002EC476 /* pic3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD181C01E045002EC476 /* pic3.jpg */; }; 48DBCD231C01E045002EC476 /* pic4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD191C01E045002EC476 /* pic4.jpg */; }; + 48FC0E161C4FB3A8004098B8 /* Ads.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E041C4FB3A8004098B8 /* Ads.m */; }; + 48FC0E171C4FB3A8004098B8 /* Editor.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E061C4FB3A8004098B8 /* Editor.m */; }; + 48FC0E181C4FB3A8004098B8 /* Imgextra.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E081C4FB3A8004098B8 /* Imgextra.m */; }; + 48FC0E191C4FB3A8004098B8 /* ThreeModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E0A1C4FB3A8004098B8 /* ThreeModel.m */; }; + 48FC0E1A1C4FB3A8004098B8 /* ThreeBaseCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E0D1C4FB3A8004098B8 /* ThreeBaseCell.m */; }; + 48FC0E1B1C4FB3A8004098B8 /* ThreeFirstCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E0F1C4FB3A8004098B8 /* ThreeFirstCell.m */; }; + 48FC0E1C1C4FB3A8004098B8 /* ThreeFourthCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E111C4FB3A8004098B8 /* ThreeFourthCell.m */; }; + 48FC0E1D1C4FB3A8004098B8 /* ThreeSecondCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E131C4FB3A8004098B8 /* ThreeSecondCell.m */; }; + 48FC0E1E1C4FB3A8004098B8 /* ThreeThirdCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E151C4FB3A8004098B8 /* ThreeThirdCell.m */; }; + 48FC0E211C4FB3EA004098B8 /* DemoVC10.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E201C4FB3EA004098B8 /* DemoVC10.m */; }; + 48FC0E951C4FB60A004098B8 /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E261C4FB60A004098B8 /* AFHTTPRequestOperation.m */; }; + 48FC0E961C4FB60A004098B8 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E281C4FB60A004098B8 /* AFHTTPRequestOperationManager.m */; }; + 48FC0E971C4FB60A004098B8 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E2A1C4FB60A004098B8 /* AFHTTPSessionManager.m */; }; + 48FC0E981C4FB60A004098B8 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E2D1C4FB60A004098B8 /* AFNetworkReachabilityManager.m */; }; + 48FC0E991C4FB60A004098B8 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E2F1C4FB60A004098B8 /* AFSecurityPolicy.m */; }; + 48FC0E9A1C4FB60A004098B8 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E311C4FB60A004098B8 /* AFURLConnectionOperation.m */; }; + 48FC0E9B1C4FB60A004098B8 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E331C4FB60A004098B8 /* AFURLRequestSerialization.m */; }; + 48FC0E9C1C4FB60A004098B8 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E351C4FB60A004098B8 /* AFURLResponseSerialization.m */; }; + 48FC0E9D1C4FB60A004098B8 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E371C4FB60A004098B8 /* AFURLSessionManager.m */; }; + 48FC0E9E1C4FB60A004098B8 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 48FC0E381C4FB60A004098B8 /* LICENSE */; }; + 48FC0E9F1C4FB60A004098B8 /* README.md in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E391C4FB60A004098B8 /* README.md */; }; + 48FC0EA01C4FB60A004098B8 /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E3C1C4FB60A004098B8 /* AFNetworkActivityIndicatorManager.m */; }; + 48FC0EA11C4FB60A004098B8 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E3E1C4FB60A004098B8 /* UIActivityIndicatorView+AFNetworking.m */; }; + 48FC0EA21C4FB60A004098B8 /* UIAlertView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E401C4FB60A004098B8 /* UIAlertView+AFNetworking.m */; }; + 48FC0EA31C4FB60A004098B8 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E421C4FB60A004098B8 /* UIButton+AFNetworking.m */; }; + 48FC0EA41C4FB60A004098B8 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E451C4FB60A004098B8 /* UIImageView+AFNetworking.m */; }; + 48FC0EA51C4FB60A004098B8 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E481C4FB60A004098B8 /* UIProgressView+AFNetworking.m */; }; + 48FC0EA61C4FB60A004098B8 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E4A1C4FB60A004098B8 /* UIRefreshControl+AFNetworking.m */; }; + 48FC0EA71C4FB60A004098B8 /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E4C1C4FB60A004098B8 /* UIWebView+AFNetworking.m */; }; + 48FC0EA81C4FB60A004098B8 /* MJDictionaryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E4F1C4FB60A004098B8 /* MJDictionaryCache.m */; }; + 48FC0EA91C4FB60A004098B8 /* MJExtensionConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E521C4FB60A004098B8 /* MJExtensionConst.m */; }; + 48FC0EAA1C4FB60A004098B8 /* MJFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E541C4FB60A004098B8 /* MJFoundation.m */; }; + 48FC0EAB1C4FB60A004098B8 /* MJProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E561C4FB60A004098B8 /* MJProperty.m */; }; + 48FC0EAC1C4FB60A004098B8 /* MJPropertyKey.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E581C4FB60A004098B8 /* MJPropertyKey.m */; }; + 48FC0EAD1C4FB60A004098B8 /* MJPropertyType.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E5A1C4FB60A004098B8 /* MJPropertyType.m */; }; + 48FC0EAE1C4FB60A004098B8 /* NSObject+MJClass.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E5C1C4FB60A004098B8 /* NSObject+MJClass.m */; }; + 48FC0EAF1C4FB60A004098B8 /* NSObject+MJCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E5E1C4FB60A004098B8 /* NSObject+MJCoding.m */; }; + 48FC0EB01C4FB60A004098B8 /* NSObject+MJKeyValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E601C4FB60A004098B8 /* NSObject+MJKeyValue.m */; }; + 48FC0EB11C4FB60A004098B8 /* NSObject+MJProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E621C4FB60A004098B8 /* NSObject+MJProperty.m */; }; + 48FC0EB21C4FB60A004098B8 /* NSString+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E641C4FB60A004098B8 /* NSString+MJExtension.m */; }; + 48FC0EB31C4FB60A004098B8 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 48FC0E661C4FB60A004098B8 /* LICENSE */; }; + 48FC0EB41C4FB60A004098B8 /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E6A1C4FB60A004098B8 /* MJRefreshAutoFooter.m */; }; + 48FC0EB51C4FB60A004098B8 /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E6C1C4FB60A004098B8 /* MJRefreshBackFooter.m */; }; + 48FC0EB61C4FB60A004098B8 /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E6E1C4FB60A004098B8 /* MJRefreshComponent.m */; }; + 48FC0EB71C4FB60A004098B8 /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E701C4FB60A004098B8 /* MJRefreshFooter.m */; }; + 48FC0EB81C4FB60A004098B8 /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E721C4FB60A004098B8 /* MJRefreshHeader.m */; }; + 48FC0EB91C4FB60A004098B8 /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E771C4FB60A004098B8 /* MJRefreshAutoGifFooter.m */; }; + 48FC0EBA1C4FB60A004098B8 /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E791C4FB60A004098B8 /* MJRefreshAutoNormalFooter.m */; }; + 48FC0EBB1C4FB60A004098B8 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E7B1C4FB60A004098B8 /* MJRefreshAutoStateFooter.m */; }; + 48FC0EBC1C4FB60A004098B8 /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E7E1C4FB60A004098B8 /* MJRefreshBackGifFooter.m */; }; + 48FC0EBD1C4FB60A004098B8 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E801C4FB60A004098B8 /* MJRefreshBackNormalFooter.m */; }; + 48FC0EBE1C4FB60A004098B8 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E821C4FB60A004098B8 /* MJRefreshBackStateFooter.m */; }; + 48FC0EBF1C4FB60A004098B8 /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E851C4FB60A004098B8 /* MJRefreshGifHeader.m */; }; + 48FC0EC01C4FB60A004098B8 /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E871C4FB60A004098B8 /* MJRefreshNormalHeader.m */; }; + 48FC0EC11C4FB60A004098B8 /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E891C4FB60A004098B8 /* MJRefreshStateHeader.m */; }; + 48FC0EC21C4FB60A004098B8 /* MJRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 48FC0E8A1C4FB60A004098B8 /* MJRefresh.bundle */; }; + 48FC0EC31C4FB60A004098B8 /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E8D1C4FB60A004098B8 /* MJRefreshConst.m */; }; + 48FC0EC41C4FB60A004098B8 /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E8F1C4FB60A004098B8 /* UIScrollView+MJExtension.m */; }; + 48FC0EC51C4FB60A004098B8 /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E911C4FB60A004098B8 /* UIScrollView+MJRefresh.m */; }; + 48FC0EC61C4FB60A004098B8 /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E931C4FB60A004098B8 /* UIView+MJExtension.m */; }; + 48FC0EC71C4FB60A004098B8 /* README.md in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E941C4FB60A004098B8 /* README.md */; }; + 48FC0ECB1C4FB7CA004098B8 /* XYString.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0ECA1C4FB7CA004098B8 /* XYString.m */; }; 99A697741C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m in Sources */ = {isa = PBXBuildFile; fileRef = 99A697711C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m */; }; 99A697751C423B0D004EA699 /* UIView+SDAutoLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 99A697731C423B0D004EA699 /* UIView+SDAutoLayout.m */; }; /* End PBXBuildFile section */ @@ -235,6 +297,130 @@ 48DBCD171C01E045002EC476 /* pic2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic2.jpg; sourceTree = ""; }; 48DBCD181C01E045002EC476 /* pic3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic3.jpg; sourceTree = ""; }; 48DBCD191C01E045002EC476 /* pic4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic4.jpg; sourceTree = ""; }; + 48FC0E031C4FB3A8004098B8 /* Ads.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Ads.h; sourceTree = ""; }; + 48FC0E041C4FB3A8004098B8 /* Ads.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Ads.m; sourceTree = ""; }; + 48FC0E051C4FB3A8004098B8 /* Editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Editor.h; sourceTree = ""; }; + 48FC0E061C4FB3A8004098B8 /* Editor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Editor.m; sourceTree = ""; }; + 48FC0E071C4FB3A8004098B8 /* Imgextra.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Imgextra.h; sourceTree = ""; }; + 48FC0E081C4FB3A8004098B8 /* Imgextra.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Imgextra.m; sourceTree = ""; }; + 48FC0E091C4FB3A8004098B8 /* ThreeModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreeModel.h; sourceTree = ""; }; + 48FC0E0A1C4FB3A8004098B8 /* ThreeModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThreeModel.m; sourceTree = ""; }; + 48FC0E0C1C4FB3A8004098B8 /* ThreeBaseCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreeBaseCell.h; sourceTree = ""; }; + 48FC0E0D1C4FB3A8004098B8 /* ThreeBaseCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThreeBaseCell.m; sourceTree = ""; }; + 48FC0E0E1C4FB3A8004098B8 /* ThreeFirstCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreeFirstCell.h; sourceTree = ""; }; + 48FC0E0F1C4FB3A8004098B8 /* ThreeFirstCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThreeFirstCell.m; sourceTree = ""; }; + 48FC0E101C4FB3A8004098B8 /* ThreeFourthCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreeFourthCell.h; sourceTree = ""; }; + 48FC0E111C4FB3A8004098B8 /* ThreeFourthCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThreeFourthCell.m; sourceTree = ""; }; + 48FC0E121C4FB3A8004098B8 /* ThreeSecondCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreeSecondCell.h; sourceTree = ""; }; + 48FC0E131C4FB3A8004098B8 /* ThreeSecondCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThreeSecondCell.m; sourceTree = ""; }; + 48FC0E141C4FB3A8004098B8 /* ThreeThirdCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreeThirdCell.h; sourceTree = ""; }; + 48FC0E151C4FB3A8004098B8 /* ThreeThirdCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThreeThirdCell.m; sourceTree = ""; }; + 48FC0E1F1C4FB3EA004098B8 /* DemoVC10.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC10.h; sourceTree = ""; }; + 48FC0E201C4FB3EA004098B8 /* DemoVC10.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC10.m; sourceTree = ""; }; + 48FC0E251C4FB60A004098B8 /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPRequestOperation.h; sourceTree = ""; }; + 48FC0E261C4FB60A004098B8 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperation.m; sourceTree = ""; }; + 48FC0E271C4FB60A004098B8 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPRequestOperationManager.h; sourceTree = ""; }; + 48FC0E281C4FB60A004098B8 /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperationManager.m; sourceTree = ""; }; + 48FC0E291C4FB60A004098B8 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPSessionManager.h; sourceTree = ""; }; + 48FC0E2A1C4FB60A004098B8 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPSessionManager.m; sourceTree = ""; }; + 48FC0E2B1C4FB60A004098B8 /* AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworking.h; sourceTree = ""; }; + 48FC0E2C1C4FB60A004098B8 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworkReachabilityManager.h; sourceTree = ""; }; + 48FC0E2D1C4FB60A004098B8 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFNetworkReachabilityManager.m; sourceTree = ""; }; + 48FC0E2E1C4FB60A004098B8 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFSecurityPolicy.h; sourceTree = ""; }; + 48FC0E2F1C4FB60A004098B8 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFSecurityPolicy.m; sourceTree = ""; }; + 48FC0E301C4FB60A004098B8 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLConnectionOperation.h; sourceTree = ""; }; + 48FC0E311C4FB60A004098B8 /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLConnectionOperation.m; sourceTree = ""; }; + 48FC0E321C4FB60A004098B8 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLRequestSerialization.h; sourceTree = ""; }; + 48FC0E331C4FB60A004098B8 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLRequestSerialization.m; sourceTree = ""; }; + 48FC0E341C4FB60A004098B8 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLResponseSerialization.h; sourceTree = ""; }; + 48FC0E351C4FB60A004098B8 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLResponseSerialization.m; sourceTree = ""; }; + 48FC0E361C4FB60A004098B8 /* AFURLSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLSessionManager.h; sourceTree = ""; }; + 48FC0E371C4FB60A004098B8 /* AFURLSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLSessionManager.m; sourceTree = ""; }; + 48FC0E381C4FB60A004098B8 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + 48FC0E391C4FB60A004098B8 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 48FC0E3B1C4FB60A004098B8 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworkActivityIndicatorManager.h; sourceTree = ""; }; + 48FC0E3C1C4FB60A004098B8 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFNetworkActivityIndicatorManager.m; sourceTree = ""; }; + 48FC0E3D1C4FB60A004098B8 /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; + 48FC0E3E1C4FB60A004098B8 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; + 48FC0E3F1C4FB60A004098B8 /* UIAlertView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIAlertView+AFNetworking.h"; sourceTree = ""; }; + 48FC0E401C4FB60A004098B8 /* UIAlertView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIAlertView+AFNetworking.m"; sourceTree = ""; }; + 48FC0E411C4FB60A004098B8 /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+AFNetworking.h"; sourceTree = ""; }; + 48FC0E421C4FB60A004098B8 /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+AFNetworking.m"; sourceTree = ""; }; + 48FC0E431C4FB60A004098B8 /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+AFNetworking.h"; sourceTree = ""; }; + 48FC0E441C4FB60A004098B8 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+AFNetworking.h"; sourceTree = ""; }; + 48FC0E451C4FB60A004098B8 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+AFNetworking.m"; sourceTree = ""; }; + 48FC0E461C4FB60A004098B8 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIKit+AFNetworking.h"; sourceTree = ""; }; + 48FC0E471C4FB60A004098B8 /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIProgressView+AFNetworking.h"; sourceTree = ""; }; + 48FC0E481C4FB60A004098B8 /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIProgressView+AFNetworking.m"; sourceTree = ""; }; + 48FC0E491C4FB60A004098B8 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; + 48FC0E4A1C4FB60A004098B8 /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; + 48FC0E4B1C4FB60A004098B8 /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIWebView+AFNetworking.h"; sourceTree = ""; }; + 48FC0E4C1C4FB60A004098B8 /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIWebView+AFNetworking.m"; sourceTree = ""; }; + 48FC0E4E1C4FB60A004098B8 /* MJDictionaryCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJDictionaryCache.h; sourceTree = ""; }; + 48FC0E4F1C4FB60A004098B8 /* MJDictionaryCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJDictionaryCache.m; sourceTree = ""; }; + 48FC0E501C4FB60A004098B8 /* MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJExtension.h; sourceTree = ""; }; + 48FC0E511C4FB60A004098B8 /* MJExtensionConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJExtensionConst.h; sourceTree = ""; }; + 48FC0E521C4FB60A004098B8 /* MJExtensionConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJExtensionConst.m; sourceTree = ""; }; + 48FC0E531C4FB60A004098B8 /* MJFoundation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJFoundation.h; sourceTree = ""; }; + 48FC0E541C4FB60A004098B8 /* MJFoundation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJFoundation.m; sourceTree = ""; }; + 48FC0E551C4FB60A004098B8 /* MJProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJProperty.h; sourceTree = ""; }; + 48FC0E561C4FB60A004098B8 /* MJProperty.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJProperty.m; sourceTree = ""; }; + 48FC0E571C4FB60A004098B8 /* MJPropertyKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJPropertyKey.h; sourceTree = ""; }; + 48FC0E581C4FB60A004098B8 /* MJPropertyKey.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJPropertyKey.m; sourceTree = ""; }; + 48FC0E591C4FB60A004098B8 /* MJPropertyType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJPropertyType.h; sourceTree = ""; }; + 48FC0E5A1C4FB60A004098B8 /* MJPropertyType.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJPropertyType.m; sourceTree = ""; }; + 48FC0E5B1C4FB60A004098B8 /* NSObject+MJClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJClass.h"; sourceTree = ""; }; + 48FC0E5C1C4FB60A004098B8 /* NSObject+MJClass.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJClass.m"; sourceTree = ""; }; + 48FC0E5D1C4FB60A004098B8 /* NSObject+MJCoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJCoding.h"; sourceTree = ""; }; + 48FC0E5E1C4FB60A004098B8 /* NSObject+MJCoding.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJCoding.m"; sourceTree = ""; }; + 48FC0E5F1C4FB60A004098B8 /* NSObject+MJKeyValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJKeyValue.h"; sourceTree = ""; }; + 48FC0E601C4FB60A004098B8 /* NSObject+MJKeyValue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJKeyValue.m"; sourceTree = ""; }; + 48FC0E611C4FB60A004098B8 /* NSObject+MJProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJProperty.h"; sourceTree = ""; }; + 48FC0E621C4FB60A004098B8 /* NSObject+MJProperty.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJProperty.m"; sourceTree = ""; }; + 48FC0E631C4FB60A004098B8 /* NSString+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MJExtension.h"; sourceTree = ""; }; + 48FC0E641C4FB60A004098B8 /* NSString+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MJExtension.m"; sourceTree = ""; }; + 48FC0E661C4FB60A004098B8 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + 48FC0E691C4FB60A004098B8 /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoFooter.h; sourceTree = ""; }; + 48FC0E6A1C4FB60A004098B8 /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoFooter.m; sourceTree = ""; }; + 48FC0E6B1C4FB60A004098B8 /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackFooter.h; sourceTree = ""; }; + 48FC0E6C1C4FB60A004098B8 /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackFooter.m; sourceTree = ""; }; + 48FC0E6D1C4FB60A004098B8 /* MJRefreshComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshComponent.h; sourceTree = ""; }; + 48FC0E6E1C4FB60A004098B8 /* MJRefreshComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshComponent.m; sourceTree = ""; }; + 48FC0E6F1C4FB60A004098B8 /* MJRefreshFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshFooter.h; sourceTree = ""; }; + 48FC0E701C4FB60A004098B8 /* MJRefreshFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshFooter.m; sourceTree = ""; }; + 48FC0E711C4FB60A004098B8 /* MJRefreshHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshHeader.h; sourceTree = ""; }; + 48FC0E721C4FB60A004098B8 /* MJRefreshHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshHeader.m; sourceTree = ""; }; + 48FC0E761C4FB60A004098B8 /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoGifFooter.h; sourceTree = ""; }; + 48FC0E771C4FB60A004098B8 /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoGifFooter.m; sourceTree = ""; }; + 48FC0E781C4FB60A004098B8 /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoNormalFooter.h; sourceTree = ""; }; + 48FC0E791C4FB60A004098B8 /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoNormalFooter.m; sourceTree = ""; }; + 48FC0E7A1C4FB60A004098B8 /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoStateFooter.h; sourceTree = ""; }; + 48FC0E7B1C4FB60A004098B8 /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoStateFooter.m; sourceTree = ""; }; + 48FC0E7D1C4FB60A004098B8 /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackGifFooter.h; sourceTree = ""; }; + 48FC0E7E1C4FB60A004098B8 /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackGifFooter.m; sourceTree = ""; }; + 48FC0E7F1C4FB60A004098B8 /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackNormalFooter.h; sourceTree = ""; }; + 48FC0E801C4FB60A004098B8 /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackNormalFooter.m; sourceTree = ""; }; + 48FC0E811C4FB60A004098B8 /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackStateFooter.h; sourceTree = ""; }; + 48FC0E821C4FB60A004098B8 /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackStateFooter.m; sourceTree = ""; }; + 48FC0E841C4FB60A004098B8 /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshGifHeader.h; sourceTree = ""; }; + 48FC0E851C4FB60A004098B8 /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshGifHeader.m; sourceTree = ""; }; + 48FC0E861C4FB60A004098B8 /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshNormalHeader.h; sourceTree = ""; }; + 48FC0E871C4FB60A004098B8 /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshNormalHeader.m; sourceTree = ""; }; + 48FC0E881C4FB60A004098B8 /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshStateHeader.h; sourceTree = ""; }; + 48FC0E891C4FB60A004098B8 /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshStateHeader.m; sourceTree = ""; }; + 48FC0E8A1C4FB60A004098B8 /* MJRefresh.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MJRefresh.bundle; sourceTree = ""; }; + 48FC0E8B1C4FB60A004098B8 /* MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefresh.h; sourceTree = ""; }; + 48FC0E8C1C4FB60A004098B8 /* MJRefreshConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshConst.h; sourceTree = ""; }; + 48FC0E8D1C4FB60A004098B8 /* MJRefreshConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshConst.m; sourceTree = ""; }; + 48FC0E8E1C4FB60A004098B8 /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJExtension.h"; sourceTree = ""; }; + 48FC0E8F1C4FB60A004098B8 /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJExtension.m"; sourceTree = ""; }; + 48FC0E901C4FB60A004098B8 /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJRefresh.h"; sourceTree = ""; }; + 48FC0E911C4FB60A004098B8 /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJRefresh.m"; sourceTree = ""; }; + 48FC0E921C4FB60A004098B8 /* UIView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+MJExtension.h"; sourceTree = ""; }; + 48FC0E931C4FB60A004098B8 /* UIView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+MJExtension.m"; sourceTree = ""; }; + 48FC0E941C4FB60A004098B8 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 48FC0EC91C4FB7CA004098B8 /* XYString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XYString.h; sourceTree = ""; }; + 48FC0ECA1C4FB7CA004098B8 /* XYString.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XYString.m; sourceTree = ""; }; 99A697701C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITableView+SDAutoTableViewCellHeight.h"; sourceTree = ""; }; 99A697711C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITableView+SDAutoTableViewCellHeight.m"; sourceTree = ""; }; 99A697721C423B0D004EA699 /* UIView+SDAutoLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+SDAutoLayout.h"; sourceTree = ""; }; @@ -373,6 +559,7 @@ 485303021C3F977A004361A7 /* DemoVC */ = { isa = PBXGroup; children = ( + 48FC0E011C4FB399004098B8 /* DemoVC10 */, 485303031C3F977A004361A7 /* DemoVC0 */, 485303061C3F977A004361A7 /* DemoVC1 */, 485303091C3F977A004361A7 /* DemoVC2 */, @@ -595,6 +782,265 @@ path = Images; sourceTree = ""; }; + 48FC0E011C4FB399004098B8 /* DemoVC10 */ = { + isa = PBXGroup; + children = ( + 48FC0E221C4FB5F6004098B8 /* Lib */, + 48FC0E021C4FB3A8004098B8 /* model */, + 48FC0E0B1C4FB3A8004098B8 /* view */, + 48FC0E1F1C4FB3EA004098B8 /* DemoVC10.h */, + 48FC0E201C4FB3EA004098B8 /* DemoVC10.m */, + ); + path = DemoVC10; + sourceTree = ""; + }; + 48FC0E021C4FB3A8004098B8 /* model */ = { + isa = PBXGroup; + children = ( + 48FC0E031C4FB3A8004098B8 /* Ads.h */, + 48FC0E041C4FB3A8004098B8 /* Ads.m */, + 48FC0E051C4FB3A8004098B8 /* Editor.h */, + 48FC0E061C4FB3A8004098B8 /* Editor.m */, + 48FC0E071C4FB3A8004098B8 /* Imgextra.h */, + 48FC0E081C4FB3A8004098B8 /* Imgextra.m */, + 48FC0E091C4FB3A8004098B8 /* ThreeModel.h */, + 48FC0E0A1C4FB3A8004098B8 /* ThreeModel.m */, + ); + path = model; + sourceTree = ""; + }; + 48FC0E0B1C4FB3A8004098B8 /* view */ = { + isa = PBXGroup; + children = ( + 48FC0E0C1C4FB3A8004098B8 /* ThreeBaseCell.h */, + 48FC0E0D1C4FB3A8004098B8 /* ThreeBaseCell.m */, + 48FC0E0E1C4FB3A8004098B8 /* ThreeFirstCell.h */, + 48FC0E0F1C4FB3A8004098B8 /* ThreeFirstCell.m */, + 48FC0E101C4FB3A8004098B8 /* ThreeFourthCell.h */, + 48FC0E111C4FB3A8004098B8 /* ThreeFourthCell.m */, + 48FC0E121C4FB3A8004098B8 /* ThreeSecondCell.h */, + 48FC0E131C4FB3A8004098B8 /* ThreeSecondCell.m */, + 48FC0E141C4FB3A8004098B8 /* ThreeThirdCell.h */, + 48FC0E151C4FB3A8004098B8 /* ThreeThirdCell.m */, + ); + path = view; + sourceTree = ""; + }; + 48FC0E221C4FB5F6004098B8 /* Lib */ = { + isa = PBXGroup; + children = ( + 48FC0EC81C4FB7BD004098B8 /* XYString */, + 48FC0E231C4FB60A004098B8 /* AFNetworking */, + 48FC0E4D1C4FB60A004098B8 /* MJExtension */, + 48FC0E651C4FB60A004098B8 /* MJRefresh */, + ); + path = Lib; + sourceTree = ""; + }; + 48FC0E231C4FB60A004098B8 /* AFNetworking */ = { + isa = PBXGroup; + children = ( + 48FC0E241C4FB60A004098B8 /* AFNetworking */, + 48FC0E381C4FB60A004098B8 /* LICENSE */, + 48FC0E391C4FB60A004098B8 /* README.md */, + 48FC0E3A1C4FB60A004098B8 /* UIKit+AFNetworking */, + ); + path = AFNetworking; + sourceTree = ""; + }; + 48FC0E241C4FB60A004098B8 /* AFNetworking */ = { + isa = PBXGroup; + children = ( + 48FC0E251C4FB60A004098B8 /* AFHTTPRequestOperation.h */, + 48FC0E261C4FB60A004098B8 /* AFHTTPRequestOperation.m */, + 48FC0E271C4FB60A004098B8 /* AFHTTPRequestOperationManager.h */, + 48FC0E281C4FB60A004098B8 /* AFHTTPRequestOperationManager.m */, + 48FC0E291C4FB60A004098B8 /* AFHTTPSessionManager.h */, + 48FC0E2A1C4FB60A004098B8 /* AFHTTPSessionManager.m */, + 48FC0E2B1C4FB60A004098B8 /* AFNetworking.h */, + 48FC0E2C1C4FB60A004098B8 /* AFNetworkReachabilityManager.h */, + 48FC0E2D1C4FB60A004098B8 /* AFNetworkReachabilityManager.m */, + 48FC0E2E1C4FB60A004098B8 /* AFSecurityPolicy.h */, + 48FC0E2F1C4FB60A004098B8 /* AFSecurityPolicy.m */, + 48FC0E301C4FB60A004098B8 /* AFURLConnectionOperation.h */, + 48FC0E311C4FB60A004098B8 /* AFURLConnectionOperation.m */, + 48FC0E321C4FB60A004098B8 /* AFURLRequestSerialization.h */, + 48FC0E331C4FB60A004098B8 /* AFURLRequestSerialization.m */, + 48FC0E341C4FB60A004098B8 /* AFURLResponseSerialization.h */, + 48FC0E351C4FB60A004098B8 /* AFURLResponseSerialization.m */, + 48FC0E361C4FB60A004098B8 /* AFURLSessionManager.h */, + 48FC0E371C4FB60A004098B8 /* AFURLSessionManager.m */, + ); + path = AFNetworking; + sourceTree = ""; + }; + 48FC0E3A1C4FB60A004098B8 /* UIKit+AFNetworking */ = { + isa = PBXGroup; + children = ( + 48FC0E3B1C4FB60A004098B8 /* AFNetworkActivityIndicatorManager.h */, + 48FC0E3C1C4FB60A004098B8 /* AFNetworkActivityIndicatorManager.m */, + 48FC0E3D1C4FB60A004098B8 /* UIActivityIndicatorView+AFNetworking.h */, + 48FC0E3E1C4FB60A004098B8 /* UIActivityIndicatorView+AFNetworking.m */, + 48FC0E3F1C4FB60A004098B8 /* UIAlertView+AFNetworking.h */, + 48FC0E401C4FB60A004098B8 /* UIAlertView+AFNetworking.m */, + 48FC0E411C4FB60A004098B8 /* UIButton+AFNetworking.h */, + 48FC0E421C4FB60A004098B8 /* UIButton+AFNetworking.m */, + 48FC0E431C4FB60A004098B8 /* UIImage+AFNetworking.h */, + 48FC0E441C4FB60A004098B8 /* UIImageView+AFNetworking.h */, + 48FC0E451C4FB60A004098B8 /* UIImageView+AFNetworking.m */, + 48FC0E461C4FB60A004098B8 /* UIKit+AFNetworking.h */, + 48FC0E471C4FB60A004098B8 /* UIProgressView+AFNetworking.h */, + 48FC0E481C4FB60A004098B8 /* UIProgressView+AFNetworking.m */, + 48FC0E491C4FB60A004098B8 /* UIRefreshControl+AFNetworking.h */, + 48FC0E4A1C4FB60A004098B8 /* UIRefreshControl+AFNetworking.m */, + 48FC0E4B1C4FB60A004098B8 /* UIWebView+AFNetworking.h */, + 48FC0E4C1C4FB60A004098B8 /* UIWebView+AFNetworking.m */, + ); + path = "UIKit+AFNetworking"; + sourceTree = ""; + }; + 48FC0E4D1C4FB60A004098B8 /* MJExtension */ = { + isa = PBXGroup; + children = ( + 48FC0E4E1C4FB60A004098B8 /* MJDictionaryCache.h */, + 48FC0E4F1C4FB60A004098B8 /* MJDictionaryCache.m */, + 48FC0E501C4FB60A004098B8 /* MJExtension.h */, + 48FC0E511C4FB60A004098B8 /* MJExtensionConst.h */, + 48FC0E521C4FB60A004098B8 /* MJExtensionConst.m */, + 48FC0E531C4FB60A004098B8 /* MJFoundation.h */, + 48FC0E541C4FB60A004098B8 /* MJFoundation.m */, + 48FC0E551C4FB60A004098B8 /* MJProperty.h */, + 48FC0E561C4FB60A004098B8 /* MJProperty.m */, + 48FC0E571C4FB60A004098B8 /* MJPropertyKey.h */, + 48FC0E581C4FB60A004098B8 /* MJPropertyKey.m */, + 48FC0E591C4FB60A004098B8 /* MJPropertyType.h */, + 48FC0E5A1C4FB60A004098B8 /* MJPropertyType.m */, + 48FC0E5B1C4FB60A004098B8 /* NSObject+MJClass.h */, + 48FC0E5C1C4FB60A004098B8 /* NSObject+MJClass.m */, + 48FC0E5D1C4FB60A004098B8 /* NSObject+MJCoding.h */, + 48FC0E5E1C4FB60A004098B8 /* NSObject+MJCoding.m */, + 48FC0E5F1C4FB60A004098B8 /* NSObject+MJKeyValue.h */, + 48FC0E601C4FB60A004098B8 /* NSObject+MJKeyValue.m */, + 48FC0E611C4FB60A004098B8 /* NSObject+MJProperty.h */, + 48FC0E621C4FB60A004098B8 /* NSObject+MJProperty.m */, + 48FC0E631C4FB60A004098B8 /* NSString+MJExtension.h */, + 48FC0E641C4FB60A004098B8 /* NSString+MJExtension.m */, + ); + path = MJExtension; + sourceTree = ""; + }; + 48FC0E651C4FB60A004098B8 /* MJRefresh */ = { + isa = PBXGroup; + children = ( + 48FC0E661C4FB60A004098B8 /* LICENSE */, + 48FC0E671C4FB60A004098B8 /* MJRefresh */, + 48FC0E941C4FB60A004098B8 /* README.md */, + ); + path = MJRefresh; + sourceTree = ""; + }; + 48FC0E671C4FB60A004098B8 /* MJRefresh */ = { + isa = PBXGroup; + children = ( + 48FC0E681C4FB60A004098B8 /* Base */, + 48FC0E731C4FB60A004098B8 /* Custom */, + 48FC0E8A1C4FB60A004098B8 /* MJRefresh.bundle */, + 48FC0E8B1C4FB60A004098B8 /* MJRefresh.h */, + 48FC0E8C1C4FB60A004098B8 /* MJRefreshConst.h */, + 48FC0E8D1C4FB60A004098B8 /* MJRefreshConst.m */, + 48FC0E8E1C4FB60A004098B8 /* UIScrollView+MJExtension.h */, + 48FC0E8F1C4FB60A004098B8 /* UIScrollView+MJExtension.m */, + 48FC0E901C4FB60A004098B8 /* UIScrollView+MJRefresh.h */, + 48FC0E911C4FB60A004098B8 /* UIScrollView+MJRefresh.m */, + 48FC0E921C4FB60A004098B8 /* UIView+MJExtension.h */, + 48FC0E931C4FB60A004098B8 /* UIView+MJExtension.m */, + ); + path = MJRefresh; + sourceTree = ""; + }; + 48FC0E681C4FB60A004098B8 /* Base */ = { + isa = PBXGroup; + children = ( + 48FC0E691C4FB60A004098B8 /* MJRefreshAutoFooter.h */, + 48FC0E6A1C4FB60A004098B8 /* MJRefreshAutoFooter.m */, + 48FC0E6B1C4FB60A004098B8 /* MJRefreshBackFooter.h */, + 48FC0E6C1C4FB60A004098B8 /* MJRefreshBackFooter.m */, + 48FC0E6D1C4FB60A004098B8 /* MJRefreshComponent.h */, + 48FC0E6E1C4FB60A004098B8 /* MJRefreshComponent.m */, + 48FC0E6F1C4FB60A004098B8 /* MJRefreshFooter.h */, + 48FC0E701C4FB60A004098B8 /* MJRefreshFooter.m */, + 48FC0E711C4FB60A004098B8 /* MJRefreshHeader.h */, + 48FC0E721C4FB60A004098B8 /* MJRefreshHeader.m */, + ); + path = Base; + sourceTree = ""; + }; + 48FC0E731C4FB60A004098B8 /* Custom */ = { + isa = PBXGroup; + children = ( + 48FC0E741C4FB60A004098B8 /* Footer */, + 48FC0E831C4FB60A004098B8 /* Header */, + ); + path = Custom; + sourceTree = ""; + }; + 48FC0E741C4FB60A004098B8 /* Footer */ = { + isa = PBXGroup; + children = ( + 48FC0E751C4FB60A004098B8 /* Auto */, + 48FC0E7C1C4FB60A004098B8 /* Back */, + ); + path = Footer; + sourceTree = ""; + }; + 48FC0E751C4FB60A004098B8 /* Auto */ = { + isa = PBXGroup; + children = ( + 48FC0E761C4FB60A004098B8 /* MJRefreshAutoGifFooter.h */, + 48FC0E771C4FB60A004098B8 /* MJRefreshAutoGifFooter.m */, + 48FC0E781C4FB60A004098B8 /* MJRefreshAutoNormalFooter.h */, + 48FC0E791C4FB60A004098B8 /* MJRefreshAutoNormalFooter.m */, + 48FC0E7A1C4FB60A004098B8 /* MJRefreshAutoStateFooter.h */, + 48FC0E7B1C4FB60A004098B8 /* MJRefreshAutoStateFooter.m */, + ); + path = Auto; + sourceTree = ""; + }; + 48FC0E7C1C4FB60A004098B8 /* Back */ = { + isa = PBXGroup; + children = ( + 48FC0E7D1C4FB60A004098B8 /* MJRefreshBackGifFooter.h */, + 48FC0E7E1C4FB60A004098B8 /* MJRefreshBackGifFooter.m */, + 48FC0E7F1C4FB60A004098B8 /* MJRefreshBackNormalFooter.h */, + 48FC0E801C4FB60A004098B8 /* MJRefreshBackNormalFooter.m */, + 48FC0E811C4FB60A004098B8 /* MJRefreshBackStateFooter.h */, + 48FC0E821C4FB60A004098B8 /* MJRefreshBackStateFooter.m */, + ); + path = Back; + sourceTree = ""; + }; + 48FC0E831C4FB60A004098B8 /* Header */ = { + isa = PBXGroup; + children = ( + 48FC0E841C4FB60A004098B8 /* MJRefreshGifHeader.h */, + 48FC0E851C4FB60A004098B8 /* MJRefreshGifHeader.m */, + 48FC0E861C4FB60A004098B8 /* MJRefreshNormalHeader.h */, + 48FC0E871C4FB60A004098B8 /* MJRefreshNormalHeader.m */, + 48FC0E881C4FB60A004098B8 /* MJRefreshStateHeader.h */, + 48FC0E891C4FB60A004098B8 /* MJRefreshStateHeader.m */, + ); + path = Header; + sourceTree = ""; + }; + 48FC0EC81C4FB7BD004098B8 /* XYString */ = { + isa = PBXGroup; + children = ( + 48FC0EC91C4FB7CA004098B8 /* XYString.h */, + 48FC0ECA1C4FB7CA004098B8 /* XYString.m */, + ); + path = XYString; + sourceTree = ""; + }; 99A6976F1C423B0D004EA699 /* SDAutoLayout */ = { isa = PBXGroup; children = ( @@ -688,7 +1134,9 @@ files = ( 48DBCD1A1C01E045002EC476 /* icon0.jpg in Resources */, 4841F5E91C2ABC60004979F4 /* pic5.jpg in Resources */, + 48FC0EC21C4FB60A004098B8 /* MJRefresh.bundle in Resources */, 4841F5EB1C2ABC60004979F4 /* pic7.jpg in Resources */, + 48FC0E9E1C4FB60A004098B8 /* LICENSE in Resources */, 48DBCD221C01E045002EC476 /* pic3.jpg in Resources */, 48DBCD211C01E045002EC476 /* pic2.jpg in Resources */, 48DBCD231C01E045002EC476 /* pic4.jpg in Resources */, @@ -701,6 +1149,7 @@ 48DBCD201C01E045002EC476 /* pic1.jpg in Resources */, 4841F5EA1C2ABC60004979F4 /* pic6.jpg in Resources */, 487D3EC51BCB9EC700A66173 /* LaunchScreen.xib in Resources */, + 48FC0EB31C4FB60A004098B8 /* LICENSE in Resources */, 48DBCD1D1C01E045002EC476 /* icon3.jpg in Resources */, 4841F5EC1C2ABC60004979F4 /* pic8.jpg in Resources */, 487D3EC21BCB9EC700A66173 /* Images.xcassets in Resources */, @@ -723,6 +1172,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 48FC0EAB1C4FB60A004098B8 /* MJProperty.m in Sources */, + 48FC0EB91C4FB60A004098B8 /* MJRefreshAutoGifFooter.m in Sources */, 485303411C3F977A004361A7 /* DemoVC7Cell2.m in Sources */, 4853033C1C3F977A004361A7 /* DemoVC5CellTableViewCell.m in Sources */, 485303501C3F97AA004361A7 /* AppDelegate.m in Sources */, @@ -730,54 +1181,111 @@ 485303481C3F977A004361A7 /* SDWeiXinPhotoContainerView.m in Sources */, 485302DB1C3F6490004361A7 /* SDWebImageManager.m in Sources */, 485302F51C3F65EE004361A7 /* TAAnimatedDotView.m in Sources */, + 48FC0EB21C4FB60A004098B8 /* NSString+MJExtension.m in Sources */, 485302FA1C3F65EE004361A7 /* UIView+SDExtension.m in Sources */, 485302D31C3F6490004361A7 /* UIView+SDExtension.m in Sources */, + 48FC0EC01C4FB60A004098B8 /* MJRefreshNormalHeader.m in Sources */, 485303431C3F977A004361A7 /* DemoVC8.m in Sources */, + 48FC0E1D1C4FB3A8004098B8 /* ThreeSecondCell.m in Sources */, + 48FC0E9B1C4FB60A004098B8 /* AFURLRequestSerialization.m in Sources */, 485303471C3F977A004361A7 /* DemoVC9HeaderView.m in Sources */, 485303421C3F977A004361A7 /* DemoVC7Model.m in Sources */, 485302CE1C3F6490004361A7 /* SDWaitingView.m in Sources */, + 48FC0E961C4FB60A004098B8 /* AFHTTPRequestOperationManager.m in Sources */, 485302DF1C3F6490004361A7 /* UIImage+MultiFormat.m in Sources */, + 48FC0EA81C4FB60A004098B8 /* MJDictionaryCache.m in Sources */, 485302D91C3F6490004361A7 /* SDWebImageDownloader.m in Sources */, 485303361C3F977A004361A7 /* DemoVC1.m in Sources */, 485302F71C3F65EE004361A7 /* TAPageControl.m in Sources */, + 48FC0EBF1C4FB60A004098B8 /* MJRefreshGifHeader.m in Sources */, 485302E01C3F6490004361A7 /* UIImage+WebP.m in Sources */, 4853033E1C3F977A004361A7 /* DemoVC6.m in Sources */, + 48FC0EAA1C4FB60A004098B8 /* MJFoundation.m in Sources */, 485302D11C3F6490004361A7 /* SDRefreshHeaderView.m in Sources */, + 48FC0EBE1C4FB60A004098B8 /* MJRefreshBackStateFooter.m in Sources */, + 48FC0EBC1C4FB60A004098B8 /* MJRefreshBackGifFooter.m in Sources */, + 48FC0EBD1C4FB60A004098B8 /* MJRefreshBackNormalFooter.m in Sources */, + 48FC0EAD1C4FB60A004098B8 /* MJPropertyType.m in Sources */, 485302E11C3F6490004361A7 /* UIImageView+HighlightedWebCache.m in Sources */, 485303441C3F977A004361A7 /* Demo9Model.m in Sources */, 485303401C3F977A004361A7 /* DemoVC7Cell.m in Sources */, 485303351C3F977A004361A7 /* DemoVC0.m in Sources */, + 48FC0EA71C4FB60A004098B8 /* UIWebView+AFNetworking.m in Sources */, + 48FC0EB11C4FB60A004098B8 /* NSObject+MJProperty.m in Sources */, + 48FC0E1B1C4FB3A8004098B8 /* ThreeFirstCell.m in Sources */, + 48FC0E211C4FB3EA004098B8 /* DemoVC10.m in Sources */, + 48FC0E9D1C4FB60A004098B8 /* AFURLSessionManager.m in Sources */, + 48FC0E991C4FB60A004098B8 /* AFSecurityPolicy.m in Sources */, + 48FC0EC41C4FB60A004098B8 /* UIScrollView+MJExtension.m in Sources */, + 48FC0E9F1C4FB60A004098B8 /* README.md in Sources */, 485302D81C3F6490004361A7 /* SDWebImageDecoder.m in Sources */, 485302DC1C3F6490004361A7 /* SDWebImagePrefetcher.m in Sources */, + 48FC0E981C4FB60A004098B8 /* AFNetworkReachabilityManager.m in Sources */, 99A697751C423B0D004EA699 /* UIView+SDAutoLayout.m in Sources */, + 48FC0E1C1C4FB3A8004098B8 /* ThreeFourthCell.m in Sources */, 485302D21C3F6490004361A7 /* SDRefreshView.m in Sources */, + 48FC0E951C4FB60A004098B8 /* AFHTTPRequestOperation.m in Sources */, 4853033D1C3F977A004361A7 /* DemoVC5Model.m in Sources */, 485302DE1C3F6490004361A7 /* UIImage+GIF.m in Sources */, + 48FC0EB01C4FB60A004098B8 /* NSObject+MJKeyValue.m in Sources */, + 48FC0EC11C4FB60A004098B8 /* MJRefreshStateHeader.m in Sources */, + 48FC0EB81C4FB60A004098B8 /* MJRefreshHeader.m in Sources */, + 48FC0EB71C4FB60A004098B8 /* MJRefreshFooter.m in Sources */, 485302F91C3F65EE004361A7 /* SDCycleScrollView.m in Sources */, + 48FC0EB61C4FB60A004098B8 /* MJRefreshComponent.m in Sources */, 485302E21C3F6490004361A7 /* UIImageView+WebCache.m in Sources */, 485303451C3F977A004361A7 /* DemoVC9.m in Sources */, 485302D61C3F6490004361A7 /* SDImageCache.m in Sources */, + 48FC0E9A1C4FB60A004098B8 /* AFURLConnectionOperation.m in Sources */, + 48FC0E181C4FB3A8004098B8 /* Imgextra.m in Sources */, + 48FC0E191C4FB3A8004098B8 /* ThreeModel.m in Sources */, + 48FC0EBB1C4FB60A004098B8 /* MJRefreshAutoStateFooter.m in Sources */, + 48FC0EAF1C4FB60A004098B8 /* NSObject+MJCoding.m in Sources */, + 48FC0EB41C4FB60A004098B8 /* MJRefreshAutoFooter.m in Sources */, + 48FC0E171C4FB3A8004098B8 /* Editor.m in Sources */, 485303551C3F97E6004361A7 /* DemoCell.m in Sources */, + 48FC0EA61C4FB60A004098B8 /* UIRefreshControl+AFNetworking.m in Sources */, 485303391C3F977A004361A7 /* TestCell2.m in Sources */, 485302CC1C3F6490004361A7 /* SDBrowserImageView.m in Sources */, 485302CD1C3F6490004361A7 /* SDPhotoBrowser.m in Sources */, + 48FC0E971C4FB60A004098B8 /* AFHTTPSessionManager.m in Sources */, + 48FC0EC71C4FB60A004098B8 /* README.md in Sources */, + 48FC0EA51C4FB60A004098B8 /* UIProgressView+AFNetworking.m in Sources */, + 48FC0EC51C4FB60A004098B8 /* UIScrollView+MJRefresh.m in Sources */, 485303511C3F97AA004361A7 /* DemoTableViewControler.m in Sources */, + 48FC0ECB1C4FB7CA004098B8 /* XYString.m in Sources */, 485302F41C3F65EE004361A7 /* TAAbstractDotView.m in Sources */, + 48FC0EA31C4FB60A004098B8 /* UIButton+AFNetworking.m in Sources */, 485302F81C3F65EE004361A7 /* SDCollectionViewCell.m in Sources */, + 48FC0EB51C4FB60A004098B8 /* MJRefreshBackFooter.m in Sources */, 485302DA1C3F6490004361A7 /* SDWebImageDownloaderOperation.m in Sources */, 485303521C3F97AA004361A7 /* ViewController.m in Sources */, 99A697741C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m in Sources */, + 48FC0EAC1C4FB60A004098B8 /* MJPropertyKey.m in Sources */, 485302D71C3F6490004361A7 /* SDWebImageCompat.m in Sources */, 485303461C3F977A004361A7 /* DemoVC9Cell.m in Sources */, + 48FC0E1A1C4FB3A8004098B8 /* ThreeBaseCell.m in Sources */, + 48FC0EC61C4FB60A004098B8 /* UIView+MJExtension.m in Sources */, 485302D51C3F6490004361A7 /* NSData+ImageContentType.m in Sources */, + 48FC0EA21C4FB60A004098B8 /* UIAlertView+AFNetworking.m in Sources */, 485303381C3F977A004361A7 /* DemoVC3.m in Sources */, + 48FC0EA41C4FB60A004098B8 /* UIImageView+AFNetworking.m in Sources */, 485302D01C3F6490004361A7 /* SDRefreshFooterView.m in Sources */, + 48FC0E9C1C4FB60A004098B8 /* AFURLResponseSerialization.m in Sources */, 485302DD1C3F6490004361A7 /* UIButton+WebCache.m in Sources */, 485303371C3F977A004361A7 /* DemoVC2.m in Sources */, + 48FC0E1E1C4FB3A8004098B8 /* ThreeThirdCell.m in Sources */, 487D3EB71BCB9EC700A66173 /* main.m in Sources */, + 48FC0EA11C4FB60A004098B8 /* UIActivityIndicatorView+AFNetworking.m in Sources */, + 48FC0EA91C4FB60A004098B8 /* MJExtensionConst.m in Sources */, + 48FC0E161C4FB3A8004098B8 /* Ads.m in Sources */, 4853033F1C3F977A004361A7 /* DemoVC7.m in Sources */, 485302E31C3F6490004361A7 /* UIView+WebCacheOperation.m in Sources */, + 48FC0EC31C4FB60A004098B8 /* MJRefreshConst.m in Sources */, + 48FC0EBA1C4FB60A004098B8 /* MJRefreshAutoNormalFooter.m in Sources */, + 48FC0EA01C4FB60A004098B8 /* AFNetworkActivityIndicatorManager.m in Sources */, 4853033A1C3F977A004361A7 /* DemoVC4.m in Sources */, + 48FC0EAE1C4FB60A004098B8 /* NSObject+MJClass.m in Sources */, 485302D41C3F6490004361A7 /* MKAnnotationView+WebCache.m in Sources */, 4853033B1C3F977A004361A7 /* DemoVC5.m in Sources */, ); diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 9a4f1faedea179f3d66567e7b717c960eaaa1c20..8e8d403d6c31a212ce49df693a167574361086fe 100644 GIT binary patch literal 63640 zcmdpf2VhfG_xQbUWWA9WT*#6w6uLLaC>>BJ6ezQRu_Kf~+tj3GRWQc^?k%{XWhoB8 zy%qN!fP3$)xVQe#y)Q|VlA_=5!{Ybn^J|hf&OP_sv(I_=RW{Um1C1#udk7^05s5@( zV(DV*VxQH2vBw|q`s!!(_f;_pk6*E%4&uY5g004P6LbwSJpR&L&o3BZrVf z$zddsB#~s2LQ+W@NhcX3lVp)>l0&AE>0}0(NoJARq@2tlbICk%EOC?L=p;IgPN#FI zn;u82sfT*$LRwFKG(a2aQo4+;peyM~^kll4o<`52XVdfP1#}HvOE0Ha(Dk&1Zlas% zR(dVnMz_=IrSUJ_mtUKidL-Vr_!J`_F`J`=tY_6pw#-wQtrzX*Q_e~O|g zi8j$LYN9T75f2fM5W9*!#GYawv9CB#JX#zg4i!_xR54S`5{HSy#ZlsDu|O;oi^cKc zB(YR16Q_x@#M$CJ@mR4^tP*R)1!ApOCmt{Q#l_+hu~|Gp42mG0Dy|aG5YH6P70(kd z5-%1n6)zL764!~>ir0zPi#Led#O>k^@ka3`@iy^6@gebH@e%P+@iFmn@dfck@g?zP z@fGn^@ip;v@ni85@l)|L@pJJD@k{Y5@mKLT@ps8CIV43=B~8*Lr({Syq@GeQX{eMa zB}vIrij*p4O1aW7X}ENZG)^j(#!C~VnbIt2wp1?7mujR1l2>Yy7E4Q{rP3+VsnRNG zwRD22v9>0RkP z=__fk^tJT6^oR7PtjMaY$-3N4?k@L`d&-051bK)&RL+recH<$1DKUMMe;m&i-yW%6>lSw2BtA+MCrkk6FQlFydUkCq1WBJ1JrR6KjUdwNm-z|Sw9ahDvTDw}0w05%&v>t68WF2hH zv}ReetvS{LYoWEsI@UVQT5KI}onf76on@VE^;qXyYpe^bjn*dXV(Sv?$<|Y>r&?E8 zFR)%{y~uj8wZ+HN)@)mCJI!{w?PA*++gjTO+eX_a z+h*I1wwr7>+itP#v^`*Z(Dsn+IotELUAEn}w`_0Q-m$%F`_lH6ZLjTX+wZnNY=7E` zUA1d=-R`t^xA(C3wD+?7@??4#`^_KEgM_EP&C`&|1x zyVt(ZzQ|r{Uus`wUv6)^IwQvG24$V1Lm5 zko`IP^Y&f#-S)TaZ`Xs>o1?p{caIMzAVJ6asAjvE}?9NQf`9QQcxb=>E;-|>Xw8OO7Z-Httu zmmRM--f+C*_`va%<6Fmfj-MPqJAQZkp*R#pQ58+;uJllPD!r5hWr#9VNmSC6Y$Zo2 zQpPIdlwxJPGC`T7Oi`vPWy)-&T$!WPC<_#?vQSy1)GBp~UkNCU%2H*ea*}egvRXM? zIbXRzxk9;8xk_25Y*e-=Ta_D>ZOTo`&C1=%{mM?|VdW9!DdlP9dF2)5RpmA1b>$u9 zBjqz?uky9>jq;1~hw`T?s*-A`F13q#hZxwpd%DE!CE3%e7OqQ?*svYVCaO0_{TWBJC<|owh;SqTQz5 zuHB*CsrAtA((cn9&>qwt(jL=Z&|cAA)!x+J(%#eF*FM%h(Z0~W)QL`YK^JvNmvxJ7 z)oprjy^r2k@2B_I2j~O!qxC`hU_C(}qUY-cdZAvVkJZQN#rk-Cf?lFe)Tiri-K#Iu z{rXaUnZ8_Ksh^~utgqHj(@)pW*3Z{3(AVf|^~?2j`bPa~{W^WSeye_)evf{y{+Rx_ z{)GOd{;d9v{;vL>{=WW!{-OSn{;~dv{=NQ#{-ger{)f}zbU1Zq7w6&5ZqDw`qny2+ zeVhZFgPjS^6lbb4+nMJaI^E9WoE6SWXT8(sY;Yd$T;g2m zJjr>obG7p{=UL9Po##6*aISH#bzb7U)On?|#o6k-!MV-3-MPbgqw`+pea`!xJDm?W zA9FtLe8%~r^CjoY&bOWKINx=C?EJ*}h4WkIPX;llAs7xrF;t_AafES{(c2hg3^sC& zVa9Od7-NJn(imlw8k3DF##E!sm}X2j<`{F0N~6kHWYikVjb`HnV})_Pae;B6aglMc zvBp?ytTWadR~y$DTaE3;t;XHP1IA;<k!wWuESi1yL!9&xca(|b|tuyUFojju47!ITm`Q2u1T&bu4%3rt~stc zSG~*UYH%Iz^1A}AM%NP8YS(G5(_Lq{&UBsSTH{*ly2N#<>q^&Eu63^Ut`^sAuG?LA zxbAe_<+|H-kLzC7eXjdmJ6#XC9(6t8dfN4z>qXb=uJ>IZxV~_G>H5m`qw6Qv&s}I2 zp^Ml>n%=*@skU}Eu@eVTh)SHK%gjk-NsBzo0_FG_@>OT_ud1yG1X_tk^q>$FTZutj zK?x)qh%4R3p~VG-GkyL=frg4IPl2zhsm@d1=r;Q2Wn`wOWoP6iri@8TNz5qBDoo5B zlbx5CnVX+ekXM*rSeTg;9{O<7hYa0Hjv!shk)#{xPI{1@q!&4g^bX2FOVAp$1?@pc zPzkC*EvRoLeMvvkp9~-a$seyX)Z-76!);{k@0K>$Y%wbQ-hi*(9NukY$J|(4-{|qrM?N0YVGxk{K?bX?iv0U!%gxuEO3TFC~ok!&KH$rf@oxrS^d*OKeV_2dS!jcg}7$c^MCax=Mw+)8dEx05@_ zo#ZZZH@S!0OYS50lbz%N@*sJLJWL)TkCMm89=tNRF4z*>5Zn~p61*mOZSeZww&0H7O~G4&w*~JA z-W9wjcwca5@WJ52!AFCS2cHZ+9eg(Ud~kR0h2TrUSAwqv-w3`Hd?)x`@Ppt-!B2vp z1-}S>75qB*ZSecxkHMdVzXpE~{t1)<6@kh?t!!yuCa;iJ$!p|w@&R8Kz<}Yk)O#g#8;q({?1bTCbzL+DVNNRwzXO`)kYji%EKnn|;0HqD{AbQm2@kD(*z zNIHs+rg?M>&8G#lkQULgbQ~?F%G!bYf&>W!oK*s`|0JIcn z8PGXEj|Ex@bUsio&^n;U18oGl1ZXqR6M>!#bT!a(fnEr74bZEAZU(v)=nX(`1$rmY zdw@O+^l_k11KkDm1)#40eI4jqK;H%WA<$2NegSkZ(C>i$1oSr$2nZ4gRuCK@Xdt*i zI1GdyAoK>IKL~?B7z#oP2pJ&cfN%^5qd>?9VJrv}Kqv)aDhM+`I2MFT5Ii8%fp9zs zjUX%mp&5h|K{y$N)gYV+!nq(^2*O$rE(c*92wOn77K9r>xDkX~LAVoydqLOVwtb0G3LjBH1n#=0Xbs^6y^-bD;kiSi3bbNMj*gC z-;DgwM{f9YoTmcq5Hos7b-U;cI+M<#v&&77tiGboGt2zy2~3|#gE$Y#`aR`sgwwGdiL#8bIb; z?5XuNc>KweQBdal{B?n3FOs_6Q|7H}!b3iPQbXuW)Wu~56ZX9>P`xO*Y#BPnb;%{( zN`HlaS#psdIh(l!f#f1zQ++i@Bx!#5XtF63fn?6-`RH~xdh0x~b6UdZG}LVb!gKlu zMVE;uqmAEJTZ>L(T{MH8z!6Du8+8W;5w0s@G|cp3HvW+4W3eazMnsI2uwEk*m4IFpZ`;WlmykN@vs^XbJb ze%P18rxzF3Rn+iV#S-&8KA9}Hac+1r|0I8V>d^?HDa&70Rf|zC<8wyneUHR4-o+fr z9JjHy6OfGN|K#b#5pD#a=2WJ-Naa&}TmQcAM7zN)sV+JndIyp4faeAaP%j&U1z z|L6D|WUXAdw93=Kav-rY+Q?@#(rv5?&*&fI*|Gv|`p5WvOVDRSP7Qr)lcyLpeGSKL zwA=6<7~HsWVt*noU2015VkR@w7Wh3Lmi%Fi7%ML~a3sdKjphS`#NSZVTyxIIkNBIh z2;IaHDsUTTbOJ&%!dhmgr;@J{N-_T&G7RW!!pcRR&{^gKs) zvfDVj6BdpINg+{d`&!^zQeW$1QD-SS_@?U}gW`)E#i?$ip%YLvRcP+MeDxZ~Vp?bN zRc0(-z0EP0@vn2iV#MzQj^wP)BvVc-nLgzhlploXBZh0g;%Ln6OhTl@8i(&V2FG?z z{v*cq$PQWg?0sF1pE**;btYNTW6AOd$Dpz^G02L+KoB_wSkmca-!EEF1sg|V{z35l zBHR%pw}QqITF{y6k{i1&T{s2{-NqeZL-Y3|vV$A}l{NaYXdFA8BlvV`-9}Y-I{#hx zvu}uz9+LC)*p=+T2gZVQ@W2fG_rr?J5JI7JP_#l8`f#io+{W!;to}W#+i^OkE%_0< zxC8lY{Qt_?{6!9RD&`|%v!}ukJ{#;u=#0WgyTr}@lbJ#aM{V%|^FH^LqL@Iv$m_=* zj`oqdkjb%F>NalrUt->pipq9LSz#ET$a1%_GCYz0PAUC;-C(91a?M0>jAj_caXP_m zEbcU%a--{PQR#c3fa8K~PMw~T$qMPttXO4U%n=H@jTN0noJ_|5G5OP2-8YG&bkYG6 z$^G&W8i@i=t)~Y2v|yRB}Ae_*b$*$F2odfUs_WW$M^MfKbC{bJhV< zhx=N*TuhJut#Y|g%W*lU^VDI4M?>}1_HuGON9eo*7Q5|N_b|%EGgyl`5*Pd{OEn$y zTU4o(Rjp&9(PloQi`>S^VM+hz+=6M?GaEn-Y-^fv<3C1gekNAS2RUME+{P(k#QyIp zsI=@aniTK?)}8S8l+LLfvrGOZK6A`!p21POtTRLTl-OlEmt%0n0W)X&71RAFvly~m z#F4tHbC6>E9H|9H%5D2b7MF6Q)_3MwwM!RV#W85@Q zHoRdy^Uo>3B@%X54#w|0s-+t+97z+ZcTBXxUcGF?V2SzhHB-03!I z!b|+$Y4XTKV_eqA(O6~n79ad>w{gya8GOHfPdgW5KWA#^(zKhQQ*iv;WkbRbKrlcy7sF*_Gy@m?w^d2 zSJBGxdaCnWv`FBT5=x54wpNHLN9dVF76=(5q zj@_<*oArs-1Y&oNbp+w=&kznaQW| zdDQa{ojr}{+QUBS3vn*T@5}!&GP6hBV#KO~Ph;=@Sca_#pZJWO$9z7IZ#qXwnX23D zjE_+Ui#QhF{f|B881V&SN!q|C^FwD_;u!X9;yC!gUfP`%P$A# z!JZg4JCS4ZTW6+?+Ii}ya18$Fl!RxFr+>S651alS;+^7MY?HD>fgT3*aG*zQ6z>)9GpFAb=#l@5>9285 zdh4UvY|^PIX(=nhlXyaWmQCVG@hS0X@fo1qf%X8}6KJoE;&bBjIEmdrj{=HH3HQS5 zb8y#i*o9}U+-sfFoSu@NHMDn5YTAm~&FMMm*=!-h6M92@mrdwR@h$Of@g1Q3fc6JE z0O-Jt;(OxzI3e7S=xCsW_=E-@+zBO|y7P=38^WuSxnfpxZbokOZ1#%ZcgSNuh(DS< zHU#L<2#+yVUvv9?OKhCg(^AqSl=(vv8LU4gB2h^Inglc%XbRBOjglnEBtfzQO#_qK@Q}4)2IM(h*WulR8;Ivty{Uw&$v{ z-^!a&3k>a@g{mOLInq(m05Wuw)LZH!^_BWb$Thh@hXEZ9^cbKcHc11eqmf91CEQGF zB+$_uXdcipNU7Ou@4+HpZ8h6-v7JhasJQmJ>u)K%zpLVQ5k*Rq(xr^qxC2#yKR^U@ z6gIIoJ9^{4s@@~mNAE%W7ylaiW1bHmsm1I1vffyCULfGB^71EmC;MFF!loetpX)V4cT@OuZF2h3a9Z5gSV8R0wG9Vx>dre>D1q-@;R zGNPHyC!;pt;T*nGmH8WazI4YOH4`??Yet68!gWneNzYzU-kg@2m6j9DF(afg9cc$C zUn;=mEdp8qw2&_@e(!>?6V7}8k>dv z?m^x`#zC$@-Wjn`nktnc9C_fXp==XW1Vo6U)Wnh^cWu->&T`2iFl${3Ycmx{& zIvMB`4tA;ucGQJmKjxY^r#UN)ku^7m31wPVi~^RHNh=v4mP^gj3DOFn(}3d4X8@hK zQ94lyBH)vN&H_4{11?9v`w^Lc+AAnpb?b{~|Aq^YmX(1MLN1)$oSL2z!!u_|=QB#h z)teVc7n)jTF3@>=Ld?xUo+){<*NiQ)xd2%yZL4{iw2lFb=QBy`r52>l2B2=B$8lg4 zA+q0CLGx?pqTS2lESQ~%yq%t&jVNcdt>`t<4GeTV%O`DxIcXUYmU~2c zlEI408Ba-1BZAKYT?lj$hgEALShRY*tLDi$%^8`Q$iTU%VP-dHrl&^ReCY-0)eedJ zn)EsXeiLXtP#*`}5F+aDAFbSb!dzT>1}rrlWdoTxB|Cj+?>4D^U;2bWj=T1sN}ri) z?+1#qf;5e+z3YP?5asMtX1dZ-+f2+i(vJ*WJeN`WN&49Y*93HNG`LY~d-|vBDsRrg z!E*#^`pAIgBn z<0APm`EUe^F6{|GQL=HyD??m#mLn_pHR^>F^j=ca(sG#?<)lUHF}auA4*|zreYw9p z00E;{76b|$FzN^xaMm_}Y*wnVZ60Ni>9QvniFQF*3#DJ$br3180Lu`8=TK z^VwWrl4;b%%|nm5e{OSHMh;t97CE5HotYUee)6$$RfmwPWsk|#7XiJPLkC?V`FKY2I=No<$tbC7fnEaiQlOV@l>Kr5u|)B>9OxAs)|CgB<|D_v zSJ~^h^5)cR)R{Tyxk&WPj2NPyD4)Wn6O=(dNj@3qI-u);wg7G2D4!~?!s#GWp~m0H zr?ctcPKSQ`$+JTPAr?wyx&aMhGz(oIukCQ5FOe_B+2G1-0eUr`%{3twS~I~hxGDrS zBLgiLszesOwJmy!ycyxfR}EX_s}b&2pw|Muj>Em)gj;mthd)j@1$7P&5K_^`GRV1T zx-;7#ZX*_t9%y=zuKb?-KG1uC z-Usx4pgT9pAIcvgf}a3=0O*4p)7q(%s35iC{)H=buYl`MH`NX7Nj=Aj18PD3ma*DMT1&?iVmzc4-Gwpd)2Bla80TDn?}#1Xn% zdH{U}D7sz9{m%h?9)}49l9t{)d~7wt!~ZCJ9F#w{2={<$9NaDz426pLS_kIHgyX$% zL&p zSS>RwGfh};07ds086Y&}qScc>9%-OsoR!Orem0^Rp7pU7X6fTb1D0w_$kM+J^qpvU zr8lqqWMvJ(=6^-Jk+ea4**O@Ea z76Vu|TdrlW;(2wJ>nztJhG_D>2Ko($^=*iXYc76t+o}+T=^VqDAi#2qs5Ex`ZG$D^HeX{J6w0X^$ z**QE%l!YvSCMG8{3!P>RU&CmBZTW#wBd!7X(ee}L0zn4B!qE=NX31kuc9XB=T)>hQ zVOW1!rH)8om8}*NmJI}q2ixSl^u$+3EWa$o1vwGHv})Ea46%4DWj(}ts0mB~L5&7B z>f)1nE$wOoOKHQ*+TGf_LtuTZeMy29_xsmDaB>nNa@=8=b6QjC6Cq$Ijw~%6?Xg%B ztjQhDH^rKYP}4!^0>U92>Yq%t$5=;za5xA@fY23$BR5({Sx1}m?*>Bm$ovmt*f;LdmWBnFm}(&bvo;`LKL`Ur z7{~!1Z2}&)CV$7K&)GsU$1R%!#+)Qdbwov2ms(dK;JA^zb*1%01PmYy1|fk19%2F> zvcBYz#lME+1M4Wrg)IHn26eUdEQW48hr)Wc^&EtH9tepbByp(8Ce%@XOx)SM7owY; z&7z*2@{-xDt4U^-2Vcud+x5A&mo04*{;;`rFL8<;~eFo0XcG!|0om z5}n(zZnADgxN$Y5^;+w72p8XskqH9kOHiL>n{Z2aTsJCj1tuS{6oZgcvX~Ce&Pa() z0a$Og-q9h(cUtd4$oGJd3&JoCd3XrpIf0!kwqYeEgU5r+4rQiA2b|UitvuX`OX0_@ z817(&SwImT$-svFmr=L9^TE&@OpqcAq#`9ELh-!y#SW+clJ#Xo@>LK$V0SK5eLedt6m+Yq7 zx=bv`+$O^meL%KkF_zf+mG!$0;eK!Z0pb1x!Z;9$Io$CfxN8fGPYfUhxHFu=Z5xxi zsF>UOhmBPOycT6PvzTI&&VTX0TSl)(!c9)mc)R6;6vNN?U@BSrXe2+fZAgEeV8~Aj|?`HVEY# zZ7DXiBsR1pb3mBOfzLzW2T$4G_4d+ThuAlxzF-r|U=p6m@*PoxA7Nwlt+=+!mT$xQ zmaPZ`Hwee^=~S4s8h7cQGjGd_*bwyF7Ot`F=`@%G&%f-Z8HH|Csp(ut znJP6sGc~&GWIMqI9a8-y+sP)?(H;h3slI*5Tj%nnOlyl{Y-iZc?GVfJZ0DP>nm||_ z4J-e$n{T~k4~LbS8_{&OOKd!PiRW6_uCihDVrv0mDG1B>j6+q2lE;QEy!cntbS(7G zK-Mj9&dOzMoYn?-i|smwWW02{?Rwh{2zWaPCxEbm172y8a>)9^fm^OH*$mTK`?!j> zTWxnC)cD%tZreQw^*#`SAOMGYk_okR+ryXj&ce(JZ^y{xjV2j6Y0>Ef+rzde*!sk? zO|~a(Pa)uEKsW`2Q#s&OCg4%Oe>iMmKeQ%U+1xte8qH?aR8&fBgxF(yg+Y#2g0a17 zdkrDK0m5k@oX#PiVM0!L&HCwf^i~*!vw4*)gJtQ_4+!hg_iP_`i0~)2PZ8|rAe;pP zFJ}nngb=>{>tC}%;a3VOWoDsbqB`3*HdfP$PvDMzD;&xtPYlZWNXs$%rIJ z>_^%AGeX33i|qsK0}<{Z5Uv2>N)Gob6K>J!`FH!j4XbokUBT*EG@sd%?CA*Bo@`IC zr`pp%SPudUSStt{Hrg}nnFux;gpD9z@c=!G%?S43S*W`w>g&$C`Gk(v{a~_)SbQby}-5Hs%78PZr?33**)fLxB z*=N|zRF`la2v|LcauwHp)aSm1A#~fKR{OE`4)a|0YCGn+>}a#Lfv}xpxg&(-?fEN~ zUVyTV@h{`)R31HLry$B$F$;^Kz0S@oMqKH(2kdAu>}WA=0)dw#gj-D5377xAVcRRL zSe=4?9QSHb5_6d2+{V}^*qOzMD~a}#>}WCUr-E=B2)sBTgo*>D4=o??=5nmB=Q5Wr zi+4a|{Jc#{#`vnLXrSL8g?&jpU$3%H#`s?>p|BQi7CX2Rn(0C%3 zr?G5Z8{o_Ayc;53pkrTe$8HGbS)hK#`a$%f&DeH$w>BON={Nh;_Uk(&><#v9Ca?!U zcrY4R!t0;?aqLs9w+HnQnxx1w-D>A{Bd#>xZAZIdN4y>e;SoM(%>J{)MbWCK3m@x) zjGDs0U;fU$pV?=bIW|IvJsRXg@8IHg^yQYlevHJvb~5Y=&^yL3kO2S2);LO|V1O z=Z#h7guvo_S)wUAu5~yayc;6k#2tq@up7eB6@=G8c!NWIGlc91cTK*2EK(JHMdqI8 zV7$S2B9|qaFohXnSVu2Mzm7P;(cduufgcUR+aU04y6~f%V0LK&urm7s6 zszT4?3l8^76YeO__rKNtj`}c{g(|$;4<#*|)m7RcmpfRf5!W|&9OuALgK_O%5WZ%R z!`XxU3*TNfcB|<@XGfeT#{x$k!g6>W3muCbwIF;8!gnBi55f-{9rX?$Vu^1c{Skzp zIF>&nmIu)a4^CeG@V3Foa;Z7U&CCfxdC84&+Z@dfRws#TEF9p#I*9{)SM=O|;}iPb zBzx&yS=m>8ja|99xy*e{!$JgWq-9B)^hhI`;|vFyi%pI*9cMYtcAVqDSFrvGA_0+t zD1az#a-8o#o8h>~aWRMzh%y^Nw18;ELH;$3v<`I8M!8*7`OgcWRla(B9Xvij(AM|L zikzYHXL>HP;D1^E92(PQ%kDQ3Vc*z4-l$vc2~-X3os^UmztW0LxqoM<_&vE<=-TdE zX&w7Ok1bORSf!O`fUsE=c?dQdr~+-wM9 z;U;>HInnX3<3`7AOq$~rV;r|T?m(b-fvAC~bD&sHV0Lq4`gdI?U4(%gV^N;GV=X!{ zdTpoUVKQ`s;{nHmj)y>Wfp`drhiz~?;&{~Y7>GxJ*cHSh5n9x~-j1jFgEu0|c;BUo zOWBL*6RSOyO*M(^9c=-8)o=Fv>fDOls>;k1PfGNSyUZI8-S3T6m09!CGcsdte964= z@crIcQJr0tUYV8>HZZR`UL!--uV=`ckL)$h(gB+8z1O@hKz7M~;sjpMcmM z#GW7?wZZY3<8#LsAoc-q0EmOz5#$>ay&eZ~+egQbCJwzi8Hebn!5qJtIQ0IP?Bg1K zRLk+F!U}|O>p_aFV1ZDR8M!P- zNN1^PY};TpjEEgqj#5})9XDc91}GRAZK!OKg~L&(Wu%`sV6 zz`^J}8+$yXK_@9GWN3?$3}RA?k_sZC9WCfembsqEowJz*d#__sZG+#pFnJ=|)H8r@ zLS9zstMFHc`W25Ui=c;(VKh}WHuJ%(M8=n(_7uRpxL?IL zgP6BbsZ^?zYQ+QM7!dP8M6!-W@a5$`UtJMCmFV-&$wwl3{F8m&dWNe>#c95V684ho z5SdGOwvsD1-Q2`v7({hC=)Y+9&p z6WVb)n4CV|Z43*WG<<>I{KPtZde^@UO`6}+;PW?*s;y|MuUb&%2?UTGrh4X&$e!;> z%T24ys>W(#c=%J4Q`-%HnsNpk{&Wy0wkT(USlVuQ{zhUDC%KL3;XOb8yWPt8Q^&>i z^L@BWw>Quj#_U36EgCoFBIROb4TzILoC4z14JbC3DwlDQDFbmf;^sDb6&Dn`CzlkL zO>-9(6i+Li>MkoRDa@Z%Tsp};p>TG*3kqjV&YM&gxuEwx5M~sY6^|(?oQhx=40CDM zD;rvs7Nr%$X&}x3ah7>_ld>75W4b9FS1Z>X8+izd3&{rMY9=P;wbv?}TNL!Eko%{j z(4ibPG)(hX)Cbs-m3gX~{NBc8CZz4k4t$z5^q^~*r*VU_UAd8#PoGqVKitM)&E|8l zLwmF60d-|&PU?zq#H!q)+)jqJDz_@Pfj9@md9BJF%AFv(L9A)Fp7)vTG`DkJ+{a(^ z8c1%atVvqfP!r{FDG!-=9NRfBRSo0e#SnmFV!B<*qY8FDwJ7LM9@nBg0U|5BMXBTP z!_XzZD*n7(z+Ba56qJ=`L99e^-=pkOb}M^`Li#H&DlaLx+1KI7UQ?R9Rf|e|zC~;o zz)4L^tIuYyv*(Xg&#CrRHPxYdnm)AzMATu`AXb4m|6r^M`r-*suY9xDiv}_I@C^kw z$m$V2h4xg~puDBLP0Rn{DtvCcV8*oe_lCv&UFH2Y!hZnb0wlai+>aS?(ZBV!BkmW< zm&(hWT8ltj$f*@LFdAvU8+Wwl98Ry`iK+9#Gx=7*v{|e2o$@`1bs+j$l^>O#Ks+AA zbJ~d>-=q@6`cByu0AEs$(GPQ3qNGmcTTgCZtUAzgs}|L&+EhD; zeh>p7HiFo+QB_n`)l?nC#UP#p;>jRlVGE^h&@6^=I(jn99y5FG^Cty-P5vrR2^xx| z0NRU27RR}bp>Zyq?Ds78`kDgM@b%4}(CzuP6#+Ey@h%U0T7cG3io18y7Nv8N-C&q9Rr`U6&OmdkIzSx=B6|zHHuY^l772%)o88 z^&9OO&HO7<(#2cV#8$S6LKuT&HLV>6=_)#}K@b5knA~sl>eKk$ZllY-)ZoIa4nyHp zhl6+u6JB+ssTtK#>S#4j9Wy(?_kck61jN-Kt^)B?5b*^#b^p8=N3kdh@VHC*w~kyF zo_3L1i~_8VRmXvN8i=R2s^irOAf5r@nYfZOOh%kxu6*37`;0?L87Uxnq=_^VA1NUf zWEp<4U%l%locRLjjb}Zij`+BWRi~Q#bD(u6ob+ot#2mh zga==%UdF`W5*25LF7Jj`^>P)5-3a2Qzb6K$l%n7E!~Fa(><#M1c8s`1y@oB$)gWHo zqHYC|6_le5)i%>TyvA(|kBNGisz~(u{QF3gT_;uzSeF?s~V89fMs}L(|{IjFu9GPNq}nRP}Ka z+P41`T4iNbPI`4pMrCwDQhmmRw&OpAhQVUxe9RtK#X#F_Lc8fdhgOl9k~SY72@dnX zi|R}5*5FmOT^3Y*Q*D<8Ro_+HWkJ;sRV;b7s2_oNM~jMn;$7|5hVSnV;+<||WX#&s zdm5Mc{EPl`=J{IvrXAwnt3NSO`9b{=#Ct%zuT}k7{RPCGAhO5IqS^RQlYIBOjkGW_ zwZ0nU5v#BW~OE3MFG+z6A*5u-wse( zW(5#vrNvGLBe4s^hfQSY6 zzm9e^9aW0v1o0tMDKB7lXt&ly*`pnz9ZIK&JJdh5t|<7Pr41GJ)jYDT@_QQ^XM5|b zJxeF!i#b4iG)Qp7dqI47x7JPTP86+&)>Ff5unR--@MR^Q`kKZC2r25=jEdSOk3kJg z20X$Ir`B8RGbieTR;@2Bk3L{t)n6N624N+>ntkl5Hc&g7*;N*##W}xUgQ^YI5@K0F zOVpA{mliDv#3x#`6cC?ez8Zp_R8i+K_dw}bEozzCNYdqMElbPRa*9x>k(ig-Rf>=&5KztFzmq5hm=oLI5 zuAJS-ec-Z!3FY2EVXe2ui+g9`l+D8h=qFcsiUTvfe)Pwfe|%{4iEylou8w&)&tJ6w zGmt!u7&&MHDXOUR)-J>3L^J^Y&IPvZ&ORez_Oie&&$XelbcwSQ-EAPrZ77(C%do+`8_9hOiEE&ZdOj=jHNkQ z?yQU%Ufkin-ZR_$$R3&&=KdL4IcAu&nc6IEHi)l*_&SJhY|!RtbD5oc6U1LlQ|C5P zZ~^mhr?JJDoSDkAYx%yqhFT9R9hNoKv2D`KwJr11urMA;*ma*54boF+-JBLTyYO1A4@v9jUoHLa7;zjqB2hd?(v4}<2DBG|7vp# zF0uVa+qjoPsz~nv0>P3?M}C3UteqHdRzVFkj0{o5e+(kFEp+KO+Js1^^qxMZ$y*yv zyKARu_@u|aWI0#^{CBSv{p=zCskK8R+PGgib|f=Oi9^81yPbM!;hKOe=#QVkr!t5_wiJ7V0Qls zCR2ELTK`60Ll;6c_vk-hNNPs*^#1itwY9tL4n@`US(pOk`$o;^U&R7i zOcUlc;(^MhMo%Cp1l6E8yR50I%Hyf_RPT0maU62^kqo0no@Ie@{0xoSdgx(6DJZud z(KToZ+JnlBNo8!WTf8#gSL^fd>DlWjNAEs;`{D62?{W{0I=`s4q9%a9nKtV;dZ0-{ zmu3X5LEPK$@FccvvZriW0K?nq#SGXO+-Ymqz@rBZE;muF#~WvvUp)*EyQXze0>U=4 z?z@L3I+Bu85Qmve$KcF3E@cfBRh}^^#1MlH1ecZ`MzS?60e@#^#q9gnn#m64uWpRX}UiH*2OH`0$Jk~ES{3dsaAmCPZP z7}Fh30vOkwNLG<^$fe{8aur!mHjqtZ3%Q1DC%2QGZ09f zAKITL(hPbGEv6-O5_*2q={$NI^-w=;qRZ*I^a8qt-a+rCJ54GJ)cho)LZ6`zd_Z6P z+O%^UwN3LP8RG(EzYW?(Z8I%LI?jSSt4s$;8mtyZsHuid~E$hRPVhdKmA z%v=4i88yic?MCe;{JVqe6Lf7bi-lede)*9rmcIMf0MnK=pkn`vix4lo=;-}JVi%P) zE@LL^FRo-exbZ7@X?LR}-lN^i_@3oiS$OkMQ`Q@(>3=qpsLrpVhIe(hz`nfvpg@8lZ2X{q)G$4a7Z zW8r~G$nZ+f-`}xSd)Guj{Qu{LyV^(Ql;nfH($UQj+UF)#)=qi@hgoaUzS4dqL$_#q zwXd~rv~RWVwC}YaK(d4607(H!1xW)*2g$ib`$_v*`-SM**UaGs$pFa(au&*<^)+MqYkmR(>Ay9y9V2 z^D>wpnNpOIo|T!Im6czF`BMZ?>c<+or#e0y^yP*|4`L4AHqP{V@9|BZwsfo8I0`T4 zuAe79L@YHifP5O$e7@Ss3V$(HYA?WPTkO5dKdi=kh*|`e-8!eFpv%h=?IXzf^;NE-9YNTRX>dM z)sN7->PPC`^zI}K+}!uXkkc|8HfNC=|{6H6>!MYjew*u;86MSZA<5Gbiw=4)y! zXXR;; z2YH=^6edksu;ng8WUH|mg^`-k-aLhI-3-(5G=G;hRo3Cv=%V zvpx?_I+O0bLx(0au;}#FH)3?;_XO~ZSsrES)exnlSCHWpKF%QR(I@Gp`edT$Q|J`E zOrM4x8uPqNLbEAO;^E^FHJ*BJQ@})+$(d(qqj{!lgSlJvKBqt$5hNfD25Iz*`V4(0 zjxkH0t(W6CQ}lUS5B*r>wOQzU*H-&I^)oQKLEPt5G0^pmrU%ozI#irB{X(|wbnGnW zVEh!GF&k?HNTWbXctJl-ufX9d^(wtu_vrKW8qy#6t$haK*fs@W@*7^k-W1$+m}v!; z7b%?|zPIfhNVy;l1?d=&h9H}`jbvU%NW%3pg#^)M)g}{WQbf?u88#b%xDTT*QYLQF zYxO$4Uiaw@ASHs73Q{^q$hp~==h>|X^hTUalfGDAQrgqdR=#TD8oYt72}%5MEa{UY3DRT>7;@F3}=ZRG1r zDqf;r8b1@&s$a&47q7H#-g$+7C6-d#vqKx9V|lq%zlwqT+tn99faG(Al>9Rq;U*D-e0J!0?G!~?B8}x^eVIKjhm@{k@=Jzlg6EiUC ze~g&W;MUjhuaPbB(Y#@DF812cKK$*EhhIKyF5gpZ`JM)8JktdsYxkUv+xcwKpVxQk zyY)T#3;K)tOCU`EsRSg9btZvS3esedrfkt)(O=bH(_csR@uvP3NK-*VR+tIWaa?m$ zfK-W7pUX@x3sjljons=&(MQjxBYtH`WA0dl)ErAppt=m}$vEe_htCx*MIF!5Fm2jw zPWT-5;UJWTrb^sSJCrWL>`Y=+qFGW8Q{YqmE7B$YqZ#^M{cCiWz6EI-NYhzTR+@n; z#lz6$11I1%DDj@-i?$g*>%W*b10**{vmz?qT#!FeVLOSFIt8cb#ISNUNaY~S0ckEs z^V%!yh<*;MyjV3FJ{qe%_p3CWN0>_U*#A^%_DgJJ7L@s5!xnhFH47SxeEzAvC3%e@ zd(gOGSh(YY88P+}DU%h#Ym-#QTR>PsIVy(M&G(K-!#H`I1Cd{yM+5G-E#kK1`}E3X z;d9qv=h!*KnTTTOL?b%C#fgTDb;#jn?lDsG7ozM;b7n+D*@?D?wJ(LZ#F^tf2Bp}U z>m24B4w4t7g&-~3;2c5vJJCp_oorR1ls7A0YDJ;d#VkhnyvBf#wIl)=t zoamh7EOnyH)`R2&2_1psLGptX0I6|{bE>nAiTv0E(qfR7gR}~8`*3MB zNT>Y^rPvvg;;O_2o(c@+!mCo{T!6A0x6$6|buJ_c&RUSrm%#2Fl-*^f?3R3-@@3{v zD7*ZTm+X}2M*Aq)b^4uwu7tD!0b5a7K*=hD7)xgH_|a{2pMle6 z%9!{3vzRO}wPFb`*`SxuE%t24ODL=Iv8-XLP4h@D?L_aX$d4axa6NUaFL3!XXkJ2u>IYMndOZjVJNe5Hgb!}y8T90DNbHbQ4JEir=!?NHfxn3?tLXGO|Is6{OcdCLr5EJ_6XT_-NjH$0&zLJ}D^@ z7k7Ngn2N@#1x4Qa>Tok&*iVUqvaGJshsm!V9gMoU=$i?)luqi2MMEzJ3+b&q`Nm8aDy0 z0~Wq|p5aFBHI4=8{uTpcjh%eX`^NWXKx0%JHLQ*23S&Mi{7VnC8Vm5N^dNr48z+aM z))@hOw9A;UpJFr^#~bJ#VQ`iK66&&tL3#ww7)|(p{2xE_DF2I>Fd#9unOWhc2KM9! z5}`Lv88xw49tjV%(pXJ~UX4SYXn=8&ak6oWajLP3155+yF_0by=?RdY1PN8+(|DnA zx;b*x_|LSB&kzkEGSkeB%_`Z9L``CRAxMVHH z{UE&*b?!lf*(C$l^5qtD0hyQ_J-rx{6K2>F^1&j%**m?*@kj<8vJfXdVLa7_HHOWv zMq&M&@qDaBF!mVO<+jy$!FbVl$#~g##dy_t&3N5-!$6DlI!JGTgkLahejB8BKzbLX z_dr4e^ubo+ZPMR(7ytjh@c~O7lfK3$AYs3V2PEu-!@s|P^cy$&9+tBI11IV>n7WGS zu!w+$p`+*Vvuk7_F) zpZ&zA1moU_%?h;@4FON}Sii5SArNMVAB>+EJNyXJM=i$BAYm8Fezex_#vfq@aZ#eU z1efTNTymuABc|O0q)$OYke`KigLm0*H-zc+0qiOajqY-|bc{b;ic58AAbk$f7a)DP z!R2%rE*D5&f%F|nKOjcoo(fb;lgcJzpHGdyqQP94P^SiV`?-#Ab#)!->gMY1>f!3? z>g75L`|Ws-21~uf^lM-*LOy155EFJP3>~CzLHgRTfV3B+Z)TXyA~+<=xg$eO!<0S; zx7*dv)fLCRD?ROGiQh~$7LL4REtb6wZ8`O zXT>s1EMuLHjl(^7SCjeNYM78qUD$iK*|p5I+|}$l!5HIO39 zEM`p$qRmbPsy*g#DIMX>>j3L!(5>hAu zQb{4CkRIs-qyz}P2q-lY5(tn$fY^Gdpu# z_uSV#{sa_CU!Ge$8WyL|^fM_@@0<98$LsI)!=n2W3;zATGJrXHA3k6vFbkN?G}J$- z-gQ9V9SZf0A&+SY{?Q6de?IsR*8LNh|Eu0M>(3vEBqF@@!m8NF`1qv1)At~;WDP-a;D)5rr}Da;VPz~#c6$=p9MAp z^{dkX+kox*t>kC@TQUu;n1-u={$9g0{24al$NFIUhVY|iJa9NP?%!bkfAI^T{>uLh zoj-A~{^S4o27h>w>zT>VHH3d;`)NmTOZqi<|1^{Q^#S~9H$RLSzq0{^KcCQ#srA2a_z3vqUm2eQe`gxnF%38BhyMTe$*|fhO!+722EGFR z@vqEpf$x}xo0x{1eGFKOQYo${Ah@2?W|vOR-i2K)YXwAoe3NqB& z4(IEwJ$jYJuXR%Y+tm~_4`dYhv+wxnZMsDNdTb50>m3hW=C#i2oHsCUblzosOrZPo z9_qvWJe&7o-s^d9jf{-87`YhfqiPrh8HE^y>7!ym^kFdIMo~sFMl>Ua5z~lc#5YPc z$}q|{$~DT@M@}d)YB!oNdTR9Ec!6Gk8DNYu78sWqmm8lkRvQl)4;zmfj~P!G>x?fL zUoyU8e9icVUV-yoFJ}3omvu~^Z#aL>e53gb<^$)O%wMdRZY-bgIX_A7B>HTD)dJrI zu?wme+*$})cvx@P<^vJ|L;x8;0Z;*SK#HEaasWJl0FVku2V?@W0YX3?ARkZ&5b4>Y z7*MV!iPeBwKs}%V&;&ROXaTeVIsoSYQh*H54Nw6307}3BKn)lI=y?@j3@`!E={eIS zJyp7v5PH&|MFh z4gkG@KEOl3!$5!FQQ$E>ObOFt4k*YEC=XNs5`juV<)A81E$B3;3DgW~14%$qkQ}4{^@9dL8qhFE3z`5; zfi8irf^L9rgYJPIf*yl@2fYBj2E7Hn2Ymv41si~8fM>j3O)`F0f&PjU>Gg6Q^6VFY;Z0(A6x`30hfU*!8PD|a3lCExD~7btHC<(1@I;C6%&X_ ztVyB?&4g_tFv&3yo0OYWnpB&DO;?#(nyxmrHmx_6n0A_WnaUU0EOJ=nxM=sHJ&T$a zbuE%F>RHsgIAw9h;;h9vi*wE9nk_OjGh1r5%q-ok$gJ3`)U0d?c*&|ImP=MIv0jq9 zqY~-fYv!$4yk^N7^EJ!Y zYpr~3&)VK~ zo7Xw7+q=$fo%=fFy76_B>!#LST<^aA$ohcwf$NXkfNfUUSlX<%v9?LKDY7ZHDYYrH zwY0Uj-E6zncDwB>+po6YH%!|wV}oMD$Oi3(@ePx9!FEx0F?LA1c)Qzn&+J~r`uz;6SkAKCv8vO{(SqV?O(Qk+hMSycgN_Cu^kgTbPhod2#08g zScf==HxA!-PTM(Sr{T_wouZv3JHh#jwLLfX+;Yx!E_beUu6C|rNiZ% zi_}H77r!@UFKaJnFVA(3tEuZ^*CnpzuBomCu0^iJuBC3X-AvpTxtX~wb!&8!y2;$S z-4y%m_U+o|w9k3p-hHZl6Z>@gF6_JHE^@DPKkeS=e#T>^#|Dp$9-BP2cocfnc+`2E z_Gt9<@bvdQ>UqpF$n&P>Q_p9fFFarEN9|AEPutJf&)omp{m?d-kR+s*rox6HfSTjAYz(Bq*0!J`L{ z9Sl0CI5=`pdvN^Vq>r1ApU)AW0G~jg9-m>KQJ*oN3E#uM;l2^Rk-jkBOTPDgANv00 z`{WSnQ1T(#A;ux*q3?diehd5nejq=!-<01)zsr7C4@VuwA0`|o9Zou8cVyQQrz6fs z_8xiXKiz+(|1AGG{>lCV|5X2U|IB~`0f7O>1A+rW14aX`23!xg8F2e(&{4$E=%cYm z*x|6?u&6L}7%q$uMh;63DV?+llP_k?T0 z?}fiQvG|0`i32D6Pv|2MMJ$Q1jo1>gJHkD}KO#H=8G(-=MkGa0BN!2ah_r~zh@6PL zh=Pdnh{lM{h=B-g#6-kY#HEO<5%(eo^g>xfT~Sr7nZIm8;W9NPxNH`=Kk_e$eQXp&y4{{PBgq(sDLW&_`NCl(;at_i5(Lydku0n1= zZbR-teuun(yoS7myoY>>G>vqM^wwLVk|X(%Ig#SXy2yseGm$Nk?UCJ)y^+eu!N{S= zk;n^?w<3R!d>i>b@>Aqjr~z~?)EK%D3WAzK&7c<0jZjCZC)5w>4-JF{K|`T%XfzZF zO@LyccqkRhg=RvFq1DhjXan>Nv<2D)?S}S3mC!-x5OflH4f-4O74#42pU{ucFEB&c z9GDSo0SpK;fh~uvhi!%Jg?YhzV16)vSRm{KED{EXMZ=J=1Q-#@=(i z)(n%v%;IrZL;Pc@CI2gVNz7lQ&cYyDO?}K~7 zz2H9ZKzI;56n+9835UZI;6ykBo(?|+FN7Dv#qbJv1N;oU1>O!n2k(L_;bZVC@Q3gh z@YnFS@b~afh#81kh`9)3#6koJVUAdf*o<&S>_>Pbd=ZBc0f;a}1OkdcAYu@4dI@F< zA{9}9C`VKwY7wUqO$Z4>ijX4|hPghIsCQA{qK%?Wq8CRm zjb0wTDtdkNhG_ffEz#SfcSZ+9Q=$dYEzw=k1JT;(Yti?kA4NZjeir>Q`a|^R=x;I8 zVrIt7jwXrs_cCkBR-C})XLtW-aYRy;Re5T6sDm*AM-mf)8VoDh|O zPQWD)637Y337iCeLTW-rLUuxKLPjUGW1Hc zCE6Cf9qoelK?kCP(4puP=twjYoq)!m@n|AC3C%*Mql?g$=o)lAx)FUA-HDc=d(eGo z6#LUM4Fks9g%o5Bp%o@x_%x;W3W=^b2_A&My_8V>*ZYFLvZXOPdTZCJJTZUVSv&7lrw&7fH z-Z)>}VO#+27%l<_#UXGpxHudNN5V02nYaR+2v>?L$5r8)aLu?joCGJu$#Da?G2C_B z1Ke-8r?}_1SGbS3FSzgc>3Bo@96S(jj$e)6jNgUdgWrqahxf$$;r;P}_#k{J{scZ6 zPrx(rnfL;{2w#dX$5-K-@Xh!(yaX@B%kh`+UlWZIwa1ZRRb;V2=JfFvXkFa$h-NMI0H1TH~9NF!tt3J4X120|yH zkDwx`3Fir;go}hLgzJP`gu8?Xgy)2h#2G{YaS3r5aV61`xQ4iqxS6<(=s?^>+(Yyv z9wCMjV~AK{B9TO-5NSjn@gy;wm_-y4PZ7n$MxunMB#scrh?B$%#LL7x#QVfY#3#gO z#FxYmq!}b*(h`y-X$@%|$(FQ{;TuKK#Qb zvLo4v>_T=Udyo&1kC4O2(d0xjjhsSelX>KmWFh$!xsY5;7LzN;4dhPp0C|#pjeL`Q zhkT#>i2RcLhWw8Ff&7{LEopWVFlj~7+9aDKyQED?Ta%oUT$0?9JdzG19n{;(ph>8t z# z&r6=43`hniFG^mLye&C2IW{>bS(IFpd^TC0JdmtO9!}OKPb6PWzL9)8`CjtFQ?Fwsw35j>Oys+9;6eBE6s`KN%NzH(Gav4S{w~U!_p`;8ZCv!rtxSeX+oNqR!@`A6tsTY08K+1rcKc< z(XP^N&~DT2(SE0WpiieSq?^&r=_}|K^wo4b`X>5T`VP7y-HGl&_oD~Xqv&Wlj!vMH z>B)2solj4tXVA0hx%3ixExm=_Ls!$!(?{v!bRGRV{TBT${Q>KKENCt{QVo(?~Mhb(?NM~d*gp5;+LPjy8n$gVY zVyGG83?1Vl;|k+C;{oG0##6>~#w*4jj4yhXHy~wsign8Rlnp8NDO*x@r#Pp$rnsl< zPw`Gcq@<^aQj{qpDHl_2rTm`qHsyWFr@gk#584^F)f&OOb4br)0cUe z8NfWo3}!-^2xbg3j)`JonG`06nZpz@OPS@&DrPOSnc2paFr`d6Q^C|QFEH;gpELht zeq?@OerHW*8L<|yfGiW%V%AcY6>Ae~7i&N3Fe`v{j1|lZVjG^>f#%xYsvSPE7@Yk;L;4YRbYORRgWXRMFx>1;#x9JUdA0edlfDSJ7472Aq! z&9-MdvOU>;Y=3qjJBS_1hO?vDNOl4n!^X3zY(6`WUCJ(JSFvl^r`c_630umRvlZ-q z_AvVr`wsg#`%m^q_80bd&UB6uX8{MuG2txcEag~n>^Ke_caAUTFeiX>j1$a(auA#t zP89VkR`cw54m>xWA1{a( z$~(b}j5&{$9Q}|2QAQhw-EMvHW;GfluZq^XYshpTp1K z=ku%hP5fql8(+eg^85J%d<}n?ujNnhe;0rRs{{uGM+D)5XhEWYCP)#m1w6q?flzQt zP$(!Chy@jb20^DlDHs=A6WkQs5!@F%5b=y5sV`Drr@l>npZY2FYuc=|g=uDKYtlBRZBE;k z=8(24ZC{#anpc`nnqQiKT4-8y8YYdF#!2I+rKV-1<)sy*iPB2b%G1uIHK(B#iB^!RjiIyIe^PETj1XQrP@FHA2^ z7pK>x*QYn8pG|K~SETo)E7J!vwr99yxMz4~cx7~Ds56E#hBLI8ftk?ExJ*;$d1gWWfx_i$)3u7mi;dK&+Lym({twK zEX-M)vpL5($2G@2XMc`&j&DwE4lak0Bgje1$;`>g$;&CtDbK0Osm(c^)0EShqsqA{ zoGF|yG!t3~t%d7_8-(`4T|y6`zc4^}RCrtn7e)(_!UQ2kh!>^^SwfDGFB}j~3U$IM z;U(dH;UnP_;WOb&;Tz%i+-bQpa%bh9$c@Xzftr_mA8! zdDHS{=FQHVmj})>$y=PaD$hP|N1jWbTb@VWfxO5(WF9Gxp2x{6$vd5QHm^0WBd;s3 zJFhoSnKzy{nKzYp>6G`WcXkJryiX8?bOp#&riL|H_kWBH_JEAUy*O0 ze<0sK|3rRdK0H4psd0$4#*L2Lo8fKWg#NG?b( z$SM#PoGK_RTu`{UaCPDO!VQJ?h1&`p3U?LmDfBM%DLhnoq_D40TR2`gS$LsnLy=>V zTaic6fue&&hl-9Dg%pJsL5g5SQAIgLeMK)tW}-Esbs}5QM$u-`Hqimm5z#SGuqaFv zA&M7aMTsJkh$>=;SR$?{S5zw+7EOt6i0+DBi2e}$Df%e-Ry?hEX7TLeImN(Y>tg%j zEydf5cNTjU2NWMG4lWKWjwl{4zEb?K_-XO;;#bA*ia!*8F8)?xSYljaQQ}h)SVAbF zmXwsVmGqYMmGqYkluVXfE4f*6r{sRgqmq{;Z%W>kd?@)`@~w1zX;3M@w57DCw69cE zsxCcWI$CF^n;^ksnv9lN|MvD{0Br!$I5VOQw zu|RxMEELy?Tg2_+bK)-Xuvjae5KoCOiEoRaiC>G~ir6mXXUSWwbJR*-+W}vf(mq*|oC!Wsl09lszkZS@xmq zbJ@4@Y2`D^XP29lFDf@HH!lw?hnB<3qsn8;tIAu-+sZr2JIh~}f2%O4m|kI6;ZosK z;ahR2;z-4biiiqG1*`&7fvvz*5Gq&|>R?$(>S@EIL zuyR)A?8UaY)Q zdA;&h<)^9{RkNz*RvA}WRBfwru5zu~SLI%{zskGncvV~#y(*=ORmH8!tP)j~RW(+1 zRB5X&R6VbrQ4OdDR)eZdt1YY7RIjVHt=?F@x!R@LzdE8CQ;n}CRwq?cs~Od-YHqcl zx~RIOT3lUGU0q#Q-B5j|y1BZoy1QCaeW&_;jd6`djbn{}O>|9tO>@n;n!Xxs&4rrF zHP>ox);y^Bt>$UX^O{$+R<+Kx$7>Qd_1b?J4Pb$N9ab@g?Pb!Y2Z z>!fw^Iz?T7-9VkTZldmf-K)Cyb)V|K)*IB%uAf&wzaCHzu3uVjRd3sn-H_W*($LV* z+8}KhY|u4aY`D^Jz2R2F-G&DZuN&Sryl?o_@U_vPaYo~;M%%{2jg-df#xsqQMnz+P z<8b3-3P$uGvQ~DXX4MG&S1}OI=knr%URd6?q}6!r_NqHd-?3O=Dp3n&0)5_UXj>*) zrdlqwTy440a=YbT%fpt(Ex)%Kw9aTXY@O3;)ViP**lN@as6yf$hlX$nMDP$nPlXDCrpMxZH8C<6+0+j^8_8biD3( zE14!SmVhLt5;KXp#9FdWvRQIi5-3TOFeMxbUy>@xm6S`WB(;*$k`_suq*tPp3`&M1 z7bRCD*Cn?kuO;8kO*=R9+^ln`bEI<_=Y;3#&$XVraqe!Xap#)Ob)7bycAfT}J3DuG zI(NEudUqyvCUsVIHg)PcFL!>G&XdlU0;FK+BIy#TtMrici1euRxHLo>E`>_bQld0T zN|iFCJn2bkx-?5Flq#f`q%WlJrJtlA-b?#>0RYr-CftZ9?7Q57RtHa@mkDxW8xF9*oMa%=fk`3||Ge78JOo+>Yp7s-p|VtJjsL4HQwA|H}plwXlw zm*0}#l|Se7lX zs%~}nRQJ8^hux36fA4Y_xqk%J#%}EdlvS9dQ5xFddz!P^w{<|^!WEg^{{%% zdzyL_JtI9AdM@`|>$%x;r{_t}v!0hdZ+hPKd{9hN%vUT{Y*5%MwkWnMb}Du&+!elx z!-@dKF-5QNV-*^w##??tRw#qW4wrAH83CzxPe=GwfU5XVbT}Z%3bFpHrVp-+{h^eTVvv^d0Rx z-UsO;_p$pj`b2$IeYJh3`lCe{a5>M^xy8k*Z-{l zopQR;P&r3wq+Fl`D%U8tD7PxNDIJvV%Kb`jrLXd^GC&!oj8wvv(MqI}q@*etN|utZ zOjTwmvy~!cm9j-CQA(9^WuH=|R4dObuPYxYUn}1#-zz^Uzp4yWb5#peK$VGVv1+wy zy=sHXUbRi-pxUL{qw-V*sDf0XsuL=hDoPcridPX-ELE0Ds5+%8R28elstVOvRjaB) z)v1!HdQ^QXmFm&J+=2B22L{3hr~@Yl@&}3rN(RaXDhFx?>IWnP(gFE^VxWIuU_di4 zJaBj5)!_6&>%qXm#6jjDXOKUbI+!t-JypgSQ6n4?Y@vGWcTf z_2ApV_k$nQhH8KstX`yEqF$z6skTwusW+*&s&}Xz)lOX0v9S#zEtxanZPGJT!+i2n|j{(2zCB8oGw5$<*X%@-zh+k)~ABpgE&y(X?yM zX}UCO&3VnJW?ZAwT-4mtJk&ha{H}SSc|Bx4v~I|DXyef4p>0DBL+(Q!L!LukL&t{V zhEPM;p~NB55M_uqlrqE~;tib~5)V}jRS(q-H4L2@Y8h%DIyWR8k`F0{UY<8S?|MGu zJm-A-`Qh_Vhi44i3_A?(8s0O!cX;2h=Wx(4VmN9zdKfuO8crF`7|tHf9nK#v8?GF# zAC?Sv5BCl$hX;p8hsTF?!xx9I4Br|4WBAj^!V&Y4bt5}QoJU+o+($e|yheOR0!E@n z@FU41^pTVi_DK3j-bm3%?MUlL&q(ixa%5!W;mEU*@1uax#iOf6*N$!)-8#Bs)N%CC z=<(4Lqp;EVQNd`|Xya(#=;Y{)(I=yCM&FLU*BWSzv;eKScC~h`)<(NkyF=@s-K*WF z_0dAK(b{A!Pn)Z))YfS0wT;@d+E#6cwo|Lt4rzzATJ5-2r@g4XqP;#gZOm$H$5_Z1 zX{>lmIW{sjIyOFbW9-S;v$2CITmdCPF7pOkgKcCJH8G6Pk%@6E`RB zOx&M%H1TBO*~H6&PnoKU9TspaYa@C~Or1hlh3np4I)7cDE=U)ti_yjD zP&%wGQODHrbSHJ`x*T1eu0SW!ozcm3y*j0CP&cg8>Lzqky1Tlky7#&-y6;odr)E#h zo0>lbn6jGMFy%PqJmos&KIJuaaLRY;@Dy$;`-1(2ofmdraK7MrA>cyLg%dv=stl%2 P|Fs7h|Jwh(y#V#AOh(fq=bY(AQTC`t(#;C3rRNaCbWpmQAEW87DTa; z5J0g27C;4iL9qg&V((z@9sSR}vzzR|hR^pu4L;s8yF2CFbIv{ep1D&}UEvSaBq#6Z z2*+~*Cvq0f>VDMy*yJAbe8G@EP&K(npk$7(v?esAhc{R{+mDCG_oxX}x8caLwVU0R zUYw1yb8WeHTzf8oOXQNcWG;nE<=igd}qEJ-}JpVGk zmp{P2%D=(C$-m3L$A83s%zw&%#(%|s&417T!2iPk%KyRtDF}in*ae562&&LVXe)FS zP7+QNItg8cZbDDtbfJ&XS4b98gbX25=qL0S1_^_Od|{|iD2xzB3uA<0VZ1O|m?F#& zW(p-jsZcJ=7Ak~F;T$0-%oFAdb;7xVE`V^MuuNDkTq>*(Rtnb$tAy)?HNwrpEy6mX zQMgsOO}JCIOSoION7ydx5OxZ?ghz$Pgr|h3g+0P^!b`%-!Yjf7;h^w_@Q(1V@S*UL za9H?M_)_>v_)hp<_*wWxI3oNZ@}eNxM7t=9is%;Gh#ka^;;G_kVw~7jj2C-~y~RFa zl9()}iy2~$*iRfN4ifXkd~vu~C{7S3ij&02;uLYJI8B@`&Jg|L9C5B#Ay$f2VnD1D z&lMMo=ZQ;1T?Fxb@d|N;xKg}Qyh^-UyhdCl){70|I&rhOMcgXhE#4#EE8Zt=6CV>F z7oQOKiu=U<;w$0-@m28+@g4D9@jdZ<@k{Y5@oVuL@rd|`_@{-l$QH$-T3nV>EvH#J zSvp&KTl!e~S`sXYmLyBECB-tpGSD)}GSX6H8D$x5nQED4nQob3@muCt=2|K&3oHvQ zi!61Pi!2vgF0rh#Tx(fvS!Zdqtha2i+-*|OKN&+?At zUCVox_bne-KD2yf`PlNU*>~B)-$Xb)=X=bHQSnR9cnGG4zm_p$6F^@Ct4?2CtIgjr&?!O%dNAmerv6Do^`%; zfpwvEk+sfxuJvN;CD!HEORcM|*IBQ(uCd-~z1@0;^-k+u)(5N)T6bD^Tc5E$Yu#gg z)%u$Cb?ZmgkFB3rzq5XC{lWU9jkgIl(Wcqlwl=o5wl20fTUT3xEzy=_OSYY98(Nw_QCdC`w;tR`xyIJ`*iyZ z`%JsXKG$Ahue4X$7uoCV=h_$BFR?GTUuwV1ex3b#`x^TO`$qe%_S@|D*|*uZ+jrQX zus>;k%Ko%{pMAgm75jVk_w66pKeT^j|JeSC{gC~8`w#XX?LRpLhv=|4+>SPmwvH~2 zI7e4UH%Fo)$&u_xaSU(_bPRF~b`&{AIYv9iIHozKJ7zd$I_5a$Iw~BMj)jgzjylJ= zj*A_aIF>sub*y$==eXXn#<9V%(Q&KeHphLAZI11Z9gh1Q4>%rl>~!pQJmYxQvB&YM z<2A?Yj*lE4J3et7a(wUj!SSQxC#T>PoffCn*~Zz{+0Gf~?CR|1OmrqWlbtEf0nUNW zLC(R>BIhXQXy+K`H0N~Z45!~Y$2r$o;auQc=v?Hib6(`U*m;R_x$|1*YUg#%>z(VJ z8=M=Rw>s~2-sjxr-0pnb`GoUH=TpwT&VA1P&Uc;fIp24F;QY|}k@I8cC(iGj-#dSB z{wRr(MY2jZ$u2o0SyCiba!IF3r%9cp&QfnFQA(21q;x4;%8>?01EnESfiyxIElrlD zOEV;|R3goi%B7H0Bh^atq@~h@(lY5H>1yd3X_a)XbhFeTt&=uNw@UX)_etBN?a~hE zA?ac13F$fMdFch|Md>AJuXIp)LwZwsM|xNKQ2JE*O!{2xSvn#US&>!Q zC2O)<%KfH7s;2(E9GnCHS!Jejq(!G; zjZ&*zu3Vw4P*y5eDpx62E7vHilxvmM%5};XWvgL_)zI#r#fPFH8BrRp5DN)4*>)J1BYxV1* zM*UX(QT<8%S^Y&l;vz2IrMg@$&EHOf`&n(R8;<#m;~=D6m%DqKO=eAg0}?z-4@iR*gT8rKc38(lZKZg$<`+U(lm z+UmO7b&u;_*L|)BT{~TmxgK}zaXsgH&GowLpzCwj7p^Z|U%9?^edGGp^_}Y%*Poh2 zlQg&1Q9D&j)6%sJEmOKwp6=NyI8wiyINbVt)hwM z7rW1MFL9smzQDcAeTjR8dzJep_s#AN?v3tS-CNvS-FLema6jnY>E1P=M^$Y_#Xio# zIXQ`wITzPv(&*yExxR&=srVU=Mkn?tt?-6I4V=QMIoI&vp*Cv&H8r*fxpow&|i7cNe>=vLjP+jWQT)FoZk6q5o zJ-B$TCwDs6i#vns&Gpt@x~BIBVJ!&jK-dbxJ`nZ;8H)ec;}OdtL7#VSb--U$6Ur^E z@z3+t_{u!mDfzxx-r9K(M$5kA?~Y!3pDvLLRMSzOSUVyxd<^KFMEI7MMT8 zH`_bU9|%ro0DQ%zvwfA60mjd9wN?4PP>sLJTZ6H@M@ug9hHCNxmDLqK9BM2L@k2Gp z8soMh-jJ`1-RQ4bIL=oc2qMp15%wA5Aqppr^OfQ~26~aRVeE3Ns|%3bp~9+B{wjYH zu85H7cV3_>6sYhyBD~JwhH`yx=lXH|xih%|+(2#+H<-)ihH!aYzV6oB=xz0OdV9Tt z-cdhEKUqITKlOI5fE&gQ=L)$I+(@p78^w+0#&Bcx)AU|?Up-mR(`SH?2Et$via}Tb z!qt@H$&*V1Wxhm|j*ZEfL>@F_ zdiwD&Eee!Ju8auiOs<6MyN>g4XLDY?lOCscTgR1hWt>m%q4(5J*W>qbv(a4nxjEci zu7Vn@5>%#X_!;z7pz_W0>73q0@9fdKEl5~Eg)pIvDssX+6uMBqq@=7_WjWrQ(vpm1 zU-Diqz*TeSaKWjDm8CoiS#ba1<9zFPcHc;2&4pdr_IV&wa zBRTrMbJ=~}k9(iDEUPrFBo*&7tn(61=lZT)tH&D{U%)N(Xl+LqkE*TlmQ?ui{bvjb=(EqgI3(=y+INz)RS+jhpIjJR?Whu!`^sM1- zFb{n*x0Vili=I%=)$2*-p*OIh6Fu5M)6i9hR{!Ut-^Oh+kA5e&h3nhE-NkLzQ}nb3 zZYy`Uo}mvkW3ioKk?PUTp)@1GNfSb7*OSUaWl3oJ=VGlUDSl{1{E)o(?Bw{Nnejt% z<8zXeit}@8YXU{yg@M`{(~tO6>=?(v*U9M;&U?aU_NS4QemYRtzJ@fNqOR& z>hfsu*~!pI_h_M3M8jVis4@^S$#`(Y<<9f?pbaR_Z(_*5AFr-MeZe!)*;#ik44f)*H)JJf>UbzmFQKy zmDSVA!m$Oaq~2fer|0Nro`{*~p1ZU6^XI+Y`GAI{F={+s;SPAT)1uKon*Md%tK4fG zy7S{+h5DR7as1Ku8e<&f-atc_8w`3EHgE^IP(*>>;@)YRg?IHq)H={m?gPr{5B0%j zP9Ne9b1xz5hUmGJbtgi481wWcDKjDje93)H3HVCSujjte3(WfVBNOzY9&K?e2s(|( z5-Y0FAtsIT`l}K{O`bf0>o44&T;KKFuiS6k@7xjY4}F+ETrbo|=p)w?ju65VfrxsM zK1v_0kI~1OR05qMN^@Zu26O&del!}WF4QCY%8WA@rOon}*9ODEquWp=w4dmq=lLb4@T%Q9-ZjP&g#dTQ$!cGM`{_L1b?CT7AHzG9&24 z2)A&^nA(~Of7MZ7!W0uXX^XQ%+UR5JNjv>4MiC8bM^**qS4G`9$zN78yZhka*Bt#9 zx%*_&nd{p~P9dj~(?}=1SRb!X&?h#ME+me0CEfH%`ec2IK3$KWIyDfeEbx{h$EW2X zhkU`YG*CzU3>J+KR2TW?`6|Lp%tz++FuZYL{&+O3VT262#|A=v>I+ACtGf>}5aOoR zrKhF!jY~_@ zX7UvzlWgSrZq}+v7Re?#q#x-|&LjiKKr)C7Cb?t?$s_q>C@CPr$Z%3fMv#%Dh>Rkm z$rv)0oJGcwVltjgAQQ9h3N`W(GNuhOgapkAZT(--KA^mFy|bX`ARU#c(DFV>gqm+4pNEA^}NYxHaN z>-07Hjrz^{TD?JU)Hmq2>YMaC^t<#e`rZ1y`Zj%s{(!zye@K5se@uTue@fr2KdV2d zzo5UQ@74F~2lUtUgZi8L+xolu`}&9a$NC}tQ~h)OOZ{v8Tm5_eNBw90SN(VW40?~l90n!dg2OuW_IR(gRKsp171JVsh4?Y5UXUQJ&9C@C+Kwcy-k(bF{vXAU1uaE=eRq`5n zog5@@kT=O&Nf$s=pAdq1|Mgy4$WF`L#AoGFL0a*g%0w5OwSpnoKAlCv}1LS5P4M5fd zxfRGAK(+w67sw7Ej{tcB$kRYx1oA47H-NkYx;7

5AaFArvje=d^YfB0-q23NZ`i+Ukv;t;HLra0lpOYa^U9z zUj=*+_<6uD0{%SU0r(4nzXbTpfnN#yb->>U{4KyY0KWnFO~Bs;{N2EB1O5Tv9|Ha{ z;GY8iS>X2qe*pN`fqx75_kjNh_(Q;d2K-mRe+T?e!2b&TA0Y4`SV3@tpn}i_gbpB_ z3_@2B;z2M6t^8@seR(|Eg{|PeXv{b<55rLUkrVkG?(?GWpspaXGAe}RyE4?g9<8F) zP)kjm9gRUxhC!)ETha;`6z5O!`6v6U#?B7Z1gN(}2Oom2>lg48HJu48b3?=!I z)m6S?e`PHm3Ir3Y!)Kx{F3ul$>~*2Cxk<$fu~1f-ROBxSVnUl#5X79E7H>jH1%cYC zG8Q5w&WapOGGsiI#4_|eEW^>1!Aw&>M$_EZiFwU|ms#%yF+?goT4jW}|6K;jGDTB< zIiZk_-zWN*8HId?LZEe0C&L_NjKU&Jg?UN}85-w!v^jqxC&tvwrujG>bv!MLL`?;j z>P!}JG#eiy$?cKx|2<+pp^%mUkCpHVg{&yR%(=;!7BgaMJ=%&0G5?)d9k(zs(N~2& z1q&H@3rj1o3QjW*iqf%1%p9N0keu()R<{C@(ej@(p|D9B!iv%KJI_~9G2G`bpIu`X z&lwEag&u8D1lhkX9^(UniqhHWVnT+s46iXHF2DpQd?u+j6ilk{mn7lRN>zDMR$_8u za+1HQw4%1mhsP`ZH6b%TB@CZBkGAta$L9oF<)I5oebqE0GgDN~C|c~%mPIJ~2W7T6 zpSk`a!N7d1*rB9`zcuTV$v9Ln+?IH>x>mr=u#wDYMMZ9A-8qLL1Ria9DlJ<*hJrG(QQeTJzU@tg%%D zX#O?^V{0SoHKBM7Lve*it8N7p4J(y%tXy5su(+}{@Ha{AoeYiZTayvVW=nWC!{CP2DLt6Hdsf)XXE8N0vBg+hys0(W zl4fR$v8;GYYhsXT#^6ylG4&@P>}r}Av&uZh5L(xoEXgsmWDmn&y+^x0V&ngM9&&=? zeq5r$)+sYNFEMg9dbH9AIsaYIPqizoQ{j)a$ftQGUtt5^=F#-OXW-*z$R?f72qP3O zf|!*4Aj9f*kG3O%)xT$UTP{L0r~Ky0eTPwV=f9Gg|D$p^4zuv1YK9*&YBsk{_5P@G z#s5*lJIqkq>e24`UlN-lZ^_X`z%Lmg_jt7PB82>R=HRburLjViV-zM$I{6*L={}D( zuhnqMX=$0}XNJr66W|at!&WQPY(|eTgzj&hjts+$X3$v4RIf8x9f4;kJ=i)~5Sr(F zY;r2cK4BAM1RKL**Z-pJ8;{E+K{HQfM$N;2TZGKq^iejhX-fZMNmg((q#pHXS49-F zwVfp`+D3}B*c@M)6pXRhBy?bSKK`#1g_fNjo-V#~pD z>|a`*72+5!Pq&^qY?9G%ht<(~63-BN#-jxyBKZ&duNV$X=*^JW^RHYQXj$H(mgcZ; z&1`;>7)8%}v}?El{cjVb;=7RB)b zx*Go1j7|>2?B#z+v>ILc5(YBV_O)gboot@AJchw5f15iyZkTx-V`gH@aE8>Yt%H;i zN`+&(rtY9)s!+lxhSck=Iag`sxf;hXc%zj&Buq0iiJ|aTYcjzcW((692Jd(@>=pjU zA2g_>-OkY|klKly_V5&xHYFX#f-rshQVhZ?cD#Klm9=?8yC%In=x9#F#5uyZTs&r zYQ4D~<_lE%YJv;Rv@B(`eAO!M?AVyCg?Q}}hSWE$DRk*(wp_t5_|Bu1N2d6{%Mh9f zHHEBAN6p6UYBu-}9_@<1XYk|3Jx7HY#|eW>_U$@`<4>(QMOo%4x`|=%%L!N-Xj*kT zwhSpWFsy#_Xpctb?tj7VADu8CliF=$WF2YsjM)_6-NBIf^B;_Fnr7ClkXz}%KuGJf zz%=!79o?u&AFm8oG?K>WM*T8lyUoB>@Mz~pWbnT;UdOc`$F%50ckG!p_CW(NOY22x zO;1)NhjS=%OM&o+fsySW6shd+$mXsN;Ynj;hex~kL{Acm6h6afo~maJ^rU~A4>H+< z7Y!tp6Ch71;aN>FtKNPCBbP_>{5`Wuy>n8yKM);B(;|k653d`ex;@(Lzj0JkV9;b3 zY3;$>A1J(S4BxhO>`hd&X{TpeRx zzA%tD`2?@}nZm|z4V+GG{bfIs#{6WU(W!Mr_V_N+#Gl^{#JZdSlh*7aqcIYRfl*hF zwlyNk{|gcAXn%>xqls37j_y&t_^nMx^pe0aRRvKp5RCsHV>Er_DO$Hg&7kA-|FP0n z0X`OKCZxSV$Qi9;s|u3-fV9Wci-^^SsUz(;ke&WZbe05C{*hUd9?VWZi?*k zWxfk{b{h2fitj)CeR5rL-?*IY%*FPJ^jq@c2q`ngQc8+PJX`dNB|wG)DFiYC$jC;q zO!OI~6ag9aZy@Db&**nPnL-IjNltC1p<1k^G@K&_#gJG7WDJn8K+Xa(u2GyP&PN&+ z0>K#>&uEx%LZ_qO)t8<3wQX8mT5?)u-?;3Q)WuWk(z4UCqUYoS5qAV^6qkw@ipxaY z=VcO*$v~z6nc65`A}&XIE(0PBIoxuFFZ!i6-V+5w{d< zLBMVlZ!!eT1LW+8fKi#fcE`i>?M!AK9a zt7aeF`kO!m=?!&h=_x5_RMOHGA9Xr}r&F5mSj_G{!#H5vN^eU~$w-gfN$*JR@5CL= za2G=HO%WSbTumE-8V}#B!^3a0%}b5nDDY#p-d{d){fs)4_Dr1Cl;pIm#Z&82Q!-Pt zqvhoT@lcC~;js8A&hFd<(iy-CT= zXp)_8#h+T#te?eS5b$q6&IPiV0X~lb9>q`Ef5~Ih>ryjPD74hH9BRt4(xXk8g;=aD zVQjHk>|Ae)6NnB37~t~_j9&;{b7Y2LQqq!B5GvE5%#;Ya7R}PWCB3n9uyjPICj(gu zTh1yd_=?>&#AeR7H4&>5C zOT48g!tDhFZSUm_?iDB0z!WUocHr{gaWYdg(~%yOz$tYpY01&@Vo9}RwKT1kY)g(| zUseLSlF@^43d&2-p3W0DS`6-ICO0`*%U}!cP#rtwu@qQ_A#X5lxEjbc4Av@x=XZNa zUd42Dc9~52vNBMr(@;kG#-%sU<`~O(3OSa$vrMo|M9ApP_0vq| zAu`j_(d(pSW<+U#q~XDH zvT=S=a}dX7m>Vs3P?$02{7%bV2y+V%^yYUln466`zs#Abe}fvFi~&YUYAUriDcPyf z;jCqw;=9N4 z9KwA8$bCSzF}T|eeBT@~?Qku^O{F$5J3SfUW~HX%7|ndxZ+V^K`-}<3gw7h|E-vY7=$U_Y7!za|@^jX{gwP#j`L%p127V4q1Y9{6r%jc9yF{SPc z%a=&Z*FYWx@)#rLaYIm6)%88|5%ePI*>qNESdU&LBg3S1KU#ik5%BMpBZfFX3FIjT z*ieo^D_`pM1uzNBLa!H&lB}ZDfuO7wtJP|=+JWo_@(d6Rmi9DSomPqKZB>9g2jqDM z>V*@^@PR`rvkyy?qwi*f$VFv zcCvOxYT|(G2l5J|=D-Q1hJ1JU#lE4i_@q#qfKDq)e5}2#NiEH?HQAbi#H0a19eJG* zbI=ftF;s1jw5}P|+}GdfPAwOFsT- zEO^Ha(iz|!bgmiAfQMU0QRWv~M_5N%i-5cfgKA&`$4 z;Ezu%^WU`Ce=Z60DJzqblbnJIhkNfvG-I0e>=xPYwU!_`m}wmXa+s0xX_)on2TU|`UQ|Lfqd0yt+t+nFhfAlD15_UetSY$l(%NW zw$+bJtIME~L`o_$3B7bG_0mli&bruoev3T1z`7LaSq9{LAU`mAehl;I#Wl_$&2o>d zPesmWr!*zD*2}E8!GCP$Z@tQTHG*9Qhd zrqh^~mK+@&S~pworTmUnzq8(F-NyV0Pk`qcGs6DlPx9@{70uHaQJY=X$Eb+MbSRHo zpFq~)Mz$jG77B~Evbh^LZp@VLaxpTBbghkE8LL^4A1 zA?p_{vhPdlS4i?Vz^lN!7|EKU1xKD8f7W#d`%*L6q)@Mx(~RU#*54^3W7>)%);|m+ z+W_A-3dy`RyS`s}b$C*en}ptGu{kM*u_}T#$tH8XZHQib;5#r3J2DLW4gFM_bija> zlEK28jA-SzwX>bv64|y>Y^NFso(w#0YmJU1EHyg@7xH%)6Ve<~+q&6Kr=Vg*O154$ ze07qo5Ade}--+SZ+2G){tDfGxER0_o!_O2`+frTOsg0fRATDdm5Z9cy=^tZvf5A%0dN9 z$wW>f&S43%jj^$m?`f=4?WUC~bPd(4Qgu$FZGsI`KHFsAdjWq2gW8)x9dq|=ap@rx z$aEI}Cu8Xg4K#z?40xuE=6x}>(N<=|yw8T)Q}+cvfdNirfCrA*Q+zmeMqNf$Hmi$d z;^dbAQZE}2-1}{mixs@(QF|b=6+c9=aYd?p|HdAU$lGADVE#W{L>UY0;&$5 zOvm|;Nk7=mH$bHUpB@Ej%#wox7Oe@-e|D4Kwq0VoqD5I+VOwdy$^>D)g;@XsF!>~{XX$3es2(WFi-Ht$Q z8*R7RZnNQ5-vfXj2>c-62RGX8u-%D3Hv^vwJceNiH19+P0S~^rVBa&I@)^|X(RUN1 zH*t>ww<OZ{%H2nJd>e<&BMkqPENeK7YUZRs7Q=VV8?ZtW74}1~uqu9KRW|LjC>&3JB-$HdI zCyOq_q-UhW)Rlv_7CnybT^o8F+Xujp1s)@0lu%Ald#_}Ha)9jrPE^ga@Ht=2s zx5R*3w(0jt)2G&Dp-oFk$;hU>O-_!k$=KuVy(!pOM#e8^ z$Dmx)kThK9K)}hF)Y@mICr796_H=tri}?1l_ea2J5@rMMXMpDz_)ZHwx_C1#bELC$ zj=H;y)aZ24o@XE4B6kbzBMc3!0KSq!jkx3O?|sxa8*7j_`61Hhw~LU}#MpnXeL_cw=6ugl1xHK>$iw8@w;W@fPXyBYM^c3+Fs&$5>zXg}~F z;AY5N^yc%)ZoqA;P@~_&VTmH2^uWn8D3kb%S=-#_6~w#RB?F z3?$HKCTFoyVzbe-Uv9suMVzm;Ut>(!65w?TJ2GY0PUzisW!Sx7h97pJ_8aW@X0jHf zwcg%dJqNu;$-lEH}KWs;rVaK;#EC>El z2K6$A@$l>SU%EZF$#i3QM#Zby#O$^|-y%m}u)k<<^a|itm^gaLXQLhpbF_IG-G0FS z2EwwxYJbiCy8R&VR|0<(@K*zWO{4uy`&)?LJHW339$z?uGr#&o`stm8aii~l`UOm- zGf?$1(`nSf624~69JW(W5nGPGvZJT4qo=qYczkyXQgeeL$7}AHIMjpIER7im!O*nhTDR}tI#{$WQ~LBqhCfX6qoL<#Yh`R}Y?)0oD* z1uAdNz1!~F&p@T*G+7x(I|oZnVmWiiDGp3d9G!q)2Ye$VcReGwXm`IktA0Z(L$mO7 zl-a3u81~@z)MmKd9la36n2ynLh67*m>cD7vBk;E}xVJI5ebx@`x$#Crz%W2RCL(mC zI@r2YEKlRecHp{{qd)Ms1AhktdM5)qX7iJ4;xe(q!TJkwSmQ)`c4~B9@5pr&(5Z># za2>-O!x8QX;4#?T!r*RYa0eavxZj-aXvH(Lm{Y*%nL-x{(IPZ+VXR{U1srR+!ZFb? z2?0+59&N(C4DfvnaPK#4pKihMfO0pBEheSYsy4dbunBW`9Azz{>vPOPsOS{81HXeo zz2880$2Y%ahI6ZAG>6nNm@+m;l_Nx<#$;}dqZXl}S9lQkoeb)(Fmoq&OL-LqAKwm4 z?N=6!z0z?>H_FyH7CTt+D<%^zaA5JvfhO@`;2&XtA2pcpK3U!QQL3jXSJ|1ggw0l~ zn)K9hnS<57V$RuB4y=7S(BwQ0{1Xi7lLix>Jbn2GV-YIlZB7P_kyw!;y{SgwxWPf) zL(HnLquzn;!GZ4KY2dN`kLv#n16y#>tewH{A|{+JMBpNmNx(KasAF*4?zqEor{gZ* z_W=JK@XrJPLZf4g1090{h2TZtUt&;SKA|RZlzPj`d(RDBF3S-fjCHaFgW}weZqZvIioiYg*ZKCDmIR`6T#R^Xyd-09O%s{>h zJeKmC4dm)ix;{K7jBIm4>Nx12c|>d+-*sRf;lMlsebpNb$2SceH;)|r!V}X`@mR2% ziY^Y*`K)9_7#EhBwC}Kkr4lj4`6~xH2nRZdw}F3$fqs{P?tR0Nb(>$u*d{fZ<%1YM zpaN#o7`0iVe|As@5wiy2_``t?!il-W`@ny|0Ds5;4@`S=SJ^KZ_GhFcFSF61p%|vp z3Rx3er_IUIiCBDfDo#u%sN?w<_)koHow&KfDa}F)p?o$>oD-2 zM#1X+=4XG*e2#XKpp8IB5#gk>yOa5dSZx!|Go0unoaiGy2OdlRsB2#`f(w>CKXi9j z6r^MdEgNe?C`cKZ(TsGaI;oq8SLVZ;~h-nb~x*&sdz%i~BqO?gwBiptJPC#_+{bmz{H6Khybd}Z68AaE3_ zKp50MYjcN5)51`ZSX$tT&hMP(I$P{raGvkP-Ua7{AP69c45-CG^`i&J-Z>08ieVcK zle01WrqYm;hQF|87!lM>&SZ;%IAOTh z)hx1WoVT>dhqcan1dH#hmq1_@aX|_5VZ8U255uCBN}En{Oa)@+ZO*$W(3pC#*|`OQ z-VK5a1dZY9W4g-49B<= z>KM;RTJ+@RGf>!4vQdm_P=b1rV+x|2hn#GQBUTXQ{L+a_9L{e*=mr8diJ_kKU_2iK zT^<@?osKbd7Ug+5M$uRc$;>fL=1)#^4(pviJAZNh>io_5I|w~NI30vuAe;e0@Ab|< zoaiAWBH;m$GSkve4*05afykEv6mjP{A_%|wV#{A&6QFOX!tbEe+I3jq%=FNEIGXd-$vgI zEz5w0561jw(D2>%C9`lQN=?wtG@#)FE&nMrZ$@(JEbIyk`z2|RG}!e1VJT0_Hy;=# zVSRG#TFPqn)QB`vDl#7!BNcOf*GXfgv!rn#j~7OnOkRYI5MON*J?K*$^M@rPTf+n~=sl(9!3eAwJCEkWQQ zoll$lg(3!i6bRu}n@_%8b)|^eMS2d+F4Ab>7h57|dem$}E|xB*sK<(nr7NTr2>nVB z#)80>Yy@M;ruY6({%i9w%*f89Z6}$y3W8aA7IryCLtZVd;rcd6*GbodFdl@74blzL zjUY@0VV+sK>y25R&?=90;hX>PsR#OM`DlBy!9Zb>N1G6NApXDGUWY!2*F02G#2DNr z(O6O1B;79EA>9eW6cDC@Fb#z1jnZami?mh3SaAjjb3m920pv|j8juW9)1`8mGQ z8u}7;e1&T$P#Y}u75PIoi6ML;Y|T7;=c7mK8{^WkLEk)opf)rf-^=C;-=0_D4Pk3f ztji-0ltms`D++{PHtW%P#(?fIjzt5Hkb1v_J-PML10c+-mv(~Sp~SfJCypZ-DSZV(H3;W4NZ&}`f`B$Cq{mM*gmj`I6)_19XzjRS zE}zTgYPlMGW~PYqatra3{)(#{dFd-$9G>-Ym0W<$iu8;0t4Hf(lE9-ybe;5@^gCtr z@h|geZBa^&zBxkJAJU&DZ!Pn(4K-F4WKp)r__Fc&AS?i3Aqa~aWxMQrtjg>K{JhxtM4+5_8wWzW3$*8gNDKe&e=Yep3v&PDu<*ukNau+!c zge4&84RSZCvG6x)Y%VX)pi~(U~y?ho3SDE~$JkfAoS9-L5ra-<1{$k8T51H1ia|fdJz9st{GmmG@}n)3&0V^K#R(hvXy_Wap!Z4;h-3kexNO0EIm}XGn5EYEEYM(1{DOGd-E< z6aBa=W0h};@sZUxH6r>C$+*I^PJUQ^M8*;!29)=JaPK<#arp^qq3#1=FEdgeEg9!8 z7lVs={+fm3eAR(qOjN{q6QgC`wx%NX`P>9Cxcp^f*~ zRQL?d+9N%_UVct~UVcG-QGN-8Z6NFd0nvLBglD3>$3FR0iu-=~75M-N+dO2LVfj-K9s=QEz+EfjyAL)1a%aU&7*gx6D2q(! z*YfwV?*BplQT_>p$3S=-geU0zngL*3zvE$ZL?JPtkuHj$h&uYZr$BgGj}KF|SFv-F z;!vEE@CofQZ;f}1oA;Jr1RttNPTo&=L9|%=pEsLrZ($FGrjIVp zt-lc3n;uYFHjK(?(fvOi!-ikx9)hn*uTh!qs}U*@Ro=0H??Ek2lq4>=vFk{ zrrS}k6X||pzT$-;%vB~7QeZ>yf%&~XPw#ccR0Gv2ym7Me)kgu*YZ`j>M%ZH*EB5tG za3&@tBMy_ObwSD)F2&W}Qs0ndP7`z|f=f+{AlZ=G8-HhH;)VHs7WtzZHe}F)*;o&2 z6UCV_gJ%u>ddED@o6(6mT^~b*K;>=H*;&bb=-PxBX=9Oh1DUI5`m5MBlWzq~+gO1I-H|M-Q~Xwmk8z8&|!aK}{Hx+P|!A1;s;DqmN6um8% zGStB8wZAQYjbo{D4Kjdi+eZDw8nZ2+S`CqSwJdk{$>I z=Z2^=!Oi)?8;Rpi@1Asg93wqFH!mSGFP8?A>3Ipc=`^HFE=W(y%*e>h%)>HzR|GI7 zh_AKxmBogGab4f&L5$&>$C*&&Kd08$Tuk$5UGQ=i2Kr({#4L;gWMqsF1S(3r!NO2@ z^D86144?Cs3^ASRP*;bIG1w%~Hx66C*u#|AI1yX4 za-On8(LwkOgwH|v0)#I?_zHxtLHGuQZ$bDDgzq;g=X2eZrOJiMGUX!WVy?Hcoa+I? z4>ZB}5yZtHUI4hU2;CTDC|G*x`1s2-BmlY1UZRR&AO0$y9hg7bJI{|VqYMOTT4a>K za)UmvM@yje#+;=IHGZsxE~J+=6(x#V7~2&B1`qTNSPkhYY)g&S^p+URdFaGHFe}>E^`4eg5*< zY==!l+OJm{=^U(4ZcuJiZc=VmZc)}M^-6=X4g`!;e+JdP02jPNJ*JDSVrf8PK{#xr^4Eq8gsBSp7StGLPO3JxnLFkbh;4KZL>|QU2b9N^ zCvc1>m8X=aah!*gXXT~J9&X=cjMFR1g1)MWm<1v3(@H7msv0BQi7N|~*3#t9h#{#o zn5mqGc~*pCI#wGH+kq&&qCBs>fWy70yrjIW>{a$D`?(${+eeovW;WXnLm2T2`WCF_ z!_;8V;>nm5~~m=;&d4bgxJzm1_NYblM-UwT+7mYBi?z9 z+uf+Vt{ha}P~HU53Zer<2}D^RuupkMc^9d84+ZmssmJdDqoRp8G_rR{H*-K%>mH`bQ9ncAI=#ZJfi#&yMEQ6{7D%XtHjUlREf&tn%dC< z(mWAn;cid`3hpmoZ&EVVf@=0Gw-5Ux_JP=zDn~mVSDBogq&l(Es62w2sShylQdNAx z08Iv(gw$l_&9Sl`Hfmds*8MMx(4e-X(ErM%;RH(>(w|APtoJYk3vHbIp0I=#kE!J1mu`?CpEG!9P3CA=nIs?qL&^1?;v#(7#H9A79=b5i%Yi+)=qmM`4 zvSmzN3QnDx3St*D4@QrNnxPKBC{N8)v(#)gNA0KfSI-0yiRcPqHxRpn*aO6P5PNP^ z2dabA!D_DZo|>oTgNUT`01a$q%m6V{kDpFmGtF%I>=#KIl>P*#RcnuKKKum}j zd1DgF&}6GVb(UJL&IU0N#3T@tK}c> z9k<49UuSIfN~2`#Q8%7KiA2fjr7E_2)T@_)*sor_0z`~v|5HW1O1-98QCER@CS3+% z@t=B~dLz}*>(w>t4ImBxaUh6;)~Pq4j@|;|V9HBuZfFG^T~9f(0mR&99lcH6N_BLT zdb@gudZ&7qx>?-<;t&w?Ktx4E0WAP=7>L8Ej^3l*tKO$>Q@5)-n2r{LI10q6AdUrb z8i>>XZ8{p6fXCFQsYb?XA6Iv)&!9%`0dWL~Bbi1P85&u1DEZ5bpK%Aglx*6CogCeX z6s?ditKl#XMAYliW`%r}D&%YG>*_)E4G_nGI1a?|AWm#jNaW@_G)_Sdp2cFO_7e)D z@(ROCB+l0Ouv)4g8X8#4G%!|NqaHS{n9!n*8qu5jrE%S)7O$fn7u+88J0sMY5)O4L z|Grir(;EVDPwp6mW9DqK9rTj0*)Vv6mLjt$ygja^psP6Epg$C-GK@)-#R`q{&Sxt%=;u!{pAGx@ z;?e-E=*F2&vfFVf3=?a%z#9nS{T)n~FzD1bN09CAibs>^LMK0`-qjPtxfG)odYxRo zv2()J$Avz>0>nV`+LtTIm1=HhaHY90ET{yr3Kg}9o!tk+4pu3TjGp5<^Qijb)WvwXZgZjxccUgd@;u*lWBTn|&xeF(&B>Rpe3xQdb-BVA`9nCl7G)3jYD&xOml z$i!nhU){2sqpHzTyMMHalPw$&-FgL;|36K1o0*iZw3(~zqRz5sQ(#I zkNT^}PcjC{34dmXKeNK0nc>fj@Mjv%d~>ji5AD+6C8OD6eee3Qnaw|eh(*XIrvB=} zZO0-^Jpy85QxL0h8jq)FtHkB?ngHVZ=2KP;ePF%vDYB|wbAY&^`IM}w^wfKpanv*B zHJ@sO&5n`j*4hJY2+G*P9SVGl0X`Qt$TAbEZ>!x+rdT8-lPY^eO zcsq!9fOsc}cY(MW#4R9h1@UeW@7bjF;(BQ48MVGz0xhI+-Lw=C@1-%%cKT;Gh|khe zD%Q2d=cou#eQz=XO(GuAkVtn-h$Wu5ifj}FV%$&~3{+H%4TRVOK1K({u~$(;)3l-= zUbi+1w@ufMq6R5yRkZ2EF}RHj%x9G{n!!{3JoZYg;#6P?cI=4MR5V>qkus{BouUsn zjYrS3iZZJ(H{DiPUWJOE=MDLA3#XVj;tGF-w>so28x{=IR!3TiwSn4T6a;M$i1*cN zxgcT_41%D(D~8@{Lp6M2m5GK{$Vu7=ZKPJDjcV$YFttd4hAl@I|yb(LeNN7S; z2pjOix~h%SCSq=;6>H^HemamFO)z(n28v(LTYtYtFx{f^+HB>~t*K2p8FVZ$>8?{@t z+q6yE?HXFj7Xe>~Za})!8RM$q_$-1KyPxn1x;AJE8jK~^7&ozJGJGKe@F`J% zE9oK~hT>Jm5N7hJ7*N>Q+LCibm4;j|P^YHbC4W_M!5t!p@tEv#* zkcvR*T)c^$s=-b^n)%{bw3x|EYD72=Xmpb!?N#kH?R5q8g#N^5B|Nh^Ttjvauv#v@Y-9ryh|mDoojk*hc+5F^JixAf~;A-)RLU6(zNun zWMc+D(GJ&Zhd}%g#E($qqE~=uKxOFI=h_#j(_sxmja{dGu6@acCZNso)kN6zwT2PX zdd8;jkWoKG81)I`)uHv;PukB+dwv7)Fo>TTx`RvWJ}e?eP|vNvHO;bxbgHTf0>RO~ z`D4Ac=nKOnc8**Zi8PGa4wtP%u_$yC?Qny3$c@1m()bx8v;EOz#>L0Sr7(uLZP?J{ zwu6WZ{{E-}7B|N&EBoB4+eOX)SFC>ZC5S(Jw3Ma<$AnB`ECDdq5{-e{VA0Fn*4@tC z-rWJjuR;74L}c2JO+_#F$wukv8ybP(I$_u3xP)oN`E>0(x3(r=te=naR^dzFgK>To zlo{dbm%FpO3$2!Y2jcg5=j8FTDO2N8!l$)E2HX!B+{itr8wY<157y(%GP+nD7cvwg z4%3ymqq#P)?UFx@f97DCZC`}@oGflRfo#e#!_wnUa^r@7x4DzuDehEvnmgT{;m&kt zxwAq19Yl<={{Zn%uy9}@VBx_cfJMBG>+SCEKGQt_KL@#SS9bRhYDX*BzpYMJ1~0LxaIU@aW{~n0(KTS2hJ=cr}d{>9L3!8mTC~jf!e$$U-9&WVNcWJ#CVP z@U2bY=%sj!cCr`=uVGUcfL7Qd(ciInVU(@k`adrxKuoR2n!~C4?NM{H3a- zD32*BP!&@Z#NRdX%5stt24<=ZVoX)0C}l21nNtQbDxqP^0gY#rpm9@W*eXW(f80N` zaAgjnETfgJmpMR`y!I)nPAX}adHv-5|05Npq=hJD{EJVVvh{KgP5%L_A(gph*~`6L zu0tuQ(SOTbK8xkvZZqAe1h>Ke4y=VKdz`8Q{=0WrC1sMbgfQKtVy&cGu3M&$`J4Me zrCfx{Q6&Vp#_&^|SD=*?|klQNAGm^pOIT z3aMP*{mG+1W26pH2q*#+Q&mA!)lF1Y)Bn)uGC<{j`_%wEEhbe}x%j*6SNmyU{o7tx zj;8sSyjsAy|Ix4xP)}9eOjR{eHvI1xtu5|Fl>c&HPYqRU4+VOC?x263d#6Qs#e-(yqTDlPHx$K#Ua8)w-l;yIu23IS zpHQDtzo@>Tep$IO&954I%FQwMYB*`^)7Y=!rs1yPq2a0FrEx^#mdgZwOq73v^=%Ew2o*U(>kpM)=Jb;da1S2l-}N2tyV3O)_~TK)`Zd- zcTMYt)-A0c+DaFbwzjs8wxhP^vU5QDi1rC>sCJ4rL7Tn&im08VU8&8}uF~c!Uw%5Y zyR^Htd$jwMcKn$3g!U9*%}+B0UPUuYNT+z9%b5rMz&OMz6I^T3vb=T^u z>uTz5(%q};uIsDouN$BnsC!a(Qg>1JvhE$-KlN7Xndv#|x$7O#^V18{i_`<_#p=cB z#p|W&A@$IDSUr{=M=x71S1(^*Reys%NPn}wss0xIt@>8_d-V6}JL&J!m*`LEU(&y# ze@*{}{w@7G`p@-W>c7_iRsT2rclz%Qv!=HtI3zGwL^z7|D!=j1)%0Mx#dKMw3R*(=#|kMqqj!C8~tIlWc1PKv(ZCCU65#8>j=+0~!F0fX2X$z|BBYpgGV2XbIc~+z#9cv<2=4+5`6h_X3@O`+)m_ zZa{aS2hbDf1v~;g2J{8`0|S78z>~n!z%XDWFdBFU7!QO4lYpr}BoG7401|*?AQhMe zWC6LrTwnpP7+40Z1XcrUf#-k?z-C|@uoEaWE-@}Q<{9&i1;%y8jm9m;?Z#ck-NwDf z{l-$`A>#|iqs9}))5deg3&xj?uNmJozGHmf_>u8b;}^!Sjo%u-GhQF2hs#-fpkFnAR`b6v>9XuvH)3uwu5XyyFtHz_JW*2`#}dl9-zaZBOo7;Kj;ML zBq1PMVsATdY+8U!goBcO566lfMS54r@p3c3Nh4Y~(<2zml~26_+r0Qv;_vXQzm zZ)3s6qKze+R&CPWq_atHlfkBnO%0oxHnnVO+ibkqYP0p`9h+@7S8s0F+_t%6bC(Ii zgk+LwLN%eAd@)rsU2Cdts%c6z<(Ouh=9=c4tuoU#(=pRCGcco@6_^#7m6(;82bf2i zgUw^i&zOJMvU1DnEoxiVZaKH5Ym0D;XiKk!y~P2GgBFJ@4sTt(6|hxztNvEQt%9u` zTf4Rjw~8$7EZr>KEj=tfEf+2CSw66QWckD@#wx`MVTH6pTfMUSWc9`BPpj|S(A%in z=-U|ESld2Yud-IPUSqw^y3YE%b+>hob>DWc?Lpgvx1Zh~x_x&0&F#0h-`#$HhyRZ7 z9g#c0J7RXc->I^5<<8YR)plZb(spL;WbS0|{ARPxM#E;kjg}4BCfg?0Cf}yeR@c_l z*4);@*3!1r_MC0KZKG}TF2h|GyDWEY+qHdH^RC`q;#~u~q`SB8cHHf}+hw=w?k{#~ zc5Cg_?KJI>cA0imJGvdieyzQ}y`eqO9%O&b{;~a2`{(vAf2sdP_>1V5-e1If4(##W zAka#zK)@e z;f|4xV8=_2_Z=TPK6ZTSByj3*>T(h~iIh8odN_MJdpRF*zU%zT`Hk~i=im3W?d#ts z*(cjKEh*b#O0XFq{~&8>n=B4ZtwToAGSYYf7JeHR}?~N^;LoJ8e4t03$@O1Lr=egh0&GY?XmBT9!uRg4H7;~6*IO{O;FxzX5m!6k_ zmywsT*JZBZ?I?^oWRyuWz=>HYl(^a%P0_DIGN{85dgMn{d0 zZaljAXzo$o(dwf$M+L{W9NT@&{@9*ldyjqfS>vT}`91ab@elD2^N;Wc`@i!4=UUOVyc(5;}mCu2{ho=iK5 zI*C2G6ucsMRj_LC+F)7mRPapjT=2rF$WsZYl1`b=1QS9F$qHeHa6%7-280HNo(w%5IvIL3^m^#c&^uwlVXCDJmoEwVpS5-E$6 zN7+WXM0rMeM;(juiwcMejf#i@N5w`#qM%W@HOyF@E!1d@C)#3@LTXZ@DliAG$7h3 z+ABIGIz5^mog2-Iu8VGrZi#M>?uzb@mPQXnUx*%!9*=$)vo^*c#x2G>=0r?b3^WE2 zgNnh%;9`g|j2L!Ic1&JOVN7vMbxcD{cZ@V+Ld@luYcV%t?!?@S`4Vdy zYa4qi795)ti;bnn=EUa57R8pvR>Yo-t&eSrZH?`S?TYP>9f@6ty&Zcm_F?Rk*ypjY zVn4)wj{P(CuQMyotUjZ5M*GZ;GtOtC&#=!Fo~b%h6Bim68;6b~#AU_h##O~N#);x& zaq_s~xUsm&xW%|Dao6K+#odj&ANL~eecTU-CPW`%1OY)dL(CxCAvTcRkY6BsAx@Bk z5PwJr1OiEcq$x4h=@2}G4q-w#kQ_)pq!7Y`)I&NUQphM|0x}JmgDgO9LheBBLmok% zLY_l@hkT1yi`R|c7;h499=|nyTfANTo_NRjeetgG2jauxsqy*o;&?^;Z2YzO$MJ9C ze~bSk{zLp{=nCj+=o+XxbUjoHY6LZh?t(f&U7&8zgHTVXA2a|O1U&@}g@!}pplMJd zlmjh-mO?9_RnQt}6SNiD0X+{DL3^P?&VQ*pYU|(V1;VSS|a5eZ^H~_v8ZVk7GJHVabE^s%vH~bjf z4;}yyf(OH+l$d!0oCIgWIq)2KKD-EC1+Rghh1bKI;4ScO_z-*&eieQX{t*5I{v7@a z{vQ4j{ssOG{v%;Uf_j2Mf@y+H!rlbug#8Hz5eL~_Ft#E*$Tl2#_ECaq1< zNYYC(OfpW|lw_J@p5&SomxN5>CDkQ$CW(_qljf2Zk}fA*OS+l#DCud^i=@{{Z>l+UTFQngcosT)&GQq5DhrrM_3rS3^}Ox>5dKlN~`f9mPfxYXoSL@Fv3n~F=N zr7}|4soAM{sRgNRsh3h8Al4!Ph)oD9#2$nz!X0r4;e|Mg2t))ULJ;AIC`2>@jzA&E zh-^d&q8!0P@DTz;3!)v-h3H1~BE$#<;v(V};yL0E#0SJ@#Gi=2(pIEtrfH?=r0J&_ zrGe5mrCFv~r(I0Dp7tc|ZQ7s6)yOqSb>w=aHWG;3h%`Z(Bex>0kh_ulklx4uWDxQc zG87qsgdkzaL}Usw4T(Y$k!)l!Qh;nhwj;Zc-N;_#5b^?Y6gh#MM$RIyBJUwzBbSh$ zkYADCQ7Wi)C{2_WN(ZHnGDMl8Y*719hfrRqqbOh0aa0H@92JF%LB*lsQK={#ijFEk zRidg|Xi0VO!Q4*94HHMl;-9bG?y+FN2y+yr4eMNm&x?fhI)zE9v05k|~ zfwn{ML%X8g(TC7p=;P=>bTB#u9gdDf$D>oxL^K1(GtpX0#A3 zMUSEv(YMfd(GSp%(a+Goq5nXCKz~O6iT;jJ!)RlG7)#79j6KEy(HG0hkuW(YHhxr(`md5C#}d5(F7d5`&s z`GWa|`GH-5RmU1(EwFajeOOnlJN6LP3wsXcG3goUgmiK`E1jF3n_iG!oL-uKKK*+7(~R{Q z1{oF^b{TFN-WkU-{4xSEf-)j9z!|X_kPKKxLIxwFJwuZ5DC2d;5^e=f9k(8*jnl;$ z;7oAlxUINtxE(kf++Lg~E&vyai^sunNw`!T5=X$1aa3Fuj)mjkif}c!W?V0B2zLQD zikrYq<1XW_;cnvY;O^rd;$GoC;#KhL@dkJxek0xlZ;s!Ax5eAx_uw7z&Ug>JFFqI_ zi%-O-;M4GEd^(MiMR-H_KvW^FCmIle#EnD~qB(H~(UxdO z+(UFEIukvJ$BE%Y7%`2ACZ-edL=urnB0H_?oyx{6SJD8Inv%TS%59Ytl}V1IdZxLUJP=Bpo98l0r%GBov8A$|TW9 z3=*4ENGc(flXxUPsg~4C>L$ralcX8aMbaYa3h6HC0qHU68R;eIHED^wlDvToB3qEH z$lJ*_Bnz=d?kZGK`DbqA_OQvP!u1xz(hfJqTmrU2p zkj%`?+|1t0q0FhwOPTjGUu3?{e4F_$b1Cz?GDvmR&n+A%dK5Ft4vG`yAjOm7O*uyK zqnx6IQX(i|N-QOgl1#x;=#(5vKBb6KN~xfnrPNcJD6NzZN*AS{a)EM@a-DLEa+mUe z@|g05@*Cw3$_L74iV}iI-9QCWEvdVx_EZO|6V-+4N%f{4qxw+;sDadQDukLsB~Y`d zEGn0pOD&*QQmd)8)N|AZY7_N5RYo1BUZ&om-lsmIKBc~(zN0QtKT*F@zf*tE*3$H8 zCbXS22bvSjh2};(NIORJqXp1{Xs2i)v=~|<4MU^RvT1p=LRtx}oF<^v(Hdzjw02r2 zO-#E$o1xvHJ)}LMJ*T~*{Yv{t`$GFh`$1nxUrk?6H>O+A?dbdHu5@?$A-Wg+I6aUa zOb?-l(J5@Q8Jow1&w&Cq2SFiaTcjIE4qj2#Rc#$JX8!99bo%`7vP11LGueQaEWGGzZJcmJHegi&T$vGm$_HD_qeaQAF@|wYh-W824w4H8)lnk zZ^^dIw$9#}ZJX_w?VjzIeJVRNJ0csL9h;q)osylFjm}Qb#$}geOS7l4-(`QzQOnWJ z*_30MW1X`zXIGAWj!TYP&cPhd9PgZ?Ie|Ig9C!{khnka>!^+|2zKPQ?`U3N9ykx4ht12(qvbL3*m>D`C3)p}ygYuMAn#mW zTb?*ikvErjE$?RDoxJ;bkMdsUz0G@+zJj9xEFX794`ncI8hK(5M2;c5L*yekXC>!KowvL zXa$^toPzvVn#Wa|QJU!U9o2Z$W?IwnB$O$3o}A{e|s?1BKGU!9qpRk)q(D zsG^vnxFTp#LJ_J6TZAhj7G)Mui?~H)MS`M^qW&Uj(NNKaqS2y>qDw_ri*6L%F1lCr zu;_8oo1)LftBSRYfyEn(O^VHnw-(zL+ZFFAb}ZgkyubKxabR&|aYAuwF|rs_j4vh? zQ;KQD`Nf6B#l>YMswFxldL;%Wz>>5QatW)1TasH+P*Pk{T~b?euB4%)xumt^YU%3I zUrHlN;iXBXsinwLOlf*)c4%77Fm{5hALy16_%Bhm6uhPwU+giiOVEqgJp{H z-Q~{ZUgbXJ{^cjiPnCz3N0djEL&}rNspakEz2#TS@05S5(5Wz~Fs(4F*ix~(!ntC9 z#eoWsio+HD6(=fAR-CQ~tB9yzRrFOnt=v!vs@z;@R%uabRcT%6TIp5kQ|VuMqVi;A zOl5o}yfUdWtrA_CUWu<{S5{TZD`zVgE3Z^uue?)vzw%M#)5>R+zwuV{*7LM^x;%ZJ zCC{3-ledd!&vW4&;ra0bctN}nUN|p`7tMq6Qh0P;8Ly64&uic{@p^b-o`g5ZQ}Bj) z^SnjgW!|+a-73>6vnul{iz>USy;aUt`>PICc~*H>9j!W56;c&e6UPzOs@GL-tKL;DReh}1sRmVVt~RUQQtedjQyp9#QXN(uUL92(Q=L*xt1hiBudb}F zu5PFnR`*p8SI<;Gsea90%{S&-@wf4<`8)Vdd>6hO{~+I!@68Y9!}u6Jlh5Jj@bmda z{8D}ezlvYO@8Wm!d-!6$gg?kv@JIM#{7L>L{$2jZn)Nm2HI6mMYhX2`nxUGpn%SCb zHIHjv)%;rXd(HcruQlImRccq&s@6Ky2Gu6jVrnV1^jc;ur#7cHzqY8hwzjdhrMA7c ztG2IppjK8Zuf0(FN?;`L6!-~F3ZMeCfFK|XsDdm(wjfVXC@2w>32Fsr1xQ~gSu3uBHUcbIxyI!|mzkXjmxSmrls+ZM| z*3Z>1)ZeUsQ2(?+tzm5gph2&}paIxm-r(4L z=}XhM=Gf-cW^yyNIjfn~%x%tXE@&=pKG)pP+}zyO+|hi#xx2ZyS=>C{vZiH6OIQoB zrJ_aDGTU;q#m> zYwLklpVp|>q}J-zuGV|4uUr3WTi<5c7SI;ihHS&MWwa66$ZgcNtTt8~w=K7=psk^; zxvj0Oqphn=*w)h~Zj-bPwkg_%+veJywJo)4v>UYBwtKci+X?M??X~Sa?HAi$w!dkA z+y1V7sbhVILC2;J>ki+JkdCm9$d2faGaVTn*&V!&j*h90*^c>+OC47`u6M5M)ae9u zZtgVewCJ?zwC>#7d9c&F^H`^E=kZQlC#~~rXJhAB=cUf8o!2{Wbw2N0>ipFCrSn_Y zx-QMG4PAgPi!QsaJzb7n&Rx>3(XLxv_q#rH{dL~@yzTkW^T_j<^XcdD=ZWVT=h^48 z&*z>mJFhrDcK)~XpM{%+TZBi2r-Y%x2q9P)D~uE72rGrv!dl@uVS}(q*e)CpDug4# zap9D3L3mksRd_>qyL(NyNw;ISd-tJkukIt=!QFA)(C&opt=Uncjt8% zc9(RQck{aW-L>8A-TmE{yPu0ziOfVcq5~pdQLrdP6fTMq#fTC_$s&XZCBlkuBAO^) zR4M8d2}M03u}C74iN-`1MT?>QU>_?J?*v>H+m^ z>)Fv`)3dwhP)|TlP|vBJke-~L-k#x}(Vp?1sh&$cS9@;s-0JzG=ST0#Ue(^Uy&Api zdmVZ`dJp#=>GkRL?+xgU?2YS%_9pZu_o92#dvU$Q-pt;%-jUwhy-#|d_rB_V)BB}w zZJ$QphCV=_UY}u~ao?uCoqfCd?E4)0ocdh)-1-jo9qJ3{i|9-5%kFFH8|z!_yVv); z?^WNgeZTj;@B7yGL%dR~Dqbtr5bKFe#oNUP#2(_q;v-@ov7h*q7%YwzL&Pv~qBvQM z7n8&kF;KmO*MQ2vssYUbtpS|@y@8zr&I29;hX;-f_zd_DoE``ph#ZI>I5PklNEu)b6b@7k zG!F;|dIrP;l7Yd2@qwv<=CiRi}OHW8oN>58erLj_|G(nmyMMz0fnv@}BOLL_K(qd_uR3L4U_DQAE zA?XF_xO7T7E1j1H zA6bYjQWh;cBZJ8jWht^W8D7ScmB`9vJQ-gmkk!c=Wg=OhY(OTH$z{W`G1-Ld)!_O; zn?c{f=t0V0?jUcFKPVWi8*ChG8EhXM7?cgl2Zsm81}6t+2ImH!489*y9kLz@8A>0@ z8e$D`hjNDshKh$8hPsD(hx&)4LqkJ~q02)LhMo?+7b9N9QxG2%GlHWD-f9!VO(kI+UKBkU3GNbX3%Ncl+XhNgbIA%V!Ys_hE-31i7)h%ww4af~#^9OH}?jWv#Sj9nO; z9lJU9V(j(U+p%|JOJkqLzK(q#*Bsw4u05_hu0L)xZalte++_UlICLC8UNbHozdxZi zp*5jBp*vwZVKcFN;+KiN6V4O+Ck{;bP8^>IoH#jgdLnEhasoV&IZ-(wnz%Uea^mB} zkI9vjs*`IcH74~Y4JVB!H%^*Nnoaslo|!D49GIM(T%5czd42NMVy=J)L?n z^?F)mdgZk0^xA2S=?&8!(>~KDr%z9ZO-D{gPsdKDP9vw$)9KSy)6LUu)1A}8Y031& z^z`)X^!)Ul>HE_Ur=QGd%;?SRnDL(ppGlcXn?cW{&){cBGn5(n40DDvQ$15Vb8e<# zrg^4qrgKI((=#KU8JM{;^LXadtj4VIto^LlZ0v0MY~F17Y{hKVZ2fG*Z1b#ewr5s6 zE14acot&MSy*Rr#dvEsf?6cXIvu|hL%`VM;n*BQaefGzk<{V&7Z_aRT8SXA2=UAA2AP}ht0$1ljd>r z#QDs5+B{>PHD54aKF^!y&kN@3=FiXf&iBtt=N0oK^W*bV^LOT7&cB_1H@`IhW&Ydz zkA;;B+6%x1%Y_{awhML(dl#G+_AeY*2wVtXfGs31AQn&y84LIY;sSX=urRb(xX4@N gFA5gVE%q!9EXw~5dQw@r@@EPd` + +@interface DemoVC10 : UIViewController + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m new file mode 100644 index 0000000..8f93ebf --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m @@ -0,0 +1,206 @@ +// +// DemoVC10.m +// SDAutoLayoutDemo +// +// Created by gsd on 16/1/20. +// Copyright © 2016年 gsd. All rights reserved. +// + + +/* + 本demo由SDAutoLayout库的使用者“李西亚”提供,感谢“李西亚”对本库的关注与支持! + */ + +#import "DemoVC10.h" + +#import "UITableView+SDAutoTableViewCellHeight.h" +#import "AFNetworking.h" +#import "MJRefresh.h" +#import "MJExtension.h" +#import "XYString.h" + +#import "ThreeBaseCell.h" +#import "ThreeFirstCell.h" +#import "ThreeSecondCell.h" +#import "ThreeThirdCell.h" +#import "ThreeFourthCell.h" + +@interface DemoVC10 () +{ + MJRefreshComponent *myRefreshView; + NSInteger page; +} + +@property(nonatomic ,strong) UITableView *tv; +@property(nonatomic ,strong) NSMutableArray *listArry; + +@end + +@implementation DemoVC10 + +- (void)viewDidLoad { + + /* + 本demo由SDAutoLayout库的使用者“李西亚”提供,感谢“李西亚”对本库的关注与支持! + */ + + + [super viewDidLoad]; + self.view.backgroundColor = [UIColor whiteColor]; + self.automaticallyAdjustsScrollViewInsets = YES; + + [self.view addSubview:self.tv]; + + self.tv.sd_layout.spaceToSuperView(UIEdgeInsetsMake(0, 0, 0, 0)); +} + + +#pragma mark - getter +- (UITableView *)tv{ + + /* + 本demo由SDAutoLayout库的使用者“李西亚”提供,感谢“李西亚”对本库的关注与支持! + */ + + + + if (!_tv) { + + _tv = [[UITableView alloc] initWithFrame:self.view.bounds]; + _tv.separatorColor = [UIColor clearColor]; + _tv.delegate = self; + _tv.dataSource = self; + + //..下拉刷新 + _tv.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + page = 0; + myRefreshView = _tv.header; + [self loadData]; + }]; + // 马上进入刷新状态 + [_tv.header beginRefreshing]; + + //..上拉刷新 + _tv.footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{ + page = page + 10; + myRefreshView = _tv.footer; + [self loadData]; + }]; + _tv.footer.hidden = YES; + + + } + return _tv; +} + +-(NSMutableArray *)listArry{ + + if (!_listArry) { + _listArry = [[NSMutableArray alloc] init]; + } + return _listArry; +} + +#pragma mark - 请求数据 +-(void)loadData{ + NSString * urlString = [NSString stringWithFormat:@"http://c.m.163.com/nc/article/%@/%ld-20.html",@"headline/T1348647853363",page]; + NSLog(@"______%@",urlString); + AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; + manager.requestSerializer = [AFJSONRequestSerializer serializer]; + manager.responseSerializer = [AFHTTPResponseSerializer serializer]; + [manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { + + NSDictionary *dict = [XYString getObjectFromJsonString:operation.responseString]; + //..keyEnumerator 获取字典里面所有键 objectEnumerator得到里面的对象 keyEnumerator得到里面的键值 + NSString *key = [dict.keyEnumerator nextObject];//.取键值 + NSArray *temArray = dict[key]; + + // 数组>>model数组 + NSMutableArray *arrayM = [NSMutableArray arrayWithArray:[ThreeModel mj_objectArrayWithKeyValuesArray:temArray]]; + + //..下拉刷新 + if (myRefreshView == _tv.header) { + self.listArry = arrayM; + _tv.footer.hidden = self.listArry.count==0?YES:NO; + + }else if(myRefreshView == _tv.footer){ + [self.listArry addObjectsFromArray:arrayM]; + } + + + [self doneWithView:myRefreshView]; + + + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + + NSLog(@"请求失败"); + [myRefreshView endRefreshing]; + }]; +} + +#pragma mark - 回调刷新 +-(void)doneWithView:(MJRefreshComponent*)refreshView{ + [_tv reloadData]; + [myRefreshView endRefreshing]; +} + + +#pragma mark - 表的协议方法 + +-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ + + return self.listArry.count; +} + +-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ + ThreeBaseCell * cell = nil; + ThreeModel * threeModel = self.listArry[indexPath.row]; + + NSString * identifier = [ThreeBaseCell cellIdentifierForRow:threeModel]; + Class mClass = NSClassFromString(identifier); + + cell = [tableView dequeueReusableCellWithIdentifier:identifier]; + if (!cell) { + cell = [[mClass alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; + } + cell.threeModel = threeModel; + return cell; + +} + +-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ + + // cell自适应设置 + ThreeModel * threeModel = self.listArry[indexPath.row]; + + NSString * identifier = [ThreeBaseCell cellIdentifierForRow:threeModel]; + Class mClass = NSClassFromString(identifier); + + // 返回计算出的cell高度(普通简化版方法,同样只需一步设置即可完成) + return [self.tv cellHeightForIndexPath:indexPath model:threeModel keyPath:@"threeModel" cellClass:mClass contentViewWidth:[self cellContentViewWith]]; + +} + +-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + +} + + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + + +- (CGFloat)cellContentViewWith +{ + CGFloat width = [UIScreen mainScreen].bounds.size.width; + + // 适配ios7 + if ([UIApplication sharedApplication].statusBarOrientation != UIInterfaceOrientationPortrait && [[UIDevice currentDevice].systemVersion floatValue] < 8) { + width = [UIScreen mainScreen].bounds.size.height; + } + return width; +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPRequestOperation.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPRequestOperation.h new file mode 100644 index 0000000..cf6def4 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPRequestOperation.h @@ -0,0 +1,70 @@ +// AFHTTPRequestOperation.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import "AFURLConnectionOperation.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + `AFHTTPRequestOperation` is a subclass of `AFURLConnectionOperation` for requests using the HTTP or HTTPS protocols. It encapsulates the concept of acceptable status codes and content types, which determine the success or failure of a request. + */ +@interface AFHTTPRequestOperation : AFURLConnectionOperation + +///------------------------------------------------ +/// @name Getting HTTP URL Connection Information +///------------------------------------------------ + +/** + The last HTTP response received by the operation's connection. + */ +@property (readonly, nonatomic, strong, nullable) NSHTTPURLResponse *response; + +/** + Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an AFHTTPResponse serializer, which uses the raw data as its response object. The serializer validates the status code to be in the `2XX` range, denoting success. If the response serializer generates an error in `-responseObjectForResponse:data:error:`, the `failure` callback of the session task or request operation will be executed; otherwise, the `success` callback will be executed. + + @warning `responseSerializer` must not be `nil`. Setting a response serializer will clear out any cached value + */ +@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; + +/** + An object constructed by the `responseSerializer` from the response and response data. Returns `nil` unless the operation `isFinished`, has a `response`, and has `responseData` with non-zero content length. If an error occurs during serialization, `nil` will be returned, and the `error` property will be populated with the serialization error. + */ +@property (readonly, nonatomic, strong, nullable) id responseObject; + +///----------------------------------------------------------- +/// @name Setting Completion Block Success / Failure Callbacks +///----------------------------------------------------------- + +/** + Sets the `completionBlock` property with a block that executes either the specified success or failure block, depending on the state of the request on completion. If `error` returns a value, which can be caused by an unacceptable status code or content type, then `failure` is executed. Otherwise, `success` is executed. + + This method should be overridden in subclasses in order to specify the response object passed into the success block. + + @param success The block to be executed on the completion of a successful request. This block has no return value and takes two arguments: the receiver operation and the object constructed from the response data of the request. + @param failure The block to be executed on the completion of an unsuccessful request. This block has no return value and takes two arguments: the receiver operation and the error that occurred during the request. + */ +- (void)setCompletionBlockWithSuccess:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +@end + +NS_ASSUME_NONNULL_END diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPRequestOperation.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPRequestOperation.m new file mode 100644 index 0000000..b8deda8 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPRequestOperation.m @@ -0,0 +1,206 @@ +// AFHTTPRequestOperation.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFHTTPRequestOperation.h" + +static dispatch_queue_t http_request_operation_processing_queue() { + static dispatch_queue_t af_http_request_operation_processing_queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_http_request_operation_processing_queue = dispatch_queue_create("com.alamofire.networking.http-request.processing", DISPATCH_QUEUE_CONCURRENT); + }); + + return af_http_request_operation_processing_queue; +} + +static dispatch_group_t http_request_operation_completion_group() { + static dispatch_group_t af_http_request_operation_completion_group; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_http_request_operation_completion_group = dispatch_group_create(); + }); + + return af_http_request_operation_completion_group; +} + +#pragma mark - + +@interface AFURLConnectionOperation () +@property (readwrite, nonatomic, strong) NSURLRequest *request; +@property (readwrite, nonatomic, strong) NSURLResponse *response; +@end + +@interface AFHTTPRequestOperation () +@property (readwrite, nonatomic, strong) NSHTTPURLResponse *response; +@property (readwrite, nonatomic, strong) id responseObject; +@property (readwrite, nonatomic, strong) NSError *responseSerializationError; +@property (readwrite, nonatomic, strong) NSRecursiveLock *lock; +@end + +@implementation AFHTTPRequestOperation +@dynamic response; +@dynamic lock; + +- (instancetype)initWithRequest:(NSURLRequest *)urlRequest { + self = [super initWithRequest:urlRequest]; + if (!self) { + return nil; + } + + self.responseSerializer = [AFHTTPResponseSerializer serializer]; + + return self; +} + +- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { + NSParameterAssert(responseSerializer); + + [self.lock lock]; + _responseSerializer = responseSerializer; + self.responseObject = nil; + self.responseSerializationError = nil; + [self.lock unlock]; +} + +- (id)responseObject { + [self.lock lock]; + if (!_responseObject && [self isFinished] && !self.error) { + NSError *error = nil; + self.responseObject = [self.responseSerializer responseObjectForResponse:self.response data:self.responseData error:&error]; + if (error) { + self.responseSerializationError = error; + } + } + [self.lock unlock]; + + return _responseObject; +} + +- (NSError *)error { + if (_responseSerializationError) { + return _responseSerializationError; + } else { + return [super error]; + } +} + +#pragma mark - AFHTTPRequestOperation + +- (void)setCompletionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + // completionBlock is manually nilled out in AFURLConnectionOperation to break the retain cycle. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-retain-cycles" +#pragma clang diagnostic ignored "-Wgnu" + self.completionBlock = ^{ + if (self.completionGroup) { + dispatch_group_enter(self.completionGroup); + } + + dispatch_async(http_request_operation_processing_queue(), ^{ + if (self.error) { + if (failure) { + dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(self, self.error); + }); + } + } else { + id responseObject = self.responseObject; + if (self.error) { + if (failure) { + dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(self, self.error); + }); + } + } else { + if (success) { + dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{ + success(self, responseObject); + }); + } + } + } + + if (self.completionGroup) { + dispatch_group_leave(self.completionGroup); + } + }); + }; +#pragma clang diagnostic pop +} + +#pragma mark - AFURLRequestOperation + +- (void)pause { + [super pause]; + + u_int64_t offset = 0; + if ([self.outputStream propertyForKey:NSStreamFileCurrentOffsetKey]) { + offset = [(NSNumber *)[self.outputStream propertyForKey:NSStreamFileCurrentOffsetKey] unsignedLongLongValue]; + } else { + offset = [(NSData *)[self.outputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey] length]; + } + + NSMutableURLRequest *mutableURLRequest = [self.request mutableCopy]; + if ([self.response respondsToSelector:@selector(allHeaderFields)] && [[self.response allHeaderFields] valueForKey:@"ETag"]) { + [mutableURLRequest setValue:[[self.response allHeaderFields] valueForKey:@"ETag"] forHTTPHeaderField:@"If-Range"]; + } + [mutableURLRequest setValue:[NSString stringWithFormat:@"bytes=%llu-", offset] forHTTPHeaderField:@"Range"]; + self.request = mutableURLRequest; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPRequestOperation *operation = [super copyWithZone:zone]; + + operation.responseSerializer = [self.responseSerializer copyWithZone:zone]; + operation.completionQueue = self.completionQueue; + operation.completionGroup = self.completionGroup; + + return operation; +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h new file mode 100644 index 0000000..d2385ed --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h @@ -0,0 +1,326 @@ +// AFHTTPRequestOperationManager.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import +#import + +#if __IPHONE_OS_VERSION_MIN_REQUIRED +#import +#else +#import +#endif + +#import "AFHTTPRequestOperation.h" +#import "AFURLResponseSerialization.h" +#import "AFURLRequestSerialization.h" +#import "AFSecurityPolicy.h" +#import "AFNetworkReachabilityManager.h" + +#ifndef NS_DESIGNATED_INITIALIZER +#if __has_attribute(objc_designated_initializer) +#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +#else +#define NS_DESIGNATED_INITIALIZER +#endif +#endif + +NS_ASSUME_NONNULL_BEGIN + +/** + `AFHTTPRequestOperationManager` encapsulates the common patterns of communicating with a web application over HTTP, including request creation, response serialization, network reachability monitoring, and security, as well as request operation management. + + ## Subclassing Notes + + Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass `AFHTTPSessionManager`, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application. + + For developers targeting iOS 6 or Mac OS X 10.8 or earlier, `AFHTTPRequestOperationManager` may be used to similar effect. + + ## Methods to Override + + To change the behavior of all request operation construction for an `AFHTTPRequestOperationManager` subclass, override `HTTPRequestOperationWithRequest:success:failure`. + + ## Serialization + + Requests created by an HTTP client will contain default headers and encode parameters according to the `requestSerializer` property, which is an object conforming to ``. + + Responses received from the server are automatically validated and serialized by the `responseSerializers` property, which is an object conforming to `` + + ## URL Construction Using Relative Paths + + For HTTP convenience methods, the request serializer constructs URLs from the path relative to the `-baseURL`, using `NSURL +URLWithString:relativeToURL:`, when provided. If `baseURL` is `nil`, `path` needs to resolve to a valid `NSURL` object using `NSURL +URLWithString:`. + + Below are a few examples of how `baseURL` and relative paths interact: + + NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"]; + [NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo + [NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz + [NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo + [NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo + [NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/ + [NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/ + + Also important to note is that a trailing slash will be added to any `baseURL` without one. This would otherwise cause unexpected behavior when constructing URLs using paths without a leading slash. + + ## Network Reachability Monitoring + + Network reachability status and change monitoring is available through the `reachabilityManager` property. Applications may choose to monitor network reachability conditions in order to prevent or suspend any outbound requests. See `AFNetworkReachabilityManager` for more details. + + ## NSSecureCoding & NSCopying Caveats + + `AFHTTPRequestOperationManager` conforms to the `NSSecureCoding` and `NSCopying` protocols, allowing operations to be archived to disk, and copied in memory, respectively. There are a few minor caveats to keep in mind, however: + + - Archives and copies of HTTP clients will be initialized with an empty operation queue. + - NSSecureCoding cannot serialize / deserialize block properties, so an archive of an HTTP client will not include any reachability callback block that may be set. + */ +@interface AFHTTPRequestOperationManager : NSObject + +/** + The URL used to monitor reachability, and construct requests from relative paths in methods like `requestWithMethod:URLString:parameters:`, and the `GET` / `POST` / et al. convenience methods. + */ +@property (readonly, nonatomic, strong, nullable) NSURL *baseURL; + +/** + Requests created with `requestWithMethod:URLString:parameters:` & `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:` are constructed with a set of default headers using a parameter serialization specified by this property. By default, this is set to an instance of `AFHTTPRequestSerializer`, which serializes query string parameters for `GET`, `HEAD`, and `DELETE` requests, or otherwise URL-form-encodes HTTP message bodies. + + @warning `requestSerializer` must not be `nil`. + */ +@property (nonatomic, strong) AFHTTPRequestSerializer * requestSerializer; + +/** + Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to a JSON serializer, which serializes data from responses with a `application/json` MIME type, and falls back to the raw data object. The serializer validates the status code to be in the `2XX` range, denoting success. If the response serializer generates an error in `-responseObjectForResponse:data:error:`, the `failure` callback of the session task or request operation will be executed; otherwise, the `success` callback will be executed. + + @warning `responseSerializer` must not be `nil`. + */ +@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; + +/** + The operation queue on which request operations are scheduled and run. + */ +@property (nonatomic, strong) NSOperationQueue *operationQueue; + +///------------------------------- +/// @name Managing URL Credentials +///------------------------------- + +/** + Whether request operations should consult the credential storage for authenticating the connection. `YES` by default. + + @see AFURLConnectionOperation -shouldUseCredentialStorage + */ +@property (nonatomic, assign) BOOL shouldUseCredentialStorage; + +/** + The credential used by request operations for authentication challenges. + + @see AFURLConnectionOperation -credential + */ +@property (nonatomic, strong, nullable) NSURLCredential *credential; + +///------------------------------- +/// @name Managing Security Policy +///------------------------------- + +/** + The security policy used by created request operations to evaluate server trust for secure connections. `AFHTTPRequestOperationManager` uses the `defaultPolicy` unless otherwise specified. + */ +@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; + +///------------------------------------ +/// @name Managing Network Reachability +///------------------------------------ + +/** + The network reachability manager. `AFHTTPRequestOperationManager` uses the `sharedManager` by default. + */ +@property (readwrite, nonatomic, strong) AFNetworkReachabilityManager *reachabilityManager; + +///------------------------------- +/// @name Managing Callback Queues +///------------------------------- + +/** + The dispatch queue for the `completionBlock` of request operations. If `NULL` (default), the main queue is used. + */ +#if OS_OBJECT_HAVE_OBJC_SUPPORT +@property (nonatomic, strong, nullable) dispatch_queue_t completionQueue; +#else +@property (nonatomic, assign, nullable) dispatch_queue_t completionQueue; +#endif + +/** + The dispatch group for the `completionBlock` of request operations. If `NULL` (default), a private dispatch group is used. + */ +#if OS_OBJECT_HAVE_OBJC_SUPPORT +@property (nonatomic, strong, nullable) dispatch_group_t completionGroup; +#else +@property (nonatomic, assign, nullable) dispatch_group_t completionGroup; +#endif + +///--------------------------------------------- +/// @name Creating and Initializing HTTP Clients +///--------------------------------------------- + +/** + Creates and returns an `AFHTTPRequestOperationManager` object. + */ ++ (instancetype)manager; + +/** + Initializes an `AFHTTPRequestOperationManager` object with the specified base URL. + + This is the designated initializer. + + @param url The base URL for the HTTP client. + + @return The newly-initialized HTTP client + */ +- (instancetype)initWithBaseURL:(nullable NSURL *)url NS_DESIGNATED_INITIALIZER; + +///--------------------------------------- +/// @name Managing HTTP Request Operations +///--------------------------------------- + +/** + Creates an `AFHTTPRequestOperation`, and sets the response serializers to that of the HTTP client. + + @param request The request object to be loaded asynchronously during execution of the operation. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the created request operation and the object created from the response data of request. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes two arguments:, the created request operation and the `NSError` object describing the network or parsing error that occurred. + */ +- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request + success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +///--------------------------- +/// @name Making HTTP Requests +///--------------------------- + +/** + Creates and runs an `AFHTTPRequestOperation` with a `GET` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (nullable AFHTTPRequestOperation *)GET:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a `HEAD` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes a single arguments: the request operation. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (nullable AFHTTPRequestOperation *)HEAD:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(AFHTTPRequestOperation *operation))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (nullable AFHTTPRequestOperation *)POST:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a multipart `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (nullable AFHTTPRequestOperation *)POST:(NSString *)URLString + parameters:(nullable id)parameters + constructingBodyWithBlock:(nullable void (^)(id formData))block + success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a `PUT` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (nullable AFHTTPRequestOperation *)PUT:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a `PATCH` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (nullable AFHTTPRequestOperation *)PATCH:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a `DELETE` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (nullable AFHTTPRequestOperation *)DELETE:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +@end + +NS_ASSUME_NONNULL_END diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m new file mode 100644 index 0000000..60739e5 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m @@ -0,0 +1,284 @@ +// AFHTTPRequestOperationManager.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import "AFHTTPRequestOperationManager.h" +#import "AFHTTPRequestOperation.h" + +#import +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +#import +#endif + +@interface AFHTTPRequestOperationManager () +@property (readwrite, nonatomic, strong) NSURL *baseURL; +@end + +@implementation AFHTTPRequestOperationManager + ++ (instancetype)manager { + return [[self alloc] initWithBaseURL:nil]; +} + +- (instancetype)init { + return [self initWithBaseURL:nil]; +} + +- (instancetype)initWithBaseURL:(NSURL *)url { + self = [super init]; + if (!self) { + return nil; + } + + // Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected + if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@"/"]) { + url = [url URLByAppendingPathComponent:@""]; + } + + self.baseURL = url; + + self.requestSerializer = [AFHTTPRequestSerializer serializer]; + self.responseSerializer = [AFJSONResponseSerializer serializer]; + + self.securityPolicy = [AFSecurityPolicy defaultPolicy]; + + self.reachabilityManager = [AFNetworkReachabilityManager sharedManager]; + + self.operationQueue = [[NSOperationQueue alloc] init]; + + self.shouldUseCredentialStorage = YES; + + return self; +} + +#pragma mark - + +#ifdef _SYSTEMCONFIGURATION_H +#endif + +- (void)setRequestSerializer:(AFHTTPRequestSerializer *)requestSerializer { + NSParameterAssert(requestSerializer); + + _requestSerializer = requestSerializer; +} + +- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { + NSParameterAssert(responseSerializer); + + _responseSerializer = responseSerializer; +} + +#pragma mark - + +- (AFHTTPRequestOperation *)HTTPRequestOperationWithHTTPMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + NSError *serializationError = nil; + NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError]; + if (serializationError) { + if (failure) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(nil, serializationError); + }); +#pragma clang diagnostic pop + } + + return nil; + } + + return [self HTTPRequestOperationWithRequest:request success:success failure:failure]; +} + +- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + operation.responseSerializer = self.responseSerializer; + operation.shouldUseCredentialStorage = self.shouldUseCredentialStorage; + operation.credential = self.credential; + operation.securityPolicy = self.securityPolicy; + + [operation setCompletionBlockWithSuccess:success failure:failure]; + operation.completionQueue = self.completionQueue; + operation.completionGroup = self.completionGroup; + + return operation; +} + +#pragma mark - + +- (AFHTTPRequestOperation *)GET:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"GET" URLString:URLString parameters:parameters success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)HEAD:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"HEAD" URLString:URLString parameters:parameters success:^(AFHTTPRequestOperation *requestOperation, __unused id responseObject) { + if (success) { + success(requestOperation); + } + } failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)POST:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"POST" URLString:URLString parameters:parameters success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)POST:(NSString *)URLString + parameters:(id)parameters + constructingBodyWithBlock:(void (^)(id formData))block + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + NSError *serializationError = nil; + NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block error:&serializationError]; + if (serializationError) { + if (failure) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(nil, serializationError); + }); +#pragma clang diagnostic pop + } + + return nil; + } + + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)PUT:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"PUT" URLString:URLString parameters:parameters success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)PATCH:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"PATCH" URLString:URLString parameters:parameters success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)DELETE:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"DELETE" URLString:URLString parameters:parameters success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +#pragma mark - NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p, baseURL: %@, operationQueue: %@>", NSStringFromClass([self class]), self, [self.baseURL absoluteString], self.operationQueue]; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + NSURL *baseURL = [decoder decodeObjectForKey:NSStringFromSelector(@selector(baseURL))]; + + self = [self initWithBaseURL:baseURL]; + if (!self) { + return nil; + } + + self.requestSerializer = [decoder decodeObjectOfClass:[AFHTTPRequestSerializer class] forKey:NSStringFromSelector(@selector(requestSerializer))]; + self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.baseURL forKey:NSStringFromSelector(@selector(baseURL))]; + [coder encodeObject:self.requestSerializer forKey:NSStringFromSelector(@selector(requestSerializer))]; + [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPRequestOperationManager *HTTPClient = [[[self class] allocWithZone:zone] initWithBaseURL:self.baseURL]; + + HTTPClient.requestSerializer = [self.requestSerializer copyWithZone:zone]; + HTTPClient.responseSerializer = [self.responseSerializer copyWithZone:zone]; + + return HTTPClient; +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPSessionManager.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPSessionManager.h new file mode 100644 index 0000000..e516e6d --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPSessionManager.h @@ -0,0 +1,253 @@ +// AFHTTPSessionManager.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#if !TARGET_OS_WATCH +#import +#endif +#import + +#if __IPHONE_OS_VERSION_MIN_REQUIRED +#import +#else +#import +#endif + +#import "AFURLSessionManager.h" + +#ifndef NS_DESIGNATED_INITIALIZER +#if __has_attribute(objc_designated_initializer) +#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +#else +#define NS_DESIGNATED_INITIALIZER +#endif +#endif + +/** + `AFHTTPSessionManager` is a subclass of `AFURLSessionManager` with convenience methods for making HTTP requests. When a `baseURL` is provided, requests made with the `GET` / `POST` / et al. convenience methods can be made with relative paths. + + ## Subclassing Notes + + Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass `AFHTTPSessionManager`, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application. + + For developers targeting iOS 6 or Mac OS X 10.8 or earlier, `AFHTTPRequestOperationManager` may be used to similar effect. + + ## Methods to Override + + To change the behavior of all data task operation construction, which is also used in the `GET` / `POST` / et al. convenience methods, override `dataTaskWithRequest:completionHandler:`. + + ## Serialization + + Requests created by an HTTP client will contain default headers and encode parameters according to the `requestSerializer` property, which is an object conforming to ``. + + Responses received from the server are automatically validated and serialized by the `responseSerializers` property, which is an object conforming to `` + + ## URL Construction Using Relative Paths + + For HTTP convenience methods, the request serializer constructs URLs from the path relative to the `-baseURL`, using `NSURL +URLWithString:relativeToURL:`, when provided. If `baseURL` is `nil`, `path` needs to resolve to a valid `NSURL` object using `NSURL +URLWithString:`. + + Below are a few examples of how `baseURL` and relative paths interact: + + NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"]; + [NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo + [NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz + [NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo + [NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo + [NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/ + [NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/ + + Also important to note is that a trailing slash will be added to any `baseURL` without one. This would otherwise cause unexpected behavior when constructing URLs using paths without a leading slash. + + @warning Managers for background sessions must be owned for the duration of their use. This can be accomplished by creating an application-wide or shared singleton instance. + */ + +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) || TARGET_OS_WATCH + +NS_ASSUME_NONNULL_BEGIN + +@interface AFHTTPSessionManager : AFURLSessionManager + +/** + The URL used to construct requests from relative paths in methods like `requestWithMethod:URLString:parameters:`, and the `GET` / `POST` / et al. convenience methods. + */ +@property (readonly, nonatomic, strong, nullable) NSURL *baseURL; + +/** + Requests created with `requestWithMethod:URLString:parameters:` & `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:` are constructed with a set of default headers using a parameter serialization specified by this property. By default, this is set to an instance of `AFHTTPRequestSerializer`, which serializes query string parameters for `GET`, `HEAD`, and `DELETE` requests, or otherwise URL-form-encodes HTTP message bodies. + + @warning `requestSerializer` must not be `nil`. + */ +@property (nonatomic, strong) AFHTTPRequestSerializer * requestSerializer; + +/** + Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of `AFJSONResponseSerializer`. + + @warning `responseSerializer` must not be `nil`. + */ +@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Creates and returns an `AFHTTPSessionManager` object. + */ ++ (instancetype)manager; + +/** + Initializes an `AFHTTPSessionManager` object with the specified base URL. + + @param url The base URL for the HTTP client. + + @return The newly-initialized HTTP client + */ +- (instancetype)initWithBaseURL:(nullable NSURL *)url; + +/** + Initializes an `AFHTTPSessionManager` object with the specified base URL. + + This is the designated initializer. + + @param url The base URL for the HTTP client. + @param configuration The configuration used to create the managed session. + + @return The newly-initialized HTTP client + */ +- (instancetype)initWithBaseURL:(nullable NSURL *)url + sessionConfiguration:(nullable NSURLSessionConfiguration *)configuration NS_DESIGNATED_INITIALIZER; + +///--------------------------- +/// @name Making HTTP Requests +///--------------------------- + +/** + Creates and runs an `NSURLSessionDataTask` with a `GET` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `HEAD` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes a single arguments: the data task. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)HEAD:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a multipart `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(nullable id)parameters + constructingBodyWithBlock:(nullable void (^)(id formData))block + success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `PUT` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)PUT:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `PATCH` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)PATCH:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `DELETE` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)DELETE:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPSessionManager.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPSessionManager.m new file mode 100644 index 0000000..bd9163f --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFHTTPSessionManager.m @@ -0,0 +1,323 @@ +// AFHTTPSessionManager.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFHTTPSessionManager.h" + +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) || TARGET_WATCH_OS + +#import "AFURLRequestSerialization.h" +#import "AFURLResponseSerialization.h" + +#import +#import + +#ifdef _SYSTEMCONFIGURATION_H +#import +#import +#import +#import +#import +#endif + +#if TARGET_OS_IOS +#import +#elif TARGET_OS_WATCH +#import +#endif + +@interface AFHTTPSessionManager () +@property (readwrite, nonatomic, strong) NSURL *baseURL; +@end + +@implementation AFHTTPSessionManager +@dynamic responseSerializer; + ++ (instancetype)manager { + return [[[self class] alloc] initWithBaseURL:nil]; +} + +- (instancetype)init { + return [self initWithBaseURL:nil]; +} + +- (instancetype)initWithBaseURL:(NSURL *)url { + return [self initWithBaseURL:url sessionConfiguration:nil]; +} + +- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration { + return [self initWithBaseURL:nil sessionConfiguration:configuration]; +} + +- (instancetype)initWithBaseURL:(NSURL *)url + sessionConfiguration:(NSURLSessionConfiguration *)configuration +{ + self = [super initWithSessionConfiguration:configuration]; + if (!self) { + return nil; + } + + // Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected + if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@"/"]) { + url = [url URLByAppendingPathComponent:@""]; + } + + self.baseURL = url; + + self.requestSerializer = [AFHTTPRequestSerializer serializer]; + self.responseSerializer = [AFJSONResponseSerializer serializer]; + + return self; +} + +#pragma mark - + +#ifdef _SYSTEMCONFIGURATION_H +#endif + +- (void)setRequestSerializer:(AFHTTPRequestSerializer *)requestSerializer { + NSParameterAssert(requestSerializer); + + _requestSerializer = requestSerializer; +} + +- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { + NSParameterAssert(responseSerializer); + + [super setResponseSerializer:responseSerializer]; +} + +#pragma mark - + +- (NSURLSessionDataTask *)GET:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"GET" URLString:URLString parameters:parameters success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)HEAD:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"HEAD" URLString:URLString parameters:parameters success:^(NSURLSessionDataTask *task, __unused id responseObject) { + if (success) { + success(task); + } + } failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"POST" URLString:URLString parameters:parameters success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(id)parameters + constructingBodyWithBlock:(void (^)(id formData))block + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSError *serializationError = nil; + NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block error:&serializationError]; + if (serializationError) { + if (failure) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(nil, serializationError); + }); +#pragma clang diagnostic pop + } + + return nil; + } + + __block NSURLSessionDataTask *task = [self uploadTaskWithStreamedRequest:request progress:nil completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { + if (error) { + if (failure) { + failure(task, error); + } + } else { + if (success) { + success(task, responseObject); + } + } + }]; + + [task resume]; + + return task; +} + +- (NSURLSessionDataTask *)PUT:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"PUT" URLString:URLString parameters:parameters success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)PATCH:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"PATCH" URLString:URLString parameters:parameters success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)DELETE:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"DELETE" URLString:URLString parameters:parameters success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *, id))success + failure:(void (^)(NSURLSessionDataTask *, NSError *))failure +{ + NSError *serializationError = nil; + NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError]; + if (serializationError) { + if (failure) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(nil, serializationError); + }); +#pragma clang diagnostic pop + } + + return nil; + } + + __block NSURLSessionDataTask *dataTask = nil; + dataTask = [self dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { + if (error) { + if (failure) { + failure(dataTask, error); + } + } else { + if (success) { + success(dataTask, responseObject); + } + } + }]; + + return dataTask; +} + +#pragma mark - NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p, baseURL: %@, session: %@, operationQueue: %@>", NSStringFromClass([self class]), self, [self.baseURL absoluteString], self.session, self.operationQueue]; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + NSURL *baseURL = [decoder decodeObjectOfClass:[NSURL class] forKey:NSStringFromSelector(@selector(baseURL))]; + NSURLSessionConfiguration *configuration = [decoder decodeObjectOfClass:[NSURLSessionConfiguration class] forKey:@"sessionConfiguration"]; + if (!configuration) { + NSString *configurationIdentifier = [decoder decodeObjectOfClass:[NSString class] forKey:@"identifier"]; + if (configurationIdentifier) { +#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1100) + configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:configurationIdentifier]; +#else + configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:configurationIdentifier]; +#endif + } + } + + self = [self initWithBaseURL:baseURL sessionConfiguration:configuration]; + if (!self) { + return nil; + } + + self.requestSerializer = [decoder decodeObjectOfClass:[AFHTTPRequestSerializer class] forKey:NSStringFromSelector(@selector(requestSerializer))]; + self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:self.baseURL forKey:NSStringFromSelector(@selector(baseURL))]; + if ([self.session.configuration conformsToProtocol:@protocol(NSCoding)]) { + [coder encodeObject:self.session.configuration forKey:@"sessionConfiguration"]; + } else { + [coder encodeObject:self.session.configuration.identifier forKey:@"identifier"]; + } + [coder encodeObject:self.requestSerializer forKey:NSStringFromSelector(@selector(requestSerializer))]; + [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPSessionManager *HTTPClient = [[[self class] allocWithZone:zone] initWithBaseURL:self.baseURL sessionConfiguration:self.session.configuration]; + + HTTPClient.requestSerializer = [self.requestSerializer copyWithZone:zone]; + HTTPClient.responseSerializer = [self.responseSerializer copyWithZone:zone]; + + return HTTPClient; +} + +@end + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h new file mode 100644 index 0000000..5a44507 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h @@ -0,0 +1,207 @@ +// AFNetworkReachabilityManager.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#if !TARGET_OS_WATCH +#import + +#ifndef NS_DESIGNATED_INITIALIZER +#if __has_attribute(objc_designated_initializer) +#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +#else +#define NS_DESIGNATED_INITIALIZER +#endif +#endif + +typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) { + AFNetworkReachabilityStatusUnknown = -1, + AFNetworkReachabilityStatusNotReachable = 0, + AFNetworkReachabilityStatusReachableViaWWAN = 1, + AFNetworkReachabilityStatusReachableViaWiFi = 2, +}; + +NS_ASSUME_NONNULL_BEGIN + +/** + `AFNetworkReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces. + + Reachability can be used to determine background information about why a network operation failed, or to trigger a network operation retrying when a connection is established. It should not be used to prevent a user from initiating a network request, as it's possible that an initial request may be required to establish reachability. + + See Apple's Reachability Sample Code (https://developer.apple.com/library/ios/samplecode/reachability/) + + @warning Instances of `AFNetworkReachabilityManager` must be started with `-startMonitoring` before reachability status can be determined. + */ +@interface AFNetworkReachabilityManager : NSObject + +/** + The current network reachability status. + */ +@property (readonly, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus; + +/** + Whether or not the network is currently reachable. + */ +@property (readonly, nonatomic, assign, getter = isReachable) BOOL reachable; + +/** + Whether or not the network is currently reachable via WWAN. + */ +@property (readonly, nonatomic, assign, getter = isReachableViaWWAN) BOOL reachableViaWWAN; + +/** + Whether or not the network is currently reachable via WiFi. + */ +@property (readonly, nonatomic, assign, getter = isReachableViaWiFi) BOOL reachableViaWiFi; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Returns the shared network reachability manager. + */ ++ (instancetype)sharedManager; + +/** + Creates and returns a network reachability manager for the specified domain. + + @param domain The domain used to evaluate network reachability. + + @return An initialized network reachability manager, actively monitoring the specified domain. + */ ++ (instancetype)managerForDomain:(NSString *)domain; + +/** + Creates and returns a network reachability manager for the socket address. + + @param address The socket address (`sockaddr_in`) used to evaluate network reachability. + + @return An initialized network reachability manager, actively monitoring the specified socket address. + */ ++ (instancetype)managerForAddress:(const void *)address; + +/** + Initializes an instance of a network reachability manager from the specified reachability object. + + @param reachability The reachability object to monitor. + + @return An initialized network reachability manager, actively monitoring the specified reachability. + */ +- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability NS_DESIGNATED_INITIALIZER; + +///-------------------------------------------------- +/// @name Starting & Stopping Reachability Monitoring +///-------------------------------------------------- + +/** + Starts monitoring for changes in network reachability status. + */ +- (void)startMonitoring; + +/** + Stops monitoring for changes in network reachability status. + */ +- (void)stopMonitoring; + +///------------------------------------------------- +/// @name Getting Localized Reachability Description +///------------------------------------------------- + +/** + Returns a localized string representation of the current network reachability status. + */ +- (NSString *)localizedNetworkReachabilityStatusString; + +///--------------------------------------------------- +/// @name Setting Network Reachability Change Callback +///--------------------------------------------------- + +/** + Sets a callback to be executed when the network availability of the `baseURL` host changes. + + @param block A block object to be executed when the network availability of the `baseURL` host changes.. This block has no return value and takes a single argument which represents the various reachability states from the device to the `baseURL`. + */ +- (void)setReachabilityStatusChangeBlock:(nullable void (^)(AFNetworkReachabilityStatus status))block; + +@end + +///---------------- +/// @name Constants +///---------------- + +/** + ## Network Reachability + + The following constants are provided by `AFNetworkReachabilityManager` as possible network reachability statuses. + + enum { + AFNetworkReachabilityStatusUnknown, + AFNetworkReachabilityStatusNotReachable, + AFNetworkReachabilityStatusReachableViaWWAN, + AFNetworkReachabilityStatusReachableViaWiFi, + } + + `AFNetworkReachabilityStatusUnknown` + The `baseURL` host reachability is not known. + + `AFNetworkReachabilityStatusNotReachable` + The `baseURL` host cannot be reached. + + `AFNetworkReachabilityStatusReachableViaWWAN` + The `baseURL` host can be reached via a cellular connection, such as EDGE or GPRS. + + `AFNetworkReachabilityStatusReachableViaWiFi` + The `baseURL` host can be reached via a Wi-Fi connection. + + ### Keys for Notification UserInfo Dictionary + + Strings that are used as keys in a `userInfo` dictionary in a network reachability status change notification. + + `AFNetworkingReachabilityNotificationStatusItem` + A key in the userInfo dictionary in a `AFNetworkingReachabilityDidChangeNotification` notification. + The corresponding value is an `NSNumber` object representing the `AFNetworkReachabilityStatus` value for the current reachability status. + */ + +///-------------------- +/// @name Notifications +///-------------------- + +/** + Posted when network reachability changes. + This notification assigns no notification object. The `userInfo` dictionary contains an `NSNumber` object under the `AFNetworkingReachabilityNotificationStatusItem` key, representing the `AFNetworkReachabilityStatus` value for the current network reachability. + + @warning In order for network reachability to be monitored, include the `SystemConfiguration` framework in the active target's "Link Binary With Library" build phase, and add `#import ` to the header prefix of the project (`Prefix.pch`). + */ +extern NSString * const AFNetworkingReachabilityDidChangeNotification; +extern NSString * const AFNetworkingReachabilityNotificationStatusItem; + +///-------------------- +/// @name Functions +///-------------------- + +/** + Returns a localized string representation of an `AFNetworkReachabilityStatus` value. + */ +extern NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status); + +NS_ASSUME_NONNULL_END +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m new file mode 100644 index 0000000..2e5e2ed --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m @@ -0,0 +1,262 @@ +// AFNetworkReachabilityManager.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFNetworkReachabilityManager.h" +#if !TARGET_OS_WATCH + +#import +#import +#import +#import +#import + +NSString * const AFNetworkingReachabilityDidChangeNotification = @"com.alamofire.networking.reachability.change"; +NSString * const AFNetworkingReachabilityNotificationStatusItem = @"AFNetworkingReachabilityNotificationStatusItem"; + +typedef void (^AFNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus status); + +typedef NS_ENUM(NSUInteger, AFNetworkReachabilityAssociation) { + AFNetworkReachabilityForAddress = 1, + AFNetworkReachabilityForAddressPair = 2, + AFNetworkReachabilityForName = 3, +}; + +NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status) { + switch (status) { + case AFNetworkReachabilityStatusNotReachable: + return NSLocalizedStringFromTable(@"Not Reachable", @"AFNetworking", nil); + case AFNetworkReachabilityStatusReachableViaWWAN: + return NSLocalizedStringFromTable(@"Reachable via WWAN", @"AFNetworking", nil); + case AFNetworkReachabilityStatusReachableViaWiFi: + return NSLocalizedStringFromTable(@"Reachable via WiFi", @"AFNetworking", nil); + case AFNetworkReachabilityStatusUnknown: + default: + return NSLocalizedStringFromTable(@"Unknown", @"AFNetworking", nil); + } +} + +static AFNetworkReachabilityStatus AFNetworkReachabilityStatusForFlags(SCNetworkReachabilityFlags flags) { + BOOL isReachable = ((flags & kSCNetworkReachabilityFlagsReachable) != 0); + BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0); + BOOL canConnectionAutomatically = (((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || ((flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)); + BOOL canConnectWithoutUserInteraction = (canConnectionAutomatically && (flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0); + BOOL isNetworkReachable = (isReachable && (!needsConnection || canConnectWithoutUserInteraction)); + + AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusUnknown; + if (isNetworkReachable == NO) { + status = AFNetworkReachabilityStatusNotReachable; + } +#if TARGET_OS_IPHONE + else if ((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0) { + status = AFNetworkReachabilityStatusReachableViaWWAN; + } +#endif + else { + status = AFNetworkReachabilityStatusReachableViaWiFi; + } + + return status; +} + +static void AFNetworkReachabilityCallback(SCNetworkReachabilityRef __unused target, SCNetworkReachabilityFlags flags, void *info) { + AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags); + AFNetworkReachabilityStatusBlock block = (__bridge AFNetworkReachabilityStatusBlock)info; + if (block) { + block(status); + } + + + dispatch_async(dispatch_get_main_queue(), ^{ + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + NSDictionary *userInfo = @{ AFNetworkingReachabilityNotificationStatusItem: @(status) }; + [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:userInfo]; + }); + +} + +static const void * AFNetworkReachabilityRetainCallback(const void *info) { + return Block_copy(info); +} + +static void AFNetworkReachabilityReleaseCallback(const void *info) { + if (info) { + Block_release(info); + } +} + +@interface AFNetworkReachabilityManager () +@property (readwrite, nonatomic, strong) id networkReachability; +@property (readwrite, nonatomic, assign) AFNetworkReachabilityAssociation networkReachabilityAssociation; +@property (readwrite, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus; +@property (readwrite, nonatomic, copy) AFNetworkReachabilityStatusBlock networkReachabilityStatusBlock; +@end + +@implementation AFNetworkReachabilityManager + ++ (instancetype)sharedManager { + static AFNetworkReachabilityManager *_sharedManager = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + struct sockaddr_in address; + bzero(&address, sizeof(address)); + address.sin_len = sizeof(address); + address.sin_family = AF_INET; + + _sharedManager = [self managerForAddress:&address]; + }); + + return _sharedManager; +} + ++ (instancetype)managerForDomain:(NSString *)domain { + SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [domain UTF8String]); + + AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; + manager.networkReachabilityAssociation = AFNetworkReachabilityForName; + + return manager; +} + ++ (instancetype)managerForAddress:(const void *)address { + SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)address); + + AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; + manager.networkReachabilityAssociation = AFNetworkReachabilityForAddress; + + return manager; +} + +- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability { + self = [super init]; + if (!self) { + return nil; + } + + self.networkReachability = CFBridgingRelease(reachability); + self.networkReachabilityStatus = AFNetworkReachabilityStatusUnknown; + + return self; +} + +- (instancetype)init NS_UNAVAILABLE +{ + return nil; +} + +- (void)dealloc { + [self stopMonitoring]; +} + +#pragma mark - + +- (BOOL)isReachable { + return [self isReachableViaWWAN] || [self isReachableViaWiFi]; +} + +- (BOOL)isReachableViaWWAN { + return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWWAN; +} + +- (BOOL)isReachableViaWiFi { + return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWiFi; +} + +#pragma mark - + +- (void)startMonitoring { + [self stopMonitoring]; + + if (!self.networkReachability) { + return; + } + + __weak __typeof(self)weakSelf = self; + AFNetworkReachabilityStatusBlock callback = ^(AFNetworkReachabilityStatus status) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + + strongSelf.networkReachabilityStatus = status; + if (strongSelf.networkReachabilityStatusBlock) { + strongSelf.networkReachabilityStatusBlock(status); + } + + }; + + id networkReachability = self.networkReachability; + SCNetworkReachabilityContext context = {0, (__bridge void *)callback, AFNetworkReachabilityRetainCallback, AFNetworkReachabilityReleaseCallback, NULL}; + SCNetworkReachabilitySetCallback((__bridge SCNetworkReachabilityRef)networkReachability, AFNetworkReachabilityCallback, &context); + SCNetworkReachabilityScheduleWithRunLoop((__bridge SCNetworkReachabilityRef)networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); + + switch (self.networkReachabilityAssociation) { + case AFNetworkReachabilityForName: + break; + case AFNetworkReachabilityForAddress: + case AFNetworkReachabilityForAddressPair: + default: { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{ + SCNetworkReachabilityFlags flags; + SCNetworkReachabilityGetFlags((__bridge SCNetworkReachabilityRef)networkReachability, &flags); + AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags); + dispatch_async(dispatch_get_main_queue(), ^{ + callback(status); + + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:@{ AFNetworkingReachabilityNotificationStatusItem: @(status) }]; + + + }); + }); + } + break; + } +} + +- (void)stopMonitoring { + if (!self.networkReachability) { + return; + } + + SCNetworkReachabilityUnscheduleFromRunLoop((__bridge SCNetworkReachabilityRef)self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); +} + +#pragma mark - + +- (NSString *)localizedNetworkReachabilityStatusString { + return AFStringFromNetworkReachabilityStatus(self.networkReachabilityStatus); +} + +#pragma mark - + +- (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus status))block { + self.networkReachabilityStatusBlock = block; +} + +#pragma mark - NSKeyValueObserving + ++ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key { + if ([key isEqualToString:@"reachable"] || [key isEqualToString:@"reachableViaWWAN"] || [key isEqualToString:@"reachableViaWiFi"]) { + return [NSSet setWithObject:@"networkReachabilityStatus"]; + } + + return [super keyPathsForValuesAffectingValueForKey:key]; +} + +@end +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFNetworking.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFNetworking.h new file mode 100644 index 0000000..6d442bb --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFNetworking.h @@ -0,0 +1,46 @@ +// AFNetworking.h +// +// Copyright (c) 2013 AFNetworking (http://afnetworking.com/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import + +#ifndef _AFNETWORKING_ + #define _AFNETWORKING_ + + #import "AFURLRequestSerialization.h" + #import "AFURLResponseSerialization.h" + #import "AFSecurityPolicy.h" +#if !TARGET_OS_WATCH + #import "AFNetworkReachabilityManager.h" + #import "AFURLConnectionOperation.h" + #import "AFHTTPRequestOperation.h" + #import "AFHTTPRequestOperationManager.h" +#endif + +#if ( ( defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) || \ + ( defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 ) || \ + TARGET_OS_WATCH ) + #import "AFURLSessionManager.h" + #import "AFHTTPSessionManager.h" +#endif + +#endif /* _AFNETWORKING_ */ diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFSecurityPolicy.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFSecurityPolicy.h new file mode 100644 index 0000000..3c38da8 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFSecurityPolicy.h @@ -0,0 +1,142 @@ +// AFSecurityPolicy.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import + +typedef NS_ENUM(NSUInteger, AFSSLPinningMode) { + AFSSLPinningModeNone, + AFSSLPinningModePublicKey, + AFSSLPinningModeCertificate, +}; + +/** + `AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections. + + Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled. + */ + +NS_ASSUME_NONNULL_BEGIN + +@interface AFSecurityPolicy : NSObject + +/** + The criteria by which server trust should be evaluated against the pinned SSL certificates. Defaults to `AFSSLPinningModeNone`. + */ +@property (readonly, nonatomic, assign) AFSSLPinningMode SSLPinningMode; + +/** + The certificates used to evaluate server trust according to the SSL pinning mode. By default, this property is set to any (`.cer`) certificates included in the app bundle. Note that if you create an array with duplicate certificates, the duplicate certificates will be removed. Note that if pinning is enabled, `evaluateServerTrust:forDomain:` will return true if any pinned certificate matches. + */ +@property (nonatomic, strong, nullable) NSArray *pinnedCertificates; + +/** + Whether or not to trust servers with an invalid or expired SSL certificates. Defaults to `NO`. + */ +@property (nonatomic, assign) BOOL allowInvalidCertificates; + +/** + Whether or not to validate the domain name in the certificate's CN field. Defaults to `YES`. + */ +@property (nonatomic, assign) BOOL validatesDomainName; + +///----------------------------------------- +/// @name Getting Specific Security Policies +///----------------------------------------- + +/** + Returns the shared default security policy, which does not allow invalid certificates, validates domain name, and does not validate against pinned certificates or public keys. + + @return The default security policy. + */ ++ (instancetype)defaultPolicy; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Creates and returns a security policy with the specified pinning mode. + + @param pinningMode The SSL pinning mode. + + @return A new security policy. + */ ++ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode; + +///------------------------------ +/// @name Evaluating Server Trust +///------------------------------ + +/** + Whether or not the specified server trust should be accepted, based on the security policy. + + This method should be used when responding to an authentication challenge from a server. + + @param serverTrust The X.509 certificate trust of the server. + + @return Whether or not to trust the server. + + @warning This method has been deprecated in favor of `-evaluateServerTrust:forDomain:`. + */ +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust DEPRECATED_ATTRIBUTE; + +/** + Whether or not the specified server trust should be accepted, based on the security policy. + + This method should be used when responding to an authentication challenge from a server. + + @param serverTrust The X.509 certificate trust of the server. + @param domain The domain of serverTrust. If `nil`, the domain will not be validated. + + @return Whether or not to trust the server. + */ +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust + forDomain:(nullable NSString *)domain; + +@end + +NS_ASSUME_NONNULL_END + +///---------------- +/// @name Constants +///---------------- + +/** + ## SSL Pinning Modes + + The following constants are provided by `AFSSLPinningMode` as possible SSL pinning modes. + + enum { + AFSSLPinningModeNone, + AFSSLPinningModePublicKey, + AFSSLPinningModeCertificate, + } + + `AFSSLPinningModeNone` + Do not used pinned certificates to validate servers. + + `AFSSLPinningModePublicKey` + Validate host certificates against public keys of pinned certificates. + + `AFSSLPinningModeCertificate` + Validate host certificates against pinned certificates. +*/ diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFSecurityPolicy.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFSecurityPolicy.m new file mode 100644 index 0000000..e8eaa65 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFSecurityPolicy.m @@ -0,0 +1,311 @@ +// AFSecurityPolicy.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFSecurityPolicy.h" + +#import + +#if !TARGET_OS_IOS && !TARGET_OS_WATCH +static NSData * AFSecKeyGetData(SecKeyRef key) { + CFDataRef data = NULL; + + __Require_noErr_Quiet(SecItemExport(key, kSecFormatUnknown, kSecItemPemArmour, NULL, &data), _out); + + return (__bridge_transfer NSData *)data; + +_out: + if (data) { + CFRelease(data); + } + + return nil; +} +#endif + +static BOOL AFSecKeyIsEqualToKey(SecKeyRef key1, SecKeyRef key2) { +#if TARGET_OS_IOS || TARGET_OS_WATCH + return [(__bridge id)key1 isEqual:(__bridge id)key2]; +#else + return [AFSecKeyGetData(key1) isEqual:AFSecKeyGetData(key2)]; +#endif +} + +static id AFPublicKeyForCertificate(NSData *certificate) { + id allowedPublicKey = nil; + SecCertificateRef allowedCertificate; + SecCertificateRef allowedCertificates[1]; + CFArrayRef tempCertificates = nil; + SecPolicyRef policy = nil; + SecTrustRef allowedTrust = nil; + SecTrustResultType result; + + allowedCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificate); + __Require_Quiet(allowedCertificate != NULL, _out); + + allowedCertificates[0] = allowedCertificate; + tempCertificates = CFArrayCreate(NULL, (const void **)allowedCertificates, 1, NULL); + + policy = SecPolicyCreateBasicX509(); + __Require_noErr_Quiet(SecTrustCreateWithCertificates(tempCertificates, policy, &allowedTrust), _out); + __Require_noErr_Quiet(SecTrustEvaluate(allowedTrust, &result), _out); + + allowedPublicKey = (__bridge_transfer id)SecTrustCopyPublicKey(allowedTrust); + +_out: + if (allowedTrust) { + CFRelease(allowedTrust); + } + + if (policy) { + CFRelease(policy); + } + + if (tempCertificates) { + CFRelease(tempCertificates); + } + + if (allowedCertificate) { + CFRelease(allowedCertificate); + } + + return allowedPublicKey; +} + +static BOOL AFServerTrustIsValid(SecTrustRef serverTrust) { + BOOL isValid = NO; + SecTrustResultType result; + __Require_noErr_Quiet(SecTrustEvaluate(serverTrust, &result), _out); + + isValid = (result == kSecTrustResultUnspecified || result == kSecTrustResultProceed); + +_out: + return isValid; +} + +static NSArray * AFCertificateTrustChainForServerTrust(SecTrustRef serverTrust) { + CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust); + NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount]; + + for (CFIndex i = 0; i < certificateCount; i++) { + SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i); + [trustChain addObject:(__bridge_transfer NSData *)SecCertificateCopyData(certificate)]; + } + + return [NSArray arrayWithArray:trustChain]; +} + +static NSArray * AFPublicKeyTrustChainForServerTrust(SecTrustRef serverTrust) { + SecPolicyRef policy = SecPolicyCreateBasicX509(); + CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust); + NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount]; + for (CFIndex i = 0; i < certificateCount; i++) { + SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i); + + SecCertificateRef someCertificates[] = {certificate}; + CFArrayRef certificates = CFArrayCreate(NULL, (const void **)someCertificates, 1, NULL); + + SecTrustRef trust; + __Require_noErr_Quiet(SecTrustCreateWithCertificates(certificates, policy, &trust), _out); + + SecTrustResultType result; + __Require_noErr_Quiet(SecTrustEvaluate(trust, &result), _out); + + [trustChain addObject:(__bridge_transfer id)SecTrustCopyPublicKey(trust)]; + + _out: + if (trust) { + CFRelease(trust); + } + + if (certificates) { + CFRelease(certificates); + } + + continue; + } + CFRelease(policy); + + return [NSArray arrayWithArray:trustChain]; +} + +#pragma mark - + +@interface AFSecurityPolicy() +@property (readwrite, nonatomic, assign) AFSSLPinningMode SSLPinningMode; +@property (readwrite, nonatomic, strong) NSArray *pinnedPublicKeys; +@end + +@implementation AFSecurityPolicy + ++ (NSArray *)defaultPinnedCertificates { + static NSArray *_defaultPinnedCertificates = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSArray *paths = [bundle pathsForResourcesOfType:@"cer" inDirectory:@"."]; + + NSMutableArray *certificates = [NSMutableArray arrayWithCapacity:[paths count]]; + for (NSString *path in paths) { + NSData *certificateData = [NSData dataWithContentsOfFile:path]; + [certificates addObject:certificateData]; + } + + _defaultPinnedCertificates = [[NSArray alloc] initWithArray:certificates]; + }); + + return _defaultPinnedCertificates; +} + ++ (instancetype)defaultPolicy { + AFSecurityPolicy *securityPolicy = [[self alloc] init]; + securityPolicy.SSLPinningMode = AFSSLPinningModeNone; + + return securityPolicy; +} + ++ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode { + AFSecurityPolicy *securityPolicy = [[self alloc] init]; + securityPolicy.SSLPinningMode = pinningMode; + + [securityPolicy setPinnedCertificates:[self defaultPinnedCertificates]]; + + return securityPolicy; +} + +- (id)init { + self = [super init]; + if (!self) { + return nil; + } + + self.validatesDomainName = YES; + + return self; +} + +- (void)setPinnedCertificates:(NSArray *)pinnedCertificates { + _pinnedCertificates = [[NSOrderedSet orderedSetWithArray:pinnedCertificates] array]; + + if (self.pinnedCertificates) { + NSMutableArray *mutablePinnedPublicKeys = [NSMutableArray arrayWithCapacity:[self.pinnedCertificates count]]; + for (NSData *certificate in self.pinnedCertificates) { + id publicKey = AFPublicKeyForCertificate(certificate); + if (!publicKey) { + continue; + } + [mutablePinnedPublicKeys addObject:publicKey]; + } + self.pinnedPublicKeys = [NSArray arrayWithArray:mutablePinnedPublicKeys]; + } else { + self.pinnedPublicKeys = nil; + } +} + +#pragma mark - + +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust { + return [self evaluateServerTrust:serverTrust forDomain:nil]; +} + +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust + forDomain:(NSString *)domain +{ + if (domain && self.allowInvalidCertificates && self.validatesDomainName && (self.SSLPinningMode == AFSSLPinningModeNone || [self.pinnedCertificates count] == 0)) { + // https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/NetworkingTopics/Articles/OverridingSSLChainValidationCorrectly.html + // According to the docs, you should only trust your provided certs for evaluation. + // Pinned certificates are added to the trust. Without pinned certificates, + // there is nothing to evaluate against. + // + // From Apple Docs: + // "Do not implicitly trust self-signed certificates as anchors (kSecTrustOptionImplicitAnchors). + // Instead, add your own (self-signed) CA certificate to the list of trusted anchors." + NSLog(@"In order to validate a domain name for self signed certificates, you MUST use pinning."); + return NO; + } + + NSMutableArray *policies = [NSMutableArray array]; + if (self.validatesDomainName) { + [policies addObject:(__bridge_transfer id)SecPolicyCreateSSL(true, (__bridge CFStringRef)domain)]; + } else { + [policies addObject:(__bridge_transfer id)SecPolicyCreateBasicX509()]; + } + + SecTrustSetPolicies(serverTrust, (__bridge CFArrayRef)policies); + + if (self.SSLPinningMode == AFSSLPinningModeNone) { + if (self.allowInvalidCertificates || AFServerTrustIsValid(serverTrust)){ + return YES; + } else { + return NO; + } + } else if (!AFServerTrustIsValid(serverTrust) && !self.allowInvalidCertificates) { + return NO; + } + + NSArray *serverCertificates = AFCertificateTrustChainForServerTrust(serverTrust); + switch (self.SSLPinningMode) { + case AFSSLPinningModeNone: + default: + return NO; + case AFSSLPinningModeCertificate: { + NSMutableArray *pinnedCertificates = [NSMutableArray array]; + for (NSData *certificateData in self.pinnedCertificates) { + [pinnedCertificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)]; + } + SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)pinnedCertificates); + + if (!AFServerTrustIsValid(serverTrust)) { + return NO; + } + + NSUInteger trustedCertificateCount = 0; + for (NSData *trustChainCertificate in serverCertificates) { + if ([self.pinnedCertificates containsObject:trustChainCertificate]) { + trustedCertificateCount++; + } + } + return trustedCertificateCount > 0; + } + case AFSSLPinningModePublicKey: { + NSUInteger trustedPublicKeyCount = 0; + NSArray *publicKeys = AFPublicKeyTrustChainForServerTrust(serverTrust); + + for (id trustChainPublicKey in publicKeys) { + for (id pinnedPublicKey in self.pinnedPublicKeys) { + if (AFSecKeyIsEqualToKey((__bridge SecKeyRef)trustChainPublicKey, (__bridge SecKeyRef)pinnedPublicKey)) { + trustedPublicKeyCount += 1; + } + } + } + return trustedPublicKeyCount > 0; + } + } + + return NO; +} + +#pragma mark - NSKeyValueObserving + ++ (NSSet *)keyPathsForValuesAffectingPinnedPublicKeys { + return [NSSet setWithObject:@"pinnedCertificates"]; +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLConnectionOperation.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLConnectionOperation.h new file mode 100644 index 0000000..3ea87fe --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLConnectionOperation.h @@ -0,0 +1,344 @@ +// AFURLConnectionOperation.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import +#import "AFURLRequestSerialization.h" +#import "AFURLResponseSerialization.h" +#import "AFSecurityPolicy.h" + +#ifndef NS_DESIGNATED_INITIALIZER +#if __has_attribute(objc_designated_initializer) +#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +#else +#define NS_DESIGNATED_INITIALIZER +#endif +#endif + +/** + `AFURLConnectionOperation` is a subclass of `NSOperation` that implements `NSURLConnection` delegate methods. + + ## Subclassing Notes + + This is the base class of all network request operations. You may wish to create your own subclass in order to implement additional `NSURLConnection` delegate methods (see "`NSURLConnection` Delegate Methods" below), or to provide additional properties and/or class constructors. + + If you are creating a subclass that communicates over the HTTP or HTTPS protocols, you may want to consider subclassing `AFHTTPRequestOperation` instead, as it supports specifying acceptable content types or status codes. + + ## NSURLConnection Delegate Methods + + `AFURLConnectionOperation` implements the following `NSURLConnection` delegate methods: + + - `connection:didReceiveResponse:` + - `connection:didReceiveData:` + - `connectionDidFinishLoading:` + - `connection:didFailWithError:` + - `connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:` + - `connection:willCacheResponse:` + - `connectionShouldUseCredentialStorage:` + - `connection:needNewBodyStream:` + - `connection:willSendRequestForAuthenticationChallenge:` + + If any of these methods are overridden in a subclass, they _must_ call the `super` implementation first. + + ## Callbacks and Completion Blocks + + The built-in `completionBlock` provided by `NSOperation` allows for custom behavior to be executed after the request finishes. It is a common pattern for class constructors in subclasses to take callback block parameters, and execute them conditionally in the body of its `completionBlock`. Make sure to handle cancelled operations appropriately when setting a `completionBlock` (i.e. returning early before parsing response data). See the implementation of any of the `AFHTTPRequestOperation` subclasses for an example of this. + + Subclasses are strongly discouraged from overriding `setCompletionBlock:`, as `AFURLConnectionOperation`'s implementation includes a workaround to mitigate retain cycles, and what Apple rather ominously refers to as ["The Deallocation Problem"](http://developer.apple.com/library/ios/#technotes/tn2109/). + + ## SSL Pinning + + Relying on the CA trust model to validate SSL certificates exposes your app to security vulnerabilities, such as man-in-the-middle attacks. For applications that connect to known servers, SSL certificate pinning provides an increased level of security, by checking server certificate validity against those specified in the app bundle. + + SSL with certificate pinning is strongly recommended for any application that transmits sensitive information to an external webservice. + + Connections will be validated on all matching certificates with a `.cer` extension in the bundle root. + + ## NSCoding & NSCopying Conformance + + `AFURLConnectionOperation` conforms to the `NSCoding` and `NSCopying` protocols, allowing operations to be archived to disk, and copied in memory, respectively. However, because of the intrinsic limitations of capturing the exact state of an operation at a particular moment, there are some important caveats to keep in mind: + + ### NSCoding Caveats + + - Encoded operations do not include any block or stream properties. Be sure to set `completionBlock`, `outputStream`, and any callback blocks as necessary when using `-initWithCoder:` or `NSKeyedUnarchiver`. + - Operations are paused on `encodeWithCoder:`. If the operation was encoded while paused or still executing, its archived state will return `YES` for `isReady`. Otherwise, the state of an operation when encoding will remain unchanged. + + ### NSCopying Caveats + + - `-copy` and `-copyWithZone:` return a new operation with the `NSURLRequest` of the original. So rather than an exact copy of the operation at that particular instant, the copying mechanism returns a completely new instance, which can be useful for retrying operations. + - A copy of an operation will not include the `outputStream` of the original. + - Operation copies do not include `completionBlock`, as it often strongly captures a reference to `self`, which would otherwise have the unintuitive side-effect of pointing to the _original_ operation when copied. + */ + +NS_ASSUME_NONNULL_BEGIN + +@interface AFURLConnectionOperation : NSOperation + +///------------------------------- +/// @name Accessing Run Loop Modes +///------------------------------- + +/** + The run loop modes in which the operation will run on the network thread. By default, this is a single-member set containing `NSRunLoopCommonModes`. + */ +@property (nonatomic, strong) NSSet *runLoopModes; + +///----------------------------------------- +/// @name Getting URL Connection Information +///----------------------------------------- + +/** + The request used by the operation's connection. + */ +@property (readonly, nonatomic, strong) NSURLRequest *request; + +/** + The last response received by the operation's connection. + */ +@property (readonly, nonatomic, strong, nullable) NSURLResponse *response; + +/** + The error, if any, that occurred in the lifecycle of the request. + */ +@property (readonly, nonatomic, strong, nullable) NSError *error; + +///---------------------------- +/// @name Getting Response Data +///---------------------------- + +/** + The data received during the request. + */ +@property (readonly, nonatomic, strong, nullable) NSData *responseData; + +/** + The string representation of the response data. + */ +@property (readonly, nonatomic, copy, nullable) NSString *responseString; + +/** + The string encoding of the response. + + If the response does not specify a valid string encoding, `responseStringEncoding` will return `NSUTF8StringEncoding`. + */ +@property (readonly, nonatomic, assign) NSStringEncoding responseStringEncoding; + +///------------------------------- +/// @name Managing URL Credentials +///------------------------------- + +/** + Whether the URL connection should consult the credential storage for authenticating the connection. `YES` by default. + + This is the value that is returned in the `NSURLConnectionDelegate` method `-connectionShouldUseCredentialStorage:`. + */ +@property (nonatomic, assign) BOOL shouldUseCredentialStorage; + +/** + The credential used for authentication challenges in `-connection:didReceiveAuthenticationChallenge:`. + + This will be overridden by any shared credentials that exist for the username or password of the request URL, if present. + */ +@property (nonatomic, strong, nullable) NSURLCredential *credential; + +///------------------------------- +/// @name Managing Security Policy +///------------------------------- + +/** + The security policy used to evaluate server trust for secure connections. + */ +@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; + +///------------------------ +/// @name Accessing Streams +///------------------------ + +/** + The input stream used to read data to be sent during the request. + + This property acts as a proxy to the `HTTPBodyStream` property of `request`. + */ +@property (nonatomic, strong) NSInputStream *inputStream; + +/** + The output stream that is used to write data received until the request is finished. + + By default, data is accumulated into a buffer that is stored into `responseData` upon completion of the request, with the intermediary `outputStream` property set to `nil`. When `outputStream` is set, the data will not be accumulated into an internal buffer, and as a result, the `responseData` property of the completed request will be `nil`. The output stream will be scheduled in the network thread runloop upon being set. + */ +@property (nonatomic, strong, nullable) NSOutputStream *outputStream; + +///--------------------------------- +/// @name Managing Callback Queues +///--------------------------------- + +/** + The dispatch queue for `completionBlock`. If `NULL` (default), the main queue is used. + */ +#if OS_OBJECT_HAVE_OBJC_SUPPORT +@property (nonatomic, strong, nullable) dispatch_queue_t completionQueue; +#else +@property (nonatomic, assign, nullable) dispatch_queue_t completionQueue; +#endif + +/** + The dispatch group for `completionBlock`. If `NULL` (default), a private dispatch group is used. + */ +#if OS_OBJECT_HAVE_OBJC_SUPPORT +@property (nonatomic, strong, nullable) dispatch_group_t completionGroup; +#else +@property (nonatomic, assign, nullable) dispatch_group_t completionGroup; +#endif + +///--------------------------------------------- +/// @name Managing Request Operation Information +///--------------------------------------------- + +/** + The user info dictionary for the receiver. + */ +@property (nonatomic, strong) NSDictionary *userInfo; +// FIXME: It doesn't seem that this userInfo is used anywhere in the implementation. + +///------------------------------------------------------ +/// @name Initializing an AFURLConnectionOperation Object +///------------------------------------------------------ + +/** + Initializes and returns a newly allocated operation object with a url connection configured with the specified url request. + + This is the designated initializer. + + @param urlRequest The request object to be used by the operation connection. + */ +- (instancetype)initWithRequest:(NSURLRequest *)urlRequest NS_DESIGNATED_INITIALIZER; + +///---------------------------------- +/// @name Pausing / Resuming Requests +///---------------------------------- + +/** + Pauses the execution of the request operation. + + A paused operation returns `NO` for `-isReady`, `-isExecuting`, and `-isFinished`. As such, it will remain in an `NSOperationQueue` until it is either cancelled or resumed. Pausing a finished, cancelled, or paused operation has no effect. + */ +- (void)pause; + +/** + Whether the request operation is currently paused. + + @return `YES` if the operation is currently paused, otherwise `NO`. + */ +- (BOOL)isPaused; + +/** + Resumes the execution of the paused request operation. + + Pause/Resume behavior varies depending on the underlying implementation for the operation class. In its base implementation, resuming a paused requests restarts the original request. However, since HTTP defines a specification for how to request a specific content range, `AFHTTPRequestOperation` will resume downloading the request from where it left off, instead of restarting the original request. + */ +- (void)resume; + +///---------------------------------------------- +/// @name Configuring Backgrounding Task Behavior +///---------------------------------------------- + +/** + Specifies that the operation should continue execution after the app has entered the background, and the expiration handler for that background task. + + @param handler A handler to be called shortly before the application’s remaining background time reaches 0. The handler is wrapped in a block that cancels the operation, and cleans up and marks the end of execution, unlike the `handler` parameter in `UIApplication -beginBackgroundTaskWithExpirationHandler:`, which expects this to be done in the handler itself. The handler is called synchronously on the main thread, thus blocking the application’s suspension momentarily while the application is notified. + */ +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +- (void)setShouldExecuteAsBackgroundTaskWithExpirationHandler:(nullable void (^)(void))handler NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extensions."); +#endif + +///--------------------------------- +/// @name Setting Progress Callbacks +///--------------------------------- + +/** + Sets a callback to be called when an undetermined number of bytes have been uploaded to the server. + + @param block A block object to be called when an undetermined number of bytes have been uploaded to the server. This block has no return value and takes three arguments: the number of bytes written since the last time the upload progress block was called, the total bytes written, and the total bytes expected to be written during the request, as initially determined by the length of the HTTP body. This block may be called multiple times, and will execute on the main thread. + */ +- (void)setUploadProgressBlock:(nullable void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))block; + +/** + Sets a callback to be called when an undetermined number of bytes have been downloaded from the server. + + @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread. + */ +- (void)setDownloadProgressBlock:(nullable void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block; + +///------------------------------------------------- +/// @name Setting NSURLConnection Delegate Callbacks +///------------------------------------------------- + +/** + Sets a block to be executed when the connection will authenticate a challenge in order to download its request, as handled by the `NSURLConnectionDelegate` method `connection:willSendRequestForAuthenticationChallenge:`. + + @param block A block object to be executed when the connection will authenticate a challenge in order to download its request. The block has no return type and takes two arguments: the URL connection object, and the challenge that must be authenticated. This block must invoke one of the challenge-responder methods (NSURLAuthenticationChallengeSender protocol). + + If `allowsInvalidSSLCertificate` is set to YES, `connection:willSendRequestForAuthenticationChallenge:` will attempt to have the challenge sender use credentials with invalid SSL certificates. + */ +- (void)setWillSendRequestForAuthenticationChallengeBlock:(nullable void (^)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge))block; + +/** + Sets a block to be executed when the server redirects the request from one URL to another URL, or when the request URL changed by the `NSURLProtocol` subclass handling the request in order to standardize its format, as handled by the `NSURLConnectionDataDelegate` method `connection:willSendRequest:redirectResponse:`. + + @param block A block object to be executed when the request URL was changed. The block returns an `NSURLRequest` object, the URL request to redirect, and takes three arguments: the URL connection object, the the proposed redirected request, and the URL response that caused the redirect. + */ +- (void)setRedirectResponseBlock:(nullable NSURLRequest * (^)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse))block; + + +/** + Sets a block to be executed to modify the response a connection will cache, if any, as handled by the `NSURLConnectionDelegate` method `connection:willCacheResponse:`. + + @param block A block object to be executed to determine what response a connection will cache, if any. The block returns an `NSCachedURLResponse` object, the cached response to store in memory or `nil` to prevent the response from being cached, and takes two arguments: the URL connection object, and the cached response provided for the request. + */ +- (void)setCacheResponseBlock:(nullable NSCachedURLResponse * (^)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse))block; + +/// + +/** + + */ ++ (NSArray *)batchOfRequestOperations:(nullable NSArray *)operations + progressBlock:(nullable void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock + completionBlock:(nullable void (^)(NSArray *operations))completionBlock; + +@end + +///-------------------- +/// @name Notifications +///-------------------- + +/** + Posted when an operation begins executing. + */ +extern NSString * const AFNetworkingOperationDidStartNotification; + +/** + Posted when an operation finishes. + */ +extern NSString * const AFNetworkingOperationDidFinishNotification; + +NS_ASSUME_NONNULL_END diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLConnectionOperation.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLConnectionOperation.m new file mode 100644 index 0000000..d28d69a --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLConnectionOperation.m @@ -0,0 +1,792 @@ +// AFURLConnectionOperation.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFURLConnectionOperation.h" + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +#import +#endif + +#if !__has_feature(objc_arc) +#error AFNetworking must be built with ARC. +// You can turn on ARC for only AFNetworking files by adding -fobjc-arc to the build phase for each of its files. +#endif + +typedef NS_ENUM(NSInteger, AFOperationState) { + AFOperationPausedState = -1, + AFOperationReadyState = 1, + AFOperationExecutingState = 2, + AFOperationFinishedState = 3, +}; + +static dispatch_group_t url_request_operation_completion_group() { + static dispatch_group_t af_url_request_operation_completion_group; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_request_operation_completion_group = dispatch_group_create(); + }); + + return af_url_request_operation_completion_group; +} + +static dispatch_queue_t url_request_operation_completion_queue() { + static dispatch_queue_t af_url_request_operation_completion_queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_request_operation_completion_queue = dispatch_queue_create("com.alamofire.networking.operation.queue", DISPATCH_QUEUE_CONCURRENT ); + }); + + return af_url_request_operation_completion_queue; +} + +static NSString * const kAFNetworkingLockName = @"com.alamofire.networking.operation.lock"; + +NSString * const AFNetworkingOperationDidStartNotification = @"com.alamofire.networking.operation.start"; +NSString * const AFNetworkingOperationDidFinishNotification = @"com.alamofire.networking.operation.finish"; + +typedef void (^AFURLConnectionOperationProgressBlock)(NSUInteger bytes, long long totalBytes, long long totalBytesExpected); +typedef void (^AFURLConnectionOperationAuthenticationChallengeBlock)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge); +typedef NSCachedURLResponse * (^AFURLConnectionOperationCacheResponseBlock)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse); +typedef NSURLRequest * (^AFURLConnectionOperationRedirectResponseBlock)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse); +typedef void (^AFURLConnectionOperationBackgroundTaskCleanupBlock)(); + +static inline NSString * AFKeyPathFromOperationState(AFOperationState state) { + switch (state) { + case AFOperationReadyState: + return @"isReady"; + case AFOperationExecutingState: + return @"isExecuting"; + case AFOperationFinishedState: + return @"isFinished"; + case AFOperationPausedState: + return @"isPaused"; + default: { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunreachable-code" + return @"state"; +#pragma clang diagnostic pop + } + } +} + +static inline BOOL AFStateTransitionIsValid(AFOperationState fromState, AFOperationState toState, BOOL isCancelled) { + switch (fromState) { + case AFOperationReadyState: + switch (toState) { + case AFOperationPausedState: + case AFOperationExecutingState: + return YES; + case AFOperationFinishedState: + return isCancelled; + default: + return NO; + } + case AFOperationExecutingState: + switch (toState) { + case AFOperationPausedState: + case AFOperationFinishedState: + return YES; + default: + return NO; + } + case AFOperationFinishedState: + return NO; + case AFOperationPausedState: + return toState == AFOperationReadyState; + default: { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunreachable-code" + switch (toState) { + case AFOperationPausedState: + case AFOperationReadyState: + case AFOperationExecutingState: + case AFOperationFinishedState: + return YES; + default: + return NO; + } + } +#pragma clang diagnostic pop + } +} + +@interface AFURLConnectionOperation () +@property (readwrite, nonatomic, assign) AFOperationState state; +@property (readwrite, nonatomic, strong) NSRecursiveLock *lock; +@property (readwrite, nonatomic, strong) NSURLConnection *connection; +@property (readwrite, nonatomic, strong) NSURLRequest *request; +@property (readwrite, nonatomic, strong) NSURLResponse *response; +@property (readwrite, nonatomic, strong) NSError *error; +@property (readwrite, nonatomic, strong) NSData *responseData; +@property (readwrite, nonatomic, copy) NSString *responseString; +@property (readwrite, nonatomic, assign) NSStringEncoding responseStringEncoding; +@property (readwrite, nonatomic, assign) long long totalBytesRead; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationBackgroundTaskCleanupBlock backgroundTaskCleanup; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationProgressBlock uploadProgress; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationProgressBlock downloadProgress; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationAuthenticationChallengeBlock authenticationChallenge; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationCacheResponseBlock cacheResponse; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationRedirectResponseBlock redirectResponse; + +- (void)operationDidStart; +- (void)finish; +- (void)cancelConnection; +@end + +@implementation AFURLConnectionOperation +@synthesize outputStream = _outputStream; + ++ (void)networkRequestThreadEntryPoint:(id)__unused object { + @autoreleasepool { + [[NSThread currentThread] setName:@"AFNetworking"]; + + NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; + [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode]; + [runLoop run]; + } +} + ++ (NSThread *)networkRequestThread { + static NSThread *_networkRequestThread = nil; + static dispatch_once_t oncePredicate; + dispatch_once(&oncePredicate, ^{ + _networkRequestThread = [[NSThread alloc] initWithTarget:self selector:@selector(networkRequestThreadEntryPoint:) object:nil]; + [_networkRequestThread start]; + }); + + return _networkRequestThread; +} + +- (instancetype)initWithRequest:(NSURLRequest *)urlRequest { + NSParameterAssert(urlRequest); + + self = [super init]; + if (!self) { + return nil; + } + + _state = AFOperationReadyState; + + self.lock = [[NSRecursiveLock alloc] init]; + self.lock.name = kAFNetworkingLockName; + + self.runLoopModes = [NSSet setWithObject:NSRunLoopCommonModes]; + + self.request = urlRequest; + + self.shouldUseCredentialStorage = YES; + + self.securityPolicy = [AFSecurityPolicy defaultPolicy]; + + return self; +} + +- (instancetype)init NS_UNAVAILABLE +{ + return nil; +} + +- (void)dealloc { + if (_outputStream) { + [_outputStream close]; + _outputStream = nil; + } + + if (_backgroundTaskCleanup) { + _backgroundTaskCleanup(); + } +} + +#pragma mark - + +- (void)setResponseData:(NSData *)responseData { + [self.lock lock]; + if (!responseData) { + _responseData = nil; + } else { + _responseData = [NSData dataWithBytes:responseData.bytes length:responseData.length]; + } + [self.lock unlock]; +} + +- (NSString *)responseString { + [self.lock lock]; + if (!_responseString && self.response && self.responseData) { + self.responseString = [[NSString alloc] initWithData:self.responseData encoding:self.responseStringEncoding]; + } + [self.lock unlock]; + + return _responseString; +} + +- (NSStringEncoding)responseStringEncoding { + [self.lock lock]; + if (!_responseStringEncoding && self.response) { + NSStringEncoding stringEncoding = NSUTF8StringEncoding; + if (self.response.textEncodingName) { + CFStringEncoding IANAEncoding = CFStringConvertIANACharSetNameToEncoding((__bridge CFStringRef)self.response.textEncodingName); + if (IANAEncoding != kCFStringEncodingInvalidId) { + stringEncoding = CFStringConvertEncodingToNSStringEncoding(IANAEncoding); + } + } + + self.responseStringEncoding = stringEncoding; + } + [self.lock unlock]; + + return _responseStringEncoding; +} + +- (NSInputStream *)inputStream { + return self.request.HTTPBodyStream; +} + +- (void)setInputStream:(NSInputStream *)inputStream { + NSMutableURLRequest *mutableRequest = [self.request mutableCopy]; + mutableRequest.HTTPBodyStream = inputStream; + self.request = mutableRequest; +} + +- (NSOutputStream *)outputStream { + if (!_outputStream) { + self.outputStream = [NSOutputStream outputStreamToMemory]; + } + + return _outputStream; +} + +- (void)setOutputStream:(NSOutputStream *)outputStream { + [self.lock lock]; + if (outputStream != _outputStream) { + if (_outputStream) { + [_outputStream close]; + } + + _outputStream = outputStream; + } + [self.lock unlock]; +} + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +- (void)setShouldExecuteAsBackgroundTaskWithExpirationHandler:(void (^)(void))handler { + [self.lock lock]; + if (!self.backgroundTaskCleanup) { + UIApplication *application = [UIApplication sharedApplication]; + UIBackgroundTaskIdentifier __block backgroundTaskIdentifier = UIBackgroundTaskInvalid; + __weak __typeof(self)weakSelf = self; + + self.backgroundTaskCleanup = ^(){ + if (backgroundTaskIdentifier != UIBackgroundTaskInvalid) { + [[UIApplication sharedApplication] endBackgroundTask:backgroundTaskIdentifier]; + backgroundTaskIdentifier = UIBackgroundTaskInvalid; + } + }; + + backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{ + __strong __typeof(weakSelf)strongSelf = weakSelf; + + if (handler) { + handler(); + } + + if (strongSelf) { + [strongSelf cancel]; + strongSelf.backgroundTaskCleanup(); + } + }]; + } + [self.lock unlock]; +} +#endif + +#pragma mark - + +- (void)setState:(AFOperationState)state { + if (!AFStateTransitionIsValid(self.state, state, [self isCancelled])) { + return; + } + + [self.lock lock]; + NSString *oldStateKey = AFKeyPathFromOperationState(self.state); + NSString *newStateKey = AFKeyPathFromOperationState(state); + + [self willChangeValueForKey:newStateKey]; + [self willChangeValueForKey:oldStateKey]; + _state = state; + [self didChangeValueForKey:oldStateKey]; + [self didChangeValueForKey:newStateKey]; + [self.lock unlock]; +} + +- (void)pause { + if ([self isPaused] || [self isFinished] || [self isCancelled]) { + return; + } + + [self.lock lock]; + if ([self isExecuting]) { + [self performSelector:@selector(operationDidPause) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; + + dispatch_async(dispatch_get_main_queue(), ^{ + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter postNotificationName:AFNetworkingOperationDidFinishNotification object:self]; + }); + } + + self.state = AFOperationPausedState; + [self.lock unlock]; +} + +- (void)operationDidPause { + [self.lock lock]; + [self.connection cancel]; + [self.lock unlock]; +} + +- (BOOL)isPaused { + return self.state == AFOperationPausedState; +} + +- (void)resume { + if (![self isPaused]) { + return; + } + + [self.lock lock]; + self.state = AFOperationReadyState; + + [self start]; + [self.lock unlock]; +} + +#pragma mark - + +- (void)setUploadProgressBlock:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))block { + self.uploadProgress = block; +} + +- (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block { + self.downloadProgress = block; +} + +- (void)setWillSendRequestForAuthenticationChallengeBlock:(void (^)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge))block { + self.authenticationChallenge = block; +} + +- (void)setCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse))block { + self.cacheResponse = block; +} + +- (void)setRedirectResponseBlock:(NSURLRequest * (^)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse))block { + self.redirectResponse = block; +} + +#pragma mark - NSOperation + +- (void)setCompletionBlock:(void (^)(void))block { + [self.lock lock]; + if (!block) { + [super setCompletionBlock:nil]; + } else { + __weak __typeof(self)weakSelf = self; + [super setCompletionBlock:^ { + __strong __typeof(weakSelf)strongSelf = weakSelf; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_group_t group = strongSelf.completionGroup ?: url_request_operation_completion_group(); + dispatch_queue_t queue = strongSelf.completionQueue ?: dispatch_get_main_queue(); +#pragma clang diagnostic pop + + dispatch_group_async(group, queue, ^{ + block(); + }); + + dispatch_group_notify(group, url_request_operation_completion_queue(), ^{ + [strongSelf setCompletionBlock:nil]; + }); + }]; + } + [self.lock unlock]; +} + +- (BOOL)isReady { + return self.state == AFOperationReadyState && [super isReady]; +} + +- (BOOL)isExecuting { + return self.state == AFOperationExecutingState; +} + +- (BOOL)isFinished { + return self.state == AFOperationFinishedState; +} + +- (BOOL)isConcurrent { + return YES; +} + +- (void)start { + [self.lock lock]; + if ([self isCancelled]) { + [self performSelector:@selector(cancelConnection) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; + } else if ([self isReady]) { + self.state = AFOperationExecutingState; + + [self performSelector:@selector(operationDidStart) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; + } + [self.lock unlock]; +} + +- (void)operationDidStart { + [self.lock lock]; + if (![self isCancelled]) { + self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self startImmediately:NO]; + + NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; + for (NSString *runLoopMode in self.runLoopModes) { + [self.connection scheduleInRunLoop:runLoop forMode:runLoopMode]; + [self.outputStream scheduleInRunLoop:runLoop forMode:runLoopMode]; + } + + [self.outputStream open]; + [self.connection start]; + } + [self.lock unlock]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingOperationDidStartNotification object:self]; + }); +} + +- (void)finish { + [self.lock lock]; + self.state = AFOperationFinishedState; + [self.lock unlock]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingOperationDidFinishNotification object:self]; + }); +} + +- (void)cancel { + [self.lock lock]; + if (![self isFinished] && ![self isCancelled]) { + [super cancel]; + + if ([self isExecuting]) { + [self performSelector:@selector(cancelConnection) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; + } + } + [self.lock unlock]; +} + +- (void)cancelConnection { + NSDictionary *userInfo = nil; + if ([self.request URL]) { + userInfo = @{NSURLErrorFailingURLErrorKey : [self.request URL]}; + } + NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorCancelled userInfo:userInfo]; + + if (![self isFinished]) { + if (self.connection) { + [self.connection cancel]; + [self performSelector:@selector(connection:didFailWithError:) withObject:self.connection withObject:error]; + } else { + // Accommodate race condition where `self.connection` has not yet been set before cancellation + self.error = error; + [self finish]; + } + } +} + +#pragma mark - + ++ (NSArray *)batchOfRequestOperations:(NSArray *)operations + progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock + completionBlock:(void (^)(NSArray *operations))completionBlock +{ + if (!operations || [operations count] == 0) { + return @[[NSBlockOperation blockOperationWithBlock:^{ + dispatch_async(dispatch_get_main_queue(), ^{ + if (completionBlock) { + completionBlock(@[]); + } + }); + }]]; + } + + __block dispatch_group_t group = dispatch_group_create(); + NSBlockOperation *batchedOperation = [NSBlockOperation blockOperationWithBlock:^{ + dispatch_group_notify(group, dispatch_get_main_queue(), ^{ + if (completionBlock) { + completionBlock(operations); + } + }); + }]; + + for (AFURLConnectionOperation *operation in operations) { + operation.completionGroup = group; + void (^originalCompletionBlock)(void) = [operation.completionBlock copy]; + __weak __typeof(operation)weakOperation = operation; + operation.completionBlock = ^{ + __strong __typeof(weakOperation)strongOperation = weakOperation; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_queue_t queue = strongOperation.completionQueue ?: dispatch_get_main_queue(); +#pragma clang diagnostic pop + dispatch_group_async(group, queue, ^{ + if (originalCompletionBlock) { + originalCompletionBlock(); + } + + NSUInteger numberOfFinishedOperations = [[operations indexesOfObjectsPassingTest:^BOOL(id op, NSUInteger __unused idx, BOOL __unused *stop) { + return [op isFinished]; + }] count]; + + if (progressBlock) { + progressBlock(numberOfFinishedOperations, [operations count]); + } + + dispatch_group_leave(group); + }); + }; + + dispatch_group_enter(group); + [batchedOperation addDependency:operation]; + } + + return [operations arrayByAddingObject:batchedOperation]; +} + +#pragma mark - NSObject + +- (NSString *)description { + [self.lock lock]; + NSString *description = [NSString stringWithFormat:@"<%@: %p, state: %@, cancelled: %@ request: %@, response: %@>", NSStringFromClass([self class]), self, AFKeyPathFromOperationState(self.state), ([self isCancelled] ? @"YES" : @"NO"), self.request, self.response]; + [self.lock unlock]; + return description; +} + +#pragma mark - NSURLConnectionDelegate + +- (void)connection:(NSURLConnection *)connection +willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge +{ + if (self.authenticationChallenge) { + self.authenticationChallenge(connection, challenge); + return; + } + + if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { + if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { + NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; + [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; + } else { + [[challenge sender] cancelAuthenticationChallenge:challenge]; + } + } else { + if ([challenge previousFailureCount] == 0) { + if (self.credential) { + [[challenge sender] useCredential:self.credential forAuthenticationChallenge:challenge]; + } else { + [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; + } + } else { + [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; + } + } +} + +- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection __unused *)connection { + return self.shouldUseCredentialStorage; +} + +- (NSURLRequest *)connection:(NSURLConnection *)connection + willSendRequest:(NSURLRequest *)request + redirectResponse:(NSURLResponse *)redirectResponse +{ + if (self.redirectResponse) { + return self.redirectResponse(connection, request, redirectResponse); + } else { + return request; + } +} + +- (void)connection:(NSURLConnection __unused *)connection + didSendBodyData:(NSInteger)bytesWritten + totalBytesWritten:(NSInteger)totalBytesWritten +totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite +{ + dispatch_async(dispatch_get_main_queue(), ^{ + if (self.uploadProgress) { + self.uploadProgress((NSUInteger)bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); + } + }); +} + +- (void)connection:(NSURLConnection __unused *)connection +didReceiveResponse:(NSURLResponse *)response +{ + self.response = response; +} + +- (void)connection:(NSURLConnection __unused *)connection + didReceiveData:(NSData *)data +{ + NSUInteger length = [data length]; + while (YES) { + NSInteger totalNumberOfBytesWritten = 0; + if ([self.outputStream hasSpaceAvailable]) { + const uint8_t *dataBuffer = (uint8_t *)[data bytes]; + + NSInteger numberOfBytesWritten = 0; + while (totalNumberOfBytesWritten < (NSInteger)length) { + numberOfBytesWritten = [self.outputStream write:&dataBuffer[(NSUInteger)totalNumberOfBytesWritten] maxLength:(length - (NSUInteger)totalNumberOfBytesWritten)]; + if (numberOfBytesWritten == -1) { + break; + } + + totalNumberOfBytesWritten += numberOfBytesWritten; + } + + break; + } + + if (self.outputStream.streamError) { + [self.connection cancel]; + [self performSelector:@selector(connection:didFailWithError:) withObject:self.connection withObject:self.outputStream.streamError]; + return; + } + } + + dispatch_async(dispatch_get_main_queue(), ^{ + self.totalBytesRead += (long long)length; + + if (self.downloadProgress) { + self.downloadProgress(length, self.totalBytesRead, self.response.expectedContentLength); + } + }); +} + +- (void)connectionDidFinishLoading:(NSURLConnection __unused *)connection { + self.responseData = [self.outputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]; + + [self.outputStream close]; + if (self.responseData) { + self.outputStream = nil; + } + + self.connection = nil; + + [self finish]; +} + +- (void)connection:(NSURLConnection __unused *)connection + didFailWithError:(NSError *)error +{ + self.error = error; + + [self.outputStream close]; + if (self.responseData) { + self.outputStream = nil; + } + + self.connection = nil; + + [self finish]; +} + +- (NSCachedURLResponse *)connection:(NSURLConnection *)connection + willCacheResponse:(NSCachedURLResponse *)cachedResponse +{ + if (self.cacheResponse) { + return self.cacheResponse(connection, cachedResponse); + } else { + if ([self isCancelled]) { + return nil; + } + + return cachedResponse; + } +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + NSURLRequest *request = [decoder decodeObjectOfClass:[NSURLRequest class] forKey:NSStringFromSelector(@selector(request))]; + + self = [self initWithRequest:request]; + if (!self) { + return nil; + } + + self.state = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(state))] integerValue]; + self.response = [decoder decodeObjectOfClass:[NSHTTPURLResponse class] forKey:NSStringFromSelector(@selector(response))]; + self.error = [decoder decodeObjectOfClass:[NSError class] forKey:NSStringFromSelector(@selector(error))]; + self.responseData = [decoder decodeObjectOfClass:[NSData class] forKey:NSStringFromSelector(@selector(responseData))]; + self.totalBytesRead = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(totalBytesRead))] longLongValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [self pause]; + + [coder encodeObject:self.request forKey:NSStringFromSelector(@selector(request))]; + + switch (self.state) { + case AFOperationExecutingState: + case AFOperationPausedState: + [coder encodeInteger:AFOperationReadyState forKey:NSStringFromSelector(@selector(state))]; + break; + default: + [coder encodeInteger:self.state forKey:NSStringFromSelector(@selector(state))]; + break; + } + + [coder encodeObject:self.response forKey:NSStringFromSelector(@selector(response))]; + [coder encodeObject:self.error forKey:NSStringFromSelector(@selector(error))]; + [coder encodeObject:self.responseData forKey:NSStringFromSelector(@selector(responseData))]; + [coder encodeInt64:self.totalBytesRead forKey:NSStringFromSelector(@selector(totalBytesRead))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFURLConnectionOperation *operation = [(AFURLConnectionOperation *)[[self class] allocWithZone:zone] initWithRequest:self.request]; + + operation.uploadProgress = self.uploadProgress; + operation.downloadProgress = self.downloadProgress; + operation.authenticationChallenge = self.authenticationChallenge; + operation.cacheResponse = self.cacheResponse; + operation.redirectResponse = self.redirectResponse; + operation.completionQueue = self.completionQueue; + operation.completionGroup = self.completionGroup; + + return operation; +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLRequestSerialization.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLRequestSerialization.h new file mode 100644 index 0000000..d747496 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLRequestSerialization.h @@ -0,0 +1,473 @@ +// AFURLRequestSerialization.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#if TARGET_OS_IOS +#import +#elif TARGET_OS_WATCH +#import +#endif + +NS_ASSUME_NONNULL_BEGIN + +/** + The `AFURLRequestSerialization` protocol is adopted by an object that encodes parameters for a specified HTTP requests. Request serializers may encode parameters as query strings, HTTP bodies, setting the appropriate HTTP header fields as necessary. + + For example, a JSON request serializer may set the HTTP body of the request to a JSON representation, and set the `Content-Type` HTTP header field value to `application/json`. + */ +@protocol AFURLRequestSerialization + +/** + Returns a request with the specified parameters encoded into a copy of the original request. + + @param request The original request. + @param parameters The parameters to be encoded. + @param error The error that occurred while attempting to encode the request parameters. + + @return A serialized request. + */ +- (nullable NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(nullable id)parameters + error:(NSError * __nullable __autoreleasing *)error; + +@end + +#pragma mark - + +/** + + */ +typedef NS_ENUM(NSUInteger, AFHTTPRequestQueryStringSerializationStyle) { + AFHTTPRequestQueryStringDefaultStyle = 0, +}; + +@protocol AFMultipartFormData; + +/** + `AFHTTPRequestSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation. + + Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPRequestSerializer` in order to ensure consistent default behavior. + */ +@interface AFHTTPRequestSerializer : NSObject + +/** + The string encoding used to serialize parameters. `NSUTF8StringEncoding` by default. + */ +@property (nonatomic, assign) NSStringEncoding stringEncoding; + +/** + Whether created requests can use the device’s cellular radio (if present). `YES` by default. + + @see NSMutableURLRequest -setAllowsCellularAccess: + */ +@property (nonatomic, assign) BOOL allowsCellularAccess; + +/** + The cache policy of created requests. `NSURLRequestUseProtocolCachePolicy` by default. + + @see NSMutableURLRequest -setCachePolicy: + */ +@property (nonatomic, assign) NSURLRequestCachePolicy cachePolicy; + +/** + Whether created requests should use the default cookie handling. `YES` by default. + + @see NSMutableURLRequest -setHTTPShouldHandleCookies: + */ +@property (nonatomic, assign) BOOL HTTPShouldHandleCookies; + +/** + Whether created requests can continue transmitting data before receiving a response from an earlier transmission. `NO` by default + + @see NSMutableURLRequest -setHTTPShouldUsePipelining: + */ +@property (nonatomic, assign) BOOL HTTPShouldUsePipelining; + +/** + The network service type for created requests. `NSURLNetworkServiceTypeDefault` by default. + + @see NSMutableURLRequest -setNetworkServiceType: + */ +@property (nonatomic, assign) NSURLRequestNetworkServiceType networkServiceType; + +/** + The timeout interval, in seconds, for created requests. The default timeout interval is 60 seconds. + + @see NSMutableURLRequest -setTimeoutInterval: + */ +@property (nonatomic, assign) NSTimeInterval timeoutInterval; + +///--------------------------------------- +/// @name Configuring HTTP Request Headers +///--------------------------------------- + +/** + Default HTTP header field values to be applied to serialized requests. By default, these include the following: + + - `Accept-Language` with the contents of `NSLocale +preferredLanguages` + - `User-Agent` with the contents of various bundle identifiers and OS designations + + @discussion To add or remove default request headers, use `setValue:forHTTPHeaderField:`. + */ +@property (readonly, nonatomic, strong) NSDictionary *HTTPRequestHeaders; + +/** + Creates and returns a serializer with default configuration. + */ ++ (instancetype)serializer; + +/** + Sets the value for the HTTP headers set in request objects made by the HTTP client. If `nil`, removes the existing value for that header. + + @param field The HTTP header to set a default value for + @param value The value set as default for the specified header, or `nil` + */ +- (void)setValue:(nullable NSString *)value +forHTTPHeaderField:(NSString *)field; + +/** + Returns the value for the HTTP headers set in the request serializer. + + @param field The HTTP header to retrieve the default value for + + @return The value set as default for the specified header, or `nil` + */ +- (nullable NSString *)valueForHTTPHeaderField:(NSString *)field; + +/** + Sets the "Authorization" HTTP header set in request objects made by the HTTP client to a basic authentication value with Base64-encoded username and password. This overwrites any existing value for this header. + + @param username The HTTP basic auth username + @param password The HTTP basic auth password + */ +- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username + password:(NSString *)password; + +/** + @deprecated This method has been deprecated. Use -setValue:forHTTPHeaderField: instead. + */ +- (void)setAuthorizationHeaderFieldWithToken:(NSString *)token DEPRECATED_ATTRIBUTE; + + +/** + Clears any existing value for the "Authorization" HTTP header. + */ +- (void)clearAuthorizationHeader; + +///------------------------------------------------------- +/// @name Configuring Query String Parameter Serialization +///------------------------------------------------------- + +/** + HTTP methods for which serialized requests will encode parameters as a query string. `GET`, `HEAD`, and `DELETE` by default. + */ +@property (nonatomic, strong) NSSet *HTTPMethodsEncodingParametersInURI; + +/** + Set the method of query string serialization according to one of the pre-defined styles. + + @param style The serialization style. + + @see AFHTTPRequestQueryStringSerializationStyle + */ +- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style; + +/** + Set the a custom method of query string serialization according to the specified block. + + @param block A block that defines a process of encoding parameters into a query string. This block returns the query string and takes three arguments: the request, the parameters to encode, and the error that occurred when attempting to encode parameters for the given request. + */ +- (void)setQueryStringSerializationWithBlock:(nullable NSString * (^)(NSURLRequest *request, id parameters, NSError * __autoreleasing *error))block; + +///------------------------------- +/// @name Creating Request Objects +///------------------------------- + +/** + @deprecated This method has been deprecated. Use -requestWithMethod:URLString:parameters:error: instead. + */ +- (NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters DEPRECATED_ATTRIBUTE; + +/** + Creates an `NSMutableURLRequest` object with the specified HTTP method and URL string. + + If the HTTP method is `GET`, `HEAD`, or `DELETE`, the parameters will be used to construct a url-encoded query string that is appended to the request's URL. Otherwise, the parameters will be encoded according to the value of the `parameterEncoding` property, and set as the request body. + + @param method The HTTP method for the request, such as `GET`, `POST`, `PUT`, or `DELETE`. This parameter must not be `nil`. + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be either set as a query string for `GET` requests, or the request HTTP body. + @param error The error that occurred while constructing the request. + + @return An `NSMutableURLRequest` object. + */ +- (NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(nullable id)parameters + error:(NSError * __nullable __autoreleasing *)error; + +/** + @deprecated This method has been deprecated. Use -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error: instead. + */ +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(NSDictionary *)parameters + constructingBodyWithBlock:(void (^)(id formData))block DEPRECATED_ATTRIBUTE; + +/** + Creates an `NSMutableURLRequest` object with the specified HTTP method and URLString, and constructs a `multipart/form-data` HTTP body, using the specified parameters and multipart form data block. See http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2 + + Multipart form requests are automatically streamed, reading files directly from disk along with in-memory data in a single HTTP body. The resulting `NSMutableURLRequest` object has an `HTTPBodyStream` property, so refrain from setting `HTTPBodyStream` or `HTTPBody` on this request object, as it will clear out the multipart form body stream. + + @param method The HTTP method for the request. This parameter must not be `GET` or `HEAD`, or `nil`. + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded and set in the request HTTP body. + @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. + @param error The error that occurred while constructing the request. + + @return An `NSMutableURLRequest` object + */ +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(nullable NSDictionary *)parameters + constructingBodyWithBlock:(nullable void (^)(id formData))block + error:(NSError * __nullable __autoreleasing *)error; + +/** + Creates an `NSMutableURLRequest` by removing the `HTTPBodyStream` from a request, and asynchronously writing its contents into the specified file, invoking the completion handler when finished. + + @param request The multipart form request. The `HTTPBodyStream` property of `request` must not be `nil`. + @param fileURL The file URL to write multipart form contents to. + @param handler A handler block to execute. + + @discussion There is a bug in `NSURLSessionTask` that causes requests to not send a `Content-Length` header when streaming contents from an HTTP body, which is notably problematic when interacting with the Amazon S3 webservice. As a workaround, this method takes a request constructed with `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error:`, or any other request with an `HTTPBodyStream`, writes the contents to the specified file and returns a copy of the original request with the `HTTPBodyStream` property set to `nil`. From here, the file can either be passed to `AFURLSessionManager -uploadTaskWithRequest:fromFile:progress:completionHandler:`, or have its contents read into an `NSData` that's assigned to the `HTTPBody` property of the request. + + @see https://github.com/AFNetworking/AFNetworking/issues/1398 + */ +- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request + writingStreamContentsToFile:(NSURL *)fileURL + completionHandler:(nullable void (^)(NSError *error))handler; + +@end + +#pragma mark - + +/** + The `AFMultipartFormData` protocol defines the methods supported by the parameter in the block argument of `AFHTTPRequestSerializer -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:`. + */ +@protocol AFMultipartFormData + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{generated filename}; name=#{name}"` and `Content-Type: #{generated mimeType}`, followed by the encoded file data and the multipart form boundary. + + The filename and MIME type for this data in the form will be automatically generated, using the last path component of the `fileURL` and system associated MIME type for the `fileURL` extension, respectively. + + @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + @param error If an error occurs, upon return contains an `NSError` object that describes the problem. + + @return `YES` if the file data was successfully appended, otherwise `NO`. + */ +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + error:(NSError * __nullable __autoreleasing *)error; + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary. + + @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + @param fileName The file name to be used in the `Content-Disposition` header. This parameter must not be `nil`. + @param mimeType The declared MIME type of the file data. This parameter must not be `nil`. + @param error If an error occurs, upon return contains an `NSError` object that describes the problem. + + @return `YES` if the file data was successfully appended otherwise `NO`. + */ +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType + error:(NSError * __nullable __autoreleasing *)error; + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the data from the input stream and the multipart form boundary. + + @param inputStream The input stream to be appended to the form data + @param name The name to be associated with the specified input stream. This parameter must not be `nil`. + @param fileName The filename to be associated with the specified input stream. This parameter must not be `nil`. + @param length The length of the specified input stream in bytes. + @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`. + */ +- (void)appendPartWithInputStream:(nullable NSInputStream *)inputStream + name:(NSString *)name + fileName:(NSString *)fileName + length:(int64_t)length + mimeType:(NSString *)mimeType; + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary. + + @param data The data to be encoded and appended to the form data. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + @param fileName The filename to be associated with the specified data. This parameter must not be `nil`. + @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`. + */ +- (void)appendPartWithFileData:(NSData *)data + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType; + +/** + Appends the HTTP headers `Content-Disposition: form-data; name=#{name}"`, followed by the encoded data and the multipart form boundary. + + @param data The data to be encoded and appended to the form data. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + */ + +- (void)appendPartWithFormData:(NSData *)data + name:(NSString *)name; + + +/** + Appends HTTP headers, followed by the encoded data and the multipart form boundary. + + @param headers The HTTP headers to be appended to the form data. + @param body The data to be encoded and appended to the form data. This parameter must not be `nil`. + */ +- (void)appendPartWithHeaders:(nullable NSDictionary *)headers + body:(NSData *)body; + +/** + Throttles request bandwidth by limiting the packet size and adding a delay for each chunk read from the upload stream. + + When uploading over a 3G or EDGE connection, requests may fail with "request body stream exhausted". Setting a maximum packet size and delay according to the recommended values (`kAFUploadStream3GSuggestedPacketSize` and `kAFUploadStream3GSuggestedDelay`) lowers the risk of the input stream exceeding its allocated bandwidth. Unfortunately, there is no definite way to distinguish between a 3G, EDGE, or LTE connection over `NSURLConnection`. As such, it is not recommended that you throttle bandwidth based solely on network reachability. Instead, you should consider checking for the "request body stream exhausted" in a failure block, and then retrying the request with throttled bandwidth. + + @param numberOfBytes Maximum packet size, in number of bytes. The default packet size for an input stream is 16kb. + @param delay Duration of delay each time a packet is read. By default, no delay is set. + */ +- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes + delay:(NSTimeInterval)delay; + +@end + +#pragma mark - + +/** + `AFJSONRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSJSONSerialization`, setting the `Content-Type` of the encoded request to `application/json`. + */ +@interface AFJSONRequestSerializer : AFHTTPRequestSerializer + +/** + Options for writing the request JSON data from Foundation objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONWritingOptions". `0` by default. + */ +@property (nonatomic, assign) NSJSONWritingOptions writingOptions; + +/** + Creates and returns a JSON serializer with specified reading and writing options. + + @param writingOptions The specified JSON writing options. + */ ++ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions; + +@end + +#pragma mark - + +/** + `AFPropertyListRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSPropertyListSerializer`, setting the `Content-Type` of the encoded request to `application/x-plist`. + */ +@interface AFPropertyListRequestSerializer : AFHTTPRequestSerializer + +/** + The property list format. Possible values are described in "NSPropertyListFormat". + */ +@property (nonatomic, assign) NSPropertyListFormat format; + +/** + @warning The `writeOptions` property is currently unused. + */ +@property (nonatomic, assign) NSPropertyListWriteOptions writeOptions; + +/** + Creates and returns a property list serializer with a specified format, read options, and write options. + + @param format The property list format. + @param writeOptions The property list write options. + + @warning The `writeOptions` property is currently unused. + */ ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + writeOptions:(NSPropertyListWriteOptions)writeOptions; + +@end + +#pragma mark - + +///---------------- +/// @name Constants +///---------------- + +/** + ## Error Domains + + The following error domain is predefined. + + - `NSString * const AFURLRequestSerializationErrorDomain` + + ### Constants + + `AFURLRequestSerializationErrorDomain` + AFURLRequestSerializer errors. Error codes for `AFURLRequestSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`. + */ +extern NSString * const AFURLRequestSerializationErrorDomain; + +/** + ## User info dictionary keys + + These keys may exist in the user info dictionary, in addition to those defined for NSError. + + - `NSString * const AFNetworkingOperationFailingURLRequestErrorKey` + + ### Constants + + `AFNetworkingOperationFailingURLRequestErrorKey` + The corresponding value is an `NSURLRequest` containing the request of the operation associated with an error. This key is only present in the `AFURLRequestSerializationErrorDomain`. + */ +extern NSString * const AFNetworkingOperationFailingURLRequestErrorKey; + +/** + ## Throttling Bandwidth for HTTP Request Input Streams + + @see -throttleBandwidthWithPacketSize:delay: + + ### Constants + + `kAFUploadStream3GSuggestedPacketSize` + Maximum packet size, in number of bytes. Equal to 16kb. + + `kAFUploadStream3GSuggestedDelay` + Duration of delay each time a packet is read. Equal to 0.2 seconds. + */ +extern NSUInteger const kAFUploadStream3GSuggestedPacketSize; +extern NSTimeInterval const kAFUploadStream3GSuggestedDelay; + +NS_ASSUME_NONNULL_END diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLRequestSerialization.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLRequestSerialization.m new file mode 100644 index 0000000..8431761 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLRequestSerialization.m @@ -0,0 +1,1397 @@ +// AFURLRequestSerialization.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFURLRequestSerialization.h" + +#if __IPHONE_OS_VERSION_MIN_REQUIRED +#import +#else +#import +#endif + +NSString * const AFURLRequestSerializationErrorDomain = @"com.alamofire.error.serialization.request"; +NSString * const AFNetworkingOperationFailingURLRequestErrorKey = @"com.alamofire.serialization.request.error.response"; + +typedef NSString * (^AFQueryStringSerializationBlock)(NSURLRequest *request, id parameters, NSError *__autoreleasing *error); + +static NSString * AFBase64EncodedStringFromString(NSString *string) { + NSData *data = [NSData dataWithBytes:[string UTF8String] length:[string lengthOfBytesUsingEncoding:NSUTF8StringEncoding]]; + NSUInteger length = [data length]; + NSMutableData *mutableData = [NSMutableData dataWithLength:((length + 2) / 3) * 4]; + + uint8_t *input = (uint8_t *)[data bytes]; + uint8_t *output = (uint8_t *)[mutableData mutableBytes]; + + for (NSUInteger i = 0; i < length; i += 3) { + NSUInteger value = 0; + for (NSUInteger j = i; j < (i + 3); j++) { + value <<= 8; + if (j < length) { + value |= (0xFF & input[j]); + } + } + + static uint8_t const kAFBase64EncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + NSUInteger idx = (i / 3) * 4; + output[idx + 0] = kAFBase64EncodingTable[(value >> 18) & 0x3F]; + output[idx + 1] = kAFBase64EncodingTable[(value >> 12) & 0x3F]; + output[idx + 2] = (i + 1) < length ? kAFBase64EncodingTable[(value >> 6) & 0x3F] : '='; + output[idx + 3] = (i + 2) < length ? kAFBase64EncodingTable[(value >> 0) & 0x3F] : '='; + } + + return [[NSString alloc] initWithData:mutableData encoding:NSASCIIStringEncoding]; +} + +/** + Returns a percent-escaped string following RFC 3986 for a query string key or value. + RFC 3986 states that the following characters are "reserved" characters. + - General Delimiters: ":", "#", "[", "]", "@", "?", "/" + - Sub-Delimiters: "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "=" + + In RFC 3986 - Section 3.4, it states that the "?" and "/" characters should not be escaped to allow + query strings to include a URL. Therefore, all "reserved" characters with the exception of "?" and "/" + should be percent-escaped in the query string. + - parameter string: The string to be percent-escaped. + - returns: The percent-escaped string. + */ +static NSString * AFPercentEscapedStringFromString(NSString *string) { + static NSString * const kAFCharactersGeneralDelimitersToEncode = @":#[]@"; // does not include "?" or "/" due to RFC 3986 - Section 3.4 + static NSString * const kAFCharactersSubDelimitersToEncode = @"!$&'()*+,;="; + + NSMutableCharacterSet * allowedCharacterSet = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy]; + [allowedCharacterSet removeCharactersInString:[kAFCharactersGeneralDelimitersToEncode stringByAppendingString:kAFCharactersSubDelimitersToEncode]]; + + return [string stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet]; +} + +#pragma mark - + +@interface AFQueryStringPair : NSObject +@property (readwrite, nonatomic, strong) id field; +@property (readwrite, nonatomic, strong) id value; + +- (id)initWithField:(id)field value:(id)value; + +- (NSString *)URLEncodedStringValue; +@end + +@implementation AFQueryStringPair + +- (id)initWithField:(id)field value:(id)value { + self = [super init]; + if (!self) { + return nil; + } + + self.field = field; + self.value = value; + + return self; +} + +- (NSString *)URLEncodedStringValue { + if (!self.value || [self.value isEqual:[NSNull null]]) { + return AFPercentEscapedStringFromString([self.field description]); + } else { + return [NSString stringWithFormat:@"%@=%@", AFPercentEscapedStringFromString([self.field description]), AFPercentEscapedStringFromString([self.value description])]; + } +} + +@end + +#pragma mark - + +extern NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary); +extern NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value); + +static NSString * AFQueryStringFromParameters(NSDictionary *parameters) { + NSMutableArray *mutablePairs = [NSMutableArray array]; + for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) { + [mutablePairs addObject:[pair URLEncodedStringValue]]; + } + + return [mutablePairs componentsJoinedByString:@"&"]; +} + +NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary) { + return AFQueryStringPairsFromKeyAndValue(nil, dictionary); +} + +NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value) { + NSMutableArray *mutableQueryStringComponents = [NSMutableArray array]; + + NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES selector:@selector(compare:)]; + + if ([value isKindOfClass:[NSDictionary class]]) { + NSDictionary *dictionary = value; + // Sort dictionary keys to ensure consistent ordering in query string, which is important when deserializing potentially ambiguous sequences, such as an array of dictionaries + for (id nestedKey in [dictionary.allKeys sortedArrayUsingDescriptors:@[ sortDescriptor ]]) { + id nestedValue = dictionary[nestedKey]; + if (nestedValue) { + [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue((key ? [NSString stringWithFormat:@"%@[%@]", key, nestedKey] : nestedKey), nestedValue)]; + } + } + } else if ([value isKindOfClass:[NSArray class]]) { + NSArray *array = value; + for (id nestedValue in array) { + [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue([NSString stringWithFormat:@"%@[]", key], nestedValue)]; + } + } else if ([value isKindOfClass:[NSSet class]]) { + NSSet *set = value; + for (id obj in [set sortedArrayUsingDescriptors:@[ sortDescriptor ]]) { + [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue(key, obj)]; + } + } else { + [mutableQueryStringComponents addObject:[[AFQueryStringPair alloc] initWithField:key value:value]]; + } + + return mutableQueryStringComponents; +} + +#pragma mark - + +@interface AFStreamingMultipartFormData : NSObject +- (instancetype)initWithURLRequest:(NSMutableURLRequest *)urlRequest + stringEncoding:(NSStringEncoding)encoding; + +- (NSMutableURLRequest *)requestByFinalizingMultipartFormData; +@end + +#pragma mark - + +static NSArray * AFHTTPRequestSerializerObservedKeyPaths() { + static NSArray *_AFHTTPRequestSerializerObservedKeyPaths = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _AFHTTPRequestSerializerObservedKeyPaths = @[NSStringFromSelector(@selector(allowsCellularAccess)), NSStringFromSelector(@selector(cachePolicy)), NSStringFromSelector(@selector(HTTPShouldHandleCookies)), NSStringFromSelector(@selector(HTTPShouldUsePipelining)), NSStringFromSelector(@selector(networkServiceType)), NSStringFromSelector(@selector(timeoutInterval))]; + }); + + return _AFHTTPRequestSerializerObservedKeyPaths; +} + +static void *AFHTTPRequestSerializerObserverContext = &AFHTTPRequestSerializerObserverContext; + +@interface AFHTTPRequestSerializer () +@property (readwrite, nonatomic, strong) NSMutableSet *mutableObservedChangedKeyPaths; +@property (readwrite, nonatomic, strong) NSMutableDictionary *mutableHTTPRequestHeaders; +@property (readwrite, nonatomic, assign) AFHTTPRequestQueryStringSerializationStyle queryStringSerializationStyle; +@property (readwrite, nonatomic, copy) AFQueryStringSerializationBlock queryStringSerialization; +@end + +@implementation AFHTTPRequestSerializer + ++ (instancetype)serializer { + return [[self alloc] init]; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.stringEncoding = NSUTF8StringEncoding; + + self.mutableHTTPRequestHeaders = [NSMutableDictionary dictionary]; + + // Accept-Language HTTP Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4 + NSMutableArray *acceptLanguagesComponents = [NSMutableArray array]; + [[NSLocale preferredLanguages] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + float q = 1.0f - (idx * 0.1f); + [acceptLanguagesComponents addObject:[NSString stringWithFormat:@"%@;q=%0.1g", obj, q]]; + *stop = q <= 0.5f; + }]; + [self setValue:[acceptLanguagesComponents componentsJoinedByString:@", "] forHTTPHeaderField:@"Accept-Language"]; + + NSString *userAgent = nil; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" +#if TARGET_OS_IOS + // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 + userAgent = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@; Scale/%0.2f)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion], [[UIScreen mainScreen] scale]]; +#elif TARGET_OS_WATCH + // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 + userAgent = [NSString stringWithFormat:@"%@/%@ (%@; watchOS %@; Scale/%0.2f)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[WKInterfaceDevice currentDevice] model], [[WKInterfaceDevice currentDevice] systemVersion], [[WKInterfaceDevice currentDevice] screenScale]]; +#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) + userAgent = [NSString stringWithFormat:@"%@/%@ (Mac OS X %@)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[NSProcessInfo processInfo] operatingSystemVersionString]]; +#endif +#pragma clang diagnostic pop + if (userAgent) { + if (![userAgent canBeConvertedToEncoding:NSASCIIStringEncoding]) { + NSMutableString *mutableUserAgent = [userAgent mutableCopy]; + if (CFStringTransform((__bridge CFMutableStringRef)(mutableUserAgent), NULL, (__bridge CFStringRef)@"Any-Latin; Latin-ASCII; [:^ASCII:] Remove", false)) { + userAgent = mutableUserAgent; + } + } + [self setValue:userAgent forHTTPHeaderField:@"User-Agent"]; + } + + // HTTP Method Definitions; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html + self.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", @"DELETE", nil]; + + self.mutableObservedChangedKeyPaths = [NSMutableSet set]; + for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { + if ([self respondsToSelector:NSSelectorFromString(keyPath)]) { + [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:AFHTTPRequestSerializerObserverContext]; + } + } + + return self; +} + +- (void)dealloc { + for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { + if ([self respondsToSelector:NSSelectorFromString(keyPath)]) { + [self removeObserver:self forKeyPath:keyPath context:AFHTTPRequestSerializerObserverContext]; + } + } +} + +#pragma mark - + +// Workarounds for crashing behavior using Key-Value Observing with XCTest +// See https://github.com/AFNetworking/AFNetworking/issues/2523 + +- (void)setAllowsCellularAccess:(BOOL)allowsCellularAccess { + [self willChangeValueForKey:NSStringFromSelector(@selector(allowsCellularAccess))]; + _allowsCellularAccess = allowsCellularAccess; + [self didChangeValueForKey:NSStringFromSelector(@selector(allowsCellularAccess))]; +} + +- (void)setCachePolicy:(NSURLRequestCachePolicy)cachePolicy { + [self willChangeValueForKey:NSStringFromSelector(@selector(cachePolicy))]; + _cachePolicy = cachePolicy; + [self didChangeValueForKey:NSStringFromSelector(@selector(cachePolicy))]; +} + +- (void)setHTTPShouldHandleCookies:(BOOL)HTTPShouldHandleCookies { + [self willChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldHandleCookies))]; + _HTTPShouldHandleCookies = HTTPShouldHandleCookies; + [self didChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldHandleCookies))]; +} + +- (void)setHTTPShouldUsePipelining:(BOOL)HTTPShouldUsePipelining { + [self willChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldUsePipelining))]; + _HTTPShouldUsePipelining = HTTPShouldUsePipelining; + [self didChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldUsePipelining))]; +} + +- (void)setNetworkServiceType:(NSURLRequestNetworkServiceType)networkServiceType { + [self willChangeValueForKey:NSStringFromSelector(@selector(networkServiceType))]; + _networkServiceType = networkServiceType; + [self didChangeValueForKey:NSStringFromSelector(@selector(networkServiceType))]; +} + +- (void)setTimeoutInterval:(NSTimeInterval)timeoutInterval { + [self willChangeValueForKey:NSStringFromSelector(@selector(timeoutInterval))]; + _timeoutInterval = timeoutInterval; + [self didChangeValueForKey:NSStringFromSelector(@selector(timeoutInterval))]; +} + +#pragma mark - + +- (NSDictionary *)HTTPRequestHeaders { + return [NSDictionary dictionaryWithDictionary:self.mutableHTTPRequestHeaders]; +} + +- (void)setValue:(NSString *)value +forHTTPHeaderField:(NSString *)field +{ + [self.mutableHTTPRequestHeaders setValue:value forKey:field]; +} + +- (NSString *)valueForHTTPHeaderField:(NSString *)field { + return [self.mutableHTTPRequestHeaders valueForKey:field]; +} + +- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username + password:(NSString *)password +{ + NSString *basicAuthCredentials = [NSString stringWithFormat:@"%@:%@", username, password]; + [self setValue:[NSString stringWithFormat:@"Basic %@", AFBase64EncodedStringFromString(basicAuthCredentials)] forHTTPHeaderField:@"Authorization"]; +} + +- (void)setAuthorizationHeaderFieldWithToken:(NSString *)token { + [self setValue:[NSString stringWithFormat:@"Token token=\"%@\"", token] forHTTPHeaderField:@"Authorization"]; +} + +- (void)clearAuthorizationHeader { + [self.mutableHTTPRequestHeaders removeObjectForKey:@"Authorization"]; +} + +#pragma mark - + +- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style { + self.queryStringSerializationStyle = style; + self.queryStringSerialization = nil; +} + +- (void)setQueryStringSerializationWithBlock:(NSString *(^)(NSURLRequest *, id, NSError *__autoreleasing *))block { + self.queryStringSerialization = block; +} + +#pragma mark - + +- (NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters +{ + return [self requestWithMethod:method URLString:URLString parameters:parameters error:nil]; +} + +- (NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(method); + NSParameterAssert(URLString); + + NSURL *url = [NSURL URLWithString:URLString]; + + NSParameterAssert(url); + + NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] initWithURL:url]; + mutableRequest.HTTPMethod = method; + + for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { + if ([self.mutableObservedChangedKeyPaths containsObject:keyPath]) { + [mutableRequest setValue:[self valueForKeyPath:keyPath] forKey:keyPath]; + } + } + + mutableRequest = [[self requestBySerializingRequest:mutableRequest withParameters:parameters error:error] mutableCopy]; + + return mutableRequest; +} + +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(NSDictionary *)parameters + constructingBodyWithBlock:(void (^)(id formData))block +{ + return [self multipartFormRequestWithMethod:method URLString:URLString parameters:parameters constructingBodyWithBlock:block error:nil]; +} + +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(NSDictionary *)parameters + constructingBodyWithBlock:(void (^)(id formData))block + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(method); + NSParameterAssert(![method isEqualToString:@"GET"] && ![method isEqualToString:@"HEAD"]); + + NSMutableURLRequest *mutableRequest = [self requestWithMethod:method URLString:URLString parameters:nil error:error]; + + __block AFStreamingMultipartFormData *formData = [[AFStreamingMultipartFormData alloc] initWithURLRequest:mutableRequest stringEncoding:NSUTF8StringEncoding]; + + if (parameters) { + for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) { + NSData *data = nil; + if ([pair.value isKindOfClass:[NSData class]]) { + data = pair.value; + } else if ([pair.value isEqual:[NSNull null]]) { + data = [NSData data]; + } else { + data = [[pair.value description] dataUsingEncoding:self.stringEncoding]; + } + + if (data) { + [formData appendPartWithFormData:data name:[pair.field description]]; + } + } + } + + if (block) { + block(formData); + } + + return [formData requestByFinalizingMultipartFormData]; +} + +- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request + writingStreamContentsToFile:(NSURL *)fileURL + completionHandler:(void (^)(NSError *error))handler +{ + NSParameterAssert(request.HTTPBodyStream); + NSParameterAssert([fileURL isFileURL]); + + NSInputStream *inputStream = request.HTTPBodyStream; + NSOutputStream *outputStream = [[NSOutputStream alloc] initWithURL:fileURL append:NO]; + __block NSError *error = nil; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; + [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; + + [inputStream open]; + [outputStream open]; + + while ([inputStream hasBytesAvailable] && [outputStream hasSpaceAvailable]) { + uint8_t buffer[1024]; + + NSInteger bytesRead = [inputStream read:buffer maxLength:1024]; + if (inputStream.streamError || bytesRead < 0) { + error = inputStream.streamError; + break; + } + + NSInteger bytesWritten = [outputStream write:buffer maxLength:(NSUInteger)bytesRead]; + if (outputStream.streamError || bytesWritten < 0) { + error = outputStream.streamError; + break; + } + + if (bytesRead == 0 && bytesWritten == 0) { + break; + } + } + + [outputStream close]; + [inputStream close]; + + if (handler) { + dispatch_async(dispatch_get_main_queue(), ^{ + handler(error); + }); + } + }); + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + mutableRequest.HTTPBodyStream = nil; + + return mutableRequest; +} + +#pragma mark - AFURLRequestSerialization + +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(request); + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { + if (![request valueForHTTPHeaderField:field]) { + [mutableRequest setValue:value forHTTPHeaderField:field]; + } + }]; + + if (parameters) { + NSString *query = nil; + if (self.queryStringSerialization) { + NSError *serializationError; + query = self.queryStringSerialization(request, parameters, &serializationError); + + if (serializationError) { + if (error) { + *error = serializationError; + } + + return nil; + } + } else { + switch (self.queryStringSerializationStyle) { + case AFHTTPRequestQueryStringDefaultStyle: + query = AFQueryStringFromParameters(parameters); + break; + } + } + + if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { + mutableRequest.URL = [NSURL URLWithString:[[mutableRequest.URL absoluteString] stringByAppendingFormat:mutableRequest.URL.query ? @"&%@" : @"?%@", query]]; + } else { + if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { + [mutableRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; + } + [mutableRequest setHTTPBody:[query dataUsingEncoding:self.stringEncoding]]; + } + } + + return mutableRequest; +} + +#pragma mark - NSKeyValueObserving + ++ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key { + if ([AFHTTPRequestSerializerObservedKeyPaths() containsObject:key]) { + return NO; + } + + return [super automaticallyNotifiesObserversForKey:key]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(__unused id)object + change:(NSDictionary *)change + context:(void *)context +{ + if (context == AFHTTPRequestSerializerObserverContext) { + if ([change[NSKeyValueChangeNewKey] isEqual:[NSNull null]]) { + [self.mutableObservedChangedKeyPaths removeObject:keyPath]; + } else { + [self.mutableObservedChangedKeyPaths addObject:keyPath]; + } + } +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + self = [self init]; + if (!self) { + return nil; + } + + self.mutableHTTPRequestHeaders = [[decoder decodeObjectOfClass:[NSDictionary class] forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))] mutableCopy]; + self.queryStringSerializationStyle = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.mutableHTTPRequestHeaders forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))]; + [coder encodeInteger:self.queryStringSerializationStyle forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPRequestSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.mutableHTTPRequestHeaders = [self.mutableHTTPRequestHeaders mutableCopyWithZone:zone]; + serializer.queryStringSerializationStyle = self.queryStringSerializationStyle; + serializer.queryStringSerialization = self.queryStringSerialization; + + return serializer; +} + +@end + +#pragma mark - + +static NSString * AFCreateMultipartFormBoundary() { + return [NSString stringWithFormat:@"Boundary+%08X%08X", arc4random(), arc4random()]; +} + +static NSString * const kAFMultipartFormCRLF = @"\r\n"; + +static inline NSString * AFMultipartFormInitialBoundary(NSString *boundary) { + return [NSString stringWithFormat:@"--%@%@", boundary, kAFMultipartFormCRLF]; +} + +static inline NSString * AFMultipartFormEncapsulationBoundary(NSString *boundary) { + return [NSString stringWithFormat:@"%@--%@%@", kAFMultipartFormCRLF, boundary, kAFMultipartFormCRLF]; +} + +static inline NSString * AFMultipartFormFinalBoundary(NSString *boundary) { + return [NSString stringWithFormat:@"%@--%@--%@", kAFMultipartFormCRLF, boundary, kAFMultipartFormCRLF]; +} + +static inline NSString * AFContentTypeForPathExtension(NSString *extension) { +#ifdef __UTTYPE__ + NSString *UTI = (__bridge_transfer NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)extension, NULL); + NSString *contentType = (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass((__bridge CFStringRef)UTI, kUTTagClassMIMEType); + if (!contentType) { + return @"application/octet-stream"; + } else { + return contentType; + } +#else +#pragma unused (extension) + return @"application/octet-stream"; +#endif +} + +NSUInteger const kAFUploadStream3GSuggestedPacketSize = 1024 * 16; +NSTimeInterval const kAFUploadStream3GSuggestedDelay = 0.2; + +@interface AFHTTPBodyPart : NSObject +@property (nonatomic, assign) NSStringEncoding stringEncoding; +@property (nonatomic, strong) NSDictionary *headers; +@property (nonatomic, copy) NSString *boundary; +@property (nonatomic, strong) id body; +@property (nonatomic, assign) unsigned long long bodyContentLength; +@property (nonatomic, strong) NSInputStream *inputStream; + +@property (nonatomic, assign) BOOL hasInitialBoundary; +@property (nonatomic, assign) BOOL hasFinalBoundary; + +@property (readonly, nonatomic, assign, getter = hasBytesAvailable) BOOL bytesAvailable; +@property (readonly, nonatomic, assign) unsigned long long contentLength; + +- (NSInteger)read:(uint8_t *)buffer + maxLength:(NSUInteger)length; +@end + +@interface AFMultipartBodyStream : NSInputStream +@property (nonatomic, assign) NSUInteger numberOfBytesInPacket; +@property (nonatomic, assign) NSTimeInterval delay; +@property (nonatomic, strong) NSInputStream *inputStream; +@property (readonly, nonatomic, assign) unsigned long long contentLength; +@property (readonly, nonatomic, assign, getter = isEmpty) BOOL empty; + +- (id)initWithStringEncoding:(NSStringEncoding)encoding; +- (void)setInitialAndFinalBoundaries; +- (void)appendHTTPBodyPart:(AFHTTPBodyPart *)bodyPart; +@end + +#pragma mark - + +@interface AFStreamingMultipartFormData () +@property (readwrite, nonatomic, copy) NSMutableURLRequest *request; +@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding; +@property (readwrite, nonatomic, copy) NSString *boundary; +@property (readwrite, nonatomic, strong) AFMultipartBodyStream *bodyStream; +@end + +@implementation AFStreamingMultipartFormData + +- (id)initWithURLRequest:(NSMutableURLRequest *)urlRequest + stringEncoding:(NSStringEncoding)encoding +{ + self = [super init]; + if (!self) { + return nil; + } + + self.request = urlRequest; + self.stringEncoding = encoding; + self.boundary = AFCreateMultipartFormBoundary(); + self.bodyStream = [[AFMultipartBodyStream alloc] initWithStringEncoding:encoding]; + + return self; +} + +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + error:(NSError * __autoreleasing *)error +{ + NSParameterAssert(fileURL); + NSParameterAssert(name); + + NSString *fileName = [fileURL lastPathComponent]; + NSString *mimeType = AFContentTypeForPathExtension([fileURL pathExtension]); + + return [self appendPartWithFileURL:fileURL name:name fileName:fileName mimeType:mimeType error:error]; +} + +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType + error:(NSError * __autoreleasing *)error +{ + NSParameterAssert(fileURL); + NSParameterAssert(name); + NSParameterAssert(fileName); + NSParameterAssert(mimeType); + + if (![fileURL isFileURL]) { + NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedStringFromTable(@"Expected URL to be a file URL", @"AFNetworking", nil)}; + if (error) { + *error = [[NSError alloc] initWithDomain:AFURLRequestSerializationErrorDomain code:NSURLErrorBadURL userInfo:userInfo]; + } + + return NO; + } else if ([fileURL checkResourceIsReachableAndReturnError:error] == NO) { + NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedStringFromTable(@"File URL not reachable.", @"AFNetworking", nil)}; + if (error) { + *error = [[NSError alloc] initWithDomain:AFURLRequestSerializationErrorDomain code:NSURLErrorBadURL userInfo:userInfo]; + } + + return NO; + } + + NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[fileURL path] error:error]; + if (!fileAttributes) { + return NO; + } + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; + [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; + + AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = mutableHeaders; + bodyPart.boundary = self.boundary; + bodyPart.body = fileURL; + bodyPart.bodyContentLength = [fileAttributes[NSFileSize] unsignedLongLongValue]; + [self.bodyStream appendHTTPBodyPart:bodyPart]; + + return YES; +} + +- (void)appendPartWithInputStream:(NSInputStream *)inputStream + name:(NSString *)name + fileName:(NSString *)fileName + length:(int64_t)length + mimeType:(NSString *)mimeType +{ + NSParameterAssert(name); + NSParameterAssert(fileName); + NSParameterAssert(mimeType); + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; + [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; + + AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = mutableHeaders; + bodyPart.boundary = self.boundary; + bodyPart.body = inputStream; + + bodyPart.bodyContentLength = (unsigned long long)length; + + [self.bodyStream appendHTTPBodyPart:bodyPart]; +} + +- (void)appendPartWithFileData:(NSData *)data + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType +{ + NSParameterAssert(name); + NSParameterAssert(fileName); + NSParameterAssert(mimeType); + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; + [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; + + [self appendPartWithHeaders:mutableHeaders body:data]; +} + +- (void)appendPartWithFormData:(NSData *)data + name:(NSString *)name +{ + NSParameterAssert(name); + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"", name] forKey:@"Content-Disposition"]; + + [self appendPartWithHeaders:mutableHeaders body:data]; +} + +- (void)appendPartWithHeaders:(NSDictionary *)headers + body:(NSData *)body +{ + NSParameterAssert(body); + + AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = headers; + bodyPart.boundary = self.boundary; + bodyPart.bodyContentLength = [body length]; + bodyPart.body = body; + + [self.bodyStream appendHTTPBodyPart:bodyPart]; +} + +- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes + delay:(NSTimeInterval)delay +{ + self.bodyStream.numberOfBytesInPacket = numberOfBytes; + self.bodyStream.delay = delay; +} + +- (NSMutableURLRequest *)requestByFinalizingMultipartFormData { + if ([self.bodyStream isEmpty]) { + return self.request; + } + + // Reset the initial and final boundaries to ensure correct Content-Length + [self.bodyStream setInitialAndFinalBoundaries]; + [self.request setHTTPBodyStream:self.bodyStream]; + + [self.request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", self.boundary] forHTTPHeaderField:@"Content-Type"]; + [self.request setValue:[NSString stringWithFormat:@"%llu", [self.bodyStream contentLength]] forHTTPHeaderField:@"Content-Length"]; + + return self.request; +} + +@end + +#pragma mark - + +@interface NSStream () +@property (readwrite) NSStreamStatus streamStatus; +@property (readwrite, copy) NSError *streamError; +@end + +@interface AFMultipartBodyStream () +@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding; +@property (readwrite, nonatomic, strong) NSMutableArray *HTTPBodyParts; +@property (readwrite, nonatomic, strong) NSEnumerator *HTTPBodyPartEnumerator; +@property (readwrite, nonatomic, strong) AFHTTPBodyPart *currentHTTPBodyPart; +@property (readwrite, nonatomic, strong) NSOutputStream *outputStream; +@property (readwrite, nonatomic, strong) NSMutableData *buffer; +@end + +@implementation AFMultipartBodyStream +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wimplicit-atomic-properties" +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1100) +@synthesize delegate; +#endif +@synthesize streamStatus; +@synthesize streamError; +#pragma clang diagnostic pop + +- (id)initWithStringEncoding:(NSStringEncoding)encoding { + self = [super init]; + if (!self) { + return nil; + } + + self.stringEncoding = encoding; + self.HTTPBodyParts = [NSMutableArray array]; + self.numberOfBytesInPacket = NSIntegerMax; + + return self; +} + +- (void)setInitialAndFinalBoundaries { + if ([self.HTTPBodyParts count] > 0) { + for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { + bodyPart.hasInitialBoundary = NO; + bodyPart.hasFinalBoundary = NO; + } + + [[self.HTTPBodyParts firstObject] setHasInitialBoundary:YES]; + [[self.HTTPBodyParts lastObject] setHasFinalBoundary:YES]; + } +} + +- (void)appendHTTPBodyPart:(AFHTTPBodyPart *)bodyPart { + [self.HTTPBodyParts addObject:bodyPart]; +} + +- (BOOL)isEmpty { + return [self.HTTPBodyParts count] == 0; +} + +#pragma mark - NSInputStream + +- (NSInteger)read:(uint8_t *)buffer + maxLength:(NSUInteger)length +{ + if ([self streamStatus] == NSStreamStatusClosed) { + return 0; + } + + NSInteger totalNumberOfBytesRead = 0; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + while ((NSUInteger)totalNumberOfBytesRead < MIN(length, self.numberOfBytesInPacket)) { + if (!self.currentHTTPBodyPart || ![self.currentHTTPBodyPart hasBytesAvailable]) { + if (!(self.currentHTTPBodyPart = [self.HTTPBodyPartEnumerator nextObject])) { + break; + } + } else { + NSUInteger maxLength = length - (NSUInteger)totalNumberOfBytesRead; + NSInteger numberOfBytesRead = [self.currentHTTPBodyPart read:&buffer[totalNumberOfBytesRead] maxLength:maxLength]; + if (numberOfBytesRead == -1) { + self.streamError = self.currentHTTPBodyPart.inputStream.streamError; + break; + } else { + totalNumberOfBytesRead += numberOfBytesRead; + + if (self.delay > 0.0f) { + [NSThread sleepForTimeInterval:self.delay]; + } + } + } + } +#pragma clang diagnostic pop + + return totalNumberOfBytesRead; +} + +- (BOOL)getBuffer:(__unused uint8_t **)buffer + length:(__unused NSUInteger *)len +{ + return NO; +} + +- (BOOL)hasBytesAvailable { + return [self streamStatus] == NSStreamStatusOpen; +} + +#pragma mark - NSStream + +- (void)open { + if (self.streamStatus == NSStreamStatusOpen) { + return; + } + + self.streamStatus = NSStreamStatusOpen; + + [self setInitialAndFinalBoundaries]; + self.HTTPBodyPartEnumerator = [self.HTTPBodyParts objectEnumerator]; +} + +- (void)close { + self.streamStatus = NSStreamStatusClosed; +} + +- (id)propertyForKey:(__unused NSString *)key { + return nil; +} + +- (BOOL)setProperty:(__unused id)property + forKey:(__unused NSString *)key +{ + return NO; +} + +- (void)scheduleInRunLoop:(__unused NSRunLoop *)aRunLoop + forMode:(__unused NSString *)mode +{} + +- (void)removeFromRunLoop:(__unused NSRunLoop *)aRunLoop + forMode:(__unused NSString *)mode +{} + +- (unsigned long long)contentLength { + unsigned long long length = 0; + for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { + length += [bodyPart contentLength]; + } + + return length; +} + +#pragma mark - Undocumented CFReadStream Bridged Methods + +- (void)_scheduleInCFRunLoop:(__unused CFRunLoopRef)aRunLoop + forMode:(__unused CFStringRef)aMode +{} + +- (void)_unscheduleFromCFRunLoop:(__unused CFRunLoopRef)aRunLoop + forMode:(__unused CFStringRef)aMode +{} + +- (BOOL)_setCFClientFlags:(__unused CFOptionFlags)inFlags + callback:(__unused CFReadStreamClientCallBack)inCallback + context:(__unused CFStreamClientContext *)inContext { + return NO; +} + +#pragma mark - NSCopying + +-(id)copyWithZone:(NSZone *)zone { + AFMultipartBodyStream *bodyStreamCopy = [[[self class] allocWithZone:zone] initWithStringEncoding:self.stringEncoding]; + + for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { + [bodyStreamCopy appendHTTPBodyPart:[bodyPart copy]]; + } + + [bodyStreamCopy setInitialAndFinalBoundaries]; + + return bodyStreamCopy; +} + +@end + +#pragma mark - + +typedef enum { + AFEncapsulationBoundaryPhase = 1, + AFHeaderPhase = 2, + AFBodyPhase = 3, + AFFinalBoundaryPhase = 4, +} AFHTTPBodyPartReadPhase; + +@interface AFHTTPBodyPart () { + AFHTTPBodyPartReadPhase _phase; + NSInputStream *_inputStream; + unsigned long long _phaseReadOffset; +} + +- (BOOL)transitionToNextPhase; +- (NSInteger)readData:(NSData *)data + intoBuffer:(uint8_t *)buffer + maxLength:(NSUInteger)length; +@end + +@implementation AFHTTPBodyPart + +- (id)init { + self = [super init]; + if (!self) { + return nil; + } + + [self transitionToNextPhase]; + + return self; +} + +- (void)dealloc { + if (_inputStream) { + [_inputStream close]; + _inputStream = nil; + } +} + +- (NSInputStream *)inputStream { + if (!_inputStream) { + if ([self.body isKindOfClass:[NSData class]]) { + _inputStream = [NSInputStream inputStreamWithData:self.body]; + } else if ([self.body isKindOfClass:[NSURL class]]) { + _inputStream = [NSInputStream inputStreamWithURL:self.body]; + } else if ([self.body isKindOfClass:[NSInputStream class]]) { + _inputStream = self.body; + } else { + _inputStream = [NSInputStream inputStreamWithData:[NSData data]]; + } + } + + return _inputStream; +} + +- (NSString *)stringForHeaders { + NSMutableString *headerString = [NSMutableString string]; + for (NSString *field in [self.headers allKeys]) { + [headerString appendString:[NSString stringWithFormat:@"%@: %@%@", field, [self.headers valueForKey:field], kAFMultipartFormCRLF]]; + } + [headerString appendString:kAFMultipartFormCRLF]; + + return [NSString stringWithString:headerString]; +} + +- (unsigned long long)contentLength { + unsigned long long length = 0; + + NSData *encapsulationBoundaryData = [([self hasInitialBoundary] ? AFMultipartFormInitialBoundary(self.boundary) : AFMultipartFormEncapsulationBoundary(self.boundary)) dataUsingEncoding:self.stringEncoding]; + length += [encapsulationBoundaryData length]; + + NSData *headersData = [[self stringForHeaders] dataUsingEncoding:self.stringEncoding]; + length += [headersData length]; + + length += _bodyContentLength; + + NSData *closingBoundaryData = ([self hasFinalBoundary] ? [AFMultipartFormFinalBoundary(self.boundary) dataUsingEncoding:self.stringEncoding] : [NSData data]); + length += [closingBoundaryData length]; + + return length; +} + +- (BOOL)hasBytesAvailable { + // Allows `read:maxLength:` to be called again if `AFMultipartFormFinalBoundary` doesn't fit into the available buffer + if (_phase == AFFinalBoundaryPhase) { + return YES; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wcovered-switch-default" + switch (self.inputStream.streamStatus) { + case NSStreamStatusNotOpen: + case NSStreamStatusOpening: + case NSStreamStatusOpen: + case NSStreamStatusReading: + case NSStreamStatusWriting: + return YES; + case NSStreamStatusAtEnd: + case NSStreamStatusClosed: + case NSStreamStatusError: + default: + return NO; + } +#pragma clang diagnostic pop +} + +- (NSInteger)read:(uint8_t *)buffer + maxLength:(NSUInteger)length +{ + NSInteger totalNumberOfBytesRead = 0; + + if (_phase == AFEncapsulationBoundaryPhase) { + NSData *encapsulationBoundaryData = [([self hasInitialBoundary] ? AFMultipartFormInitialBoundary(self.boundary) : AFMultipartFormEncapsulationBoundary(self.boundary)) dataUsingEncoding:self.stringEncoding]; + totalNumberOfBytesRead += [self readData:encapsulationBoundaryData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + } + + if (_phase == AFHeaderPhase) { + NSData *headersData = [[self stringForHeaders] dataUsingEncoding:self.stringEncoding]; + totalNumberOfBytesRead += [self readData:headersData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + } + + if (_phase == AFBodyPhase) { + NSInteger numberOfBytesRead = 0; + + numberOfBytesRead = [self.inputStream read:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + if (numberOfBytesRead == -1) { + return -1; + } else { + totalNumberOfBytesRead += numberOfBytesRead; + + if ([self.inputStream streamStatus] >= NSStreamStatusAtEnd) { + [self transitionToNextPhase]; + } + } + } + + if (_phase == AFFinalBoundaryPhase) { + NSData *closingBoundaryData = ([self hasFinalBoundary] ? [AFMultipartFormFinalBoundary(self.boundary) dataUsingEncoding:self.stringEncoding] : [NSData data]); + totalNumberOfBytesRead += [self readData:closingBoundaryData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + } + + return totalNumberOfBytesRead; +} + +- (NSInteger)readData:(NSData *)data + intoBuffer:(uint8_t *)buffer + maxLength:(NSUInteger)length +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + NSRange range = NSMakeRange((NSUInteger)_phaseReadOffset, MIN([data length] - ((NSUInteger)_phaseReadOffset), length)); + [data getBytes:buffer range:range]; +#pragma clang diagnostic pop + + _phaseReadOffset += range.length; + + if (((NSUInteger)_phaseReadOffset) >= [data length]) { + [self transitionToNextPhase]; + } + + return (NSInteger)range.length; +} + +- (BOOL)transitionToNextPhase { + if (![[NSThread currentThread] isMainThread]) { + dispatch_sync(dispatch_get_main_queue(), ^{ + [self transitionToNextPhase]; + }); + return YES; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wcovered-switch-default" + switch (_phase) { + case AFEncapsulationBoundaryPhase: + _phase = AFHeaderPhase; + break; + case AFHeaderPhase: + [self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; + [self.inputStream open]; + _phase = AFBodyPhase; + break; + case AFBodyPhase: + [self.inputStream close]; + _phase = AFFinalBoundaryPhase; + break; + case AFFinalBoundaryPhase: + default: + _phase = AFEncapsulationBoundaryPhase; + break; + } + _phaseReadOffset = 0; +#pragma clang diagnostic pop + + return YES; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPBodyPart *bodyPart = [[[self class] allocWithZone:zone] init]; + + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = self.headers; + bodyPart.bodyContentLength = self.bodyContentLength; + bodyPart.body = self.body; + bodyPart.boundary = self.boundary; + + return bodyPart; +} + +@end + +#pragma mark - + +@implementation AFJSONRequestSerializer + ++ (instancetype)serializer { + return [self serializerWithWritingOptions:(NSJSONWritingOptions)0]; +} + ++ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions +{ + AFJSONRequestSerializer *serializer = [[self alloc] init]; + serializer.writingOptions = writingOptions; + + return serializer; +} + +#pragma mark - AFURLRequestSerialization + +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(request); + + if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { + return [super requestBySerializingRequest:request withParameters:parameters error:error]; + } + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { + if (![request valueForHTTPHeaderField:field]) { + [mutableRequest setValue:value forHTTPHeaderField:field]; + } + }]; + + if (parameters) { + if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { + [mutableRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; + } + + [mutableRequest setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]]; + } + + return mutableRequest; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.writingOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(writingOptions))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeInteger:self.writingOptions forKey:NSStringFromSelector(@selector(writingOptions))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFJSONRequestSerializer *serializer = [super copyWithZone:zone]; + serializer.writingOptions = self.writingOptions; + + return serializer; +} + +@end + +#pragma mark - + +@implementation AFPropertyListRequestSerializer + ++ (instancetype)serializer { + return [self serializerWithFormat:NSPropertyListXMLFormat_v1_0 writeOptions:0]; +} + ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + writeOptions:(NSPropertyListWriteOptions)writeOptions +{ + AFPropertyListRequestSerializer *serializer = [[self alloc] init]; + serializer.format = format; + serializer.writeOptions = writeOptions; + + return serializer; +} + +#pragma mark - AFURLRequestSerializer + +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(request); + + if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { + return [super requestBySerializingRequest:request withParameters:parameters error:error]; + } + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { + if (![request valueForHTTPHeaderField:field]) { + [mutableRequest setValue:value forHTTPHeaderField:field]; + } + }]; + + if (parameters) { + if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { + [mutableRequest setValue:@"application/x-plist" forHTTPHeaderField:@"Content-Type"]; + } + + [mutableRequest setHTTPBody:[NSPropertyListSerialization dataWithPropertyList:parameters format:self.format options:self.writeOptions error:error]]; + } + + return mutableRequest; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.format = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(format))] unsignedIntegerValue]; + self.writeOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(writeOptions))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeInteger:self.format forKey:NSStringFromSelector(@selector(format))]; + [coder encodeObject:@(self.writeOptions) forKey:NSStringFromSelector(@selector(writeOptions))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFPropertyListRequestSerializer *serializer = [super copyWithZone:zone]; + serializer.format = self.format; + serializer.writeOptions = self.writeOptions; + + return serializer; +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLResponseSerialization.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLResponseSerialization.h new file mode 100644 index 0000000..e14dc8a --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLResponseSerialization.h @@ -0,0 +1,311 @@ +// AFURLResponseSerialization.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + The `AFURLResponseSerialization` protocol is adopted by an object that decodes data into a more useful object representation, according to details in the server response. Response serializers may additionally perform validation on the incoming response and data. + + For example, a JSON response serializer may check for an acceptable status code (`2XX` range) and content type (`application/json`), decoding a valid JSON response into an object. + */ +@protocol AFURLResponseSerialization + +/** + The response object decoded from the data associated with a specified response. + + @param response The response to be processed. + @param data The response data to be decoded. + @param error The error that occurred while attempting to decode the response data. + + @return The object decoded from the specified response data. + */ +- (nullable id)responseObjectForResponse:(nullable NSURLResponse *)response + data:(nullable NSData *)data + error:(NSError * __nullable __autoreleasing *)error; + +@end + +#pragma mark - + +/** + `AFHTTPResponseSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation. + + Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPResponseSerializer` in order to ensure consistent default behavior. + */ +@interface AFHTTPResponseSerializer : NSObject + +- (instancetype)init; + +/** + The string encoding used to serialize data received from the server, when no string encoding is specified by the response. `NSUTF8StringEncoding` by default. + */ +@property (nonatomic, assign) NSStringEncoding stringEncoding; + +/** + Creates and returns a serializer with default configuration. + */ ++ (instancetype)serializer; + +///----------------------------------------- +/// @name Configuring Response Serialization +///----------------------------------------- + +/** + The acceptable HTTP status codes for responses. When non-`nil`, responses with status codes not contained by the set will result in an error during validation. + + See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html + */ +@property (nonatomic, copy, nullable) NSIndexSet *acceptableStatusCodes; + +/** + The acceptable MIME types for responses. When non-`nil`, responses with a `Content-Type` with MIME types that do not intersect with the set will result in an error during validation. + */ +@property (nonatomic, copy, nullable) NSSet *acceptableContentTypes; + +/** + Validates the specified response and data. + + In its base implementation, this method checks for an acceptable status code and content type. Subclasses may wish to add other domain-specific checks. + + @param response The response to be validated. + @param data The data associated with the response. + @param error The error that occurred while attempting to validate the response. + + @return `YES` if the response is valid, otherwise `NO`. + */ +- (BOOL)validateResponse:(nullable NSHTTPURLResponse *)response + data:(nullable NSData *)data + error:(NSError * __nullable __autoreleasing *)error; + +@end + +#pragma mark - + + +/** + `AFJSONResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes JSON responses. + + By default, `AFJSONResponseSerializer` accepts the following MIME types, which includes the official standard, `application/json`, as well as other commonly-used types: + + - `application/json` + - `text/json` + - `text/javascript` + */ +@interface AFJSONResponseSerializer : AFHTTPResponseSerializer + +- (instancetype)init; + +/** + Options for reading the response JSON data and creating the Foundation objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONReadingOptions". `0` by default. + */ +@property (nonatomic, assign) NSJSONReadingOptions readingOptions; + +/** + Whether to remove keys with `NSNull` values from response JSON. Defaults to `NO`. + */ +@property (nonatomic, assign) BOOL removesKeysWithNullValues; + +/** + Creates and returns a JSON serializer with specified reading and writing options. + + @param readingOptions The specified JSON reading options. + */ ++ (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions; + +@end + +#pragma mark - + +/** + `AFXMLParserResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLParser` objects. + + By default, `AFXMLParserResponseSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types: + + - `application/xml` + - `text/xml` + */ +@interface AFXMLParserResponseSerializer : AFHTTPResponseSerializer + +@end + +#pragma mark - + +#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED + +/** + `AFXMLDocumentResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects. + + By default, `AFXMLDocumentResponseSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types: + + - `application/xml` + - `text/xml` + */ +@interface AFXMLDocumentResponseSerializer : AFHTTPResponseSerializer + +- (instancetype)init; + +/** + Input and output options specifically intended for `NSXMLDocument` objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONReadingOptions". `0` by default. + */ +@property (nonatomic, assign) NSUInteger options; + +/** + Creates and returns an XML document serializer with the specified options. + + @param mask The XML document options. + */ ++ (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask; + +@end + +#endif + +#pragma mark - + +/** + `AFPropertyListResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects. + + By default, `AFPropertyListResponseSerializer` accepts the following MIME types: + + - `application/x-plist` + */ +@interface AFPropertyListResponseSerializer : AFHTTPResponseSerializer + +- (instancetype)init; + +/** + The property list format. Possible values are described in "NSPropertyListFormat". + */ +@property (nonatomic, assign) NSPropertyListFormat format; + +/** + The property list reading options. Possible values are described in "NSPropertyListMutabilityOptions." + */ +@property (nonatomic, assign) NSPropertyListReadOptions readOptions; + +/** + Creates and returns a property list serializer with a specified format, read options, and write options. + + @param format The property list format. + @param readOptions The property list reading options. + */ ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + readOptions:(NSPropertyListReadOptions)readOptions; + +@end + +#pragma mark - + +/** + `AFImageResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes image responses. + + By default, `AFImageResponseSerializer` accepts the following MIME types, which correspond to the image formats supported by UIImage or NSImage: + + - `image/tiff` + - `image/jpeg` + - `image/gif` + - `image/png` + - `image/ico` + - `image/x-icon` + - `image/bmp` + - `image/x-bmp` + - `image/x-xbitmap` + - `image/x-win-bitmap` + */ +@interface AFImageResponseSerializer : AFHTTPResponseSerializer + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +/** + The scale factor used when interpreting the image data to construct `responseImage`. Specifying 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. This is set to the value of scale of the main screen by default, which automatically scales images for retina displays, for instance. + */ +@property (nonatomic, assign) CGFloat imageScale; + +/** + Whether to automatically inflate response image data for compressed formats (such as PNG or JPEG). Enabling this can significantly improve drawing performance on iOS when used with `setCompletionBlockWithSuccess:failure:`, as it allows a bitmap representation to be constructed in the background rather than on the main thread. `YES` by default. + */ +@property (nonatomic, assign) BOOL automaticallyInflatesResponseImage; +#endif + +@end + +#pragma mark - + +/** + `AFCompoundSerializer` is a subclass of `AFHTTPResponseSerializer` that delegates the response serialization to the first `AFHTTPResponseSerializer` object that returns an object for `responseObjectForResponse:data:error:`, falling back on the default behavior of `AFHTTPResponseSerializer`. This is useful for supporting multiple potential types and structures of server responses with a single serializer. + */ +@interface AFCompoundResponseSerializer : AFHTTPResponseSerializer + +/** + The component response serializers. + */ +@property (readonly, nonatomic, copy) NSArray *responseSerializers; + +/** + Creates and returns a compound serializer comprised of the specified response serializers. + + @warning Each response serializer specified must be a subclass of `AFHTTPResponseSerializer`, and response to `-validateResponse:data:error:`. + */ ++ (instancetype)compoundSerializerWithResponseSerializers:(NSArray *)responseSerializers; + +@end + +///---------------- +/// @name Constants +///---------------- + +/** + ## Error Domains + + The following error domain is predefined. + + - `NSString * const AFURLResponseSerializationErrorDomain` + + ### Constants + + `AFURLResponseSerializationErrorDomain` + AFURLResponseSerializer errors. Error codes for `AFURLResponseSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`. + */ +extern NSString * const AFURLResponseSerializationErrorDomain; + +/** + ## User info dictionary keys + + These keys may exist in the user info dictionary, in addition to those defined for NSError. + + - `NSString * const AFNetworkingOperationFailingURLResponseErrorKey` + - `NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey` + + ### Constants + + `AFNetworkingOperationFailingURLResponseErrorKey` + The corresponding value is an `NSURLResponse` containing the response of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`. + + `AFNetworkingOperationFailingURLResponseDataErrorKey` + The corresponding value is an `NSData` containing the original data of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`. + */ +extern NSString * const AFNetworkingOperationFailingURLResponseErrorKey; + +extern NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey; + +NS_ASSUME_NONNULL_END diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLResponseSerialization.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLResponseSerialization.m new file mode 100644 index 0000000..f95834f --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLResponseSerialization.m @@ -0,0 +1,825 @@ +// AFURLResponseSerialization.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFURLResponseSerialization.h" + +#if TARGET_OS_IOS +#import +#elif TARGET_OS_WATCH +#import +#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) +#import +#endif + +NSString * const AFURLResponseSerializationErrorDomain = @"com.alamofire.error.serialization.response"; +NSString * const AFNetworkingOperationFailingURLResponseErrorKey = @"com.alamofire.serialization.response.error.response"; +NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey = @"com.alamofire.serialization.response.error.data"; + +static NSError * AFErrorWithUnderlyingError(NSError *error, NSError *underlyingError) { + if (!error) { + return underlyingError; + } + + if (!underlyingError || error.userInfo[NSUnderlyingErrorKey]) { + return error; + } + + NSMutableDictionary *mutableUserInfo = [error.userInfo mutableCopy]; + mutableUserInfo[NSUnderlyingErrorKey] = underlyingError; + + return [[NSError alloc] initWithDomain:error.domain code:error.code userInfo:mutableUserInfo]; +} + +static BOOL AFErrorOrUnderlyingErrorHasCodeInDomain(NSError *error, NSInteger code, NSString *domain) { + if ([error.domain isEqualToString:domain] && error.code == code) { + return YES; + } else if (error.userInfo[NSUnderlyingErrorKey]) { + return AFErrorOrUnderlyingErrorHasCodeInDomain(error.userInfo[NSUnderlyingErrorKey], code, domain); + } + + return NO; +} + +static id AFJSONObjectByRemovingKeysWithNullValues(id JSONObject, NSJSONReadingOptions readingOptions) { + if ([JSONObject isKindOfClass:[NSArray class]]) { + NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:[(NSArray *)JSONObject count]]; + for (id value in (NSArray *)JSONObject) { + [mutableArray addObject:AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions)]; + } + + return (readingOptions & NSJSONReadingMutableContainers) ? mutableArray : [NSArray arrayWithArray:mutableArray]; + } else if ([JSONObject isKindOfClass:[NSDictionary class]]) { + NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:JSONObject]; + for (id key in [(NSDictionary *)JSONObject allKeys]) { + id value = (NSDictionary *)JSONObject[key]; + if (!value || [value isEqual:[NSNull null]]) { + [mutableDictionary removeObjectForKey:key]; + } else if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]]) { + mutableDictionary[key] = AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions); + } + } + + return (readingOptions & NSJSONReadingMutableContainers) ? mutableDictionary : [NSDictionary dictionaryWithDictionary:mutableDictionary]; + } + + return JSONObject; +} + +@implementation AFHTTPResponseSerializer + ++ (instancetype)serializer { + return [[self alloc] init]; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.stringEncoding = NSUTF8StringEncoding; + + self.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)]; + self.acceptableContentTypes = nil; + + return self; +} + +#pragma mark - + +- (BOOL)validateResponse:(NSHTTPURLResponse *)response + data:(NSData *)data + error:(NSError * __autoreleasing *)error +{ + BOOL responseIsValid = YES; + NSError *validationError = nil; + + if (response && [response isKindOfClass:[NSHTTPURLResponse class]]) { + if (self.acceptableContentTypes && ![self.acceptableContentTypes containsObject:[response MIMEType]]) { + if ([data length] > 0 && [response URL]) { + NSMutableDictionary *mutableUserInfo = [@{ + NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Request failed: unacceptable content-type: %@", @"AFNetworking", nil), [response MIMEType]], + NSURLErrorFailingURLErrorKey:[response URL], + AFNetworkingOperationFailingURLResponseErrorKey: response, + } mutableCopy]; + if (data) { + mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data; + } + + validationError = AFErrorWithUnderlyingError([NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:mutableUserInfo], validationError); + } + + responseIsValid = NO; + } + + if (self.acceptableStatusCodes && ![self.acceptableStatusCodes containsIndex:(NSUInteger)response.statusCode] && [response URL]) { + NSMutableDictionary *mutableUserInfo = [@{ + NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Request failed: %@ (%ld)", @"AFNetworking", nil), [NSHTTPURLResponse localizedStringForStatusCode:response.statusCode], (long)response.statusCode], + NSURLErrorFailingURLErrorKey:[response URL], + AFNetworkingOperationFailingURLResponseErrorKey: response, + } mutableCopy]; + + if (data) { + mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data; + } + + validationError = AFErrorWithUnderlyingError([NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorBadServerResponse userInfo:mutableUserInfo], validationError); + + responseIsValid = NO; + } + } + + if (error && !responseIsValid) { + *error = validationError; + } + + return responseIsValid; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + [self validateResponse:(NSHTTPURLResponse *)response data:data error:error]; + + return data; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + self = [self init]; + if (!self) { + return nil; + } + + self.acceptableStatusCodes = [decoder decodeObjectOfClass:[NSIndexSet class] forKey:NSStringFromSelector(@selector(acceptableStatusCodes))]; + self.acceptableContentTypes = [decoder decodeObjectOfClass:[NSIndexSet class] forKey:NSStringFromSelector(@selector(acceptableContentTypes))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.acceptableStatusCodes forKey:NSStringFromSelector(@selector(acceptableStatusCodes))]; + [coder encodeObject:self.acceptableContentTypes forKey:NSStringFromSelector(@selector(acceptableContentTypes))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.acceptableStatusCodes = [self.acceptableStatusCodes copyWithZone:zone]; + serializer.acceptableContentTypes = [self.acceptableContentTypes copyWithZone:zone]; + + return serializer; +} + +@end + +#pragma mark - + +@implementation AFJSONResponseSerializer + ++ (instancetype)serializer { + return [self serializerWithReadingOptions:(NSJSONReadingOptions)0]; +} + ++ (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions { + AFJSONResponseSerializer *serializer = [[self alloc] init]; + serializer.readingOptions = readingOptions; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + // Workaround for behavior of Rails to return a single space for `head :ok` (a workaround for a bug in Safari), which is not interpreted as valid input by NSJSONSerialization. + // See https://github.com/rails/rails/issues/1742 + NSStringEncoding stringEncoding = self.stringEncoding; + if (response.textEncodingName) { + CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)response.textEncodingName); + if (encoding != kCFStringEncodingInvalidId) { + stringEncoding = CFStringConvertEncodingToNSStringEncoding(encoding); + } + } + + id responseObject = nil; + NSError *serializationError = nil; + @autoreleasepool { + NSString *responseString = [[NSString alloc] initWithData:data encoding:stringEncoding]; + if (responseString && ![responseString isEqualToString:@" "]) { + // Workaround for a bug in NSJSONSerialization when Unicode character escape codes are used instead of the actual character + // See http://stackoverflow.com/a/12843465/157142 + data = [responseString dataUsingEncoding:NSUTF8StringEncoding]; + + if (data) { + if ([data length] > 0) { + responseObject = [NSJSONSerialization JSONObjectWithData:data options:self.readingOptions error:&serializationError]; + } else { + return nil; + } + } else { + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey: NSLocalizedStringFromTable(@"Data failed decoding as a UTF-8 string", @"AFNetworking", nil), + NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Could not decode string: %@", @"AFNetworking", nil), responseString] + }; + + serializationError = [NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:userInfo]; + } + } + } + + if (self.removesKeysWithNullValues && responseObject) { + responseObject = AFJSONObjectByRemovingKeysWithNullValues(responseObject, self.readingOptions); + } + + if (error) { + *error = AFErrorWithUnderlyingError(serializationError, *error); + } + + return responseObject; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.readingOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(readingOptions))] unsignedIntegerValue]; + self.removesKeysWithNullValues = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(removesKeysWithNullValues))] boolValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:@(self.readingOptions) forKey:NSStringFromSelector(@selector(readingOptions))]; + [coder encodeObject:@(self.removesKeysWithNullValues) forKey:NSStringFromSelector(@selector(removesKeysWithNullValues))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFJSONResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.readingOptions = self.readingOptions; + serializer.removesKeysWithNullValues = self.removesKeysWithNullValues; + + return serializer; +} + +@end + +#pragma mark - + +@implementation AFXMLParserResponseSerializer + ++ (instancetype)serializer { + AFXMLParserResponseSerializer *serializer = [[self alloc] init]; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSHTTPURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + return [[NSXMLParser alloc] initWithData:data]; +} + +@end + +#pragma mark - + +#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED + +@implementation AFXMLDocumentResponseSerializer + ++ (instancetype)serializer { + return [self serializerWithXMLDocumentOptions:0]; +} + ++ (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask { + AFXMLDocumentResponseSerializer *serializer = [[self alloc] init]; + serializer.options = mask; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + NSError *serializationError = nil; + NSXMLDocument *document = [[NSXMLDocument alloc] initWithData:data options:self.options error:&serializationError]; + + if (error) { + *error = AFErrorWithUnderlyingError(serializationError, *error); + } + + return document; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.options = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(options))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:@(self.options) forKey:NSStringFromSelector(@selector(options))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFXMLDocumentResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.options = self.options; + + return serializer; +} + +@end + +#endif + +#pragma mark - + +@implementation AFPropertyListResponseSerializer + ++ (instancetype)serializer { + return [self serializerWithFormat:NSPropertyListXMLFormat_v1_0 readOptions:0]; +} + ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + readOptions:(NSPropertyListReadOptions)readOptions +{ + AFPropertyListResponseSerializer *serializer = [[self alloc] init]; + serializer.format = format; + serializer.readOptions = readOptions; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/x-plist", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + id responseObject; + NSError *serializationError = nil; + + if (data) { + responseObject = [NSPropertyListSerialization propertyListWithData:data options:self.readOptions format:NULL error:&serializationError]; + } + + if (error) { + *error = AFErrorWithUnderlyingError(serializationError, *error); + } + + return responseObject; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.format = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(format))] unsignedIntegerValue]; + self.readOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(readOptions))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:@(self.format) forKey:NSStringFromSelector(@selector(format))]; + [coder encodeObject:@(self.readOptions) forKey:NSStringFromSelector(@selector(readOptions))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFPropertyListResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.format = self.format; + serializer.readOptions = self.readOptions; + + return serializer; +} + +@end + +#pragma mark - + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +#import + +@interface UIImage (AFNetworkingSafeImageLoading) ++ (UIImage *)af_safeImageWithData:(NSData *)data; +@end + +static NSLock* imageLock = nil; + +@implementation UIImage (AFNetworkingSafeImageLoading) + ++ (UIImage *)af_safeImageWithData:(NSData *)data { + UIImage* image = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + imageLock = [[NSLock alloc] init]; + }); + + [imageLock lock]; + image = [UIImage imageWithData:data]; + [imageLock unlock]; + return image; +} + +@end + +static UIImage * AFImageWithDataAtScale(NSData *data, CGFloat scale) { + UIImage *image = [UIImage af_safeImageWithData:data]; + if (image.images) { + return image; + } + + return [[UIImage alloc] initWithCGImage:[image CGImage] scale:scale orientation:image.imageOrientation]; +} + +static UIImage * AFInflatedImageFromResponseWithDataAtScale(NSHTTPURLResponse *response, NSData *data, CGFloat scale) { + if (!data || [data length] == 0) { + return nil; + } + + CGImageRef imageRef = NULL; + CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data); + + if ([response.MIMEType isEqualToString:@"image/png"]) { + imageRef = CGImageCreateWithPNGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault); + } else if ([response.MIMEType isEqualToString:@"image/jpeg"]) { + imageRef = CGImageCreateWithJPEGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault); + + if (imageRef) { + CGColorSpaceRef imageColorSpace = CGImageGetColorSpace(imageRef); + CGColorSpaceModel imageColorSpaceModel = CGColorSpaceGetModel(imageColorSpace); + + // CGImageCreateWithJPEGDataProvider does not properly handle CMKY, so fall back to AFImageWithDataAtScale + if (imageColorSpaceModel == kCGColorSpaceModelCMYK) { + CGImageRelease(imageRef); + imageRef = NULL; + } + } + } + + CGDataProviderRelease(dataProvider); + + UIImage *image = AFImageWithDataAtScale(data, scale); + if (!imageRef) { + if (image.images || !image) { + return image; + } + + imageRef = CGImageCreateCopy([image CGImage]); + if (!imageRef) { + return nil; + } + } + + size_t width = CGImageGetWidth(imageRef); + size_t height = CGImageGetHeight(imageRef); + size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef); + + if (width * height > 1024 * 1024 || bitsPerComponent > 8) { + CGImageRelease(imageRef); + + return image; + } + + // CGImageGetBytesPerRow() calculates incorrectly in iOS 5.0, so defer to CGBitmapContextCreate + size_t bytesPerRow = 0; + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGColorSpaceModel colorSpaceModel = CGColorSpaceGetModel(colorSpace); + CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); + + if (colorSpaceModel == kCGColorSpaceModelRGB) { + uint32_t alpha = (bitmapInfo & kCGBitmapAlphaInfoMask); +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wassign-enum" + if (alpha == kCGImageAlphaNone) { + bitmapInfo &= ~kCGBitmapAlphaInfoMask; + bitmapInfo |= kCGImageAlphaNoneSkipFirst; + } else if (!(alpha == kCGImageAlphaNoneSkipFirst || alpha == kCGImageAlphaNoneSkipLast)) { + bitmapInfo &= ~kCGBitmapAlphaInfoMask; + bitmapInfo |= kCGImageAlphaPremultipliedFirst; + } +#pragma clang diagnostic pop + } + + CGContextRef context = CGBitmapContextCreate(NULL, width, height, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo); + + CGColorSpaceRelease(colorSpace); + + if (!context) { + CGImageRelease(imageRef); + + return image; + } + + CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, width, height), imageRef); + CGImageRef inflatedImageRef = CGBitmapContextCreateImage(context); + + CGContextRelease(context); + + UIImage *inflatedImage = [[UIImage alloc] initWithCGImage:inflatedImageRef scale:scale orientation:image.imageOrientation]; + + CGImageRelease(inflatedImageRef); + CGImageRelease(imageRef); + + return inflatedImage; +} +#endif + + +@implementation AFImageResponseSerializer + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon", @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap", nil]; + +#if TARGET_OS_IOS + self.imageScale = [[UIScreen mainScreen] scale]; + self.automaticallyInflatesResponseImage = YES; +#elif TARGET_OS_WATCH + self.imageScale = [[WKInterfaceDevice currentDevice] screenScale]; + self.automaticallyInflatesResponseImage = YES; +#endif + + return self; +} + +#pragma mark - AFURLResponseSerializer + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + if (self.automaticallyInflatesResponseImage) { + return AFInflatedImageFromResponseWithDataAtScale((NSHTTPURLResponse *)response, data, self.imageScale); + } else { + return AFImageWithDataAtScale(data, self.imageScale); + } +#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) + // Ensure that the image is set to it's correct pixel width and height + NSBitmapImageRep *bitimage = [[NSBitmapImageRep alloc] initWithData:data]; + NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize([bitimage pixelsWide], [bitimage pixelsHigh])]; + [image addRepresentation:bitimage]; + + return image; +#endif + + return nil; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + NSNumber *imageScale = [decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(imageScale))]; +#if CGFLOAT_IS_DOUBLE + self.imageScale = [imageScale doubleValue]; +#else + self.imageScale = [imageScale floatValue]; +#endif + + self.automaticallyInflatesResponseImage = [decoder decodeBoolForKey:NSStringFromSelector(@selector(automaticallyInflatesResponseImage))]; +#endif + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + [coder encodeObject:@(self.imageScale) forKey:NSStringFromSelector(@selector(imageScale))]; + [coder encodeBool:self.automaticallyInflatesResponseImage forKey:NSStringFromSelector(@selector(automaticallyInflatesResponseImage))]; +#endif +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFImageResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + serializer.imageScale = self.imageScale; + serializer.automaticallyInflatesResponseImage = self.automaticallyInflatesResponseImage; +#endif + + return serializer; +} + +@end + +#pragma mark - + +@interface AFCompoundResponseSerializer () +@property (readwrite, nonatomic, copy) NSArray *responseSerializers; +@end + +@implementation AFCompoundResponseSerializer + ++ (instancetype)compoundSerializerWithResponseSerializers:(NSArray *)responseSerializers { + AFCompoundResponseSerializer *serializer = [[self alloc] init]; + serializer.responseSerializers = responseSerializers; + + return serializer; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + for (id serializer in self.responseSerializers) { + if (![serializer isKindOfClass:[AFHTTPResponseSerializer class]]) { + continue; + } + + NSError *serializerError = nil; + id responseObject = [serializer responseObjectForResponse:response data:data error:&serializerError]; + if (responseObject) { + if (error) { + *error = AFErrorWithUnderlyingError(serializerError, *error); + } + + return responseObject; + } + } + + return [super responseObjectForResponse:response data:data error:error]; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.responseSerializers = [decoder decodeObjectOfClass:[NSArray class] forKey:NSStringFromSelector(@selector(responseSerializers))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:self.responseSerializers forKey:NSStringFromSelector(@selector(responseSerializers))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFCompoundResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.responseSerializers = self.responseSerializers; + + return serializer; +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLSessionManager.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLSessionManager.h new file mode 100644 index 0000000..1cdb516 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLSessionManager.h @@ -0,0 +1,554 @@ +// AFURLSessionManager.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import "AFURLResponseSerialization.h" +#import "AFURLRequestSerialization.h" +#import "AFSecurityPolicy.h" +#if !TARGET_OS_WATCH +#import "AFNetworkReachabilityManager.h" +#endif + +#ifndef NS_DESIGNATED_INITIALIZER +#if __has_attribute(objc_designated_initializer) +#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +#else +#define NS_DESIGNATED_INITIALIZER +#endif +#endif + +/** + `AFURLSessionManager` creates and manages an `NSURLSession` object based on a specified `NSURLSessionConfiguration` object, which conforms to ``, ``, ``, and ``. + + ## Subclassing Notes + + This is the base class for `AFHTTPSessionManager`, which adds functionality specific to making HTTP requests. If you are looking to extend `AFURLSessionManager` specifically for HTTP, consider subclassing `AFHTTPSessionManager` instead. + + ## NSURLSession & NSURLSessionTask Delegate Methods + + `AFURLSessionManager` implements the following delegate methods: + + ### `NSURLSessionDelegate` + + - `URLSession:didBecomeInvalidWithError:` + - `URLSession:didReceiveChallenge:completionHandler:` + - `URLSessionDidFinishEventsForBackgroundURLSession:` + + ### `NSURLSessionTaskDelegate` + + - `URLSession:willPerformHTTPRedirection:newRequest:completionHandler:` + - `URLSession:task:didReceiveChallenge:completionHandler:` + - `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:` + - `URLSession:task:didCompleteWithError:` + + ### `NSURLSessionDataDelegate` + + - `URLSession:dataTask:didReceiveResponse:completionHandler:` + - `URLSession:dataTask:didBecomeDownloadTask:` + - `URLSession:dataTask:didReceiveData:` + - `URLSession:dataTask:willCacheResponse:completionHandler:` + + ### `NSURLSessionDownloadDelegate` + + - `URLSession:downloadTask:didFinishDownloadingToURL:` + - `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:` + - `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:` + + If any of these methods are overridden in a subclass, they _must_ call the `super` implementation first. + + ## Network Reachability Monitoring + + Network reachability status and change monitoring is available through the `reachabilityManager` property. Applications may choose to monitor network reachability conditions in order to prevent or suspend any outbound requests. See `AFNetworkReachabilityManager` for more details. + + ## NSCoding Caveats + + - Encoded managers do not include any block properties. Be sure to set delegate callback blocks when using `-initWithCoder:` or `NSKeyedUnarchiver`. + + ## NSCopying Caveats + + - `-copy` and `-copyWithZone:` return a new manager with a new `NSURLSession` created from the configuration of the original. + - Operation copies do not include any delegate callback blocks, as they often strongly captures a reference to `self`, which would otherwise have the unintuitive side-effect of pointing to the _original_ session manager when copied. + + @warning Managers for background sessions must be owned for the duration of their use. This can be accomplished by creating an application-wide or shared singleton instance. + */ + +NS_ASSUME_NONNULL_BEGIN + +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) || TARGET_OS_WATCH + +@interface AFURLSessionManager : NSObject + +/** + The managed session. + */ +@property (readonly, nonatomic, strong) NSURLSession *session; + +/** + The operation queue on which delegate callbacks are run. + */ +@property (readonly, nonatomic, strong) NSOperationQueue *operationQueue; + +/** + Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of `AFJSONResponseSerializer`. + + @warning `responseSerializer` must not be `nil`. + */ +@property (nonatomic, strong) id responseSerializer; + +///------------------------------- +/// @name Managing Security Policy +///------------------------------- + +/** + The security policy used by created request operations to evaluate server trust for secure connections. `AFURLSessionManager` uses the `defaultPolicy` unless otherwise specified. + */ +@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; + +#if !TARGET_OS_WATCH +///-------------------------------------- +/// @name Monitoring Network Reachability +///-------------------------------------- + +/** + The network reachability manager. `AFURLSessionManager` uses the `sharedManager` by default. + */ +@property (readwrite, nonatomic, strong) AFNetworkReachabilityManager *reachabilityManager; +#endif + +///---------------------------- +/// @name Getting Session Tasks +///---------------------------- + +/** + The data, upload, and download tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *tasks; + +/** + The data tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *dataTasks; + +/** + The upload tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *uploadTasks; + +/** + The download tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *downloadTasks; + +///------------------------------- +/// @name Managing Callback Queues +///------------------------------- + +/** + The dispatch queue for `completionBlock`. If `NULL` (default), the main queue is used. + */ +#if OS_OBJECT_HAVE_OBJC_SUPPORT +@property (nonatomic, strong, nullable) dispatch_queue_t completionQueue; +#else +@property (nonatomic, assign, nullable) dispatch_queue_t completionQueue; +#endif + +/** + The dispatch group for `completionBlock`. If `NULL` (default), a private dispatch group is used. + */ +#if OS_OBJECT_HAVE_OBJC_SUPPORT +@property (nonatomic, strong, nullable) dispatch_group_t completionGroup; +#else +@property (nonatomic, assign, nullable) dispatch_group_t completionGroup; +#endif + +///--------------------------------- +/// @name Working Around System Bugs +///--------------------------------- + +/** + Whether to attempt to retry creation of upload tasks for background sessions when initial call returns `nil`. `NO` by default. + + @bug As of iOS 7.0, there is a bug where upload tasks created for background tasks are sometimes `nil`. As a workaround, if this property is `YES`, AFNetworking will follow Apple's recommendation to try creating the task again. + + @see https://github.com/AFNetworking/AFNetworking/issues/1675 + */ +@property (nonatomic, assign) BOOL attemptsToRecreateUploadTasksForBackgroundSessions; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Creates and returns a manager for a session created with the specified configuration. This is the designated initializer. + + @param configuration The configuration used to create the managed session. + + @return A manager for a newly-created session. + */ +- (instancetype)initWithSessionConfiguration:(nullable NSURLSessionConfiguration *)configuration NS_DESIGNATED_INITIALIZER; + +/** + Invalidates the managed session, optionally canceling pending tasks. + + @param cancelPendingTasks Whether or not to cancel pending tasks. + */ +- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks; + +///------------------------- +/// @name Running Data Tasks +///------------------------- + +/** + Creates an `NSURLSessionDataTask` with the specified request. + + @param request The HTTP request for the request. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request + completionHandler:(nullable void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler; + +///--------------------------- +/// @name Running Upload Tasks +///--------------------------- + +/** + Creates an `NSURLSessionUploadTask` with the specified request for a local file. + + @param request The HTTP request for the request. + @param fileURL A URL to the local file to be uploaded. + @param progress A progress object monitoring the current upload progress. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + + @see `attemptsToRecreateUploadTasksForBackgroundSessions` + */ +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromFile:(NSURL *)fileURL + progress:(NSProgress * __nullable __autoreleasing * __nullable)progress + completionHandler:(nullable void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler; + +/** + Creates an `NSURLSessionUploadTask` with the specified request for an HTTP body. + + @param request The HTTP request for the request. + @param bodyData A data object containing the HTTP body to be uploaded. + @param progress A progress object monitoring the current upload progress. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromData:(nullable NSData *)bodyData + progress:(NSProgress * __nullable __autoreleasing * __nullable)progress + completionHandler:(nullable void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler; + +/** + Creates an `NSURLSessionUploadTask` with the specified streaming request. + + @param request The HTTP request for the request. + @param progress A progress object monitoring the current upload progress. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request + progress:(NSProgress * __nullable __autoreleasing * __nullable)progress + completionHandler:(nullable void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler; + +///----------------------------- +/// @name Running Download Tasks +///----------------------------- + +/** + Creates an `NSURLSessionDownloadTask` with the specified request. + + @param request The HTTP request for the request. + @param progress A progress object monitoring the current download progress. + @param destination A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL. + @param completionHandler A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any. + + @warning If using a background `NSURLSessionConfiguration` on iOS, these blocks will be lost when the app is terminated. Background sessions may prefer to use `-setDownloadTaskDidFinishDownloadingBlock:` to specify the URL for saving the downloaded file, rather than the destination block of this method. + */ +- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request + progress:(NSProgress * __nullable __autoreleasing * __nullable)progress + destination:(nullable NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(nullable void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler; + +/** + Creates an `NSURLSessionDownloadTask` with the specified resume data. + + @param resumeData The data used to resume downloading. + @param progress A progress object monitoring the current download progress. + @param destination A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL. + @param completionHandler A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any. + */ +- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData + progress:(NSProgress * __nullable __autoreleasing * __nullable)progress + destination:(nullable NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(nullable void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler; + +///--------------------------------- +/// @name Getting Progress for Tasks +///--------------------------------- + +/** + Returns the upload progress of the specified task. + + @param uploadTask The session upload task. Must not be `nil`. + + @return An `NSProgress` object reporting the upload progress of a task, or `nil` if the progress is unavailable. + */ +- (nullable NSProgress *)uploadProgressForTask:(NSURLSessionUploadTask *)uploadTask; + +/** + Returns the download progress of the specified task. + + @param downloadTask The session download task. Must not be `nil`. + + @return An `NSProgress` object reporting the download progress of a task, or `nil` if the progress is unavailable. + */ +- (nullable NSProgress *)downloadProgressForTask:(NSURLSessionDownloadTask *)downloadTask; + +///----------------------------------------- +/// @name Setting Session Delegate Callbacks +///----------------------------------------- + +/** + Sets a block to be executed when the managed session becomes invalid, as handled by the `NSURLSessionDelegate` method `URLSession:didBecomeInvalidWithError:`. + + @param block A block object to be executed when the managed session becomes invalid. The block has no return value, and takes two arguments: the session, and the error related to the cause of invalidation. + */ +- (void)setSessionDidBecomeInvalidBlock:(nullable void (^)(NSURLSession *session, NSError *error))block; + +/** + Sets a block to be executed when a connection level authentication challenge has occurred, as handled by the `NSURLSessionDelegate` method `URLSession:didReceiveChallenge:completionHandler:`. + + @param block A block object to be executed when a connection level authentication challenge has occurred. The block returns the disposition of the authentication challenge, and takes three arguments: the session, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge. + */ +- (void)setSessionDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __nullable __autoreleasing * __nullable credential))block; + +///-------------------------------------- +/// @name Setting Task Delegate Callbacks +///-------------------------------------- + +/** + Sets a block to be executed when a task requires a new request body stream to send to the remote server, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:needNewBodyStream:`. + + @param block A block object to be executed when a task requires a new request body stream. + */ +- (void)setTaskNeedNewBodyStreamBlock:(nullable NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block; + +/** + Sets a block to be executed when an HTTP request is attempting to perform a redirection to a different URL, as handled by the `NSURLSessionTaskDelegate` method `URLSession:willPerformHTTPRedirection:newRequest:completionHandler:`. + + @param block A block object to be executed when an HTTP request is attempting to perform a redirection to a different URL. The block returns the request to be made for the redirection, and takes four arguments: the session, the task, the redirection response, and the request corresponding to the redirection response. + */ +- (void)setTaskWillPerformHTTPRedirectionBlock:(nullable NSURLRequest * (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block; + +/** + Sets a block to be executed when a session task has received a request specific authentication challenge, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didReceiveChallenge:completionHandler:`. + + @param block A block object to be executed when a session task has received a request specific authentication challenge. The block returns the disposition of the authentication challenge, and takes four arguments: the session, the task, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge. + */ +- (void)setTaskDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __nullable __autoreleasing * __nullable credential))block; + +/** + Sets a block to be executed periodically to track upload progress, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:`. + + @param block A block object to be called when an undetermined number of bytes have been uploaded to the server. This block has no return value and takes five arguments: the session, the task, the number of bytes written since the last time the upload progress block was called, the total bytes written, and the total bytes expected to be written during the request, as initially determined by the length of the HTTP body. This block may be called multiple times, and will execute on the main thread. + */ +- (void)setTaskDidSendBodyDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block; + +/** + Sets a block to be executed as the last message related to a specific task, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didCompleteWithError:`. + + @param block A block object to be executed when a session task is completed. The block has no return value, and takes three arguments: the session, the task, and any error that occurred in the process of executing the task. + */ +- (void)setTaskDidCompleteBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, NSError *error))block; + +///------------------------------------------- +/// @name Setting Data Task Delegate Callbacks +///------------------------------------------- + +/** + Sets a block to be executed when a data task has received a response, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didReceiveResponse:completionHandler:`. + + @param block A block object to be executed when a data task has received a response. The block returns the disposition of the session response, and takes three arguments: the session, the data task, and the received response. + */ +- (void)setDataTaskDidReceiveResponseBlock:(nullable NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block; + +/** + Sets a block to be executed when a data task has become a download task, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didBecomeDownloadTask:`. + + @param block A block object to be executed when a data task has become a download task. The block has no return value, and takes three arguments: the session, the data task, and the download task it has become. + */ +- (void)setDataTaskDidBecomeDownloadTaskBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block; + +/** + Sets a block to be executed when a data task receives data, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didReceiveData:`. + + @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the session, the data task, and the data received. This block may be called multiple times, and will execute on the session manager operation queue. + */ +- (void)setDataTaskDidReceiveDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block; + +/** + Sets a block to be executed to determine the caching behavior of a data task, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:willCacheResponse:completionHandler:`. + + @param block A block object to be executed to determine the caching behavior of a data task. The block returns the response to cache, and takes three arguments: the session, the data task, and the proposed cached URL response. + */ +- (void)setDataTaskWillCacheResponseBlock:(nullable NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block; + +/** + Sets a block to be executed once all messages enqueued for a session have been delivered, as handled by the `NSURLSessionDataDelegate` method `URLSessionDidFinishEventsForBackgroundURLSession:`. + + @param block A block object to be executed once all messages enqueued for a session have been delivered. The block has no return value and takes a single argument: the session. + */ +- (void)setDidFinishEventsForBackgroundURLSessionBlock:(nullable void (^)(NSURLSession *session))block; + +///----------------------------------------------- +/// @name Setting Download Task Delegate Callbacks +///----------------------------------------------- + +/** + Sets a block to be executed when a download task has completed a download, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didFinishDownloadingToURL:`. + + @param block A block object to be executed when a download task has completed. The block returns the URL the download should be moved to, and takes three arguments: the session, the download task, and the temporary location of the downloaded file. If the file manager encounters an error while attempting to move the temporary file to the destination, an `AFURLSessionDownloadTaskDidFailToMoveFileNotification` will be posted, with the download task as its object, and the user info of the error. + */ +- (void)setDownloadTaskDidFinishDownloadingBlock:(nullable NSURL * (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block; + +/** + Sets a block to be executed periodically to track download progress, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:`. + + @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes five arguments: the session, the download task, the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the session manager operation queue. + */ +- (void)setDownloadTaskDidWriteDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block; + +/** + Sets a block to be executed when a download task has been resumed, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:`. + + @param block A block object to be executed when a download task has been resumed. The block has no return value and takes four arguments: the session, the download task, the file offset of the resumed download, and the total number of bytes expected to be downloaded. + */ +- (void)setDownloadTaskDidResumeBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block; + +@end + +#endif + +///-------------------- +/// @name Notifications +///-------------------- + +/** + Posted when a task begins executing. + + @deprecated Use `AFNetworkingTaskDidResumeNotification` instead. + */ +extern NSString * const AFNetworkingTaskDidStartNotification DEPRECATED_ATTRIBUTE; + +/** + Posted when a task resumes. + */ +extern NSString * const AFNetworkingTaskDidResumeNotification; + +/** + Posted when a task finishes executing. Includes a userInfo dictionary with additional information about the task. + + @deprecated Use `AFNetworkingTaskDidCompleteNotification` instead. + */ +extern NSString * const AFNetworkingTaskDidFinishNotification DEPRECATED_ATTRIBUTE; + +/** + Posted when a task finishes executing. Includes a userInfo dictionary with additional information about the task. + */ +extern NSString * const AFNetworkingTaskDidCompleteNotification; + +/** + Posted when a task suspends its execution. + */ +extern NSString * const AFNetworkingTaskDidSuspendNotification; + +/** + Posted when a session is invalidated. + */ +extern NSString * const AFURLSessionDidInvalidateNotification; + +/** + Posted when a session download task encountered an error when moving the temporary download file to a specified destination. + */ +extern NSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification; + +/** + The raw response data of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if response data exists for the task. + + @deprecated Use `AFNetworkingTaskDidCompleteResponseDataKey` instead. + */ +extern NSString * const AFNetworkingTaskDidFinishResponseDataKey DEPRECATED_ATTRIBUTE; + +/** + The raw response data of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if response data exists for the task. + */ +extern NSString * const AFNetworkingTaskDidCompleteResponseDataKey; + +/** + The serialized response object of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the response was serialized. + + @deprecated Use `AFNetworkingTaskDidCompleteSerializedResponseKey` instead. + */ +extern NSString * const AFNetworkingTaskDidFinishSerializedResponseKey DEPRECATED_ATTRIBUTE; + +/** + The serialized response object of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the response was serialized. + */ +extern NSString * const AFNetworkingTaskDidCompleteSerializedResponseKey; + +/** + The response serializer used to serialize the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the task has an associated response serializer. + + @deprecated Use `AFNetworkingTaskDidCompleteResponseSerializerKey` instead. + */ +extern NSString * const AFNetworkingTaskDidFinishResponseSerializerKey DEPRECATED_ATTRIBUTE; + +/** + The response serializer used to serialize the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the task has an associated response serializer. + */ +extern NSString * const AFNetworkingTaskDidCompleteResponseSerializerKey; + +/** + The file path associated with the download task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an the response data has been stored directly to disk. + + @deprecated Use `AFNetworkingTaskDidCompleteAssetPathKey` instead. + */ +extern NSString * const AFNetworkingTaskDidFinishAssetPathKey DEPRECATED_ATTRIBUTE; + +/** + The file path associated with the download task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an the response data has been stored directly to disk. + */ +extern NSString * const AFNetworkingTaskDidCompleteAssetPathKey; + +/** + Any error associated with the task, or the serialization of the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an error exists. + + @deprecated Use `AFNetworkingTaskDidCompleteErrorKey` instead. + */ +extern NSString * const AFNetworkingTaskDidFinishErrorKey DEPRECATED_ATTRIBUTE; + +/** + Any error associated with the task, or the serialization of the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an error exists. + */ +extern NSString * const AFNetworkingTaskDidCompleteErrorKey; + +NS_ASSUME_NONNULL_END diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLSessionManager.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLSessionManager.m new file mode 100644 index 0000000..a795a07 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/AFNetworking/AFURLSessionManager.m @@ -0,0 +1,1169 @@ +// AFURLSessionManager.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFURLSessionManager.h" +#import + +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) + +static dispatch_queue_t url_session_manager_creation_queue() { + static dispatch_queue_t af_url_session_manager_creation_queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_session_manager_creation_queue = dispatch_queue_create("com.alamofire.networking.session.manager.creation", DISPATCH_QUEUE_SERIAL); + }); + + return af_url_session_manager_creation_queue; +} + +static dispatch_queue_t url_session_manager_processing_queue() { + static dispatch_queue_t af_url_session_manager_processing_queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_session_manager_processing_queue = dispatch_queue_create("com.alamofire.networking.session.manager.processing", DISPATCH_QUEUE_CONCURRENT); + }); + + return af_url_session_manager_processing_queue; +} + +static dispatch_group_t url_session_manager_completion_group() { + static dispatch_group_t af_url_session_manager_completion_group; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_session_manager_completion_group = dispatch_group_create(); + }); + + return af_url_session_manager_completion_group; +} + +NSString * const AFNetworkingTaskDidResumeNotification = @"com.alamofire.networking.task.resume"; +NSString * const AFNetworkingTaskDidCompleteNotification = @"com.alamofire.networking.task.complete"; +NSString * const AFNetworkingTaskDidSuspendNotification = @"com.alamofire.networking.task.suspend"; +NSString * const AFURLSessionDidInvalidateNotification = @"com.alamofire.networking.session.invalidate"; +NSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification = @"com.alamofire.networking.session.download.file-manager-error"; + +NSString * const AFNetworkingTaskDidStartNotification = @"com.alamofire.networking.task.resume"; // Deprecated +NSString * const AFNetworkingTaskDidFinishNotification = @"com.alamofire.networking.task.complete"; // Deprecated + +NSString * const AFNetworkingTaskDidCompleteSerializedResponseKey = @"com.alamofire.networking.task.complete.serializedresponse"; +NSString * const AFNetworkingTaskDidCompleteResponseSerializerKey = @"com.alamofire.networking.task.complete.responseserializer"; +NSString * const AFNetworkingTaskDidCompleteResponseDataKey = @"com.alamofire.networking.complete.finish.responsedata"; +NSString * const AFNetworkingTaskDidCompleteErrorKey = @"com.alamofire.networking.task.complete.error"; +NSString * const AFNetworkingTaskDidCompleteAssetPathKey = @"com.alamofire.networking.task.complete.assetpath"; + +NSString * const AFNetworkingTaskDidFinishSerializedResponseKey = @"com.alamofire.networking.task.complete.serializedresponse"; // Deprecated +NSString * const AFNetworkingTaskDidFinishResponseSerializerKey = @"com.alamofire.networking.task.complete.responseserializer"; // Deprecated +NSString * const AFNetworkingTaskDidFinishResponseDataKey = @"com.alamofire.networking.complete.finish.responsedata"; // Deprecated +NSString * const AFNetworkingTaskDidFinishErrorKey = @"com.alamofire.networking.task.complete.error"; // Deprecated +NSString * const AFNetworkingTaskDidFinishAssetPathKey = @"com.alamofire.networking.task.complete.assetpath"; // Deprecated + +static NSString * const AFURLSessionManagerLockName = @"com.alamofire.networking.session.manager.lock"; + +static NSUInteger const AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask = 3; + +static void * AFTaskStateChangedContext = &AFTaskStateChangedContext; + +typedef void (^AFURLSessionDidBecomeInvalidBlock)(NSURLSession *session, NSError *error); +typedef NSURLSessionAuthChallengeDisposition (^AFURLSessionDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential); + +typedef NSURLRequest * (^AFURLSessionTaskWillPerformHTTPRedirectionBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request); +typedef NSURLSessionAuthChallengeDisposition (^AFURLSessionTaskDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential); +typedef void (^AFURLSessionDidFinishEventsForBackgroundURLSessionBlock)(NSURLSession *session); + +typedef NSInputStream * (^AFURLSessionTaskNeedNewBodyStreamBlock)(NSURLSession *session, NSURLSessionTask *task); +typedef void (^AFURLSessionTaskDidSendBodyDataBlock)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend); +typedef void (^AFURLSessionTaskDidCompleteBlock)(NSURLSession *session, NSURLSessionTask *task, NSError *error); + +typedef NSURLSessionResponseDisposition (^AFURLSessionDataTaskDidReceiveResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response); +typedef void (^AFURLSessionDataTaskDidBecomeDownloadTaskBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask); +typedef void (^AFURLSessionDataTaskDidReceiveDataBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data); +typedef NSCachedURLResponse * (^AFURLSessionDataTaskWillCacheResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse); + +typedef NSURL * (^AFURLSessionDownloadTaskDidFinishDownloadingBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location); +typedef void (^AFURLSessionDownloadTaskDidWriteDataBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite); +typedef void (^AFURLSessionDownloadTaskDidResumeBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes); + +typedef void (^AFURLSessionTaskCompletionHandler)(NSURLResponse *response, id responseObject, NSError *error); + +#pragma mark - + +@interface AFURLSessionManagerTaskDelegate : NSObject +@property (nonatomic, weak) AFURLSessionManager *manager; +@property (nonatomic, strong) NSMutableData *mutableData; +@property (nonatomic, strong) NSProgress *progress; +@property (nonatomic, copy) NSURL *downloadFileURL; +@property (nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading; +@property (nonatomic, copy) AFURLSessionTaskCompletionHandler completionHandler; +@end + +@implementation AFURLSessionManagerTaskDelegate + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.mutableData = [NSMutableData data]; + + self.progress = [NSProgress progressWithTotalUnitCount:0]; + + return self; +} + +#pragma mark - NSURLSessionTaskDelegate + +- (void)URLSession:(__unused NSURLSession *)session + task:(__unused NSURLSessionTask *)task + didSendBodyData:(__unused int64_t)bytesSent + totalBytesSent:(int64_t)totalBytesSent +totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend +{ + self.progress.totalUnitCount = totalBytesExpectedToSend; + self.progress.completedUnitCount = totalBytesSent; +} + +- (void)URLSession:(__unused NSURLSession *)session + task:(NSURLSessionTask *)task +didCompleteWithError:(NSError *)error +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + __strong AFURLSessionManager *manager = self.manager; + + __block id responseObject = nil; + + __block NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + userInfo[AFNetworkingTaskDidCompleteResponseSerializerKey] = manager.responseSerializer; + + //Performance Improvement from #2672 + NSData *data = nil; + if (self.mutableData) { + data = [self.mutableData copy]; + //We no longer need the reference, so nil it out to gain back some memory. + self.mutableData = nil; + } + + if (self.downloadFileURL) { + userInfo[AFNetworkingTaskDidCompleteAssetPathKey] = self.downloadFileURL; + } else if (data) { + userInfo[AFNetworkingTaskDidCompleteResponseDataKey] = data; + } + + if (error) { + userInfo[AFNetworkingTaskDidCompleteErrorKey] = error; + + dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{ + if (self.completionHandler) { + self.completionHandler(task.response, responseObject, error); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo]; + }); + }); + } else { + dispatch_async(url_session_manager_processing_queue(), ^{ + NSError *serializationError = nil; + responseObject = [manager.responseSerializer responseObjectForResponse:task.response data:data error:&serializationError]; + + if (self.downloadFileURL) { + responseObject = self.downloadFileURL; + } + + if (responseObject) { + userInfo[AFNetworkingTaskDidCompleteSerializedResponseKey] = responseObject; + } + + if (serializationError) { + userInfo[AFNetworkingTaskDidCompleteErrorKey] = serializationError; + } + + dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{ + if (self.completionHandler) { + self.completionHandler(task.response, responseObject, serializationError); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo]; + }); + }); + }); + } +#pragma clang diagnostic pop +} + +#pragma mark - NSURLSessionDataTaskDelegate + +- (void)URLSession:(__unused NSURLSession *)session + dataTask:(__unused NSURLSessionDataTask *)dataTask + didReceiveData:(NSData *)data +{ + [self.mutableData appendData:data]; +} + +#pragma mark - NSURLSessionDownloadTaskDelegate + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask +didFinishDownloadingToURL:(NSURL *)location +{ + NSError *fileManagerError = nil; + self.downloadFileURL = nil; + + if (self.downloadTaskDidFinishDownloading) { + self.downloadFileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location); + if (self.downloadFileURL) { + [[NSFileManager defaultManager] moveItemAtURL:location toURL:self.downloadFileURL error:&fileManagerError]; + + if (fileManagerError) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:fileManagerError.userInfo]; + } + } + } +} + +- (void)URLSession:(__unused NSURLSession *)session + downloadTask:(__unused NSURLSessionDownloadTask *)downloadTask + didWriteData:(__unused int64_t)bytesWritten + totalBytesWritten:(int64_t)totalBytesWritten +totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite +{ + self.progress.totalUnitCount = totalBytesExpectedToWrite; + self.progress.completedUnitCount = totalBytesWritten; +} + +- (void)URLSession:(__unused NSURLSession *)session + downloadTask:(__unused NSURLSessionDownloadTask *)downloadTask + didResumeAtOffset:(int64_t)fileOffset +expectedTotalBytes:(int64_t)expectedTotalBytes { + self.progress.totalUnitCount = expectedTotalBytes; + self.progress.completedUnitCount = fileOffset; +} + +@end + +#pragma mark - + +/** + * A workaround for issues related to key-value observing the `state` of an `NSURLSessionTask`. + * + * See: + * - https://github.com/AFNetworking/AFNetworking/issues/1477 + * - https://github.com/AFNetworking/AFNetworking/issues/2638 + * - https://github.com/AFNetworking/AFNetworking/pull/2702 + */ + +static inline void af_swizzleSelector(Class class, SEL originalSelector, SEL swizzledSelector) { + Method originalMethod = class_getInstanceMethod(class, originalSelector); + Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); + method_exchangeImplementations(originalMethod, swizzledMethod); +} + +static inline BOOL af_addMethod(Class class, SEL selector, Method method) { + return class_addMethod(class, selector, method_getImplementation(method), method_getTypeEncoding(method)); +} + +static NSString * const AFNSURLSessionTaskDidResumeNotification = @"com.alamofire.networking.nsurlsessiontask.resume"; +static NSString * const AFNSURLSessionTaskDidSuspendNotification = @"com.alamofire.networking.nsurlsessiontask.suspend"; + +@interface _AFURLSessionTaskSwizzling : NSObject + +@end + +@implementation _AFURLSessionTaskSwizzling + ++ (void)load { + /** + WARNING: Trouble Ahead + https://github.com/AFNetworking/AFNetworking/pull/2702 + */ + + if (NSClassFromString(@"NSURLSessionTask")) { + /** + iOS 7 and iOS 8 differ in NSURLSessionTask implementation, which makes the next bit of code a bit tricky. + Many Unit Tests have been built to validate as much of this behavior has possible. + Here is what we know: + - NSURLSessionTasks are implemented with class clusters, meaning the class you request from the API isn't actually the type of class you will get back. + - Simply referencing `[NSURLSessionTask class]` will not work. You need to ask an `NSURLSession` to actually create an object, and grab the class from there. + - On iOS 7, `localDataTask` is a `__NSCFLocalDataTask`, which inherits from `__NSCFLocalSessionTask`, which inherits from `__NSCFURLSessionTask`. + - On iOS 8, `localDataTask` is a `__NSCFLocalDataTask`, which inherits from `__NSCFLocalSessionTask`, which inherits from `NSURLSessionTask`. + - On iOS 7, `__NSCFLocalSessionTask` and `__NSCFURLSessionTask` are the only two classes that have their own implementations of `resume` and `suspend`, and `__NSCFLocalSessionTask` DOES NOT CALL SUPER. This means both classes need to be swizzled. + - On iOS 8, `NSURLSessionTask` is the only class that implements `resume` and `suspend`. This means this is the only class that needs to be swizzled. + - Because `NSURLSessionTask` is not involved in the class hierarchy for every version of iOS, its easier to add the swizzled methods to a dummy class and manage them there. + + Some Assumptions: + - No implementations of `resume` or `suspend` call super. If this were to change in a future version of iOS, we'd need to handle it. + - No background task classes override `resume` or `suspend` + + The current solution: + 1) Grab an instance of `__NSCFLocalDataTask` by asking an instance of `NSURLSession` for a data task. + 2) Grab a pointer to the original implementation of `af_resume` + 3) Check to see if the current class has an implementation of resume. If so, continue to step 4. + 4) Grab the super class of the current class. + 5) Grab a pointer for the current class to the current implementation of `resume`. + 6) Grab a pointer for the super class to the current implementation of `resume`. + 7) If the current class implementation of `resume` is not equal to the super class implementation of `resume` AND the current implementation of `resume` is not equal to the original implementation of `af_resume`, THEN swizzle the methods + 8) Set the current class to the super class, and repeat steps 3-8 + */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnonnull" + NSURLSessionDataTask *localDataTask = [[NSURLSession sessionWithConfiguration:nil] dataTaskWithURL:nil]; +#pragma clang diagnostic pop + IMP originalAFResumeIMP = method_getImplementation(class_getInstanceMethod([_AFURLSessionTaskSwizzling class], @selector(af_resume))); + Class currentClass = [localDataTask class]; + + while (class_getInstanceMethod(currentClass, @selector(resume))) { + Class superClass = [currentClass superclass]; + IMP classResumeIMP = method_getImplementation(class_getInstanceMethod(currentClass, @selector(resume))); + IMP superclassResumeIMP = method_getImplementation(class_getInstanceMethod(superClass, @selector(resume))); + if (classResumeIMP != superclassResumeIMP && + originalAFResumeIMP != classResumeIMP) { + [self swizzleResumeAndSuspendMethodForClass:currentClass]; + } + currentClass = [currentClass superclass]; + } + + [localDataTask cancel]; + } +} + ++ (void)swizzleResumeAndSuspendMethodForClass:(Class)class { + Method afResumeMethod = class_getInstanceMethod(self, @selector(af_resume)); + Method afSuspendMethod = class_getInstanceMethod(self, @selector(af_suspend)); + + af_addMethod(class, @selector(af_resume), afResumeMethod); + af_addMethod(class, @selector(af_suspend), afSuspendMethod); + + af_swizzleSelector(class, @selector(resume), @selector(af_resume)); + af_swizzleSelector(class, @selector(suspend), @selector(af_suspend)); +} + +- (NSURLSessionTaskState)state { + NSAssert(NO, @"State method should never be called in the actual dummy class"); + return NSURLSessionTaskStateCanceling; +} + +- (void)af_resume { + NSAssert([self respondsToSelector:@selector(state)], @"Does not respond to state"); + NSURLSessionTaskState state = [self state]; + [self af_resume]; + + if (state != NSURLSessionTaskStateRunning) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFNSURLSessionTaskDidResumeNotification object:self]; + } +} + +- (void)af_suspend { + NSAssert([self respondsToSelector:@selector(state)], @"Does not respond to state"); + NSURLSessionTaskState state = [self state]; + [self af_suspend]; + + if (state != NSURLSessionTaskStateSuspended) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFNSURLSessionTaskDidSuspendNotification object:self]; + } +} +@end + +#pragma mark - + +@interface AFURLSessionManager () +@property (readwrite, nonatomic, strong) NSURLSessionConfiguration *sessionConfiguration; +@property (readwrite, nonatomic, strong) NSOperationQueue *operationQueue; +@property (readwrite, nonatomic, strong) NSURLSession *session; +@property (readwrite, nonatomic, strong) NSMutableDictionary *mutableTaskDelegatesKeyedByTaskIdentifier; +@property (readonly, nonatomic, copy) NSString *taskDescriptionForSessionTasks; +@property (readwrite, nonatomic, strong) NSLock *lock; +@property (readwrite, nonatomic, copy) AFURLSessionDidBecomeInvalidBlock sessionDidBecomeInvalid; +@property (readwrite, nonatomic, copy) AFURLSessionDidReceiveAuthenticationChallengeBlock sessionDidReceiveAuthenticationChallenge; +@property (readwrite, nonatomic, copy) AFURLSessionDidFinishEventsForBackgroundURLSessionBlock didFinishEventsForBackgroundURLSession; +@property (readwrite, nonatomic, copy) AFURLSessionTaskWillPerformHTTPRedirectionBlock taskWillPerformHTTPRedirection; +@property (readwrite, nonatomic, copy) AFURLSessionTaskDidReceiveAuthenticationChallengeBlock taskDidReceiveAuthenticationChallenge; +@property (readwrite, nonatomic, copy) AFURLSessionTaskNeedNewBodyStreamBlock taskNeedNewBodyStream; +@property (readwrite, nonatomic, copy) AFURLSessionTaskDidSendBodyDataBlock taskDidSendBodyData; +@property (readwrite, nonatomic, copy) AFURLSessionTaskDidCompleteBlock taskDidComplete; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveResponseBlock dataTaskDidReceiveResponse; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidBecomeDownloadTaskBlock dataTaskDidBecomeDownloadTask; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveDataBlock dataTaskDidReceiveData; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskWillCacheResponseBlock dataTaskWillCacheResponse; +@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading; +@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidWriteDataBlock downloadTaskDidWriteData; +@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidResumeBlock downloadTaskDidResume; +@end + +@implementation AFURLSessionManager + +- (instancetype)init { + return [self initWithSessionConfiguration:nil]; +} + +- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration { + self = [super init]; + if (!self) { + return nil; + } + + if (!configuration) { + configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; + } + + self.sessionConfiguration = configuration; + + self.operationQueue = [[NSOperationQueue alloc] init]; + self.operationQueue.maxConcurrentOperationCount = 1; + + self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue]; + + self.responseSerializer = [AFJSONResponseSerializer serializer]; + + self.securityPolicy = [AFSecurityPolicy defaultPolicy]; + +#if !TARGET_OS_WATCH + self.reachabilityManager = [AFNetworkReachabilityManager sharedManager]; +#endif + + self.mutableTaskDelegatesKeyedByTaskIdentifier = [[NSMutableDictionary alloc] init]; + + self.lock = [[NSLock alloc] init]; + self.lock.name = AFURLSessionManagerLockName; + + [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { + for (NSURLSessionDataTask *task in dataTasks) { + [self addDelegateForDataTask:task completionHandler:nil]; + } + + for (NSURLSessionUploadTask *uploadTask in uploadTasks) { + [self addDelegateForUploadTask:uploadTask progress:nil completionHandler:nil]; + } + + for (NSURLSessionDownloadTask *downloadTask in downloadTasks) { + [self addDelegateForDownloadTask:downloadTask progress:nil destination:nil completionHandler:nil]; + } + }]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskDidResume:) name:AFNSURLSessionTaskDidResumeNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskDidSuspend:) name:AFNSURLSessionTaskDidSuspendNotification object:nil]; + + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - + +- (NSString *)taskDescriptionForSessionTasks { + return [NSString stringWithFormat:@"%p", self]; +} + +- (void)taskDidResume:(NSNotification *)notification { + NSURLSessionTask *task = notification.object; + if ([task respondsToSelector:@selector(taskDescription)]) { + if ([task.taskDescription isEqualToString:self.taskDescriptionForSessionTasks]) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidResumeNotification object:task]; + }); + } + } +} + +- (void)taskDidSuspend:(NSNotification *)notification { + NSURLSessionTask *task = notification.object; + if ([task respondsToSelector:@selector(taskDescription)]) { + if ([task.taskDescription isEqualToString:self.taskDescriptionForSessionTasks]) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidSuspendNotification object:task]; + }); + } + } +} + +#pragma mark - + +- (AFURLSessionManagerTaskDelegate *)delegateForTask:(NSURLSessionTask *)task { + NSParameterAssert(task); + + AFURLSessionManagerTaskDelegate *delegate = nil; + [self.lock lock]; + delegate = self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)]; + [self.lock unlock]; + + return delegate; +} + +- (void)setDelegate:(AFURLSessionManagerTaskDelegate *)delegate + forTask:(NSURLSessionTask *)task +{ + NSParameterAssert(task); + NSParameterAssert(delegate); + + [self.lock lock]; + self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)] = delegate; + [self.lock unlock]; +} + +- (void)addDelegateForDataTask:(NSURLSessionDataTask *)dataTask + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; + delegate.manager = self; + delegate.completionHandler = completionHandler; + + dataTask.taskDescription = self.taskDescriptionForSessionTasks; + [self setDelegate:delegate forTask:dataTask]; +} + +- (void)addDelegateForUploadTask:(NSURLSessionUploadTask *)uploadTask + progress:(NSProgress * __autoreleasing *)progress + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; + delegate.manager = self; + delegate.completionHandler = completionHandler; + + int64_t totalUnitCount = uploadTask.countOfBytesExpectedToSend; + if(totalUnitCount == NSURLSessionTransferSizeUnknown) { + NSString *contentLength = [uploadTask.originalRequest valueForHTTPHeaderField:@"Content-Length"]; + if(contentLength) { + totalUnitCount = (int64_t)[contentLength longLongValue]; + } + } + + if (delegate.progress) { + delegate.progress.totalUnitCount = totalUnitCount; + } else { + delegate.progress = [NSProgress progressWithTotalUnitCount:totalUnitCount]; + } + + delegate.progress.pausingHandler = ^{ + [uploadTask suspend]; + }; + delegate.progress.cancellationHandler = ^{ + [uploadTask cancel]; + }; + + if (progress) { + *progress = delegate.progress; + } + + uploadTask.taskDescription = self.taskDescriptionForSessionTasks; + + [self setDelegate:delegate forTask:uploadTask]; +} + +- (void)addDelegateForDownloadTask:(NSURLSessionDownloadTask *)downloadTask + progress:(NSProgress * __autoreleasing *)progress + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler +{ + AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; + delegate.manager = self; + delegate.completionHandler = completionHandler; + + if (destination) { + delegate.downloadTaskDidFinishDownloading = ^NSURL * (NSURLSession * __unused session, NSURLSessionDownloadTask *task, NSURL *location) { + return destination(location, task.response); + }; + } + + if (progress) { + *progress = delegate.progress; + } + + downloadTask.taskDescription = self.taskDescriptionForSessionTasks; + + [self setDelegate:delegate forTask:downloadTask]; +} + +- (void)removeDelegateForTask:(NSURLSessionTask *)task { + NSParameterAssert(task); + + [self.lock lock]; + [self.mutableTaskDelegatesKeyedByTaskIdentifier removeObjectForKey:@(task.taskIdentifier)]; + [self.lock unlock]; +} + +- (void)removeAllDelegates { + [self.lock lock]; + [self.mutableTaskDelegatesKeyedByTaskIdentifier removeAllObjects]; + [self.lock unlock]; +} + +#pragma mark - + +- (NSArray *)tasksForKeyPath:(NSString *)keyPath { + __block NSArray *tasks = nil; + dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); + [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { + if ([keyPath isEqualToString:NSStringFromSelector(@selector(dataTasks))]) { + tasks = dataTasks; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(uploadTasks))]) { + tasks = uploadTasks; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(downloadTasks))]) { + tasks = downloadTasks; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(tasks))]) { + tasks = [@[dataTasks, uploadTasks, downloadTasks] valueForKeyPath:@"@unionOfArrays.self"]; + } + + dispatch_semaphore_signal(semaphore); + }]; + + dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); + + return tasks; +} + +- (NSArray *)tasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +- (NSArray *)dataTasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +- (NSArray *)uploadTasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +- (NSArray *)downloadTasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +#pragma mark - + +- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks { + dispatch_async(dispatch_get_main_queue(), ^{ + if (cancelPendingTasks) { + [self.session invalidateAndCancel]; + } else { + [self.session finishTasksAndInvalidate]; + } + }); +} + +#pragma mark - + +- (void)setResponseSerializer:(id )responseSerializer { + NSParameterAssert(responseSerializer); + + _responseSerializer = responseSerializer; +} + +#pragma mark - + +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionDataTask *dataTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + dataTask = [self.session dataTaskWithRequest:request]; + }); + + [self addDelegateForDataTask:dataTask completionHandler:completionHandler]; + + return dataTask; +} + +#pragma mark - + +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromFile:(NSURL *)fileURL + progress:(NSProgress * __autoreleasing *)progress + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionUploadTask *uploadTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; + }); + + if (!uploadTask && self.attemptsToRecreateUploadTasksForBackgroundSessions && self.session.configuration.identifier) { + for (NSUInteger attempts = 0; !uploadTask && attempts < AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask; attempts++) { + uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; + } + } + + [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler]; + + return uploadTask; +} + +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromData:(NSData *)bodyData + progress:(NSProgress * __autoreleasing *)progress + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionUploadTask *uploadTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + uploadTask = [self.session uploadTaskWithRequest:request fromData:bodyData]; + }); + + [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler]; + + return uploadTask; +} + +- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request + progress:(NSProgress * __autoreleasing *)progress + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionUploadTask *uploadTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + uploadTask = [self.session uploadTaskWithStreamedRequest:request]; + }); + + [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler]; + + return uploadTask; +} + +#pragma mark - + +- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request + progress:(NSProgress * __autoreleasing *)progress + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler +{ + __block NSURLSessionDownloadTask *downloadTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + downloadTask = [self.session downloadTaskWithRequest:request]; + }); + + [self addDelegateForDownloadTask:downloadTask progress:progress destination:destination completionHandler:completionHandler]; + + return downloadTask; +} + +- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData + progress:(NSProgress * __autoreleasing *)progress + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler +{ + __block NSURLSessionDownloadTask *downloadTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + downloadTask = [self.session downloadTaskWithResumeData:resumeData]; + }); + + [self addDelegateForDownloadTask:downloadTask progress:progress destination:destination completionHandler:completionHandler]; + + return downloadTask; +} + +#pragma mark - + +- (NSProgress *)uploadProgressForTask:(NSURLSessionUploadTask *)uploadTask { + return [[self delegateForTask:uploadTask] progress]; +} + +- (NSProgress *)downloadProgressForTask:(NSURLSessionDownloadTask *)downloadTask { + return [[self delegateForTask:downloadTask] progress]; +} + +#pragma mark - + +- (void)setSessionDidBecomeInvalidBlock:(void (^)(NSURLSession *session, NSError *error))block { + self.sessionDidBecomeInvalid = block; +} + +- (void)setSessionDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block { + self.sessionDidReceiveAuthenticationChallenge = block; +} + +- (void)setDidFinishEventsForBackgroundURLSessionBlock:(void (^)(NSURLSession *session))block { + self.didFinishEventsForBackgroundURLSession = block; +} + +#pragma mark - + +- (void)setTaskNeedNewBodyStreamBlock:(NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block { + self.taskNeedNewBodyStream = block; +} + +- (void)setTaskWillPerformHTTPRedirectionBlock:(NSURLRequest * (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block { + self.taskWillPerformHTTPRedirection = block; +} + +- (void)setTaskDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block { + self.taskDidReceiveAuthenticationChallenge = block; +} + +- (void)setTaskDidSendBodyDataBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block { + self.taskDidSendBodyData = block; +} + +- (void)setTaskDidCompleteBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, NSError *error))block { + self.taskDidComplete = block; +} + +#pragma mark - + +- (void)setDataTaskDidReceiveResponseBlock:(NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block { + self.dataTaskDidReceiveResponse = block; +} + +- (void)setDataTaskDidBecomeDownloadTaskBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block { + self.dataTaskDidBecomeDownloadTask = block; +} + +- (void)setDataTaskDidReceiveDataBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block { + self.dataTaskDidReceiveData = block; +} + +- (void)setDataTaskWillCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block { + self.dataTaskWillCacheResponse = block; +} + +#pragma mark - + +- (void)setDownloadTaskDidFinishDownloadingBlock:(NSURL * (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block { + self.downloadTaskDidFinishDownloading = block; +} + +- (void)setDownloadTaskDidWriteDataBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block { + self.downloadTaskDidWriteData = block; +} + +- (void)setDownloadTaskDidResumeBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block { + self.downloadTaskDidResume = block; +} + +#pragma mark - NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p, session: %@, operationQueue: %@>", NSStringFromClass([self class]), self, self.session, self.operationQueue]; +} + +- (BOOL)respondsToSelector:(SEL)selector { + if (selector == @selector(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:)) { + return self.taskWillPerformHTTPRedirection != nil; + } else if (selector == @selector(URLSession:dataTask:didReceiveResponse:completionHandler:)) { + return self.dataTaskDidReceiveResponse != nil; + } else if (selector == @selector(URLSession:dataTask:willCacheResponse:completionHandler:)) { + return self.dataTaskWillCacheResponse != nil; + } else if (selector == @selector(URLSessionDidFinishEventsForBackgroundURLSession:)) { + return self.didFinishEventsForBackgroundURLSession != nil; + } + + return [[self class] instancesRespondToSelector:selector]; +} + +#pragma mark - NSURLSessionDelegate + +- (void)URLSession:(NSURLSession *)session +didBecomeInvalidWithError:(NSError *)error +{ + if (self.sessionDidBecomeInvalid) { + self.sessionDidBecomeInvalid(session, error); + } + + [self removeAllDelegates]; + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDidInvalidateNotification object:session]; +} + +- (void)URLSession:(NSURLSession *)session +didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge + completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler +{ + NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; + __block NSURLCredential *credential = nil; + + if (self.sessionDidReceiveAuthenticationChallenge) { + disposition = self.sessionDidReceiveAuthenticationChallenge(session, challenge, &credential); + } else { + if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { + if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { + credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; + if (credential) { + disposition = NSURLSessionAuthChallengeUseCredential; + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + } + } else { + disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; + } + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + } + } + + if (completionHandler) { + completionHandler(disposition, credential); + } +} + +#pragma mark - NSURLSessionTaskDelegate + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +willPerformHTTPRedirection:(NSHTTPURLResponse *)response + newRequest:(NSURLRequest *)request + completionHandler:(void (^)(NSURLRequest *))completionHandler +{ + NSURLRequest *redirectRequest = request; + + if (self.taskWillPerformHTTPRedirection) { + redirectRequest = self.taskWillPerformHTTPRedirection(session, task, response, request); + } + + if (completionHandler) { + completionHandler(redirectRequest); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge + completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler +{ + NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; + __block NSURLCredential *credential = nil; + + if (self.taskDidReceiveAuthenticationChallenge) { + disposition = self.taskDidReceiveAuthenticationChallenge(session, task, challenge, &credential); + } else { + if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { + if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { + disposition = NSURLSessionAuthChallengeUseCredential; + credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; + } else { + disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; + } + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + } + } + + if (completionHandler) { + completionHandler(disposition, credential); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + needNewBodyStream:(void (^)(NSInputStream *bodyStream))completionHandler +{ + NSInputStream *inputStream = nil; + + if (self.taskNeedNewBodyStream) { + inputStream = self.taskNeedNewBodyStream(session, task); + } else if (task.originalRequest.HTTPBodyStream && [task.originalRequest.HTTPBodyStream conformsToProtocol:@protocol(NSCopying)]) { + inputStream = [task.originalRequest.HTTPBodyStream copy]; + } + + if (completionHandler) { + completionHandler(inputStream); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + didSendBodyData:(int64_t)bytesSent + totalBytesSent:(int64_t)totalBytesSent +totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend +{ + + int64_t totalUnitCount = totalBytesExpectedToSend; + if(totalUnitCount == NSURLSessionTransferSizeUnknown) { + NSString *contentLength = [task.originalRequest valueForHTTPHeaderField:@"Content-Length"]; + if(contentLength) { + totalUnitCount = (int64_t) [contentLength longLongValue]; + } + } + + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task]; + [delegate URLSession:session task:task didSendBodyData:bytesSent totalBytesSent:totalBytesSent totalBytesExpectedToSend:totalUnitCount]; + + if (self.taskDidSendBodyData) { + self.taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalUnitCount); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +didCompleteWithError:(NSError *)error +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task]; + + // delegate may be nil when completing a task in the background + if (delegate) { + [delegate URLSession:session task:task didCompleteWithError:error]; + + [self removeDelegateForTask:task]; + } + + if (self.taskDidComplete) { + self.taskDidComplete(session, task, error); + } + +} + +#pragma mark - NSURLSessionDataDelegate + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didReceiveResponse:(NSURLResponse *)response + completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler +{ + NSURLSessionResponseDisposition disposition = NSURLSessionResponseAllow; + + if (self.dataTaskDidReceiveResponse) { + disposition = self.dataTaskDidReceiveResponse(session, dataTask, response); + } + + if (completionHandler) { + completionHandler(disposition); + } +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask]; + if (delegate) { + [self removeDelegateForTask:dataTask]; + [self setDelegate:delegate forTask:downloadTask]; + } + + if (self.dataTaskDidBecomeDownloadTask) { + self.dataTaskDidBecomeDownloadTask(session, dataTask, downloadTask); + } +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + didReceiveData:(NSData *)data +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask]; + [delegate URLSession:session dataTask:dataTask didReceiveData:data]; + + if (self.dataTaskDidReceiveData) { + self.dataTaskDidReceiveData(session, dataTask, data); + } +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + willCacheResponse:(NSCachedURLResponse *)proposedResponse + completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler +{ + NSCachedURLResponse *cachedResponse = proposedResponse; + + if (self.dataTaskWillCacheResponse) { + cachedResponse = self.dataTaskWillCacheResponse(session, dataTask, proposedResponse); + } + + if (completionHandler) { + completionHandler(cachedResponse); + } +} + +- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session { + if (self.didFinishEventsForBackgroundURLSession) { + dispatch_async(dispatch_get_main_queue(), ^{ + self.didFinishEventsForBackgroundURLSession(session); + }); + } +} + +#pragma mark - NSURLSessionDownloadDelegate + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask +didFinishDownloadingToURL:(NSURL *)location +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; + if (self.downloadTaskDidFinishDownloading) { + NSURL *fileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location); + if (fileURL) { + delegate.downloadFileURL = fileURL; + NSError *error = nil; + [[NSFileManager defaultManager] moveItemAtURL:location toURL:fileURL error:&error]; + if (error) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:error.userInfo]; + } + + return; + } + } + + if (delegate) { + [delegate URLSession:session downloadTask:downloadTask didFinishDownloadingToURL:location]; + } +} + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask + didWriteData:(int64_t)bytesWritten + totalBytesWritten:(int64_t)totalBytesWritten +totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; + [delegate URLSession:session downloadTask:downloadTask didWriteData:bytesWritten totalBytesWritten:totalBytesWritten totalBytesExpectedToWrite:totalBytesExpectedToWrite]; + + if (self.downloadTaskDidWriteData) { + self.downloadTaskDidWriteData(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); + } +} + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask + didResumeAtOffset:(int64_t)fileOffset +expectedTotalBytes:(int64_t)expectedTotalBytes +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; + [delegate URLSession:session downloadTask:downloadTask didResumeAtOffset:fileOffset expectedTotalBytes:expectedTotalBytes]; + + if (self.downloadTaskDidResume) { + self.downloadTaskDidResume(session, downloadTask, fileOffset, expectedTotalBytes); + } +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + NSURLSessionConfiguration *configuration = [decoder decodeObjectOfClass:[NSURLSessionConfiguration class] forKey:@"sessionConfiguration"]; + + self = [self initWithSessionConfiguration:configuration]; + if (!self) { + return nil; + } + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.session.configuration forKey:@"sessionConfiguration"]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + return [[[self class] allocWithZone:zone] initWithSessionConfiguration:self.session.configuration]; +} + +@end + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/LICENSE b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/LICENSE new file mode 100644 index 0000000..91f125b --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/README.md b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/README.md new file mode 100644 index 0000000..f25efe0 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/README.md @@ -0,0 +1,394 @@ +

+ AFNetworking +

+ +[![Build Status](https://travis-ci.org/AFNetworking/AFNetworking.svg)](https://travis-ci.org/AFNetworking/AFNetworking) + +AFNetworking is a delightful networking library for iOS and Mac OS X. It's built on top of the [Foundation URL Loading System](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html), extending the powerful high-level networking abstractions built into Cocoa. It has a modular architecture with well-designed, feature-rich APIs that are a joy to use. + +Perhaps the most important feature of all, however, is the amazing community of developers who use and contribute to AFNetworking every day. AFNetworking powers some of the most popular and critically-acclaimed apps on the iPhone, iPad, and Mac. + +Choose AFNetworking for your next project, or migrate over your existing projects—you'll be happy you did! + +## How To Get Started + +- [Download AFNetworking](https://github.com/AFNetworking/AFNetworking/archive/master.zip) and try out the included Mac and iPhone example apps +- Read the ["Getting Started" guide](https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking), [FAQ](https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-FAQ), or [other articles on the Wiki](https://github.com/AFNetworking/AFNetworking/wiki) +- Check out the [documentation](http://cocoadocs.org/docsets/AFNetworking/) for a comprehensive look at all of the APIs available in AFNetworking +- Read the [AFNetworking 2.0 Migration Guide](https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-2.0-Migration-Guide) for an overview of the architectural changes from 1.0. + +## Communication + +- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/afnetworking). (Tag 'afnetworking') +- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/afnetworking). +- If you **found a bug**, _and can provide steps to reliably reproduce it_, open an issue. +- If you **have a feature request**, open an issue. +- If you **want to contribute**, submit a pull request. + +### Installation with CocoaPods + +[CocoaPods](http://cocoapods.org) is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries like AFNetworking in your projects. See the ["Getting Started" guide for more information](https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking). + +#### Podfile + +```ruby +platform :ios, '7.0' +pod "AFNetworking", "~> 2.0" +``` + +## Requirements + +| AFNetworking Version | Minimum iOS Target | Minimum OS X Target | Notes | +|:--------------------:|:---------------------------:|:----------------------------:|:-------------------------------------------------------------------------:| +| 2.x | iOS 6 | OS X 10.8 | Xcode 5 is required. `NSURLSession` subspec requires iOS 7 or OS X 10.9. | +| [1.x](https://github.com/AFNetworking/AFNetworking/tree/1.x) | iOS 5 | Mac OS X 10.7 | | +| [0.10.x](https://github.com/AFNetworking/AFNetworking/tree/0.10.x) | iOS 4 | Mac OS X 10.6 | | + +(OS X projects must support [64-bit with modern Cocoa runtime](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html)). + +> Programming in Swift? Try [Alamofire](https://github.com/Alamofire/Alamofire) for a more conventional set of APIs. + +## Architecture + +### NSURLConnection + +- `AFURLConnectionOperation` +- `AFHTTPRequestOperation` +- `AFHTTPRequestOperationManager` + +### NSURLSession _(iOS 7 / Mac OS X 10.9)_ + +- `AFURLSessionManager` +- `AFHTTPSessionManager` + +### Serialization + +* `` + - `AFHTTPRequestSerializer` + - `AFJSONRequestSerializer` + - `AFPropertyListRequestSerializer` +* `` + - `AFHTTPResponseSerializer` + - `AFJSONResponseSerializer` + - `AFXMLParserResponseSerializer` + - `AFXMLDocumentResponseSerializer` _(Mac OS X)_ + - `AFPropertyListResponseSerializer` + - `AFImageResponseSerializer` + - `AFCompoundResponseSerializer` + +### Additional Functionality + +- `AFSecurityPolicy` +- `AFNetworkReachabilityManager` + +## Usage + +### HTTP Request Operation Manager + +`AFHTTPRequestOperationManager` encapsulates the common patterns of communicating with a web application over HTTP, including request creation, response serialization, network reachability monitoring, and security, as well as request operation management. + +#### `GET` Request + +```objective-c +AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; +[manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { + NSLog(@"JSON: %@", responseObject); +} failure:^(AFHTTPRequestOperation *operation, NSError *error) { + NSLog(@"Error: %@", error); +}]; +``` + +#### `POST` URL-Form-Encoded Request + +```objective-c +AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; +NSDictionary *parameters = @{@"foo": @"bar"}; +[manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { + NSLog(@"JSON: %@", responseObject); +} failure:^(AFHTTPRequestOperation *operation, NSError *error) { + NSLog(@"Error: %@", error); +}]; +``` + +#### `POST` Multi-Part Request + +```objective-c +AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; +NSDictionary *parameters = @{@"foo": @"bar"}; +NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"]; +[manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id formData) { + [formData appendPartWithFileURL:filePath name:@"image" error:nil]; +} success:^(AFHTTPRequestOperation *operation, id responseObject) { + NSLog(@"Success: %@", responseObject); +} failure:^(AFHTTPRequestOperation *operation, NSError *error) { + NSLog(@"Error: %@", error); +}]; +``` + +--- + +### AFURLSessionManager + +`AFURLSessionManager` creates and manages an `NSURLSession` object based on a specified `NSURLSessionConfiguration` object, which conforms to ``, ``, ``, and ``. + +#### Creating a Download Task + +```objective-c +NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; +AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; + +NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"]; +NSURLRequest *request = [NSURLRequest requestWithURL:URL]; + +NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { + NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; + return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]]; +} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { + NSLog(@"File downloaded to: %@", filePath); +}]; +[downloadTask resume]; +``` + +#### Creating an Upload Task + +```objective-c +NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; +AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; + +NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; +NSURLRequest *request = [NSURLRequest requestWithURL:URL]; + +NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"]; +NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { + if (error) { + NSLog(@"Error: %@", error); + } else { + NSLog(@"Success: %@ %@", response, responseObject); + } +}]; +[uploadTask resume]; +``` + +#### Creating an Upload Task for a Multi-Part Request, with Progress + +```objective-c +NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id formData) { + [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil]; + } error:nil]; + +AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; +NSProgress *progress = nil; + +NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { + if (error) { + NSLog(@"Error: %@", error); + } else { + NSLog(@"%@ %@", response, responseObject); + } +}]; + +[uploadTask resume]; +``` + +#### Creating a Data Task + +```objective-c +NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; +AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; + +NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; +NSURLRequest *request = [NSURLRequest requestWithURL:URL]; + +NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { + if (error) { + NSLog(@"Error: %@", error); + } else { + NSLog(@"%@ %@", response, responseObject); + } +}]; +[dataTask resume]; +``` + +--- + +### Request Serialization + +Request serializers create requests from URL strings, encoding parameters as either a query string or HTTP body. + +```objective-c +NSString *URLString = @"http://example.com"; +NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]}; +``` + +#### Query String Parameter Encoding + +```objective-c +[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil]; +``` + + GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3 + +#### URL Form Parameter Encoding + +```objective-c +[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters]; +``` + + POST http://example.com/ + Content-Type: application/x-www-form-urlencoded + + foo=bar&baz[]=1&baz[]=2&baz[]=3 + +#### JSON Parameter Encoding + +```objective-c +[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters]; +``` + + POST http://example.com/ + Content-Type: application/json + + {"foo": "bar", "baz": [1,2,3]} + +--- + +### Network Reachability Manager + +`AFNetworkReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces. + +* Do not use Reachability to determine if the original request should be sent. + * You should try to send it. +* You can use Reachability to determine when a request should be automatically retried. + * Although it may still fail, a Reachability notification that the connectivity is available is a good time to retry something. +* Network reachability is a useful tool for determining why a request might have failed. + * After a network request has failed, telling the user they're offline is better than giving them a more technical but accurate error, such as "request timed out." + +See also [WWDC 2012 session 706, "Networking Best Practices."](https://developer.apple.com/videos/wwdc/2012/#706). + +#### Shared Network Reachability + +```objective-c +[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { + NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); +}]; + +[[AFNetworkReachabilityManager sharedManager] startMonitoring]; +``` + +#### HTTP Manager Reachability + +```objective-c +NSURL *baseURL = [NSURL URLWithString:@"http://example.com/"]; +AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL]; + +NSOperationQueue *operationQueue = manager.operationQueue; +[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { + switch (status) { + case AFNetworkReachabilityStatusReachableViaWWAN: + case AFNetworkReachabilityStatusReachableViaWiFi: + [operationQueue setSuspended:NO]; + break; + case AFNetworkReachabilityStatusNotReachable: + default: + [operationQueue setSuspended:YES]; + break; + } +}]; + +[manager.reachabilityManager startMonitoring]; +``` + +--- + +### Security Policy + +`AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections. + +Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled. + +#### Allowing Invalid SSL Certificates + +```objective-c +AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; +manager.securityPolicy.allowInvalidCertificates = YES; // not recommended for production +``` + +--- + +### AFHTTPRequestOperation + +`AFHTTPRequestOperation` is a subclass of `AFURLConnectionOperation` for requests using the HTTP or HTTPS protocols. It encapsulates the concept of acceptable status codes and content types, which determine the success or failure of a request. + +Although `AFHTTPRequestOperationManager` is usually the best way to go about making requests, `AFHTTPRequestOperation` can be used by itself. + +#### `GET` with `AFHTTPRequestOperation` + +```objective-c +NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"]; +NSURLRequest *request = [NSURLRequest requestWithURL:URL]; +AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request]; +op.responseSerializer = [AFJSONResponseSerializer serializer]; +[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + NSLog(@"JSON: %@", responseObject); +} failure:^(AFHTTPRequestOperation *operation, NSError *error) { + NSLog(@"Error: %@", error); +}]; +[[NSOperationQueue mainQueue] addOperation:op]; +``` + +#### Batch of Operations + +```objective-c +NSMutableArray *mutableOperations = [NSMutableArray array]; +for (NSURL *fileURL in filesToUpload) { + NSURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id formData) { + [formData appendPartWithFileURL:fileURL name:@"images[]" error:nil]; + }]; + + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [mutableOperations addObject:operation]; +} + +NSArray *operations = [AFURLConnectionOperation batchOfRequestOperations:@[...] progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) { + NSLog(@"%lu of %lu complete", numberOfFinishedOperations, totalNumberOfOperations); +} completionBlock:^(NSArray *operations) { + NSLog(@"All operations in batch complete"); +}]; +[[NSOperationQueue mainQueue] addOperations:operations waitUntilFinished:NO]; +``` + +## Unit Tests + +AFNetworking includes a suite of unit tests within the Tests subdirectory. In order to run the unit tests, you must install the testing dependencies via [CocoaPods](http://cocoapods.org/): + + $ cd Tests + $ pod install + +Once testing dependencies are installed, you can execute the test suite via the 'iOS Tests' and 'OS X Tests' schemes within Xcode. + +### Running Tests from the Command Line + +Tests can also be run from the command line or within a continuous integration environment. The [`xcpretty`](https://github.com/mneorr/xcpretty) utility needs to be installed before running the tests from the command line: + + $ gem install xcpretty + +Once `xcpretty` is installed, you can execute the suite via `rake test`. + +## Credits + +AFNetworking is owned and maintained by the [Alamofire Software Foundation](http://alamofire.org). + +AFNetworking was originally created by [Scott Raymond](https://github.com/sco/) and [Mattt Thompson](https://github.com/mattt/) in the development of [Gowalla for iPhone](http://en.wikipedia.org/wiki/Gowalla). + +AFNetworking's logo was designed by [Alan Defibaugh](http://www.alandefibaugh.com/). + +And most of all, thanks to AFNetworking's [growing list of contributors](https://github.com/AFNetworking/AFNetworking/contributors). + +### Security Disclosure + +If you believe you have identified a security vulnerability with AFNetworking, you should report it as soon as possible via email to security@alamofire.org. Please do not post it to a public issue tracker. + +## License + +AFNetworking is released under the MIT license. See LICENSE for details. diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h new file mode 100644 index 0000000..3c7649b --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h @@ -0,0 +1,80 @@ +// AFNetworkActivityIndicatorManager.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + `AFNetworkActivityIndicatorManager` manages the state of the network activity indicator in the status bar. When enabled, it will listen for notifications indicating that a network request operation has started or finished, and start or stop animating the indicator accordingly. The number of active requests is incremented and decremented much like a stack or a semaphore, and the activity indicator will animate so long as that number is greater than zero. + + You should enable the shared instance of `AFNetworkActivityIndicatorManager` when your application finishes launching. In `AppDelegate application:didFinishLaunchingWithOptions:` you can do so with the following code: + + [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; + + By setting `enabled` to `YES` for `sharedManager`, the network activity indicator will show and hide automatically as requests start and finish. You should not ever need to call `incrementActivityCount` or `decrementActivityCount` yourself. + + See the Apple Human Interface Guidelines section about the Network Activity Indicator for more information: + http://developer.apple.com/library/iOS/#documentation/UserExperience/Conceptual/MobileHIG/UIElementGuidelines/UIElementGuidelines.html#//apple_ref/doc/uid/TP40006556-CH13-SW44 + */ +NS_EXTENSION_UNAVAILABLE_IOS("Use view controller based solutions where appropriate instead.") +@interface AFNetworkActivityIndicatorManager : NSObject + +/** + A Boolean value indicating whether the manager is enabled. + + If YES, the manager will change status bar network activity indicator according to network operation notifications it receives. The default value is NO. + */ +@property (nonatomic, assign, getter = isEnabled) BOOL enabled; + +/** + A Boolean value indicating whether the network activity indicator is currently displayed in the status bar. + */ +@property (readonly, nonatomic, assign) BOOL isNetworkActivityIndicatorVisible; + +/** + Returns the shared network activity indicator manager object for the system. + + @return The systemwide network activity indicator manager. + */ ++ (instancetype)sharedManager; + +/** + Increments the number of active network requests. If this number was zero before incrementing, this will start animating the status bar network activity indicator. + */ +- (void)incrementActivityCount; + +/** + Decrements the number of active network requests. If this number becomes zero after decrementing, this will stop animating the status bar network activity indicator. + */ +- (void)decrementActivityCount; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m new file mode 100644 index 0000000..cf13180 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m @@ -0,0 +1,170 @@ +// AFNetworkActivityIndicatorManager.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFNetworkActivityIndicatorManager.h" + +#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) + +#import "AFHTTPRequestOperation.h" + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 +#import "AFURLSessionManager.h" +#endif + +static NSTimeInterval const kAFNetworkActivityIndicatorInvisibilityDelay = 0.17; + +static NSURLRequest * AFNetworkRequestFromNotification(NSNotification *notification) { + if ([[notification object] isKindOfClass:[AFURLConnectionOperation class]]) { + return [(AFURLConnectionOperation *)[notification object] request]; + } + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 + if ([[notification object] respondsToSelector:@selector(originalRequest)]) { + return [(NSURLSessionTask *)[notification object] originalRequest]; + } +#endif + + return nil; +} + +@interface AFNetworkActivityIndicatorManager () +@property (readwrite, nonatomic, assign) NSInteger activityCount; +@property (readwrite, nonatomic, strong) NSTimer *activityIndicatorVisibilityTimer; +@property (readonly, nonatomic, getter = isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible; + +- (void)updateNetworkActivityIndicatorVisibility; +- (void)updateNetworkActivityIndicatorVisibilityDelayed; +@end + +@implementation AFNetworkActivityIndicatorManager +@dynamic networkActivityIndicatorVisible; + ++ (instancetype)sharedManager { + static AFNetworkActivityIndicatorManager *_sharedManager = nil; + static dispatch_once_t oncePredicate; + dispatch_once(&oncePredicate, ^{ + _sharedManager = [[self alloc] init]; + }); + + return _sharedManager; +} + ++ (NSSet *)keyPathsForValuesAffectingIsNetworkActivityIndicatorVisible { + return [NSSet setWithObject:@"activityCount"]; +} + +- (id)init { + self = [super init]; + if (!self) { + return nil; + } + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidStart:) name:AFNetworkingOperationDidStartNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingOperationDidFinishNotification object:nil]; + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidStart:) name:AFNetworkingTaskDidResumeNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingTaskDidSuspendNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingTaskDidCompleteNotification object:nil]; +#endif + + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + [_activityIndicatorVisibilityTimer invalidate]; +} + +- (void)updateNetworkActivityIndicatorVisibilityDelayed { + if (self.enabled) { + // Delay hiding of activity indicator for a short interval, to avoid flickering + if (![self isNetworkActivityIndicatorVisible]) { + [self.activityIndicatorVisibilityTimer invalidate]; + self.activityIndicatorVisibilityTimer = [NSTimer timerWithTimeInterval:kAFNetworkActivityIndicatorInvisibilityDelay target:self selector:@selector(updateNetworkActivityIndicatorVisibility) userInfo:nil repeats:NO]; + [[NSRunLoop mainRunLoop] addTimer:self.activityIndicatorVisibilityTimer forMode:NSRunLoopCommonModes]; + } else { + [self performSelectorOnMainThread:@selector(updateNetworkActivityIndicatorVisibility) withObject:nil waitUntilDone:NO modes:@[NSRunLoopCommonModes]]; + } + } +} + +- (BOOL)isNetworkActivityIndicatorVisible { + return self.activityCount > 0; +} + +- (void)updateNetworkActivityIndicatorVisibility { + [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:[self isNetworkActivityIndicatorVisible]]; +} + +- (void)setActivityCount:(NSInteger)activityCount { + @synchronized(self) { + _activityCount = activityCount; + } + + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateNetworkActivityIndicatorVisibilityDelayed]; + }); +} + +- (void)incrementActivityCount { + [self willChangeValueForKey:@"activityCount"]; + @synchronized(self) { + _activityCount++; + } + [self didChangeValueForKey:@"activityCount"]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateNetworkActivityIndicatorVisibilityDelayed]; + }); +} + +- (void)decrementActivityCount { + [self willChangeValueForKey:@"activityCount"]; + @synchronized(self) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + _activityCount = MAX(_activityCount - 1, 0); +#pragma clang diagnostic pop + } + [self didChangeValueForKey:@"activityCount"]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateNetworkActivityIndicatorVisibilityDelayed]; + }); +} + +- (void)networkRequestDidStart:(NSNotification *)notification { + if ([AFNetworkRequestFromNotification(notification) URL]) { + [self incrementActivityCount]; + } +} + +- (void)networkRequestDidFinish:(NSNotification *)notification { + if ([AFNetworkRequestFromNotification(notification) URL]) { + [self decrementActivityCount]; + } +} + +@end + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h new file mode 100644 index 0000000..0c8f9b5 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h @@ -0,0 +1,63 @@ +// UIActivityIndicatorView+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +@class AFURLConnectionOperation; + +/** + This category adds methods to the UIKit framework's `UIActivityIndicatorView` class. The methods in this category provide support for automatically starting and stopping animation depending on the loading state of a request operation or session task. + */ +@interface UIActivityIndicatorView (AFNetworking) + +///---------------------------------- +/// @name Animating for Session Tasks +///---------------------------------- + +/** + Binds the animating state to the state of the specified task. + + @param task The task. If `nil`, automatic updating from any previously specified operation will be disabled. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setAnimatingWithStateOfTask:(nullable NSURLSessionTask *)task; +#endif + +///--------------------------------------- +/// @name Animating for Request Operations +///--------------------------------------- + +/** + Binds the animating state to the execution state of the specified operation. + + @param operation The operation. If `nil`, automatic updating from any previously specified operation will be disabled. + */ +- (void)setAnimatingWithStateOfOperation:(nullable AFURLConnectionOperation *)operation; + +@end + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m new file mode 100644 index 0000000..dd362b0 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m @@ -0,0 +1,171 @@ +// UIActivityIndicatorView+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIActivityIndicatorView+AFNetworking.h" +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFHTTPRequestOperation.h" + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +#import "AFURLSessionManager.h" +#endif + +@interface AFActivityIndicatorViewNotificationObserver : NSObject +@property (readonly, nonatomic, weak) UIActivityIndicatorView *activityIndicatorView; +- (instancetype)initWithActivityIndicatorView:(UIActivityIndicatorView *)activityIndicatorView; + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task; +#endif +- (void)setAnimatingWithStateOfOperation:(AFURLConnectionOperation *)operation; + +@end + +@implementation UIActivityIndicatorView (AFNetworking) + +- (AFActivityIndicatorViewNotificationObserver *)af_notificationObserver { + AFActivityIndicatorViewNotificationObserver *notificationObserver = objc_getAssociatedObject(self, @selector(af_notificationObserver)); + if (notificationObserver == nil) { + notificationObserver = [[AFActivityIndicatorViewNotificationObserver alloc] initWithActivityIndicatorView:self]; + objc_setAssociatedObject(self, @selector(af_notificationObserver), notificationObserver, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + return notificationObserver; +} + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task { + [[self af_notificationObserver] setAnimatingWithStateOfTask:task]; +} +#endif + +- (void)setAnimatingWithStateOfOperation:(AFURLConnectionOperation *)operation { + [[self af_notificationObserver] setAnimatingWithStateOfOperation:operation]; +} + +@end + +@implementation AFActivityIndicatorViewNotificationObserver + +- (instancetype)initWithActivityIndicatorView:(UIActivityIndicatorView *)activityIndicatorView +{ + self = [super init]; + if (self) { + _activityIndicatorView = activityIndicatorView; + } + return self; +} + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; + + if (task) { + if (task.state != NSURLSessionTaskStateCompleted) { + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" +#pragma clang diagnostic ignored "-Warc-repeated-use-of-weak" + if (task.state == NSURLSessionTaskStateRunning) { + [self.activityIndicatorView startAnimating]; + } else { + [self.activityIndicatorView stopAnimating]; + } +#pragma clang diagnostic pop + + [notificationCenter addObserver:self selector:@selector(af_startAnimating) name:AFNetworkingTaskDidResumeNotification object:task]; + [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingTaskDidCompleteNotification object:task]; + [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingTaskDidSuspendNotification object:task]; + } + } +} +#endif + +#pragma mark - + +- (void)setAnimatingWithStateOfOperation:(AFURLConnectionOperation *)operation { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil]; + + if (operation) { + if (![operation isFinished]) { + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" +#pragma clang diagnostic ignored "-Warc-repeated-use-of-weak" + if ([operation isExecuting]) { + [self.activityIndicatorView startAnimating]; + } else { + [self.activityIndicatorView stopAnimating]; + } +#pragma clang diagnostic pop + + [notificationCenter addObserver:self selector:@selector(af_startAnimating) name:AFNetworkingOperationDidStartNotification object:operation]; + [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingOperationDidFinishNotification object:operation]; + } + } +} + +#pragma mark - + +- (void)af_startAnimating { + dispatch_async(dispatch_get_main_queue(), ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" + [self.activityIndicatorView startAnimating]; +#pragma clang diagnostic pop + }); +} + +- (void)af_stopAnimating { + dispatch_async(dispatch_get_main_queue(), ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" + [self.activityIndicatorView stopAnimating]; +#pragma clang diagnostic pop + }); +} + +#pragma mark - + +- (void)dealloc { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 + [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; +#endif + + [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil]; +} + +@end + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h new file mode 100644 index 0000000..97f5622 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h @@ -0,0 +1,99 @@ +// UIAlertView+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class AFURLConnectionOperation; + +/** + This category adds methods to the UIKit framework's `UIAlertView` class. The methods in this category provide support for automatically showing an alert if a session task or request operation finishes with an error. Alert title and message are filled from the corresponding `localizedDescription` & `localizedRecoverySuggestion` or `localizedFailureReason` of the error. + */ +@interface UIAlertView (AFNetworking) + +///------------------------------------- +/// @name Showing Alert for Session Task +///------------------------------------- + +/** + Shows an alert view with the error of the specified session task, if any. + + @param task The session task. + @param delegate The alert view delegate. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 ++ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task + delegate:(nullable id)delegate NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extensions."); +#endif + +/** + Shows an alert view with the error of the specified session task, if any, with a custom cancel button title and other button titles. + + @param task The session task. + @param delegate The alert view delegate. + @param cancelButtonTitle The title of the cancel button or nil if there is no cancel button. Using this argument is equivalent to setting the cancel button index to the value returned by invoking addButtonWithTitle: specifying this title. + @param otherButtonTitles The title of another button. Using this argument is equivalent to invoking addButtonWithTitle: with this title to add more buttons. Too many buttons can cause the alert view to scroll. For guidelines on the best ways to use an alert in an app, see "Temporary Views". Titles of additional buttons to add to the receiver, terminated with `nil`. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 ++ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task + delegate:(nullable id)delegate + cancelButtonTitle:(nullable NSString *)cancelButtonTitle + otherButtonTitles:(nullable NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extensions."); +#endif + +///------------------------------------------ +/// @name Showing Alert for Request Operation +///------------------------------------------ + +/** + Shows an alert view with the error of the specified request operation, if any. + + @param operation The request operation. + @param delegate The alert view delegate. + */ ++ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation + delegate:(nullable id)delegate NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extensions."); + +/** + Shows an alert view with the error of the specified request operation, if any, with a custom cancel button title and other button titles. + + @param operation The request operation. + @param delegate The alert view delegate. + @param cancelButtonTitle The title of the cancel button or nil if there is no cancel button. Using this argument is equivalent to setting the cancel button index to the value returned by invoking addButtonWithTitle: specifying this title. + @param otherButtonTitles The title of another button. Using this argument is equivalent to invoking addButtonWithTitle: with this title to add more buttons. Too many buttons can cause the alert view to scroll. For guidelines on the best ways to use an alert in an app, see "Temporary Views". Titles of additional buttons to add to the receiver, terminated with `nil`. + */ ++ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation + delegate:(nullable id)delegate + cancelButtonTitle:(nullable NSString *)cancelButtonTitle + otherButtonTitles:(nullable NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extensions."); + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m new file mode 100644 index 0000000..0d1e9e7 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m @@ -0,0 +1,141 @@ +// UIAlertView+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIAlertView+AFNetworking.h" + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFURLConnectionOperation.h" + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +#import "AFURLSessionManager.h" +#endif + +static void AFGetAlertViewTitleAndMessageFromError(NSError *error, NSString * __autoreleasing *title, NSString * __autoreleasing *message) { + if (error.localizedDescription && (error.localizedRecoverySuggestion || error.localizedFailureReason)) { + *title = error.localizedDescription; + + if (error.localizedRecoverySuggestion) { + *message = error.localizedRecoverySuggestion; + } else { + *message = error.localizedFailureReason; + } + } else if (error.localizedDescription) { + *title = NSLocalizedStringFromTable(@"Error", @"AFNetworking", @"Fallback Error Description"); + *message = error.localizedDescription; + } else { + *title = NSLocalizedStringFromTable(@"Error", @"AFNetworking", @"Fallback Error Description"); + *message = [NSString stringWithFormat:NSLocalizedStringFromTable(@"%@ Error: %ld", @"AFNetworking", @"Fallback Error Failure Reason Format"), error.domain, (long)error.code]; + } +} + +@implementation UIAlertView (AFNetworking) + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 ++ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task + delegate:(id)delegate +{ + [self showAlertViewForTaskWithErrorOnCompletion:task delegate:delegate cancelButtonTitle:NSLocalizedStringFromTable(@"Dismiss", @"AFNetworking", @"UIAlertView Cancel Button Title") otherButtonTitles:nil, nil]; +} + ++ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task + delegate:(id)delegate + cancelButtonTitle:(NSString *)cancelButtonTitle + otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION +{ + NSMutableArray *mutableOtherTitles = [NSMutableArray array]; + va_list otherButtonTitleList; + va_start(otherButtonTitleList, otherButtonTitles); + { + for (NSString *otherButtonTitle = otherButtonTitles; otherButtonTitle != nil; otherButtonTitle = va_arg(otherButtonTitleList, NSString *)) { + [mutableOtherTitles addObject:otherButtonTitle]; + } + } + va_end(otherButtonTitleList); + + __block __weak id observer = [[NSNotificationCenter defaultCenter] addObserverForName:AFNetworkingTaskDidCompleteNotification object:task queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) { + NSError *error = notification.userInfo[AFNetworkingTaskDidCompleteErrorKey]; + if (error) { + NSString *title, *message; + AFGetAlertViewTitleAndMessageFromError(error, &title, &message); + + UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:nil, nil]; + for (NSString *otherButtonTitle in mutableOtherTitles) { + [alertView addButtonWithTitle:otherButtonTitle]; + } + [alertView setTitle:title]; + [alertView setMessage:message]; + [alertView show]; + } + + [[NSNotificationCenter defaultCenter] removeObserver:observer]; + }]; +} +#endif + +#pragma mark - + ++ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation + delegate:(id)delegate +{ + [self showAlertViewForRequestOperationWithErrorOnCompletion:operation delegate:delegate cancelButtonTitle:NSLocalizedStringFromTable(@"Dismiss", @"AFNetworking", @"UIAlertView Cancel Button Title") otherButtonTitles:nil, nil]; +} + ++ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation + delegate:(id)delegate + cancelButtonTitle:(NSString *)cancelButtonTitle + otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION +{ + NSMutableArray *mutableOtherTitles = [NSMutableArray array]; + va_list otherButtonTitleList; + va_start(otherButtonTitleList, otherButtonTitles); + { + for (NSString *otherButtonTitle = otherButtonTitles; otherButtonTitle != nil; otherButtonTitle = va_arg(otherButtonTitleList, NSString *)) { + [mutableOtherTitles addObject:otherButtonTitle]; + } + } + va_end(otherButtonTitleList); + + __block __weak id observer = [[NSNotificationCenter defaultCenter] addObserverForName:AFNetworkingOperationDidFinishNotification object:operation queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) { + + if (notification.object && [notification.object isKindOfClass:[AFURLConnectionOperation class]]) { + NSError *error = [(AFURLConnectionOperation *)notification.object error]; + if (error) { + NSString *title, *message; + AFGetAlertViewTitleAndMessageFromError(error, &title, &message); + + UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:nil, nil]; + for (NSString *otherButtonTitle in mutableOtherTitles) { + [alertView addButtonWithTitle:otherButtonTitle]; + } + [alertView setTitle:title]; + [alertView setMessage:message]; + [alertView show]; + } + } + + [[NSNotificationCenter defaultCenter] removeObserver:observer]; + }]; +} + +@end + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h new file mode 100644 index 0000000..327bdab --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h @@ -0,0 +1,184 @@ +// UIButton+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol AFURLResponseSerialization, AFImageCache; + +/** + This category adds methods to the UIKit framework's `UIButton` class. The methods in this category provide support for loading remote images and background images asynchronously from a URL. + + @warning Compound values for control `state` (such as `UIControlStateHighlighted | UIControlStateDisabled`) are unsupported. + */ +@interface UIButton (AFNetworking) + +///---------------------------- +/// @name Accessing Image Cache +///---------------------------- + +/** + The image cache used to improve image loading performance on scroll views. By default, `UIButton` will use the `sharedImageCache` of `UIImageView`. + */ ++ (id )sharedImageCache; + +/** + Set the cache used for image loading. + + @param imageCache The image cache. + */ ++ (void)setSharedImageCache:(id )imageCache; + +///------------------------------------ +/// @name Accessing Response Serializer +///------------------------------------ + +/** + The response serializer used to create an image representation from the server response and response data. By default, this is an instance of `AFImageResponseSerializer`. + + @discussion Subclasses of `AFImageResponseSerializer` could be used to perform post-processing, such as color correction, face detection, or other effects. See https://github.com/AFNetworking/AFCoreImageSerializer + */ +@property (nonatomic, strong) id imageResponseSerializer; + +///-------------------- +/// @name Setting Image +///-------------------- + +/** + Asynchronously downloads an image from the specified URL, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + @param state The control state. + @param url The URL used for the image request. + */ +- (void)setImageForState:(UIControlState)state + withURL:(NSURL *)url; + +/** + Asynchronously downloads an image from the specified URL, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + @param state The control state. + @param url The URL used for the image request. + @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the button will not change its image until the image request finishes. + */ +- (void)setImageForState:(UIControlState)state + withURL:(NSURL *)url + placeholderImage:(nullable UIImage *)placeholderImage; + +/** + Asynchronously downloads an image from the specified URL request, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + If a success block is specified, it is the responsibility of the block to set the image of the button before returning. If no success block is specified, the default behavior of setting the image with `setImage:forState:` is applied. + + @param state The control state. + @param urlRequest The URL request used for the image request. + @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the button will not change its image until the image request finishes. + @param success A block to be executed when the image request operation finishes successfully. This block has no return value and takes two arguments: the server response and the image. If the image was returned from cache, the request and response parameters will be `nil`. + @param failure A block object to be executed when the image request operation finishes unsuccessfully, or that finishes successfully. This block has no return value and takes a single argument: the error that occurred. + */ +- (void)setImageForState:(UIControlState)state + withURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(nullable UIImage *)placeholderImage + success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success + failure:(nullable void (^)(NSError *error))failure; + + +///------------------------------- +/// @name Setting Background Image +///------------------------------- + +/** + Asynchronously downloads an image from the specified URL, and sets it as the background image for the specified state once the request is finished. Any previous background image request for the receiver will be cancelled. + + If the background image is cached locally, the background image is set immediately, otherwise the specified placeholder background image will be set immediately, and then the remote background image will be set once the request is finished. + + @param state The control state. + @param url The URL used for the background image request. + */ +- (void)setBackgroundImageForState:(UIControlState)state + withURL:(NSURL *)url; + +/** + Asynchronously downloads an image from the specified URL, and sets it as the background image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + @param state The control state. + @param url The URL used for the background image request. + @param placeholderImage The background image to be set initially, until the background image request finishes. If `nil`, the button will not change its background image until the background image request finishes. + */ +- (void)setBackgroundImageForState:(UIControlState)state + withURL:(NSURL *)url + placeholderImage:(nullable UIImage *)placeholderImage; + +/** + Asynchronously downloads an image from the specified URL request, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + If a success block is specified, it is the responsibility of the block to set the image of the button before returning. If no success block is specified, the default behavior of setting the image with `setBackgroundImage:forState:` is applied. + + @param state The control state. + @param urlRequest The URL request used for the image request. + @param placeholderImage The background image to be set initially, until the background image request finishes. If `nil`, the button will not change its background image until the background image request finishes. + */ +- (void)setBackgroundImageForState:(UIControlState)state + withURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(nullable UIImage *)placeholderImage + success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success + failure:(nullable void (^)(NSError *error))failure; + + +///------------------------------ +/// @name Canceling Image Loading +///------------------------------ + +/** + Cancels any executing image operation for the specified control state of the receiver, if one exists. + + @param state The control state. + */ +- (void)cancelImageRequestOperationForState:(UIControlState)state; + +/** + Cancels any executing background image operation for the specified control state of the receiver, if one exists. + + @param state The control state. + */ +- (void)cancelBackgroundImageRequestOperationForState:(UIControlState)state; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m new file mode 100644 index 0000000..f34631e --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m @@ -0,0 +1,293 @@ +// UIButton+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIButton+AFNetworking.h" + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFURLResponseSerialization.h" +#import "AFHTTPRequestOperation.h" + +#import "UIImageView+AFNetworking.h" + +@interface UIButton (_AFNetworking) +@end + +@implementation UIButton (_AFNetworking) + ++ (NSOperationQueue *)af_sharedImageRequestOperationQueue { + static NSOperationQueue *_af_sharedImageRequestOperationQueue = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_sharedImageRequestOperationQueue = [[NSOperationQueue alloc] init]; + _af_sharedImageRequestOperationQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount; + }); + + return _af_sharedImageRequestOperationQueue; +} + +#pragma mark - + +static char AFImageRequestOperationNormal; +static char AFImageRequestOperationHighlighted; +static char AFImageRequestOperationSelected; +static char AFImageRequestOperationDisabled; + +static const char * af_imageRequestOperationKeyForState(UIControlState state) { + switch (state) { + case UIControlStateHighlighted: + return &AFImageRequestOperationHighlighted; + case UIControlStateSelected: + return &AFImageRequestOperationSelected; + case UIControlStateDisabled: + return &AFImageRequestOperationDisabled; + case UIControlStateNormal: + default: + return &AFImageRequestOperationNormal; + } +} + +- (AFHTTPRequestOperation *)af_imageRequestOperationForState:(UIControlState)state { + return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, af_imageRequestOperationKeyForState(state)); +} + +- (void)af_setImageRequestOperation:(AFHTTPRequestOperation *)imageRequestOperation + forState:(UIControlState)state +{ + objc_setAssociatedObject(self, af_imageRequestOperationKeyForState(state), imageRequestOperation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +static char AFBackgroundImageRequestOperationNormal; +static char AFBackgroundImageRequestOperationHighlighted; +static char AFBackgroundImageRequestOperationSelected; +static char AFBackgroundImageRequestOperationDisabled; + +static const char * af_backgroundImageRequestOperationKeyForState(UIControlState state) { + switch (state) { + case UIControlStateHighlighted: + return &AFBackgroundImageRequestOperationHighlighted; + case UIControlStateSelected: + return &AFBackgroundImageRequestOperationSelected; + case UIControlStateDisabled: + return &AFBackgroundImageRequestOperationDisabled; + case UIControlStateNormal: + default: + return &AFBackgroundImageRequestOperationNormal; + } +} + +- (AFHTTPRequestOperation *)af_backgroundImageRequestOperationForState:(UIControlState)state { + return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, af_backgroundImageRequestOperationKeyForState(state)); +} + +- (void)af_setBackgroundImageRequestOperation:(AFHTTPRequestOperation *)imageRequestOperation + forState:(UIControlState)state +{ + objc_setAssociatedObject(self, af_backgroundImageRequestOperationKeyForState(state), imageRequestOperation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end + +#pragma mark - + +@implementation UIButton (AFNetworking) + ++ (id )sharedImageCache { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(sharedImageCache)) ?: [UIImageView sharedImageCache]; +#pragma clang diagnostic pop +} + ++ (void)setSharedImageCache:(id )imageCache { + objc_setAssociatedObject(self, @selector(sharedImageCache), imageCache, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (id )imageResponseSerializer { + static id _af_defaultImageResponseSerializer = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_defaultImageResponseSerializer = [AFImageResponseSerializer serializer]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(imageResponseSerializer)) ?: _af_defaultImageResponseSerializer; +#pragma clang diagnostic pop +} + +- (void)setImageResponseSerializer:(id )serializer { + objc_setAssociatedObject(self, @selector(imageResponseSerializer), serializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (void)setImageForState:(UIControlState)state + withURL:(NSURL *)url +{ + [self setImageForState:state withURL:url placeholderImage:nil]; +} + +- (void)setImageForState:(UIControlState)state + withURL:(NSURL *)url + placeholderImage:(UIImage *)placeholderImage +{ + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; + + [self setImageForState:state withURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; +} + +- (void)setImageForState:(UIControlState)state + withURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(UIImage *)placeholderImage + success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success + failure:(void (^)(NSError *error))failure +{ + [self cancelImageRequestOperationForState:state]; + + UIImage *cachedImage = [[[self class] sharedImageCache] cachedImageForRequest:urlRequest]; + if (cachedImage) { + if (success) { + success(nil, nil, cachedImage); + } else { + [self setImage:cachedImage forState:state]; + } + + [self af_setImageRequestOperation:nil forState:state]; + } else { + if (placeholderImage) { + [self setImage:placeholderImage forState:state]; + } + + __weak __typeof(self)weakSelf = self; + AFHTTPRequestOperation *imageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; + imageRequestOperation.responseSerializer = self.imageResponseSerializer; + [imageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([[urlRequest URL] isEqual:[operation.request URL]]) { + if (success) { + success(operation.request, operation.response, responseObject); + } else if (responseObject) { + [strongSelf setImage:responseObject forState:state]; + } + } + [[[strongSelf class] sharedImageCache] cacheImage:responseObject forRequest:urlRequest]; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + if ([[urlRequest URL] isEqual:[operation.request URL]]) { + if (failure) { + failure(error); + } + } + }]; + + [self af_setImageRequestOperation:imageRequestOperation forState:state]; + [[[self class] af_sharedImageRequestOperationQueue] addOperation:imageRequestOperation]; + } +} + +#pragma mark - + +- (void)setBackgroundImageForState:(UIControlState)state + withURL:(NSURL *)url +{ + [self setBackgroundImageForState:state withURL:url placeholderImage:nil]; +} + +- (void)setBackgroundImageForState:(UIControlState)state + withURL:(NSURL *)url + placeholderImage:(UIImage *)placeholderImage +{ + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; + + [self setBackgroundImageForState:state withURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; +} + +- (void)setBackgroundImageForState:(UIControlState)state + withURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(UIImage *)placeholderImage + success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success + failure:(void (^)(NSError *error))failure +{ + [self cancelBackgroundImageRequestOperationForState:state]; + + UIImage *cachedImage = [[[self class] sharedImageCache] cachedImageForRequest:urlRequest]; + if (cachedImage) { + if (success) { + success(nil, nil, cachedImage); + } else { + [self setBackgroundImage:cachedImage forState:state]; + } + + [self af_setBackgroundImageRequestOperation:nil forState:state]; + } else { + if (placeholderImage) { + [self setBackgroundImage:placeholderImage forState:state]; + } + + __weak __typeof(self)weakSelf = self; + AFHTTPRequestOperation *backgroundImageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; + backgroundImageRequestOperation.responseSerializer = self.imageResponseSerializer; + [backgroundImageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([[urlRequest URL] isEqual:[operation.request URL]]) { + if (success) { + success(operation.request, operation.response, responseObject); + } else if (responseObject) { + [strongSelf setBackgroundImage:responseObject forState:state]; + } + } + [[[strongSelf class] sharedImageCache] cacheImage:responseObject forRequest:urlRequest]; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + if ([[urlRequest URL] isEqual:[operation.request URL]]) { + if (failure) { + failure(error); + } + } + }]; + + [self af_setBackgroundImageRequestOperation:backgroundImageRequestOperation forState:state]; + [[[self class] af_sharedImageRequestOperationQueue] addOperation:backgroundImageRequestOperation]; + } +} + +#pragma mark - + +- (void)cancelImageRequestOperationForState:(UIControlState)state { + [[self af_imageRequestOperationForState:state] cancel]; + [self af_setImageRequestOperation:nil forState:state]; +} + +- (void)cancelBackgroundImageRequestOperationForState:(UIControlState)state { + [[self af_backgroundImageRequestOperationForState:state] cancel]; + [self af_setBackgroundImageRequestOperation:nil forState:state]; +} + +@end + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h new file mode 100644 index 0000000..3292920 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h @@ -0,0 +1,35 @@ +// +// UIImage+AFNetworking.h +// +// +// Created by Paulo Ferreira on 08/07/15. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +@interface UIImage (AFNetworking) + ++ (UIImage*) safeImageWithData:(NSData*)data; + +@end + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h new file mode 100644 index 0000000..e33d8a0 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h @@ -0,0 +1,146 @@ +// UIImageView+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol AFURLResponseSerialization, AFImageCache; + +/** + This category adds methods to the UIKit framework's `UIImageView` class. The methods in this category provide support for loading remote images asynchronously from a URL. + */ +@interface UIImageView (AFNetworking) + +///---------------------------- +/// @name Accessing Image Cache +///---------------------------- + +/** + The image cache used to improve image loading performance on scroll views. By default, this is an `NSCache` subclass conforming to the `AFImageCache` protocol, which listens for notification warnings and evicts objects accordingly. +*/ ++ (id )sharedImageCache; + +/** + Set the cache used for image loading. + + @param imageCache The image cache. + */ ++ (void)setSharedImageCache:(id )imageCache; + +///------------------------------------ +/// @name Accessing Response Serializer +///------------------------------------ + +/** + The response serializer used to create an image representation from the server response and response data. By default, this is an instance of `AFImageResponseSerializer`. + + @discussion Subclasses of `AFImageResponseSerializer` could be used to perform post-processing, such as color correction, face detection, or other effects. See https://github.com/AFNetworking/AFCoreImageSerializer + */ +@property (nonatomic, strong) id imageResponseSerializer; + +///-------------------- +/// @name Setting Image +///-------------------- + +/** + Asynchronously downloads an image from the specified URL, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + By default, URL requests have a `Accept` header field value of "image / *", a cache policy of `NSURLCacheStorageAllowed` and a timeout interval of 30 seconds, and are set not handle cookies. To configure URL requests differently, use `setImageWithURLRequest:placeholderImage:success:failure:` + + @param url The URL used for the image request. + */ +- (void)setImageWithURL:(NSURL *)url; + +/** + Asynchronously downloads an image from the specified URL, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + By default, URL requests have a `Accept` header field value of "image / *", a cache policy of `NSURLCacheStorageAllowed` and a timeout interval of 30 seconds, and are set not handle cookies. To configure URL requests differently, use `setImageWithURLRequest:placeholderImage:success:failure:` + + @param url The URL used for the image request. + @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the image view will not change its image until the image request finishes. + */ +- (void)setImageWithURL:(NSURL *)url + placeholderImage:(nullable UIImage *)placeholderImage; + +/** + Asynchronously downloads an image from the specified URL request, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + If a success block is specified, it is the responsibility of the block to set the image of the image view before returning. If no success block is specified, the default behavior of setting the image with `self.image = image` is applied. + + @param urlRequest The URL request used for the image request. + @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the image view will not change its image until the image request finishes. + @param success A block to be executed when the image request operation finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the image created from the response data of request. If the image was returned from cache, the response parameter will be `nil`. + @param failure A block object to be executed when the image request operation finishes unsuccessfully, or that finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the error object describing the network or parsing error that occurred. + */ +- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(nullable UIImage *)placeholderImage + success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success + failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure; + +/** + Cancels any executing image operation for the receiver, if one exists. + */ +- (void)cancelImageRequestOperation; + +@end + +#pragma mark - + +/** + The `AFImageCache` protocol is adopted by an object used to cache images loaded by the AFNetworking category on `UIImageView`. + */ +@protocol AFImageCache + +/** + Returns a cached image for the specified request, if available. + + @param request The image request. + + @return The cached image. + */ +- (nullable UIImage *)cachedImageForRequest:(NSURLRequest *)request; + +/** + Caches a particular image for the specified request. + + @param image The image to cache. + @param request The request to be used as a cache key. + */ +- (void)cacheImage:(UIImage *)image + forRequest:(NSURLRequest *)request; +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m new file mode 100644 index 0000000..c1b0e1b --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m @@ -0,0 +1,215 @@ +// UIImageView+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIImageView+AFNetworking.h" + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFHTTPRequestOperation.h" + +@interface AFImageCache : NSCache +@end + +#pragma mark - + +@interface UIImageView (_AFNetworking) +@property (readwrite, nonatomic, strong, setter = af_setImageRequestOperation:) AFHTTPRequestOperation *af_imageRequestOperation; +@end + +@implementation UIImageView (_AFNetworking) + ++ (NSOperationQueue *)af_sharedImageRequestOperationQueue { + static NSOperationQueue *_af_sharedImageRequestOperationQueue = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_sharedImageRequestOperationQueue = [[NSOperationQueue alloc] init]; + _af_sharedImageRequestOperationQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount; + }); + + return _af_sharedImageRequestOperationQueue; +} + +- (AFHTTPRequestOperation *)af_imageRequestOperation { + return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, @selector(af_imageRequestOperation)); +} + +- (void)af_setImageRequestOperation:(AFHTTPRequestOperation *)imageRequestOperation { + objc_setAssociatedObject(self, @selector(af_imageRequestOperation), imageRequestOperation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end + +#pragma mark - + +@implementation UIImageView (AFNetworking) +@dynamic imageResponseSerializer; + ++ (id )sharedImageCache { + static AFImageCache *_af_defaultImageCache = nil; + static dispatch_once_t oncePredicate; + dispatch_once(&oncePredicate, ^{ + _af_defaultImageCache = [[AFImageCache alloc] init]; + + [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidReceiveMemoryWarningNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * __unused notification) { + [_af_defaultImageCache removeAllObjects]; + }]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(sharedImageCache)) ?: _af_defaultImageCache; +#pragma clang diagnostic pop +} + ++ (void)setSharedImageCache:(id )imageCache { + objc_setAssociatedObject(self, @selector(sharedImageCache), imageCache, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (id )imageResponseSerializer { + static id _af_defaultImageResponseSerializer = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_defaultImageResponseSerializer = [AFImageResponseSerializer serializer]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(imageResponseSerializer)) ?: _af_defaultImageResponseSerializer; +#pragma clang diagnostic pop +} + +- (void)setImageResponseSerializer:(id )serializer { + objc_setAssociatedObject(self, @selector(imageResponseSerializer), serializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (void)setImageWithURL:(NSURL *)url { + [self setImageWithURL:url placeholderImage:nil]; +} + +- (void)setImageWithURL:(NSURL *)url + placeholderImage:(UIImage *)placeholderImage +{ + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; + + [self setImageWithURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; +} + +- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(UIImage *)placeholderImage + success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success + failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure +{ + [self cancelImageRequestOperation]; + + UIImage *cachedImage = [[[self class] sharedImageCache] cachedImageForRequest:urlRequest]; + if (cachedImage) { + if (success) { + success(urlRequest, nil, cachedImage); + } else { + self.image = cachedImage; + } + + self.af_imageRequestOperation = nil; + } else { + if (placeholderImage) { + self.image = placeholderImage; + } + + __weak __typeof(self)weakSelf = self; + self.af_imageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; + self.af_imageRequestOperation.responseSerializer = self.imageResponseSerializer; + [self.af_imageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([[urlRequest URL] isEqual:[strongSelf.af_imageRequestOperation.request URL]]) { + if (success) { + success(urlRequest, operation.response, responseObject); + } else if (responseObject) { + strongSelf.image = responseObject; + } + + if (operation == strongSelf.af_imageRequestOperation){ + strongSelf.af_imageRequestOperation = nil; + } + } + + [[[strongSelf class] sharedImageCache] cacheImage:responseObject forRequest:urlRequest]; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([[urlRequest URL] isEqual:[strongSelf.af_imageRequestOperation.request URL]]) { + if (failure) { + failure(urlRequest, operation.response, error); + } + + if (operation == strongSelf.af_imageRequestOperation){ + strongSelf.af_imageRequestOperation = nil; + } + } + }]; + + [[[self class] af_sharedImageRequestOperationQueue] addOperation:self.af_imageRequestOperation]; + } +} + +- (void)cancelImageRequestOperation { + [self.af_imageRequestOperation cancel]; + self.af_imageRequestOperation = nil; +} + +@end + +#pragma mark - + +static inline NSString * AFImageCacheKeyFromURLRequest(NSURLRequest *request) { + return [[request URL] absoluteString]; +} + +@implementation AFImageCache + +- (UIImage *)cachedImageForRequest:(NSURLRequest *)request { + switch ([request cachePolicy]) { + case NSURLRequestReloadIgnoringCacheData: + case NSURLRequestReloadIgnoringLocalAndRemoteCacheData: + return nil; + default: + break; + } + + return [self objectForKey:AFImageCacheKeyFromURLRequest(request)]; +} + +- (void)cacheImage:(UIImage *)image + forRequest:(NSURLRequest *)request +{ + if (image && request) { + [self setObject:image forKey:AFImageCacheKeyFromURLRequest(request)]; + } +} + +@end + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h new file mode 100644 index 0000000..49850ed --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h @@ -0,0 +1,39 @@ +// UIKit+AFNetworking.h +// +// Copyright (c) 2013 AFNetworking (http://afnetworking.com/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if TARGET_OS_IOS +#import + +#ifndef _UIKIT_AFNETWORKING_ + #define _UIKIT_AFNETWORKING_ + + #import "AFNetworkActivityIndicatorManager.h" + + #import "UIActivityIndicatorView+AFNetworking.h" + #import "UIAlertView+AFNetworking.h" + #import "UIButton+AFNetworking.h" + #import "UIImageView+AFNetworking.h" + #import "UIProgressView+AFNetworking.h" + #import "UIRefreshControl+AFNetworking.h" + #import "UIWebView+AFNetworking.h" +#endif /* _UIKIT_AFNETWORKING_ */ +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h new file mode 100644 index 0000000..5c00d6d --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h @@ -0,0 +1,91 @@ +// UIProgressView+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class AFURLConnectionOperation; + +/** + This category adds methods to the UIKit framework's `UIProgressView` class. The methods in this category provide support for binding the progress to the upload and download progress of a session task or request operation. + */ +@interface UIProgressView (AFNetworking) + +///------------------------------------ +/// @name Setting Session Task Progress +///------------------------------------ + +/** + Binds the progress to the upload progress of the specified session task. + + @param task The session task. + @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setProgressWithUploadProgressOfTask:(NSURLSessionUploadTask *)task + animated:(BOOL)animated; +#endif + +/** + Binds the progress to the download progress of the specified session task. + + @param task The session task. + @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)task + animated:(BOOL)animated; +#endif + +///------------------------------------ +/// @name Setting Session Task Progress +///------------------------------------ + +/** + Binds the progress to the upload progress of the specified request operation. + + @param operation The request operation. + @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. + */ +- (void)setProgressWithUploadProgressOfOperation:(AFURLConnectionOperation *)operation + animated:(BOOL)animated; + +/** + Binds the progress to the download progress of the specified request operation. + + @param operation The request operation. + @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. + */ +- (void)setProgressWithDownloadProgressOfOperation:(AFURLConnectionOperation *)operation + animated:(BOOL)animated; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m new file mode 100644 index 0000000..ad2c280 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m @@ -0,0 +1,182 @@ +// UIProgressView+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIProgressView+AFNetworking.h" + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFURLConnectionOperation.h" + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +#import "AFURLSessionManager.h" +#endif + +static void * AFTaskCountOfBytesSentContext = &AFTaskCountOfBytesSentContext; +static void * AFTaskCountOfBytesReceivedContext = &AFTaskCountOfBytesReceivedContext; + +@interface AFURLConnectionOperation (_UIProgressView) +@property (readwrite, nonatomic, copy) void (^uploadProgress)(NSUInteger bytes, long long totalBytes, long long totalBytesExpected); +@property (readwrite, nonatomic, assign, setter = af_setUploadProgressAnimated:) BOOL af_uploadProgressAnimated; + +@property (readwrite, nonatomic, copy) void (^downloadProgress)(NSUInteger bytes, long long totalBytes, long long totalBytesExpected); +@property (readwrite, nonatomic, assign, setter = af_setDownloadProgressAnimated:) BOOL af_downloadProgressAnimated; +@end + +@implementation AFURLConnectionOperation (_UIProgressView) +@dynamic uploadProgress; // Implemented in AFURLConnectionOperation +@dynamic af_uploadProgressAnimated; + +@dynamic downloadProgress; // Implemented in AFURLConnectionOperation +@dynamic af_downloadProgressAnimated; +@end + +#pragma mark - + +@implementation UIProgressView (AFNetworking) + +- (BOOL)af_uploadProgressAnimated { + return [(NSNumber *)objc_getAssociatedObject(self, @selector(af_uploadProgressAnimated)) boolValue]; +} + +- (void)af_setUploadProgressAnimated:(BOOL)animated { + objc_setAssociatedObject(self, @selector(af_uploadProgressAnimated), @(animated), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (BOOL)af_downloadProgressAnimated { + return [(NSNumber *)objc_getAssociatedObject(self, @selector(af_downloadProgressAnimated)) boolValue]; +} + +- (void)af_setDownloadProgressAnimated:(BOOL)animated { + objc_setAssociatedObject(self, @selector(af_downloadProgressAnimated), @(animated), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setProgressWithUploadProgressOfTask:(NSURLSessionUploadTask *)task + animated:(BOOL)animated +{ + [task addObserver:self forKeyPath:@"state" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesSentContext]; + [task addObserver:self forKeyPath:@"countOfBytesSent" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesSentContext]; + + [self af_setUploadProgressAnimated:animated]; +} + +- (void)setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)task + animated:(BOOL)animated +{ + [task addObserver:self forKeyPath:@"state" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesReceivedContext]; + [task addObserver:self forKeyPath:@"countOfBytesReceived" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesReceivedContext]; + + [self af_setDownloadProgressAnimated:animated]; +} +#endif + +#pragma mark - + +- (void)setProgressWithUploadProgressOfOperation:(AFURLConnectionOperation *)operation + animated:(BOOL)animated +{ + __weak __typeof(self)weakSelf = self; + void (^original)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) = [operation.uploadProgress copy]; + [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { + if (original) { + original(bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + if (totalBytesExpectedToWrite > 0) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + [strongSelf setProgress:(totalBytesWritten / (totalBytesExpectedToWrite * 1.0f)) animated:animated]; + } + }); + }]; +} + +- (void)setProgressWithDownloadProgressOfOperation:(AFURLConnectionOperation *)operation + animated:(BOOL)animated +{ + __weak __typeof(self)weakSelf = self; + void (^original)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) = [operation.downloadProgress copy]; + [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { + if (original) { + original(bytesRead, totalBytesRead, totalBytesExpectedToRead); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + if (totalBytesExpectedToRead > 0) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + [strongSelf setProgress:(totalBytesRead / (totalBytesExpectedToRead * 1.0f)) animated:animated]; + } + }); + }]; +} + +#pragma mark - NSKeyValueObserving + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(id)object + change:(__unused NSDictionary *)change + context:(void *)context +{ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 + if (context == AFTaskCountOfBytesSentContext || context == AFTaskCountOfBytesReceivedContext) { + if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesSent))]) { + if ([object countOfBytesExpectedToSend] > 0) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self setProgress:[object countOfBytesSent] / ([object countOfBytesExpectedToSend] * 1.0f) animated:self.af_uploadProgressAnimated]; + }); + } + } + + if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesReceived))]) { + if ([object countOfBytesExpectedToReceive] > 0) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self setProgress:[object countOfBytesReceived] / ([object countOfBytesExpectedToReceive] * 1.0f) animated:self.af_downloadProgressAnimated]; + }); + } + } + + if ([keyPath isEqualToString:NSStringFromSelector(@selector(state))]) { + if ([(NSURLSessionTask *)object state] == NSURLSessionTaskStateCompleted) { + @try { + [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(state))]; + + if (context == AFTaskCountOfBytesSentContext) { + [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesSent))]; + } + + if (context == AFTaskCountOfBytesReceivedContext) { + [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesReceived))]; + } + } + @catch (NSException * __unused exception) {} + } + } + } +#endif +} + +@end + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h new file mode 100644 index 0000000..a65e390 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h @@ -0,0 +1,68 @@ +// UIRefreshControl+AFNetworking.m +// +// Copyright (c) 2014 AFNetworking (http://afnetworking.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class AFURLConnectionOperation; + +/** + This category adds methods to the UIKit framework's `UIRefreshControl` class. The methods in this category provide support for automatically beginning and ending refreshing depending on the loading state of a request operation or session task. + */ +@interface UIRefreshControl (AFNetworking) + +///----------------------------------- +/// @name Refreshing for Session Tasks +///----------------------------------- + +/** + Binds the refreshing state to the state of the specified task. + + @param task The task. If `nil`, automatic updating from any previously specified operation will be disabled. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task; +#endif + +///---------------------------------------- +/// @name Refreshing for Request Operations +///---------------------------------------- + +/** + Binds the refreshing state to the execution state of the specified operation. + + @param operation The operation. If `nil`, automatic updating from any previously specified operation will be disabled. + */ +- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m new file mode 100644 index 0000000..4c19245 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m @@ -0,0 +1,166 @@ +// UIRefreshControl+AFNetworking.m +// +// Copyright (c) 2014 AFNetworking (http://afnetworking.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIRefreshControl+AFNetworking.h" +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFHTTPRequestOperation.h" + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +#import "AFURLSessionManager.h" +#endif + +@interface AFRefreshControlNotificationObserver : NSObject +@property (readonly, nonatomic, weak) UIRefreshControl *refreshControl; +- (instancetype)initWithActivityRefreshControl:(UIRefreshControl *)refreshControl; + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task; +#endif +- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation; + +@end + +@implementation UIRefreshControl (AFNetworking) + +- (AFRefreshControlNotificationObserver *)af_notificationObserver { + AFRefreshControlNotificationObserver *notificationObserver = objc_getAssociatedObject(self, @selector(af_notificationObserver)); + if (notificationObserver == nil) { + notificationObserver = [[AFRefreshControlNotificationObserver alloc] initWithActivityRefreshControl:self]; + objc_setAssociatedObject(self, @selector(af_notificationObserver), notificationObserver, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + return notificationObserver; +} + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task { + [[self af_notificationObserver] setRefreshingWithStateOfTask:task]; +} +#endif + +- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation { + [[self af_notificationObserver] setRefreshingWithStateOfOperation:operation]; +} + +@end + +@implementation AFRefreshControlNotificationObserver + +- (instancetype)initWithActivityRefreshControl:(UIRefreshControl *)refreshControl +{ + self = [super init]; + if (self) { + _refreshControl = refreshControl; + } + return self; +} + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; + + if (task) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" +#pragma clang diagnostic ignored "-Warc-repeated-use-of-weak" + if (task.state == NSURLSessionTaskStateRunning) { + [self.refreshControl beginRefreshing]; + + [notificationCenter addObserver:self selector:@selector(af_beginRefreshing) name:AFNetworkingTaskDidResumeNotification object:task]; + [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingTaskDidCompleteNotification object:task]; + [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingTaskDidSuspendNotification object:task]; + } else { + [self.refreshControl endRefreshing]; + } +#pragma clang diagnostic pop + } +} +#endif + +- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil]; + + if (operation) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" +#pragma clang diagnostic ignored "-Warc-repeated-use-of-weak" + if (![operation isFinished]) { + if ([operation isExecuting]) { + [self.refreshControl beginRefreshing]; + } else { + [self.refreshControl endRefreshing]; + } + + [notificationCenter addObserver:self selector:@selector(af_beginRefreshing) name:AFNetworkingOperationDidStartNotification object:operation]; + [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingOperationDidFinishNotification object:operation]; + } +#pragma clang diagnostic pop + } +} + +#pragma mark - + +- (void)af_beginRefreshing { + dispatch_async(dispatch_get_main_queue(), ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" + [self.refreshControl beginRefreshing]; +#pragma clang diagnostic pop + }); +} + +- (void)af_endRefreshing { + dispatch_async(dispatch_get_main_queue(), ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" + [self.refreshControl endRefreshing]; +#pragma clang diagnostic pop + }); +} + +#pragma mark - + +- (void)dealloc { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 + [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; +#endif + + [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil]; +} + +@end + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h new file mode 100644 index 0000000..5d61d6a --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h @@ -0,0 +1,86 @@ +// UIWebView+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class AFHTTPRequestSerializer, AFHTTPResponseSerializer; +@protocol AFURLRequestSerialization, AFURLResponseSerialization; + +/** + This category adds methods to the UIKit framework's `UIWebView` class. The methods in this category provide increased control over the request cycle, including progress monitoring and success / failure handling. + + @discussion When using these category methods, make sure to assign `delegate` for the web view, which implements `–webView:shouldStartLoadWithRequest:navigationType:` appropriately. This allows for tapped links to be loaded through AFNetworking, and can ensure that `canGoBack` & `canGoForward` update their values correctly. + */ +@interface UIWebView (AFNetworking) + +/** + The request serializer used to serialize requests made with the `-loadRequest:...` category methods. By default, this is an instance of `AFHTTPRequestSerializer`. + */ +@property (nonatomic, strong) AFHTTPRequestSerializer * requestSerializer; + +/** + The response serializer used to serialize responses made with the `-loadRequest:...` category methods. By default, this is an instance of `AFHTTPResponseSerializer`. + */ +@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; + +/** + Asynchronously loads the specified request. + + @param request A URL request identifying the location of the content to load. This must not be `nil`. + @param progress A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread. + @param success A block object to be executed when the request finishes loading successfully. This block returns the HTML string to be loaded by the web view, and takes two arguments: the response, and the response string. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error that occurred. + */ +- (void)loadRequest:(NSURLRequest *)request + progress:(nullable void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress + success:(nullable NSString * (^)(NSHTTPURLResponse *response, NSString *HTML))success + failure:(nullable void (^)(NSError *error))failure; + +/** + Asynchronously loads the data associated with a particular request with a specified MIME type and text encoding. + + @param request A URL request identifying the location of the content to load. This must not be `nil`. + @param MIMEType The MIME type of the content. Defaults to the content type of the response if not specified. + @param textEncodingName The IANA encoding name, as in `utf-8` or `utf-16`. Defaults to the response text encoding if not specified. + @param progress A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread. + @param success A block object to be executed when the request finishes loading successfully. This block returns the data to be loaded by the web view and takes two arguments: the response, and the downloaded data. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error that occurred. + */ +- (void)loadRequest:(NSURLRequest *)request + MIMEType:(nullable NSString *)MIMEType + textEncodingName:(nullable NSString *)textEncodingName + progress:(nullable void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress + success:(nullable NSData * (^)(NSHTTPURLResponse *response, NSData *data))success + failure:(nullable void (^)(NSError *error))failure; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m new file mode 100644 index 0000000..93eacaa --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m @@ -0,0 +1,159 @@ +// UIWebView+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIWebView+AFNetworking.h" + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFHTTPRequestOperation.h" +#import "AFURLResponseSerialization.h" +#import "AFURLRequestSerialization.h" + +@interface UIWebView (_AFNetworking) +@property (readwrite, nonatomic, strong, setter = af_setHTTPRequestOperation:) AFHTTPRequestOperation *af_HTTPRequestOperation; +@end + +@implementation UIWebView (_AFNetworking) + +- (AFHTTPRequestOperation *)af_HTTPRequestOperation { + return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, @selector(af_HTTPRequestOperation)); +} + +- (void)af_setHTTPRequestOperation:(AFHTTPRequestOperation *)operation { + objc_setAssociatedObject(self, @selector(af_HTTPRequestOperation), operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end + +#pragma mark - + +@implementation UIWebView (AFNetworking) + +- (AFHTTPRequestSerializer *)requestSerializer { + static AFHTTPRequestSerializer *_af_defaultRequestSerializer = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_defaultRequestSerializer = [AFHTTPRequestSerializer serializer]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(requestSerializer)) ?: _af_defaultRequestSerializer; +#pragma clang diagnostic pop +} + +- (void)setRequestSerializer:(AFHTTPRequestSerializer *)requestSerializer { + objc_setAssociatedObject(self, @selector(requestSerializer), requestSerializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (AFHTTPResponseSerializer *)responseSerializer { + static AFHTTPResponseSerializer *_af_defaultResponseSerializer = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_defaultResponseSerializer = [AFHTTPResponseSerializer serializer]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(responseSerializer)) ?: _af_defaultResponseSerializer; +#pragma clang diagnostic pop +} + +- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { + objc_setAssociatedObject(self, @selector(responseSerializer), responseSerializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (void)loadRequest:(NSURLRequest *)request + progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress + success:(NSString * (^)(NSHTTPURLResponse *response, NSString *HTML))success + failure:(void (^)(NSError *error))failure +{ + [self loadRequest:request MIMEType:nil textEncodingName:nil progress:progress success:^NSData *(NSHTTPURLResponse *response, NSData *data) { + NSStringEncoding stringEncoding = NSUTF8StringEncoding; + if (response.textEncodingName) { + CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)response.textEncodingName); + if (encoding != kCFStringEncodingInvalidId) { + stringEncoding = CFStringConvertEncodingToNSStringEncoding(encoding); + } + } + + NSString *string = [[NSString alloc] initWithData:data encoding:stringEncoding]; + if (success) { + string = success(response, string); + } + + return [string dataUsingEncoding:stringEncoding]; + } failure:failure]; +} + +- (void)loadRequest:(NSURLRequest *)request + MIMEType:(NSString *)MIMEType + textEncodingName:(NSString *)textEncodingName + progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress + success:(NSData * (^)(NSHTTPURLResponse *response, NSData *data))success + failure:(void (^)(NSError *error))failure +{ + NSParameterAssert(request); + + if (self.af_HTTPRequestOperation) { + [self.af_HTTPRequestOperation cancel]; + } + + request = [self.requestSerializer requestBySerializingRequest:request withParameters:nil error:nil]; + + self.af_HTTPRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + self.af_HTTPRequestOperation.responseSerializer = self.responseSerializer; + + __weak __typeof(self)weakSelf = self; + [self.af_HTTPRequestOperation setDownloadProgressBlock:progress]; + [self.af_HTTPRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id __unused responseObject) { + NSData *data = success ? success(operation.response, operation.responseData) : operation.responseData; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + __strong __typeof(weakSelf) strongSelf = weakSelf; + [strongSelf loadData:data MIMEType:(MIMEType ?: [operation.response MIMEType]) textEncodingName:(textEncodingName ?: [operation.response textEncodingName]) baseURL:[operation.response URL]]; + + if ([strongSelf.delegate respondsToSelector:@selector(webViewDidFinishLoad:)]) { + [strongSelf.delegate webViewDidFinishLoad:strongSelf]; + } + +#pragma clang diagnostic pop + } failure:^(AFHTTPRequestOperation * __unused operation, NSError *error) { + if (failure) { + failure(error); + } + }]; + + [self.af_HTTPRequestOperation start]; + + if ([self.delegate respondsToSelector:@selector(webViewDidStartLoad:)]) { + [self.delegate webViewDidStartLoad:self]; + } +} + +@end + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJDictionaryCache.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJDictionaryCache.h new file mode 100755 index 0000000..8d2b015 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJDictionaryCache.h @@ -0,0 +1,34 @@ +// +// MJDictionaryCache.h +// MJExtensionExample +// +// Created by MJ Lee on 15/8/22. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import + +@interface MJDictionaryCache : NSObject +/** + * 缓存数据 + * + * @param dictId 字典标识 + * + * @return 缓存的字典 + */ ++ (id)setObject:(id)object forKey:(id)key forDictId:(const void *)dictId; + +/** + * 获得缓存的数据 + * + * @param dictId 字典标识 + */ ++ (id)objectForKey:(id)key forDictId:(const void *)dictId; + +/** + * 获得缓存的字典 + * + * @param dictId 字典标识 + */ ++ (id)dictWithDictId:(const void *)dictId; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJDictionaryCache.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJDictionaryCache.m new file mode 100755 index 0000000..e12870a --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJDictionaryCache.m @@ -0,0 +1,37 @@ +// +// MJDictionaryCache.m +// MJExtensionExample +// +// Created by MJ Lee on 15/8/22. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJDictionaryCache.h" +#import + +@implementation MJDictionaryCache ++ (id)setObject:(id)object forKey:(id)key forDictId:(const void *)dictId +{ + // 获得字典 + NSMutableDictionary *dict = [self dictWithDictId:dictId]; + if (dict == nil) { + dict = [NSMutableDictionary dictionary]; + objc_setAssociatedObject(self, dictId, dict, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + + // 存储数据 + dict[key] = object; + + return dict; +} + ++ (id)objectForKey:(id)key forDictId:(const void *)dictId +{ + return [self dictWithDictId:dictId][key]; +} + ++ (id)dictWithDictId:(const void *)dictId +{ + return objc_getAssociatedObject(self, dictId); +} +@end \ No newline at end of file diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJExtension.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJExtension.h new file mode 100755 index 0000000..ad35d09 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJExtension.h @@ -0,0 +1,15 @@ +// +// MJExtension.h +// MJExtension +// +// Created by mj on 14-1-15. +// Copyright (c) 2014年 小码哥. All rights reserved. +// 代码地址:https://github.com/CoderMJLee/MJExtension +// 代码地址:http://code4app.com/ios/%E5%AD%97%E5%85%B8-JSON-%E4%B8%8E%E6%A8%A1%E5%9E%8B%E7%9A%84%E8%BD%AC%E6%8D%A2/5339992a933bf062608b4c57 + +#import "NSObject+MJCoding.h" +#import "NSObject+MJProperty.h" +#import "NSObject+MJClass.h" +#import "NSObject+MJKeyValue.h" +#import "NSString+MJExtension.h" +#import "MJExtensionConst.h" \ No newline at end of file diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJExtensionConst.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJExtensionConst.h new file mode 100755 index 0000000..ba8893a --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJExtensionConst.h @@ -0,0 +1,88 @@ + +#ifndef __MJExtensionConst__H__ +#define __MJExtensionConst__H__ + +#import + +// 过期 +#define MJExtensionDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead) + +// 构建错误 +#define MJExtensionBuildError(clazz, msg) \ +NSError *error = [NSError errorWithDomain:msg code:250 userInfo:nil]; \ +[clazz setMj_error:error]; + +// 日志输出 +#ifdef DEBUG +#define MJExtensionLog(...) NSLog(__VA_ARGS__) +#else +#define MJExtensionLog(...) +#endif + +/** + * 断言 + * @param condition 条件 + * @param returnValue 返回值 + */ +#define MJExtensionAssertError(condition, returnValue, clazz, msg) \ +[clazz setMj_error:nil]; \ +if ((condition) == NO) { \ + MJExtensionBuildError(clazz, msg); \ + return returnValue;\ +} + +#define MJExtensionAssert2(condition, returnValue) \ +if ((condition) == NO) return returnValue; + +/** + * 断言 + * @param condition 条件 + */ +#define MJExtensionAssert(condition) MJExtensionAssert2(condition, ) + +/** + * 断言 + * @param param 参数 + * @param returnValue 返回值 + */ +#define MJExtensionAssertParamNotNil2(param, returnValue) \ +MJExtensionAssert2((param) != nil, returnValue) + +/** + * 断言 + * @param param 参数 + */ +#define MJExtensionAssertParamNotNil(param) MJExtensionAssertParamNotNil2(param, ) + +/** + * 打印所有的属性 + */ +#define MJLogAllIvars \ +-(NSString *)description \ +{ \ + return [self mj_keyValues].description; \ +} +#define MJExtensionLogAllProperties MJLogAllIvars + +/** + * 类型(属性类型) + */ +extern NSString *const MJPropertyTypeInt; +extern NSString *const MJPropertyTypeShort; +extern NSString *const MJPropertyTypeFloat; +extern NSString *const MJPropertyTypeDouble; +extern NSString *const MJPropertyTypeLong; +extern NSString *const MJPropertyTypeLongLong; +extern NSString *const MJPropertyTypeChar; +extern NSString *const MJPropertyTypeBOOL1; +extern NSString *const MJPropertyTypeBOOL2; +extern NSString *const MJPropertyTypePointer; + +extern NSString *const MJPropertyTypeIvar; +extern NSString *const MJPropertyTypeMethod; +extern NSString *const MJPropertyTypeBlock; +extern NSString *const MJPropertyTypeClass; +extern NSString *const MJPropertyTypeSEL; +extern NSString *const MJPropertyTypeId; + +#endif \ No newline at end of file diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJExtensionConst.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJExtensionConst.m new file mode 100755 index 0000000..24bcca5 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJExtensionConst.m @@ -0,0 +1,27 @@ +#ifndef __MJExtensionConst__M__ +#define __MJExtensionConst__M__ + +#import + +/** + * 成员变量类型(属性类型) + */ +NSString *const MJPropertyTypeInt = @"i"; +NSString *const MJPropertyTypeShort = @"s"; +NSString *const MJPropertyTypeFloat = @"f"; +NSString *const MJPropertyTypeDouble = @"d"; +NSString *const MJPropertyTypeLong = @"l"; +NSString *const MJPropertyTypeLongLong = @"q"; +NSString *const MJPropertyTypeChar = @"c"; +NSString *const MJPropertyTypeBOOL1 = @"c"; +NSString *const MJPropertyTypeBOOL2 = @"b"; +NSString *const MJPropertyTypePointer = @"*"; + +NSString *const MJPropertyTypeIvar = @"^{objc_ivar=}"; +NSString *const MJPropertyTypeMethod = @"^{objc_method=}"; +NSString *const MJPropertyTypeBlock = @"@?"; +NSString *const MJPropertyTypeClass = @"#"; +NSString *const MJPropertyTypeSEL = @":"; +NSString *const MJPropertyTypeId = @"@"; + +#endif \ No newline at end of file diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJFoundation.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJFoundation.h new file mode 100755 index 0000000..8a0e457 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJFoundation.h @@ -0,0 +1,13 @@ +// +// MJFoundation.h +// MJExtensionExample +// +// Created by MJ Lee on 14/7/16. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import + +@interface MJFoundation : NSObject ++ (BOOL)isClassFromFoundation:(Class)c; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJFoundation.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJFoundation.m new file mode 100755 index 0000000..23a7d8c --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJFoundation.m @@ -0,0 +1,48 @@ +// +// MJFoundation.m +// MJExtensionExample +// +// Created by MJ Lee on 14/7/16. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import "MJFoundation.h" +#import "MJExtensionConst.h" +#import + +static NSSet *foundationClasses_; + +@implementation MJFoundation + ++ (NSSet *)foundationClasses +{ + if (foundationClasses_ == nil) { + // 集合中没有NSObject,因为几乎所有的类都是继承自NSObject,具体是不是NSObject需要特殊判断 + foundationClasses_ = [NSSet setWithObjects: + [NSURL class], + [NSDate class], + [NSValue class], + [NSData class], + [NSError class], + [NSArray class], + [NSDictionary class], + [NSString class], + [NSAttributedString class], nil]; + } + return foundationClasses_; +} + ++ (BOOL)isClassFromFoundation:(Class)c +{ + if (c == [NSObject class] || c == [NSManagedObject class]) return YES; + + __block BOOL result = NO; + [[self foundationClasses] enumerateObjectsUsingBlock:^(Class foundationClass, BOOL *stop) { + if ([c isSubclassOfClass:foundationClass]) { + result = YES; + *stop = YES; + } + }]; + return result; +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJProperty.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJProperty.h new file mode 100755 index 0000000..90ac6bc --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJProperty.h @@ -0,0 +1,53 @@ +// +// MJProperty.h +// MJExtensionExample +// +// Created by MJ Lee on 15/4/17. +// Copyright (c) 2015年 小码哥. All rights reserved. +// 包装一个成员属性 + +#import +#import +#import "MJPropertyType.h" +#import "MJPropertyKey.h" + +/** + * 包装一个成员 + */ +@interface MJProperty : NSObject +/** 成员属性 */ +@property (nonatomic, assign) objc_property_t property; +/** 成员属性的名字 */ +@property (nonatomic, readonly) NSString *name; + +/** 成员属性的类型 */ +@property (nonatomic, readonly) MJPropertyType *type; +/** 成员属性来源于哪个类(可能是父类) */ +@property (nonatomic, assign) Class srcClass; + +/**** 同一个成员属性 - 父类和子类的行为可能不一致(originKey、propertyKeys、objectClassInArray) ****/ +/** 设置最原始的key */ +- (void)setOriginKey:(id)originKey forClass:(Class)c; +/** 对应着字典中的多级key(里面存放的数组,数组里面都是MJPropertyKey对象) */ +- (NSArray *)propertyKeysForClass:(Class)c; + +/** 模型数组中的模型类型 */ +- (void)setObjectClassInArray:(Class)objectClass forClass:(Class)c; +- (Class)objectClassInArrayForClass:(Class)c; +/**** 同一个成员变量 - 父类和子类的行为可能不一致(key、keys、objectClassInArray) ****/ + +/** + * 设置object的成员变量值 + */ +- (void)setValue:(id)value forObject:(id)object; +/** + * 得到object的成员属性值 + */ +- (id)valueForObject:(id)object; + +/** + * 初始化 + */ ++ (instancetype)cachedPropertyWithProperty:(objc_property_t)property; + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJProperty.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJProperty.m new file mode 100755 index 0000000..2489d9a --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJProperty.m @@ -0,0 +1,177 @@ +// +// MJProperty.m +// MJExtensionExample +// +// Created by MJ Lee on 15/4/17. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJProperty.h" +#import "MJFoundation.h" +#import "MJExtensionConst.h" +#import + +@interface MJProperty() +@property (strong, nonatomic) NSMutableDictionary *propertyKeysDict; +@property (strong, nonatomic) NSMutableDictionary *objectClassInArrayDict; +@end + +@implementation MJProperty + +#pragma mark - 懒加载 +- (NSMutableDictionary *)propertyKeysDict +{ + if (!_propertyKeysDict) { + _propertyKeysDict = [NSMutableDictionary dictionary]; + } + return _propertyKeysDict; +} + +- (NSMutableDictionary *)objectClassInArrayDict +{ + if (!_objectClassInArrayDict) { + _objectClassInArrayDict = [NSMutableDictionary dictionary]; + } + return _objectClassInArrayDict; +} + +#pragma mark - 缓存 ++ (instancetype)cachedPropertyWithProperty:(objc_property_t)property +{ + MJProperty *propertyObj = objc_getAssociatedObject(self, property); + if (propertyObj == nil) { + propertyObj = [[self alloc] init]; + propertyObj.property = property; + objc_setAssociatedObject(self, property, propertyObj, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + return propertyObj; +} + +#pragma mark - 公共方法 +- (void)setProperty:(objc_property_t)property +{ + _property = property; + + MJExtensionAssertParamNotNil(property); + + // 1.属性名 + _name = @(property_getName(property)); + + // 2.成员类型 + NSString *attrs = @(property_getAttributes(property)); + NSUInteger dotLoc = [attrs rangeOfString:@","].location; + NSString *code = nil; + NSUInteger loc = 1; + if (dotLoc == NSNotFound) { // 没有, + code = [attrs substringFromIndex:loc]; + } else { + code = [attrs substringWithRange:NSMakeRange(loc, dotLoc - loc)]; + } + _type = [MJPropertyType cachedTypeWithCode:code]; +} + +/** + * 获得成员变量的值 + */ +- (id)valueForObject:(id)object +{ + if (self.type.KVCDisabled) return [NSNull null]; + return [object valueForKey:self.name]; +} + +/** + * 设置成员变量的值 + */ +- (void)setValue:(id)value forObject:(id)object +{ + if (self.type.KVCDisabled || value == nil) return; + [object setValue:value forKey:self.name]; +} + +/** + * 通过字符串key创建对应的keys + */ +- (NSArray *)propertyKeysWithStringKey:(NSString *)stringKey +{ + if (stringKey.length == 0) return nil; + + NSMutableArray *propertyKeys = [NSMutableArray array]; + // 如果有多级映射 + NSArray *oldKeys = [stringKey componentsSeparatedByString:@"."]; + + for (NSString *oldKey in oldKeys) { + NSUInteger start = [oldKey rangeOfString:@"["].location; + if (start != NSNotFound) { // 有索引的key + NSString *prefixKey = [oldKey substringToIndex:start]; + NSString *indexKey = prefixKey; + if (prefixKey.length) { + MJPropertyKey *propertyKey = [[MJPropertyKey alloc] init]; + propertyKey.name = prefixKey; + [propertyKeys addObject:propertyKey]; + + indexKey = [oldKey stringByReplacingOccurrencesOfString:prefixKey withString:@""]; + } + + /** 解析索引 **/ + // 元素 + NSArray *cmps = [[indexKey stringByReplacingOccurrencesOfString:@"[" withString:@""] componentsSeparatedByString:@"]"]; + for (NSInteger i = 0; i + +typedef enum { + MJPropertyKeyTypeDictionary = 0, // 字典的key + MJPropertyKeyTypeArray // 数组的key +} MJPropertyKeyType; + +/** + * 属性的key + */ +@interface MJPropertyKey : NSObject +/** key的名字 */ +@property (copy, nonatomic) NSString *name; +/** key的种类,可能是@"10",可能是@"age" */ +@property (assign, nonatomic) MJPropertyKeyType type; + +/** + * 根据当前的key,也就是name,从object(字典或者数组)中取值 + */ +- (id)valueInObject:(id)object; + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJPropertyKey.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJPropertyKey.m new file mode 100755 index 0000000..438d019 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJPropertyKey.m @@ -0,0 +1,25 @@ +// +// MJPropertyKey.m +// MJExtensionExample +// +// Created by MJ Lee on 15/8/11. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJPropertyKey.h" + +@implementation MJPropertyKey + +- (id)valueInObject:(id)object +{ + if ([object isKindOfClass:[NSDictionary class]] && self.type == MJPropertyKeyTypeDictionary) { + return object[self.name]; + } else if ([object isKindOfClass:[NSArray class]] && self.type == MJPropertyKeyTypeArray) { + NSArray *array = object; + NSUInteger index = self.name.intValue; + if (index < array.count) return array[index]; + return nil; + } + return nil; +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJPropertyType.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJPropertyType.h new file mode 100755 index 0000000..8c53f27 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJPropertyType.h @@ -0,0 +1,39 @@ +// +// MJPropertyType.h +// MJExtension +// +// Created by mj on 14-1-15. +// Copyright (c) 2014年 小码哥. All rights reserved. +// 包装一种类型 + +#import + +/** + * 包装一种类型 + */ +@interface MJPropertyType : NSObject +/** 类型标识符 */ +@property (nonatomic, copy) NSString *code; + +/** 是否为id类型 */ +@property (nonatomic, readonly, getter=isIdType) BOOL idType; + +/** 是否为基本数字类型:int、float等 */ +@property (nonatomic, readonly, getter=isNumberType) BOOL numberType; + +/** 是否为BOOL类型 */ +@property (nonatomic, readonly, getter=isBoolType) BOOL boolType; + +/** 对象类型(如果是基本数据类型,此值为nil) */ +@property (nonatomic, readonly) Class typeClass; + +/** 类型是否来自于Foundation框架,比如NSString、NSArray */ +@property (nonatomic, readonly, getter = isFromFoundation) BOOL fromFoundation; +/** 类型是否不支持KVC */ +@property (nonatomic, readonly, getter = isKVCDisabled) BOOL KVCDisabled; + +/** + * 获得缓存的类型对象 + */ ++ (instancetype)cachedTypeWithCode:(NSString *)code; +@end \ No newline at end of file diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJPropertyType.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJPropertyType.m new file mode 100755 index 0000000..1fd0488 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/MJPropertyType.m @@ -0,0 +1,68 @@ +// +// MJPropertyType.m +// MJExtension +// +// Created by mj on 14-1-15. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import "MJPropertyType.h" +#import "MJExtension.h" +#import "MJFoundation.h" +#import "MJExtensionConst.h" +#import "MJDictionaryCache.h" + +@implementation MJPropertyType + ++ (instancetype)cachedTypeWithCode:(NSString *)code +{ + MJExtensionAssertParamNotNil2(code, nil); + + static const char MJCachedTypesKey = '\0'; + + MJPropertyType *type = [MJDictionaryCache objectForKey:code forDictId:&MJCachedTypesKey]; + if (type == nil) { + type = [[self alloc] init]; + type.code = code; + [MJDictionaryCache setObject:type forKey:code forDictId:&MJCachedTypesKey]; + } + return type; +} + +#pragma mark - 公共方法 +- (void)setCode:(NSString *)code +{ + _code = code; + + MJExtensionAssertParamNotNil(code); + + if ([code isEqualToString:MJPropertyTypeId]) { + _idType = YES; + } else if (code.length == 0) { + _KVCDisabled = YES; + } else if (code.length > 3 && [code hasPrefix:@"@\""]) { + // 去掉@"和",截取中间的类型名称 + _code = [code substringWithRange:NSMakeRange(2, code.length - 3)]; + _typeClass = NSClassFromString(_code); + _fromFoundation = [MJFoundation isClassFromFoundation:_typeClass]; + _numberType = [_typeClass isSubclassOfClass:[NSNumber class]]; + + } else if ([code isEqualToString:MJPropertyTypeSEL] || + [code isEqualToString:MJPropertyTypeIvar] || + [code isEqualToString:MJPropertyTypeMethod]) { + _KVCDisabled = YES; + } + + // 是否为数字类型 + NSString *lowerCode = _code.lowercaseString; + NSArray *numberTypes = @[MJPropertyTypeInt, MJPropertyTypeShort, MJPropertyTypeBOOL1, MJPropertyTypeBOOL2, MJPropertyTypeFloat, MJPropertyTypeDouble, MJPropertyTypeLong, MJPropertyTypeLongLong, MJPropertyTypeChar]; + if ([numberTypes containsObject:lowerCode]) { + _numberType = YES; + + if ([lowerCode isEqualToString:MJPropertyTypeBOOL1] + || [lowerCode isEqualToString:MJPropertyTypeBOOL2]) { + _boolType = YES; + } + } +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJClass.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJClass.h new file mode 100755 index 0000000..e4ac1c5 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJClass.h @@ -0,0 +1,90 @@ +// +// NSObject+MJClass.h +// MJExtensionExample +// +// Created by MJ Lee on 15/8/11. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import + +/** + * 遍历所有类的block(父类) + */ +typedef void (^MJClassesEnumeration)(Class c, BOOL *stop); + +/** 这个数组中的属性名才会进行字典和模型的转换 */ +typedef NSArray * (^MJAllowedPropertyNames)(); +/** 这个数组中的属性名才会进行归档 */ +typedef NSArray * (^MJAllowedCodingPropertyNames)(); + +/** 这个数组中的属性名将会被忽略:不进行字典和模型的转换 */ +typedef NSArray * (^MJIgnoredPropertyNames)(); +/** 这个数组中的属性名将会被忽略:不进行归档 */ +typedef NSArray * (^MJIgnoredCodingPropertyNames)(); + +/** + * 类相关的扩展 + */ +@interface NSObject (MJClass) +/** + * 遍历所有的类 + */ ++ (void)mj_enumerateClasses:(MJClassesEnumeration)enumeration; ++ (void)mj_enumerateAllClasses:(MJClassesEnumeration)enumeration; + +#pragma mark - 属性白名单配置 +/** + * 这个数组中的属性名才会进行字典和模型的转换 + * + * @param allowedPropertyNames 这个数组中的属性名才会进行字典和模型的转换 + */ ++ (void)mj_setupAllowedPropertyNames:(MJAllowedPropertyNames)allowedPropertyNames; + +/** + * 这个数组中的属性名才会进行字典和模型的转换 + */ ++ (NSMutableArray *)mj_totalAllowedPropertyNames; + +#pragma mark - 属性黑名单配置 +/** + * 这个数组中的属性名将会被忽略:不进行字典和模型的转换 + * + * @param ignoredPropertyNames 这个数组中的属性名将会被忽略:不进行字典和模型的转换 + */ ++ (void)mj_setupIgnoredPropertyNames:(MJIgnoredPropertyNames)ignoredPropertyNames; + +/** + * 这个数组中的属性名将会被忽略:不进行字典和模型的转换 + */ ++ (NSMutableArray *)mj_totalIgnoredPropertyNames; + +#pragma mark - 归档属性白名单配置 +/** + * 这个数组中的属性名才会进行归档 + * + * @param allowedCodingPropertyNames 这个数组中的属性名才会进行归档 + */ ++ (void)mj_setupAllowedCodingPropertyNames:(MJAllowedCodingPropertyNames)allowedCodingPropertyNames; + +/** + * 这个数组中的属性名才会进行字典和模型的转换 + */ ++ (NSMutableArray *)mj_totalAllowedCodingPropertyNames; + +#pragma mark - 归档属性黑名单配置 +/** + * 这个数组中的属性名将会被忽略:不进行归档 + * + * @param ignoredCodingPropertyNames 这个数组中的属性名将会被忽略:不进行归档 + */ ++ (void)mj_setupIgnoredCodingPropertyNames:(MJIgnoredCodingPropertyNames)ignoredCodingPropertyNames; + +/** + * 这个数组中的属性名将会被忽略:不进行归档 + */ ++ (NSMutableArray *)mj_totalIgnoredCodingPropertyNames; + +#pragma mark - 内部使用 ++ (void)mj_setupBlockReturnValue:(id (^)())block key:(const char *)key; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJClass.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJClass.m new file mode 100755 index 0000000..0320cb6 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJClass.m @@ -0,0 +1,147 @@ +// +// NSObject+MJClass.m +// MJExtensionExample +// +// Created by MJ Lee on 15/8/11. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "NSObject+MJClass.h" +#import "NSObject+MJCoding.h" +#import "NSObject+MJKeyValue.h" +#import "MJFoundation.h" +#import +#import "MJDictionaryCache.h" + +static const char MJAllowedPropertyNamesKey = '\0'; +static const char MJIgnoredPropertyNamesKey = '\0'; +static const char MJAllowedCodingPropertyNamesKey = '\0'; +static const char MJIgnoredCodingPropertyNamesKey = '\0'; + +@implementation NSObject (MJClass) + ++ (void)mj_enumerateClasses:(MJClassesEnumeration)enumeration +{ + // 1.没有block就直接返回 + if (enumeration == nil) return; + + // 2.停止遍历的标记 + BOOL stop = NO; + + // 3.当前正在遍历的类 + Class c = self; + + // 4.开始遍历每一个类 + while (c && !stop) { + // 4.1.执行操作 + enumeration(c, &stop); + + // 4.2.获得父类 + c = class_getSuperclass(c); + + if ([MJFoundation isClassFromFoundation:c]) break; + } +} + ++ (void)mj_enumerateAllClasses:(MJClassesEnumeration)enumeration +{ + // 1.没有block就直接返回 + if (enumeration == nil) return; + + // 2.停止遍历的标记 + BOOL stop = NO; + + // 3.当前正在遍历的类 + Class c = self; + + // 4.开始遍历每一个类 + while (c && !stop) { + // 4.1.执行操作 + enumeration(c, &stop); + + // 4.2.获得父类 + c = class_getSuperclass(c); + } +} + +#pragma mark - 属性黑名单配置 ++ (void)mj_setupIgnoredPropertyNames:(MJIgnoredPropertyNames)ignoredPropertyNames +{ + [self mj_setupBlockReturnValue:ignoredPropertyNames key:&MJIgnoredPropertyNamesKey]; +} + ++ (NSMutableArray *)mj_totalIgnoredPropertyNames +{ + return [self mj_totalObjectsWithSelector:@selector(mj_ignoredPropertyNames) key:&MJIgnoredPropertyNamesKey]; +} + +#pragma mark - 归档属性黑名单配置 ++ (void)mj_setupIgnoredCodingPropertyNames:(MJIgnoredCodingPropertyNames)ignoredCodingPropertyNames +{ + [self mj_setupBlockReturnValue:ignoredCodingPropertyNames key:&MJIgnoredCodingPropertyNamesKey]; +} + ++ (NSMutableArray *)mj_totalIgnoredCodingPropertyNames +{ + return [self mj_totalObjectsWithSelector:@selector(mj_ignoredCodingPropertyNames) key:&MJIgnoredCodingPropertyNamesKey]; +} + +#pragma mark - 属性白名单配置 ++ (void)mj_setupAllowedPropertyNames:(MJAllowedPropertyNames)allowedPropertyNames; +{ + [self mj_setupBlockReturnValue:allowedPropertyNames key:&MJAllowedPropertyNamesKey]; +} + ++ (NSMutableArray *)mj_totalAllowedPropertyNames +{ + return [self mj_totalObjectsWithSelector:@selector(mj_allowedPropertyNames) key:&MJAllowedPropertyNamesKey]; +} + +#pragma mark - 归档属性白名单配置 ++ (void)mj_setupAllowedCodingPropertyNames:(MJAllowedCodingPropertyNames)allowedCodingPropertyNames +{ + [self mj_setupBlockReturnValue:allowedCodingPropertyNames key:&MJAllowedCodingPropertyNamesKey]; +} + ++ (NSMutableArray *)mj_totalAllowedCodingPropertyNames +{ + return [self mj_totalObjectsWithSelector:@selector(mj_allowedCodingPropertyNames) key:&MJAllowedCodingPropertyNamesKey]; +} +#pragma mark - block和方法处理:存储block的返回值 ++ (void)mj_setupBlockReturnValue:(id (^)())block key:(const char *)key +{ + if (block) { + objc_setAssociatedObject(self, key, block(), OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } else { + objc_setAssociatedObject(self, key, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + + // 清空数据 + [[MJDictionaryCache dictWithDictId:key] removeAllObjects]; +} + ++ (NSMutableArray *)mj_totalObjectsWithSelector:(SEL)selector key:(const char *)key +{ + NSMutableArray *array = [MJDictionaryCache objectForKey:NSStringFromClass(self) forDictId:key]; + if (array) return array; + + // 创建、存储 + [MJDictionaryCache setObject:array = [NSMutableArray array] forKey:NSStringFromClass(self) forDictId:key]; + + if ([self respondsToSelector:selector]) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + NSArray *subArray = [self performSelector:selector]; +#pragma clang diagnostic pop + if (subArray) { + [array addObjectsFromArray:subArray]; + } + } + + [self mj_enumerateAllClasses:^(__unsafe_unretained Class c, BOOL *stop) { + NSArray *subArray = objc_getAssociatedObject(c, key); + [array addObjectsFromArray:subArray]; + }]; + return array; +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJCoding.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJCoding.h new file mode 100755 index 0000000..d4327dd --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJCoding.h @@ -0,0 +1,55 @@ +// +// NSObject+MJCoding.h +// MJExtension +// +// Created by mj on 14-1-15. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import +#import "MJExtensionConst.h" + +/** + * Codeing协议 + */ +@protocol MJCoding +@optional +/** + * 这个数组中的属性名才会进行归档 + */ ++ (NSArray *)mj_allowedCodingPropertyNames; +/** + * 这个数组中的属性名将会被忽略:不进行归档 + */ ++ (NSArray *)mj_ignoredCodingPropertyNames; +@end + +@interface NSObject (MJCoding) +/** + * 解码(从文件中解析对象) + */ +- (void)mj_decode:(NSCoder *)decoder; +/** + * 编码(将对象写入文件中) + */ +- (void)mj_encode:(NSCoder *)encoder; +@end + +/** + 归档的实现 + */ +#define MJCodingImplementation \ +- (id)initWithCoder:(NSCoder *)decoder \ +{ \ +if (self = [super init]) { \ +[self mj_decode:decoder]; \ +} \ +return self; \ +} \ +\ +- (void)encodeWithCoder:(NSCoder *)encoder \ +{ \ +[self mj_encode:encoder]; \ +} + +#define MJExtensionCodingImplementation MJCodingImplementation \ No newline at end of file diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJCoding.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJCoding.m new file mode 100755 index 0000000..27ae8ee --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJCoding.m @@ -0,0 +1,54 @@ +// +// NSObject+MJCoding.m +// MJExtension +// +// Created by mj on 14-1-15. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import "NSObject+MJCoding.h" +#import "NSObject+MJClass.h" +#import "NSObject+MJProperty.h" +#import "MJProperty.h" + +@implementation NSObject (MJCoding) + +- (void)mj_encode:(NSCoder *)encoder +{ + Class clazz = [self class]; + + NSArray *allowedCodingPropertyNames = [clazz mj_totalAllowedCodingPropertyNames]; + NSArray *ignoredCodingPropertyNames = [clazz mj_totalIgnoredCodingPropertyNames]; + + [clazz mj_enumerateProperties:^(MJProperty *property, BOOL *stop) { + // 检测是否被忽略 + if (allowedCodingPropertyNames.count && ![allowedCodingPropertyNames containsObject:property.name]) return; + if ([ignoredCodingPropertyNames containsObject:property.name]) return; + + id value = [property valueForObject:self]; + if (value == nil) return; + [encoder encodeObject:value forKey:property.name]; + }]; +} + +- (void)mj_decode:(NSCoder *)decoder +{ + Class clazz = [self class]; + + NSArray *allowedCodingPropertyNames = [clazz mj_totalAllowedCodingPropertyNames]; + NSArray *ignoredCodingPropertyNames = [clazz mj_totalIgnoredCodingPropertyNames]; + + [clazz mj_enumerateProperties:^(MJProperty *property, BOOL *stop) { + // 检测是否被忽略 + if (allowedCodingPropertyNames.count && ![allowedCodingPropertyNames containsObject:property.name]) return; + if ([ignoredCodingPropertyNames containsObject:property.name]) return; + + id value = [decoder decodeObjectForKey:property.name]; + if (value == nil) { // 兼容以前的MJExtension版本 + value = [decoder decodeObjectForKey:[@"_" stringByAppendingString:property.name]]; + } + if (value == nil) return; + [property setValue:value forObject:self]; + }]; +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJKeyValue.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJKeyValue.h new file mode 100755 index 0000000..e231940 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJKeyValue.h @@ -0,0 +1,225 @@ +// +// NSObject+MJKeyValue.h +// MJExtension +// +// Created by mj on 13-8-24. +// Copyright (c) 2013年 小码哥. All rights reserved. +// + +#import +#import "MJExtensionConst.h" +#import +#import "MJProperty.h" + +/** + * KeyValue协议 + */ +@protocol MJKeyValue +@optional +/** + * 只有这个数组中的属性名才允许进行字典和模型的转换 + */ ++ (NSArray *)mj_allowedPropertyNames; + +/** + * 这个数组中的属性名将会被忽略:不进行字典和模型的转换 + */ ++ (NSArray *)mj_ignoredPropertyNames; + +/** + * 将属性名换为其他key去字典中取值 + * + * @return 字典中的key是属性名,value是从字典中取值用的key + */ ++ (NSDictionary *)mj_replacedKeyFromPropertyName; + +/** + * 将属性名换为其他key去字典中取值 + * + * @return 从字典中取值用的key + */ ++ (NSString *)mj_replacedKeyFromPropertyName121:(NSString *)propertyName; + +/** + * 数组中需要转换的模型类 + * + * @return 字典中的key是数组属性名,value是数组中存放模型的Class(Class类型或者NSString类型) + */ ++ (NSDictionary *)mj_objectClassInArray; + +/** + * 旧值换新值,用于过滤字典中的值 + * + * @param oldValue 旧值 + * + * @return 新值 + */ +- (id)mj_newValueFromOldValue:(id)oldValue property:(MJProperty *)property; + +/** + * 当字典转模型完毕时调用 + */ +- (void)mj_keyValuesDidFinishConvertingToObject; + +/** + * 当模型转字典完毕时调用 + */ +- (void)mj_objectDidFinishConvertingToKeyValues; +@end + +@interface NSObject (MJKeyValue) +#pragma mark - 类方法 +/** + * 字典转模型过程中遇到的错误 + */ ++ (NSError *)mj_error; + +/** + * 模型转字典时,字典的key是否参考replacedKeyFromPropertyName等方法(父类设置了,子类也会继承下来) + */ ++ (void)mj_referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference; + +#pragma mark - 对象方法 +/** + * 将字典的键值对转成模型属性 + * @param keyValues 字典(可以是NSDictionary、NSData、NSString) + */ +- (instancetype)mj_setKeyValues:(id)keyValues; + +/** + * 将字典的键值对转成模型属性 + * @param keyValues 字典(可以是NSDictionary、NSData、NSString) + * @param context CoreData上下文 + */ +- (instancetype)mj_setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context; + +/** + * 将模型转成字典 + * @return 字典 + */ +- (NSMutableDictionary *)mj_keyValues; +- (NSMutableDictionary *)mj_keyValuesWithKeys:(NSArray *)keys; +- (NSMutableDictionary *)mj_keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys; + +/** + * 通过模型数组来创建一个字典数组 + * @param objectArray 模型数组 + * @return 字典数组 + */ ++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray; ++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys; ++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys; + +#pragma mark - 字典转模型 +/** + * 通过字典来创建一个模型 + * @param keyValues 字典(可以是NSDictionary、NSData、NSString) + * @return 新建的对象 + */ ++ (instancetype)mj_objectWithKeyValues:(id)keyValues; + +/** + * 通过字典来创建一个CoreData模型 + * @param keyValues 字典(可以是NSDictionary、NSData、NSString) + * @param context CoreData上下文 + * @return 新建的对象 + */ ++ (instancetype)mj_objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context; + +/** + * 通过plist来创建一个模型 + * @param filename 文件名(仅限于mainBundle中的文件) + * @return 新建的对象 + */ ++ (instancetype)mj_objectWithFilename:(NSString *)filename; + +/** + * 通过plist来创建一个模型 + * @param file 文件全路径 + * @return 新建的对象 + */ ++ (instancetype)mj_objectWithFile:(NSString *)file; + +#pragma mark - 字典数组转模型数组 +/** + * 通过字典数组来创建一个模型数组 + * @param keyValuesArray 字典数组(可以是NSDictionary、NSData、NSString) + * @return 模型数组 + */ ++ (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(id)keyValuesArray; + +/** + * 通过字典数组来创建一个模型数组 + * @param keyValuesArray 字典数组(可以是NSDictionary、NSData、NSString) + * @param context CoreData上下文 + * @return 模型数组 + */ ++ (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context; + +/** + * 通过plist来创建一个模型数组 + * @param filename 文件名(仅限于mainBundle中的文件) + * @return 模型数组 + */ ++ (NSMutableArray *)mj_objectArrayWithFilename:(NSString *)filename; + +/** + * 通过plist来创建一个模型数组 + * @param file 文件全路径 + * @return 模型数组 + */ ++ (NSMutableArray *)mj_objectArrayWithFile:(NSString *)file; + +#pragma mark - 转换为JSON +/** + * 转换为JSON Data + */ +- (NSData *)mj_JSONData; +/** + * 转换为字典或者数组 + */ +- (id)mj_JSONObject; +/** + * 转换为JSON 字符串 + */ +- (NSString *)mj_JSONString; +@end + +@interface NSObject (MJKeyValueDeprecated_v_2_5_16) +- (instancetype)setKeyValues:(id)keyValue MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (instancetype)setKeyValues:(id)keyValues error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (void)referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSMutableDictionary *)keyValues MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSMutableDictionary *)keyValuesWithError:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (instancetype)objectWithKeyValues:(id)keyValues MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (instancetype)objectWithKeyValues:(id)keyValues error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (instancetype)objectWithFilename:(NSString *)filename MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (instancetype)objectWithFilename:(NSString *)filename error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (instancetype)objectWithFile:(NSString *)file MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (instancetype)objectWithFile:(NSString *)file error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)objectArrayWithFilename:(NSString *)filename MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)objectArrayWithFilename:(NSString *)filename error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)objectArrayWithFile:(NSString *)file MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)objectArrayWithFile:(NSString *)file error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSData *)JSONData MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (id)JSONObject MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSString *)JSONString MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJKeyValue.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJKeyValue.m new file mode 100755 index 0000000..dc43f86 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJKeyValue.m @@ -0,0 +1,701 @@ +// +// NSObject+MJKeyValue.m +// MJExtension +// +// Created by mj on 13-8-24. +// Copyright (c) 2013年 小码哥. All rights reserved. +// + +#import "NSObject+MJKeyValue.h" +#import "NSObject+MJProperty.h" +#import "NSString+MJExtension.h" +#import "MJProperty.h" +#import "MJPropertyType.h" +#import "MJExtensionConst.h" +#import "MJFoundation.h" +#import "NSString+MJExtension.h" +#import "NSObject+MJClass.h" + +@implementation NSObject (MJKeyValue) + +#pragma mark - 错误 +static const char MJErrorKey = '\0'; ++ (NSError *)mj_error +{ + return objc_getAssociatedObject(self, &MJErrorKey); +} + ++ (void)setMj_error:(NSError *)error +{ + objc_setAssociatedObject(self, &MJErrorKey, error, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - 模型 -> 字典时的参考 +/** 模型转字典时,字典的key是否参考replacedKeyFromPropertyName等方法(父类设置了,子类也会继承下来) */ +static const char MJReferenceReplacedKeyWhenCreatingKeyValuesKey = '\0'; + ++ (void)mj_referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference +{ + objc_setAssociatedObject(self, &MJReferenceReplacedKeyWhenCreatingKeyValuesKey, @(reference), OBJC_ASSOCIATION_ASSIGN); +} + ++ (BOOL)mj_isReferenceReplacedKeyWhenCreatingKeyValues +{ + __block id value = objc_getAssociatedObject(self, &MJReferenceReplacedKeyWhenCreatingKeyValuesKey); + if (!value) { + [self mj_enumerateAllClasses:^(__unsafe_unretained Class c, BOOL *stop) { + value = objc_getAssociatedObject(c, &MJReferenceReplacedKeyWhenCreatingKeyValuesKey); + + if (value) *stop = YES; + }]; + } + return [value boolValue]; +} + +#pragma mark - --常用的对象-- ++ (void)load +{ + // 默认设置 + [self mj_referenceReplacedKeyWhenCreatingKeyValues:YES]; +} + +#pragma mark - --公共方法-- +#pragma mark - 字典 -> 模型 +- (instancetype)mj_setKeyValues:(id)keyValues +{ + return [self mj_setKeyValues:keyValues context:nil]; +} + +/** + 核心代码: + */ +- (instancetype)mj_setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context +{ + // 获得JSON对象 + keyValues = [keyValues mj_JSONObject]; + + MJExtensionAssertError([keyValues isKindOfClass:[NSDictionary class]], self, [self class], @"keyValues参数不是一个字典"); + + Class clazz = [self class]; + NSArray *allowedPropertyNames = [clazz mj_totalAllowedPropertyNames]; + NSArray *ignoredPropertyNames = [clazz mj_totalIgnoredPropertyNames]; + + //通过封装的方法回调一个通过运行时编写的,用于返回属性列表的方法。 + [clazz mj_enumerateProperties:^(MJProperty *property, BOOL *stop) { + @try { + // 0.检测是否被忽略 + if (allowedPropertyNames.count && ![allowedPropertyNames containsObject:property.name]) return; + if ([ignoredPropertyNames containsObject:property.name]) return; + + // 1.取出属性值 + id value; + NSArray *propertyKeyses = [property propertyKeysForClass:clazz]; + for (NSArray *propertyKeys in propertyKeyses) { + value = keyValues; + for (MJPropertyKey *propertyKey in propertyKeys) { + value = [propertyKey valueInObject:value]; + } + if (value) break; + } + + // 值的过滤 + id newValue = [clazz mj_getNewValueFromObject:self oldValue:value property:property]; + if (newValue != value) { // 有过滤后的新值 + [property setValue:newValue forObject:self]; + return; + } + + // 如果没有值,就直接返回 + if (!value || value == [NSNull null]) return; + + // 2.复杂处理 + MJPropertyType *type = property.type; + Class propertyClass = type.typeClass; + Class objectClass = [property objectClassInArrayForClass:[self class]]; + + // 不可变 -> 可变处理 + if (propertyClass == [NSMutableArray class] && [value isKindOfClass:[NSArray class]]) { + value = [NSMutableArray arrayWithArray:value]; + } else if (propertyClass == [NSMutableDictionary class] && [value isKindOfClass:[NSDictionary class]]) { + value = [NSMutableDictionary dictionaryWithDictionary:value]; + } else if (propertyClass == [NSMutableString class] && [value isKindOfClass:[NSString class]]) { + value = [NSMutableString stringWithString:value]; + } else if (propertyClass == [NSMutableData class] && [value isKindOfClass:[NSData class]]) { + value = [NSMutableData dataWithData:value]; + } + + if (!type.isFromFoundation && propertyClass) { // 模型属性 + value = [propertyClass mj_objectWithKeyValues:value context:context]; + } else if (objectClass) { + if (objectClass == [NSURL class] && [value isKindOfClass:[NSArray class]]) { + // string array -> url array + NSMutableArray *urlArray = [NSMutableArray array]; + for (NSString *string in value) { + if (![string isKindOfClass:[NSString class]]) continue; + [urlArray addObject:string.mj_url]; + } + value = urlArray; + } else { // 字典数组-->模型数组 + value = [objectClass mj_objectArrayWithKeyValuesArray:value context:context]; + } + } else { + if (propertyClass == [NSString class]) { + if ([value isKindOfClass:[NSNumber class]]) { + // NSNumber -> NSString + value = [value description]; + } else if ([value isKindOfClass:[NSURL class]]) { + // NSURL -> NSString + value = [value absoluteString]; + } + } else if ([value isKindOfClass:[NSString class]]) { + if (propertyClass == [NSURL class]) { + // NSString -> NSURL + // 字符串转码 + value = [value mj_url]; + } else if (type.isNumberType) { + NSString *oldValue = value; + + // NSString -> NSNumber + value = [NSDecimalNumber decimalNumberWithString:oldValue]; + + // 如果是BOOL + if (type.isBoolType) { + // 字符串转BOOL(字符串没有charValue方法) + // 系统会调用字符串的charValue转为BOOL类型 + NSString *lower = [oldValue lowercaseString]; + if ([lower isEqualToString:@"yes"] || [lower isEqualToString:@"true"]) { + value = @YES; + } else if ([lower isEqualToString:@"no"] || [lower isEqualToString:@"false"]) { + value = @NO; + } + } + } + } + + // value和property类型不匹配 + if (propertyClass && ![value isKindOfClass:propertyClass]) { + value = nil; + } + } + + // 3.赋值 + [property setValue:value forObject:self]; + } @catch (NSException *exception) { + MJExtensionBuildError([self class], exception.reason); + MJExtensionLog(@"%@", exception); + } + }]; + + // 转换完毕 + if ([self respondsToSelector:@selector(mj_keyValuesDidFinishConvertingToObject)]) { + [self mj_keyValuesDidFinishConvertingToObject]; + } + return self; +} + ++ (instancetype)mj_objectWithKeyValues:(id)keyValues +{ + return [self mj_objectWithKeyValues:keyValues context:nil]; +} + ++ (instancetype)mj_objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context +{ + // 获得JSON对象 + keyValues = [keyValues mj_JSONObject]; + MJExtensionAssertError([keyValues isKindOfClass:[NSDictionary class]], nil, [self class], @"keyValues参数不是一个字典"); + + if ([self isSubclassOfClass:[NSManagedObject class]] && context) { + return [[NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass(self) inManagedObjectContext:context] mj_setKeyValues:keyValues context:context]; + } + return [[[self alloc] init] mj_setKeyValues:keyValues]; +} + ++ (instancetype)mj_objectWithFilename:(NSString *)filename +{ + MJExtensionAssertError(filename != nil, nil, [self class], @"filename参数为nil"); + + return [self mj_objectWithFile:[[NSBundle mainBundle] pathForResource:filename ofType:nil]]; +} + ++ (instancetype)mj_objectWithFile:(NSString *)file +{ + MJExtensionAssertError(file != nil, nil, [self class], @"file参数为nil"); + + return [self mj_objectWithKeyValues:[NSDictionary dictionaryWithContentsOfFile:file]]; +} + +#pragma mark - 字典数组 -> 模型数组 ++ (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(NSArray *)keyValuesArray +{ + return [self mj_objectArrayWithKeyValuesArray:keyValuesArray context:nil]; +} + ++ (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context +{ + // 如果是JSON字符串 + keyValuesArray = [keyValuesArray mj_JSONObject]; + + // 1.判断真实性 + MJExtensionAssertError([keyValuesArray isKindOfClass:[NSArray class]], nil, [self class], @"keyValuesArray参数不是一个数组"); + + // 如果数组里面放的是NSString、NSNumber等数据 + if ([MJFoundation isClassFromFoundation:self]) return [NSMutableArray arrayWithArray:keyValuesArray]; + + + // 2.创建数组 + NSMutableArray *modelArray = [NSMutableArray array]; + + // 3.遍历 + for (NSDictionary *keyValues in keyValuesArray) { + if ([keyValues isKindOfClass:[NSArray class]]){ + [modelArray addObject:[self mj_objectArrayWithKeyValuesArray:keyValues context:context]]; + } else { + id model = [self mj_objectWithKeyValues:keyValues context:context]; + if (model) [modelArray addObject:model]; + } + } + + return modelArray; +} + ++ (NSMutableArray *)mj_objectArrayWithFilename:(NSString *)filename +{ + MJExtensionAssertError(filename != nil, nil, [self class], @"filename参数为nil"); + + return [self mj_objectArrayWithFile:[[NSBundle mainBundle] pathForResource:filename ofType:nil]]; +} + ++ (NSMutableArray *)mj_objectArrayWithFile:(NSString *)file +{ + MJExtensionAssertError(file != nil, nil, [self class], @"file参数为nil"); + + return [self mj_objectArrayWithKeyValuesArray:[NSArray arrayWithContentsOfFile:file]]; +} + +#pragma mark - 模型 -> 字典 +- (NSMutableDictionary *)mj_keyValues +{ + return [self mj_keyValuesWithKeys:nil ignoredKeys:nil]; +} + +- (NSMutableDictionary *)mj_keyValuesWithKeys:(NSArray *)keys +{ + return [self mj_keyValuesWithKeys:keys ignoredKeys:nil]; +} + +- (NSMutableDictionary *)mj_keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys +{ + return [self mj_keyValuesWithKeys:nil ignoredKeys:ignoredKeys]; +} + +- (NSMutableDictionary *)mj_keyValuesWithKeys:(NSArray *)keys ignoredKeys:(NSArray *)ignoredKeys +{ + // 如果自己不是模型类, 那就返回自己 + MJExtensionAssertError(![MJFoundation isClassFromFoundation:[self class]], (NSMutableDictionary *)self, [self class], @"不是自定义的模型类") + + id keyValues = [NSMutableDictionary dictionary]; + + Class clazz = [self class]; + NSArray *allowedPropertyNames = [clazz mj_totalAllowedPropertyNames]; + NSArray *ignoredPropertyNames = [clazz mj_totalIgnoredPropertyNames]; + + [clazz mj_enumerateProperties:^(MJProperty *property, BOOL *stop) { + @try { + // 0.检测是否被忽略 + if (allowedPropertyNames.count && ![allowedPropertyNames containsObject:property.name]) return; + if ([ignoredPropertyNames containsObject:property.name]) return; + if (keys.count && ![keys containsObject:property.name]) return; + if ([ignoredKeys containsObject:property.name]) return; + + // 1.取出属性值 + id value = [property valueForObject:self]; + if (!value) return; + + // 2.如果是模型属性 + MJPropertyType *type = property.type; + Class propertyClass = type.typeClass; + if (!type.isFromFoundation && propertyClass) { + value = [value mj_keyValues]; + } else if ([value isKindOfClass:[NSArray class]]) { + // 3.处理数组里面有模型的情况 + value = [NSObject mj_keyValuesArrayWithObjectArray:value]; + } else if (propertyClass == [NSURL class]) { + value = [value absoluteString]; + } + + // 4.赋值 + if ([clazz mj_isReferenceReplacedKeyWhenCreatingKeyValues]) { + NSArray *propertyKeys = [[property propertyKeysForClass:clazz] firstObject]; + NSUInteger keyCount = propertyKeys.count; + // 创建字典 + __block id innerContainer = keyValues; + [propertyKeys enumerateObjectsUsingBlock:^(MJPropertyKey *propertyKey, NSUInteger idx, BOOL *stop) { + // 下一个属性 + MJPropertyKey *nextPropertyKey = nil; + if (idx != keyCount - 1) { + nextPropertyKey = propertyKeys[idx + 1]; + } + + if (nextPropertyKey) { // 不是最后一个key + // 当前propertyKey对应的字典或者数组 + id tempInnerContainer = [propertyKey valueInObject:innerContainer]; + if (tempInnerContainer == nil || [tempInnerContainer isKindOfClass:[NSNull class]]) { + if (nextPropertyKey.type == MJPropertyKeyTypeDictionary) { + tempInnerContainer = [NSMutableDictionary dictionary]; + } else { + tempInnerContainer = [NSMutableArray array]; + } + if (propertyKey.type == MJPropertyKeyTypeDictionary) { + innerContainer[propertyKey.name] = tempInnerContainer; + } else { + innerContainer[propertyKey.name.intValue] = tempInnerContainer; + } + } + + if ([tempInnerContainer isKindOfClass:[NSMutableArray class]]) { + NSMutableArray *tempInnerContainerArray = tempInnerContainer; + int index = nextPropertyKey.name.intValue; + while (tempInnerContainerArray.count < index + 1) { + [tempInnerContainerArray addObject:[NSNull null]]; + } + } + + innerContainer = tempInnerContainer; + } else { // 最后一个key + if (propertyKey.type == MJPropertyKeyTypeDictionary) { + innerContainer[propertyKey.name] = value; + } else { + innerContainer[propertyKey.name.intValue] = value; + } + } + }]; + } else { + keyValues[property.name] = value; + } + } @catch (NSException *exception) { + MJExtensionBuildError([self class], exception.reason); + MJExtensionLog(@"%@", exception); + } + }]; + + // 转换完毕 + if ([self respondsToSelector:@selector(mj_objectDidFinishConvertingToKeyValues)]) { + [self mj_objectDidFinishConvertingToKeyValues]; + } + + return keyValues; +} +#pragma mark - 模型数组 -> 字典数组 ++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray +{ + return [self mj_keyValuesArrayWithObjectArray:objectArray keys:nil ignoredKeys:nil]; +} + ++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys +{ + return [self mj_keyValuesArrayWithObjectArray:objectArray keys:keys ignoredKeys:nil]; +} + ++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys +{ + return [self mj_keyValuesArrayWithObjectArray:objectArray keys:nil ignoredKeys:ignoredKeys]; +} + ++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys ignoredKeys:(NSArray *)ignoredKeys +{ + // 0.判断真实性 + MJExtensionAssertError([objectArray isKindOfClass:[NSArray class]], nil, [self class], @"objectArray参数不是一个数组"); + + // 1.创建数组 + NSMutableArray *keyValuesArray = [NSMutableArray array]; + for (id object in objectArray) { + if (keys) { + [keyValuesArray addObject:[object mj_keyValuesWithKeys:keys]]; + } else { + [keyValuesArray addObject:[object mj_keyValuesWithIgnoredKeys:ignoredKeys]]; + } + } + return keyValuesArray; +} + +#pragma mark - 转换为JSON +- (NSData *)mj_JSONData +{ + if ([self isKindOfClass:[NSString class]]) { + return [((NSString *)self) dataUsingEncoding:NSUTF8StringEncoding]; + } else if ([self isKindOfClass:[NSData class]]) { + return (NSData *)self; + } + + return [NSJSONSerialization dataWithJSONObject:[self mj_JSONObject] options:kNilOptions error:nil]; +} + +- (id)mj_JSONObject +{ + if ([self isKindOfClass:[NSString class]]) { + return [NSJSONSerialization JSONObjectWithData:[((NSString *)self) dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:nil]; + } else if ([self isKindOfClass:[NSData class]]) { + return [NSJSONSerialization JSONObjectWithData:(NSData *)self options:kNilOptions error:nil]; + } + + return self.mj_keyValues; +} + +- (NSString *)mj_JSONString +{ + if ([self isKindOfClass:[NSString class]]) { + return (NSString *)self; + } else if ([self isKindOfClass:[NSData class]]) { + return [[NSString alloc] initWithData:(NSData *)self encoding:NSUTF8StringEncoding]; + } + + return [[NSString alloc] initWithData:[self mj_JSONData] encoding:NSUTF8StringEncoding]; +} +@end + +@implementation NSObject (MJKeyValueDeprecated_v_2_5_16) +- (instancetype)setKeyValues:(id)keyValues +{ + return [self mj_setKeyValues:keyValues]; +} + +- (instancetype)setKeyValues:(id)keyValues error:(NSError **)error +{ + id value = [self mj_setKeyValues:keyValues]; + if (error != NULL) { + *error = [self.class mj_error]; + } + return value; + +} + +- (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context +{ + return [self mj_setKeyValues:keyValues context:context]; +} + +- (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error +{ + id value = [self mj_setKeyValues:keyValues context:context]; + if (error != NULL) { + *error = [self.class mj_error]; + } + return value; +} + ++ (void)referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference +{ + [self mj_referenceReplacedKeyWhenCreatingKeyValues:reference]; +} + +- (NSMutableDictionary *)keyValues +{ + return [self mj_keyValues]; +} + +- (NSMutableDictionary *)keyValuesWithError:(NSError **)error +{ + id value = [self mj_keyValues]; + if (error != NULL) { + *error = [self.class mj_error]; + } + return value; +} + +- (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys +{ + return [self mj_keyValuesWithKeys:keys]; +} + +- (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys error:(NSError **)error +{ + id value = [self mj_keyValuesWithKeys:keys]; + if (error != NULL) { + *error = [self.class mj_error]; + } + return value; +} + +- (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys +{ + return [self mj_keyValuesWithIgnoredKeys:ignoredKeys]; +} + +- (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys error:(NSError **)error +{ + id value = [self mj_keyValuesWithIgnoredKeys:ignoredKeys]; + if (error != NULL) { + *error = [self.class mj_error]; + } + return value; +} + ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray +{ + return [self mj_keyValuesArrayWithObjectArray:objectArray]; +} + ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray error:(NSError **)error +{ + id value = [self mj_keyValuesArrayWithObjectArray:objectArray]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys +{ + return [self mj_keyValuesArrayWithObjectArray:objectArray keys:keys]; +} + ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys error:(NSError **)error +{ + id value = [self mj_keyValuesArrayWithObjectArray:objectArray keys:keys]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys +{ + return [self mj_keyValuesArrayWithObjectArray:objectArray ignoredKeys:ignoredKeys]; +} + ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys error:(NSError **)error +{ + id value = [self mj_keyValuesArrayWithObjectArray:objectArray ignoredKeys:ignoredKeys]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (instancetype)objectWithKeyValues:(id)keyValues +{ + return [self mj_objectWithKeyValues:keyValues]; +} + ++ (instancetype)objectWithKeyValues:(id)keyValues error:(NSError **)error +{ + id value = [self mj_objectWithKeyValues:keyValues]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context +{ + return [self mj_objectWithKeyValues:keyValues context:context]; +} + ++ (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error +{ + id value = [self mj_objectWithKeyValues:keyValues context:context]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (instancetype)objectWithFilename:(NSString *)filename +{ + return [self mj_objectWithFilename:filename]; +} + ++ (instancetype)objectWithFilename:(NSString *)filename error:(NSError **)error +{ + id value = [self mj_objectWithFilename:filename]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (instancetype)objectWithFile:(NSString *)file +{ + return [self mj_objectWithFile:file]; +} + ++ (instancetype)objectWithFile:(NSString *)file error:(NSError **)error +{ + id value = [self mj_objectWithFile:file]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray +{ + return [self mj_objectArrayWithKeyValuesArray:keyValuesArray]; +} + ++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray error:(NSError **)error +{ + id value = [self mj_objectArrayWithKeyValuesArray:keyValuesArray]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context +{ + return [self mj_objectArrayWithKeyValuesArray:keyValuesArray context:context]; +} + ++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context error:(NSError **)error +{ + id value = [self mj_objectArrayWithKeyValuesArray:keyValuesArray context:context]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (NSMutableArray *)objectArrayWithFilename:(NSString *)filename +{ + return [self mj_objectArrayWithFilename:filename]; +} + ++ (NSMutableArray *)objectArrayWithFilename:(NSString *)filename error:(NSError **)error +{ + id value = [self mj_objectArrayWithFilename:filename]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (NSMutableArray *)objectArrayWithFile:(NSString *)file +{ + return [self mj_objectArrayWithFile:file]; +} + ++ (NSMutableArray *)objectArrayWithFile:(NSString *)file error:(NSError **)error +{ + id value = [self mj_objectArrayWithFile:file]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + +- (NSData *)JSONData +{ + return [self mj_JSONData]; +} + +- (id)JSONObject +{ + return [self mj_JSONObject]; +} + +- (NSString *)JSONString +{ + return [self mj_JSONString]; +} +@end \ No newline at end of file diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJProperty.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJProperty.h new file mode 100755 index 0000000..1a64732 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJProperty.h @@ -0,0 +1,79 @@ +// +// NSObject+MJProperty.h +// MJExtensionExample +// +// Created by MJ Lee on 15/4/17. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import +#import "MJExtensionConst.h" + +@class MJProperty; + +/** + * 遍历成员变量用的block + * + * @param property 成员的包装对象 + * @param stop YES代表停止遍历,NO代表继续遍历 + */ +typedef void (^MJPropertiesEnumeration)(MJProperty *property, BOOL *stop); + +/** 将属性名换为其他key去字典中取值 */ +typedef NSDictionary * (^MJReplacedKeyFromPropertyName)(); +typedef NSString * (^MJReplacedKeyFromPropertyName121)(NSString *propertyName); +/** 数组中需要转换的模型类 */ +typedef NSDictionary * (^MJObjectClassInArray)(); +/** 用于过滤字典中的值 */ +typedef id (^MJNewValueFromOldValue)(id object, id oldValue, MJProperty *property); + +/** + * 成员属性相关的扩展 + */ +@interface NSObject (MJProperty) +#pragma mark - 遍历 +/** + * 遍历所有的成员 + */ ++ (void)mj_enumerateProperties:(MJPropertiesEnumeration)enumeration; + +#pragma mark - 新值配置 +/** + * 用于过滤字典中的值 + * + * @param newValueFormOldValue 用于过滤字典中的值 + */ ++ (void)mj_setupNewValueFromOldValue:(MJNewValueFromOldValue)newValueFormOldValue; ++ (id)mj_getNewValueFromObject:(__unsafe_unretained id)object oldValue:(__unsafe_unretained id)oldValue property:(__unsafe_unretained MJProperty *)property; + +#pragma mark - key配置 +/** + * 将属性名换为其他key去字典中取值 + * + * @param replacedKeyFromPropertyName 将属性名换为其他key去字典中取值 + */ ++ (void)mj_setupReplacedKeyFromPropertyName:(MJReplacedKeyFromPropertyName)replacedKeyFromPropertyName; +/** + * 将属性名换为其他key去字典中取值 + * + * @param replacedKeyFromPropertyName121 将属性名换为其他key去字典中取值 + */ ++ (void)mj_setupReplacedKeyFromPropertyName121:(MJReplacedKeyFromPropertyName121)replacedKeyFromPropertyName121; + +#pragma mark - array model class配置 +/** + * 数组中需要转换的模型类 + * + * @param objectClassInArray 数组中需要转换的模型类 + */ ++ (void)mj_setupObjectClassInArray:(MJObjectClassInArray)objectClassInArray; +@end + +@interface NSObject (MJPropertyDeprecated_v_2_5_16) ++ (void)enumerateProperties:(MJPropertiesEnumeration)enumeration MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (void)setupNewValueFromOldValue:(MJNewValueFromOldValue)newValueFormOldValue MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (id)getNewValueFromObject:(__unsafe_unretained id)object oldValue:(__unsafe_unretained id)oldValue property:(__unsafe_unretained MJProperty *)property MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (void)setupReplacedKeyFromPropertyName:(MJReplacedKeyFromPropertyName)replacedKeyFromPropertyName MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (void)setupReplacedKeyFromPropertyName121:(MJReplacedKeyFromPropertyName121)replacedKeyFromPropertyName121 MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (void)setupObjectClassInArray:(MJObjectClassInArray)objectClassInArray MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +@end \ No newline at end of file diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJProperty.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJProperty.m new file mode 100755 index 0000000..22280a7 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSObject+MJProperty.m @@ -0,0 +1,247 @@ +// +// NSObject+MJProperty.m +// MJExtensionExample +// +// Created by MJ Lee on 15/4/17. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "NSObject+MJProperty.h" +#import "NSObject+MJKeyValue.h" +#import "NSObject+MJCoding.h" +#import "NSObject+MJClass.h" +#import "MJProperty.h" +#import "MJFoundation.h" +#import +#import "MJDictionaryCache.h" + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wundeclared-selector" +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + +@implementation NSObject (Property) + +static const char MJReplacedKeyFromPropertyNameKey = '\0'; +static const char MJReplacedKeyFromPropertyName121Key = '\0'; +static const char MJNewValueFromOldValueKey = '\0'; +static const char MJObjectClassInArrayKey = '\0'; + +static const char MJCachedPropertiesKey = '\0'; + +#pragma mark - --私有方法-- ++ (NSString *)propertyKey:(NSString *)propertyName +{ + MJExtensionAssertParamNotNil2(propertyName, nil); + + __block NSString *key = nil; + // 查看有没有需要替换的key + if ([self respondsToSelector:@selector(mj_replacedKeyFromPropertyName121:)]) { + key = [self mj_replacedKeyFromPropertyName121:propertyName]; + } + // 兼容旧版本 + if ([self respondsToSelector:@selector(replacedKeyFromPropertyName121:)]) { + key = [self performSelector:@selector(replacedKeyFromPropertyName121) withObject:propertyName]; + } + + // 调用block + if (!key) { + [self mj_enumerateAllClasses:^(__unsafe_unretained Class c, BOOL *stop) { + MJReplacedKeyFromPropertyName121 block = objc_getAssociatedObject(c, &MJReplacedKeyFromPropertyName121Key); + if (block) { + key = block(propertyName); + } + if (key) *stop = YES; + }]; + } + + // 查看有没有需要替换的key + if (!key && [self respondsToSelector:@selector(mj_replacedKeyFromPropertyName)]) { + key = [self mj_replacedKeyFromPropertyName][propertyName]; + } + // 兼容旧版本 + if (!key && [self respondsToSelector:@selector(replacedKeyFromPropertyName)]) { + key = [self performSelector:@selector(replacedKeyFromPropertyName)][propertyName]; + } + + if (!key) { + [self mj_enumerateAllClasses:^(__unsafe_unretained Class c, BOOL *stop) { + NSDictionary *dict = objc_getAssociatedObject(c, &MJReplacedKeyFromPropertyNameKey); + if (dict) { + key = dict[propertyName]; + } + if (key) *stop = YES; + }]; + } + + // 2.用属性名作为key + if (!key) key = propertyName; + + return key; +} + ++ (Class)propertyObjectClassInArray:(NSString *)propertyName +{ + __block id clazz = nil; + if ([self respondsToSelector:@selector(mj_objectClassInArray)]) { + clazz = [self mj_objectClassInArray][propertyName]; + } + // 兼容旧版本 + if ([self respondsToSelector:@selector(objectClassInArray)]) { + clazz = [self performSelector:@selector(objectClassInArray)][propertyName]; + } + + if (!clazz) { + [self mj_enumerateAllClasses:^(__unsafe_unretained Class c, BOOL *stop) { + NSDictionary *dict = objc_getAssociatedObject(c, &MJObjectClassInArrayKey); + if (dict) { + clazz = dict[propertyName]; + } + if (clazz) *stop = YES; + }]; + } + + // 如果是NSString类型 + if ([clazz isKindOfClass:[NSString class]]) { + clazz = NSClassFromString(clazz); + } + return clazz; +} + +#pragma mark - --公共方法-- ++ (void)mj_enumerateProperties:(MJPropertiesEnumeration)enumeration +{ + // 获得成员变量 + NSArray *cachedProperties = [self properties]; + + // 遍历成员变量 + BOOL stop = NO; + for (MJProperty *property in cachedProperties) { + enumeration(property, &stop); + if (stop) break; + } +} + +#pragma mark - 公共方法 ++ (NSMutableArray *)properties +{ + NSMutableArray *cachedProperties = [MJDictionaryCache objectForKey:NSStringFromClass(self) forDictId:&MJCachedPropertiesKey]; + + if (cachedProperties == nil) { + cachedProperties = [NSMutableArray array]; + + [self mj_enumerateClasses:^(__unsafe_unretained Class c, BOOL *stop) { + // 1.获得所有的成员变量 + unsigned int outCount = 0; + objc_property_t *properties = class_copyPropertyList(c, &outCount); + + // 2.遍历每一个成员变量 + for (unsigned int i = 0; i +#import "MJExtensionConst.h" + +@interface NSString (MJExtension) +/** + * 驼峰转下划线(loveYou -> love_you) + */ +- (NSString *)mj_underlineFromCamel; +/** + * 下划线转驼峰(love_you -> loveYou) + */ +- (NSString *)mj_camelFromUnderline; +/** + * 首字母变大写 + */ +- (NSString *)mj_firstCharUpper; +/** + * 首字母变小写 + */ +- (NSString *)mj_firstCharLower; + +- (BOOL)mj_isPureInt; + +- (NSURL *)mj_url; +@end + +@interface NSString (MJExtensionDeprecated_v_2_5_16) +- (NSString *)underlineFromCamel MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSString *)camelFromUnderline MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSString *)firstCharUpper MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSString *)firstCharLower MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (BOOL)isPureInt MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSURL *)url MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSString+MJExtension.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSString+MJExtension.m new file mode 100755 index 0000000..050a061 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJExtension/NSString+MJExtension.m @@ -0,0 +1,110 @@ +// +// NSString+MJExtension.m +// MJExtensionExample +// +// Created by MJ Lee on 15/6/7. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "NSString+MJExtension.h" + +@implementation NSString (MJExtension) +- (NSString *)mj_underlineFromCamel +{ + if (self.length == 0) return self; + NSMutableString *string = [NSMutableString string]; + for (NSUInteger i = 0; i= 2) [string appendString:[cmp substringFromIndex:1]]; + } else { + [string appendString:cmp]; + } + } + return string; +} + +- (NSString *)mj_firstCharLower +{ + if (self.length == 0) return self; + NSMutableString *string = [NSMutableString string]; + [string appendString:[NSString stringWithFormat:@"%c", [self characterAtIndex:0]].lowercaseString]; + if (self.length >= 2) [string appendString:[self substringFromIndex:1]]; + return string; +} + +- (NSString *)mj_firstCharUpper +{ + if (self.length == 0) return self; + NSMutableString *string = [NSMutableString string]; + [string appendString:[NSString stringWithFormat:@"%c", [self characterAtIndex:0]].uppercaseString]; + if (self.length >= 2) [string appendString:[self substringFromIndex:1]]; + return string; +} + +- (BOOL)mj_isPureInt +{ + NSScanner *scan = [NSScanner scannerWithString:self]; + int val; + return [scan scanInt:&val] && [scan isAtEnd]; +} + +- (NSURL *)mj_url +{ +// [self stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"!$&'()*+,-./:;=?@_~%#[]"]]; + + return [NSURL URLWithString:(NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL,kCFStringEncodingUTF8))]; +} +@end + +@implementation NSString (MJExtensionDeprecated_v_2_5_16) +- (NSString *)underlineFromCamel +{ + return self.mj_underlineFromCamel; +} + +- (NSString *)camelFromUnderline +{ + return self.mj_camelFromUnderline; +} + +- (NSString *)firstCharLower +{ + return self.mj_firstCharLower; +} + +- (NSString *)firstCharUpper +{ + return self.mj_firstCharUpper; +} + +- (BOOL)isPureInt +{ + return self.mj_isPureInt; +} + +- (NSURL *)url +{ + return self.mj_url; +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/LICENSE b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/LICENSE new file mode 100644 index 0000000..11bf234 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2013-2015 MJRefresh (https://github.com/CoderMJLee/MJRefresh) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h new file mode 100644 index 0000000..ed44b96 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h @@ -0,0 +1,17 @@ +// +// MJRefreshAutoFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshFooter.h" + +@interface MJRefreshAutoFooter : MJRefreshFooter +/** 是否自动刷新(默认为YES) */ +@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh; + +/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */ +@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m new file mode 100644 index 0000000..bb7c1b1 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m @@ -0,0 +1,118 @@ +// +// MJRefreshAutoFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshAutoFooter.h" + +@interface MJRefreshAutoFooter() +@property (strong, nonatomic) UIPanGestureRecognizer *pan; +@end + +@implementation MJRefreshAutoFooter + +#pragma mark - 初始化 +- (void)willMoveToSuperview:(UIView *)newSuperview +{ + [super willMoveToSuperview:newSuperview]; + + if (newSuperview) { // 新的父控件 + self.scrollView.mj_insetB += self.mj_h; + + // 重新调整frame + [self scrollViewContentSizeDidChange:nil]; + } else { // 被移除了 + self.scrollView.mj_insetB -= self.mj_h; + } +} + +#pragma mark - 实现父类的方法 +- (void)prepare +{ + [super prepare]; + + // 默认底部控件100%出现时才会自动刷新 + self.appearencePercentTriggerAutoRefresh = 1.0; + + // 设置为默认状态 + self.automaticallyRefresh = YES; +} + +- (void)scrollViewContentSizeDidChange:(NSDictionary *)change +{ + [super scrollViewContentSizeDidChange:change]; + + // 设置位置 + self.mj_y = _scrollView.mj_contentH; +} + +- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change +{ + [super scrollViewContentOffsetDidChange:change]; + + if (self.state != MJRefreshStateIdle || !self.automaticallyRefresh || self.mj_y == 0) return; + + if (_scrollView.mj_insetT + _scrollView.mj_contentH > _scrollView.mj_h) { // 内容超过一个屏幕 + // 这里的_scrollView.mj_contentH替换掉self.mj_y更为合理 + if (_scrollView.mj_offsetY >= _scrollView.mj_contentH - _scrollView.mj_h + self.mj_h * self.appearencePercentTriggerAutoRefresh + _scrollView.mj_insetB - self.mj_h) { + // 防止手松开时连续调用 + CGPoint old = [change[@"old"] CGPointValue]; + CGPoint new = [change[@"new"] CGPointValue]; + if (new.y <= old.y) return; + + // 当底部刷新控件完全出现时,才刷新 + [self beginRefreshing]; + } + } +} + +- (void)scrollViewPanStateDidChange:(NSDictionary *)change +{ + [super scrollViewPanStateDidChange:change]; + + if (self.state != MJRefreshStateIdle) return; + + if (_scrollView.panGestureRecognizer.state == UIGestureRecognizerStateEnded) {// 手松开 + if (_scrollView.mj_insetT + _scrollView.mj_contentH <= _scrollView.mj_h) { // 不够一个屏幕 + if (_scrollView.mj_offsetY >= - _scrollView.mj_insetT) { // 向上拽 + [self beginRefreshing]; + } + } else { // 超出一个屏幕 + if (_scrollView.mj_offsetY >= _scrollView.mj_contentH + _scrollView.mj_insetB - _scrollView.mj_h) { + [self beginRefreshing]; + } + } + } +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + if (state == MJRefreshStateRefreshing) { + // 这里延迟是防止惯性导致连续上拉 + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self executeRefreshingCallback]; + }); + } +} + +- (void)setHidden:(BOOL)hidden +{ + BOOL lastHidden = self.isHidden; + + [super setHidden:hidden]; + + if (!lastHidden && hidden) { + self.state = MJRefreshStateIdle; + _scrollView.mj_insetB -= self.mj_h; + } else if (lastHidden && !hidden) { + _scrollView.mj_insetB += self.mj_h; + + [self scrollViewContentSizeDidChange:nil]; + } +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h new file mode 100644 index 0000000..347083c --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h @@ -0,0 +1,13 @@ +// +// MJRefreshBackFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshFooter.h" + +@interface MJRefreshBackFooter : MJRefreshFooter + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m new file mode 100644 index 0000000..ddc34dd --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m @@ -0,0 +1,168 @@ +// +// MJRefreshBackFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshBackFooter.h" + +@interface MJRefreshBackFooter() +@property (assign, nonatomic) NSInteger lastRefreshCount; +@property (assign, nonatomic) CGFloat lastBottomDelta; +@end + +@implementation MJRefreshBackFooter + +#pragma mark - 实现父类的方法 +- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change +{ + [super scrollViewContentOffsetDidChange:change]; + + // 如果正在刷新,直接返回 + if (self.state == MJRefreshStateRefreshing) return; + + _scrollViewOriginalInset = self.scrollView.contentInset; + + // 当前的contentOffset + CGFloat currentOffsetY = self.scrollView.mj_offsetY; + // 尾部控件刚好出现的offsetY + CGFloat happenOffsetY = [self happenOffsetY]; + // 如果是向下滚动到看不见尾部控件,直接返回 + if (currentOffsetY <= happenOffsetY) return; + + CGFloat pullingPercent = (currentOffsetY - happenOffsetY) / self.mj_h; + + // 如果已全部加载,仅设置pullingPercent,然后返回 + if (self.state == MJRefreshStateNoMoreData) { + self.pullingPercent = pullingPercent; + return; + } + + if (self.scrollView.isDragging) { + self.pullingPercent = pullingPercent; + // 普通 和 即将刷新 的临界点 + CGFloat normal2pullingOffsetY = happenOffsetY + self.mj_h; + + if (self.state == MJRefreshStateIdle && currentOffsetY > normal2pullingOffsetY) { + // 转为即将刷新状态 + self.state = MJRefreshStatePulling; + } else if (self.state == MJRefreshStatePulling && currentOffsetY <= normal2pullingOffsetY) { + // 转为普通状态 + self.state = MJRefreshStateIdle; + } + } else if (self.state == MJRefreshStatePulling) {// 即将刷新 && 手松开 + // 开始刷新 + [self beginRefreshing]; + } else if (pullingPercent < 1) { + self.pullingPercent = pullingPercent; + } +} + +- (void)scrollViewContentSizeDidChange:(NSDictionary *)change +{ + [super scrollViewContentSizeDidChange:change]; + + // 内容的高度 + CGFloat contentHeight = self.scrollView.mj_contentH + self.ignoredScrollViewContentInsetTop; + // 表格的高度 + CGFloat scrollHeight = self.scrollView.mj_h - self.scrollViewOriginalInset.top - self.scrollViewOriginalInset.bottom + self.ignoredScrollViewContentInsetTop; + // 这里一定是用:self.scrollView.mj_insetT 和 self.scrollViewOriginalInset.bottom; + // 设置位置和尺寸 + self.mj_y = MAX(contentHeight, scrollHeight); +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 根据状态来设置属性 + if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) { + // 刷新完毕 + if (MJRefreshStateRefreshing == oldState) { + [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{ + self.scrollView.mj_insetB -= self.lastBottomDelta; + + // 自动调整透明度 + if (self.isAutoChangeAlpha) self.alpha = 0.0; + } completion:^(BOOL finished) { + self.pullingPercent = 0.0; + }]; + } + + CGFloat deltaH = [self heightForContentBreakView]; + NSInteger currentCount = [self totalDataCountInScrollView]; + // 刚刷新完毕 + if (MJRefreshStateRefreshing == oldState && deltaH > 0 && currentCount != self.lastRefreshCount) { + self.scrollView.mj_offsetY = self.scrollView.mj_offsetY; + } + } else if (state == MJRefreshStateRefreshing) { + // 记录刷新前的数量 + self.lastRefreshCount = [self totalDataCountInScrollView]; + + [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{ + CGFloat bottom = self.mj_h + self.scrollViewOriginalInset.bottom; + CGFloat deltaH = [self heightForContentBreakView]; + if (deltaH < 0) { // 如果内容高度小于view的高度 + bottom -= deltaH; + } + self.lastBottomDelta = bottom - self.scrollView.mj_insetB; + self.scrollView.mj_insetB = bottom; + self.scrollView.mj_offsetY = [self happenOffsetY] + self.mj_h; + } completion:^(BOOL finished) { + [self executeRefreshingCallback]; + }]; + } +} + +#pragma mark - 公共方法 +- (void)endRefreshing +{ + if ([self.scrollView isKindOfClass:[UICollectionView class]]) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [super endRefreshing]; + }); + } else { + [super endRefreshing]; + } +} + +#pragma mark - 私有方法 +#pragma mark 获得scrollView的内容 超出 view 的高度 +- (CGFloat)heightForContentBreakView +{ + CGFloat h = self.scrollView.frame.size.height - self.scrollViewOriginalInset.bottom - self.scrollViewOriginalInset.top; + return self.scrollView.contentSize.height - h; +} + +#pragma mark 刚好看到上拉刷新控件时的contentOffset.y +- (CGFloat)happenOffsetY +{ + CGFloat deltaH = [self heightForContentBreakView]; + if (deltaH > 0) { + return deltaH - self.scrollViewOriginalInset.top; + } else { + return - self.scrollViewOriginalInset.top; + } +} + +- (NSInteger)totalDataCountInScrollView +{ + NSInteger totalCount = 0; + if ([self.scrollView isKindOfClass:[UITableView class]]) { + UITableView *tableView = (UITableView *)self.scrollView; + + for (NSInteger section = 0; section +#import "MJRefreshConst.h" +#import "UIView+MJExtension.h" +#import "UIScrollView+MJExtension.h" + +/** 刷新控件的状态 */ +typedef enum { + /** 普通闲置状态 */ + MJRefreshStateIdle = 1, + /** 松开就可以进行刷新的状态 */ + MJRefreshStatePulling, + /** 正在刷新中的状态 */ + MJRefreshStateRefreshing, + /** 即将刷新的状态 */ + MJRefreshStateWillRefresh, + /** 所有数据加载完毕,没有更多的数据了 */ + MJRefreshStateNoMoreData +} MJRefreshState; + +/** 进入刷新状态的回调 */ +typedef void (^MJRefreshComponentRefreshingBlock)(); + +/** 刷新控件的基类 */ +@interface MJRefreshComponent : UIView +{ + /** 记录scrollView刚开始的inset */ + UIEdgeInsets _scrollViewOriginalInset; + /** 父控件 */ + __weak UIScrollView *_scrollView; +} +#pragma mark - 刷新回调 +/** 正在刷新的回调 */ +@property (copy, nonatomic) MJRefreshComponentRefreshingBlock refreshingBlock; +/** 设置回调对象和回调方法 */ +- (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action; +/** 回调对象 */ +@property (weak, nonatomic) id refreshingTarget; +/** 回调方法 */ +@property (assign, nonatomic) SEL refreshingAction; +/** 触发回调(交给子类去调用) */ +- (void)executeRefreshingCallback; + +#pragma mark - 刷新状态控制 +/** 进入刷新状态 */ +- (void)beginRefreshing; +/** 结束刷新状态 */ +- (void)endRefreshing; +/** 是否正在刷新 */ +- (BOOL)isRefreshing; +/** 刷新状态 一般交给子类内部实现 */ +@property (assign, nonatomic) MJRefreshState state; + +#pragma mark - 交给子类去访问 +/** 记录scrollView刚开始的inset */ +@property (assign, nonatomic, readonly) UIEdgeInsets scrollViewOriginalInset; +/** 父控件 */ +@property (weak, nonatomic, readonly) UIScrollView *scrollView; + +#pragma mark - 交给子类们去实现 +/** 初始化 */ +- (void)prepare; +/** 摆放子控件frame */ +- (void)placeSubviews; +/** 当scrollView的contentOffset发生改变的时候调用 */ +- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change; +/** 当scrollView的contentSize发生改变的时候调用 */ +- (void)scrollViewContentSizeDidChange:(NSDictionary *)change; +/** 当scrollView的contentInset发生改变的时候调用 */ +- (void)scrollViewContentInsetDidChange:(NSDictionary *)change; +/** 当scrollView的拖拽状态发生改变的时候调用 */ +- (void)scrollViewPanStateDidChange:(NSDictionary *)change; + +#pragma mark - 其他 +/** 拉拽的百分比(交给子类重写) */ +@property (assign, nonatomic) CGFloat pullingPercent; +/** 根据拖拽比例自动切换透明度 */ +@property (assign, nonatomic, getter=isAutoChangeAlpha) BOOL autoChangeAlpha; +@end + +@interface UILabel(MJRefresh) ++ (instancetype)label; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshComponent.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshComponent.m new file mode 100644 index 0000000..cf2cbbb --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshComponent.m @@ -0,0 +1,213 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// MJRefreshComponent.m +// MJRefreshExample +// +// Created by MJ Lee on 15/3/4. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshComponent.h" +#import "MJRefreshConst.h" +#import "UIView+MJExtension.h" + +@interface MJRefreshComponent() +@property (strong, nonatomic) UIPanGestureRecognizer *pan; +@end + +@implementation MJRefreshComponent +#pragma mark - 初始化 +- (instancetype)initWithFrame:(CGRect)frame +{ + if (self = [super initWithFrame:frame]) { + // 准备工作 + [self prepare]; + + // 默认是普通状态 + self.state = MJRefreshStateIdle; + } + return self; +} + +- (void)prepare +{ + // 基本属性 + self.autoresizingMask = UIViewAutoresizingFlexibleWidth; + self.backgroundColor = [UIColor clearColor]; +} + +- (void)layoutSubviews +{ + [super layoutSubviews]; + + [self placeSubviews]; +} + +- (void)placeSubviews{} + +- (void)willMoveToSuperview:(UIView *)newSuperview +{ + [super willMoveToSuperview:newSuperview]; + + // 如果不是UIScrollView,不做任何事情 + if (newSuperview && ![newSuperview isKindOfClass:[UIScrollView class]]) return; + + // 旧的父控件移除监听 + [self removeObservers]; + + if (newSuperview) { // 新的父控件 + // 设置宽度 + self.mj_w = newSuperview.mj_w; + // 设置位置 + self.mj_x = 0; + + // 记录UIScrollView + _scrollView = (UIScrollView *)newSuperview; + // 设置永远支持垂直弹簧效果 + _scrollView.alwaysBounceVertical = YES; + // 记录UIScrollView最开始的contentInset + _scrollViewOriginalInset = self.scrollView.contentInset; + + // 添加监听 + [self addObservers]; + } +} + +- (void)drawRect:(CGRect)rect +{ + [super drawRect:rect]; + + if (self.state == MJRefreshStateWillRefresh) { + // 预防view还没显示出来就调用了beginRefreshing + self.state = MJRefreshStateRefreshing; + } +} + +#pragma mark - KVO监听 +- (void)addObservers +{ + NSKeyValueObservingOptions options = NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld; + [self.scrollView addObserver:self forKeyPath:MJRefreshKeyPathContentOffset options:options context:nil]; + [self.scrollView addObserver:self forKeyPath:MJRefreshKeyPathContentSize options:options context:nil]; + self.pan = self.scrollView.panGestureRecognizer; + [self.pan addObserver:self forKeyPath:MJRefreshKeyPathPanState options:options context:nil]; +} + +- (void)removeObservers +{ + [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentOffset]; + [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentSize];; + [self.pan removeObserver:self forKeyPath:MJRefreshKeyPathPanState]; + self.pan = nil; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + // 遇到这些情况就直接返回 + if (!self.userInteractionEnabled || self.hidden) return; + + if ([keyPath isEqualToString:MJRefreshKeyPathContentOffset]) { + [self scrollViewContentOffsetDidChange:change]; + } else if ([keyPath isEqualToString:MJRefreshKeyPathContentSize]) { + [self scrollViewContentSizeDidChange:change]; + } else if ([keyPath isEqualToString:MJRefreshKeyPathContentInset]) { + [self scrollViewContentInsetDidChange:change]; + } else if ([keyPath isEqualToString:MJRefreshKeyPathPanState]) { + [self scrollViewPanStateDidChange:change]; + } +} + +- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change{} +- (void)scrollViewContentSizeDidChange:(NSDictionary *)change{} +- (void)scrollViewContentInsetDidChange:(NSDictionary *)change{} +- (void)scrollViewPanStateDidChange:(NSDictionary *)change{} + +#pragma mark - 公共方法 +#pragma mark 设置回调对象和回调方法 +- (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action +{ + self.refreshingTarget = target; + self.refreshingAction = action; +} + +#pragma mark 进入刷新状态 +- (void)beginRefreshing +{ + [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{ + self.alpha = 1.0; + }]; + self.pullingPercent = 1.0; + // 只要正在刷新,就完全显示 + if (self.window) { + self.state = MJRefreshStateRefreshing; + } else { + self.state = MJRefreshStateWillRefresh; + // 刷新(预防从另一个控制器回到这个控制器的情况,回来要重新刷新一下) + [self setNeedsDisplay]; + } +} + +#pragma mark 结束刷新状态 +- (void)endRefreshing +{ + self.state = MJRefreshStateIdle; +} + +#pragma mark 是否正在刷新 +- (BOOL)isRefreshing +{ + return self.state == MJRefreshStateRefreshing || self.state == MJRefreshStateWillRefresh; +} + +#pragma mark 自动切换透明度 +- (void)setAutoChangeAlpha:(BOOL)autoChangeAlpha +{ + _autoChangeAlpha = autoChangeAlpha; + + if (self.isRefreshing) return; + + if (autoChangeAlpha) { + self.alpha = self.pullingPercent; + } else { + self.alpha = 1.0; + } +} + +#pragma mark 根据拖拽进度设置透明度 +- (void)setPullingPercent:(CGFloat)pullingPercent +{ + _pullingPercent = pullingPercent; + + if (self.isRefreshing) return; + + if (self.isAutoChangeAlpha) { + self.alpha = pullingPercent; + } +} + +#pragma mark - 内部方法 +- (void)executeRefreshingCallback +{ + dispatch_async(dispatch_get_main_queue(), ^{ + if (self.refreshingBlock) { + self.refreshingBlock(); + } + if ([self.refreshingTarget respondsToSelector:self.refreshingAction]) { + MJRefreshMsgSend(MJRefreshMsgTarget(self.refreshingTarget), self.refreshingAction, self); + } + }); +} +@end + +@implementation UILabel(MJRefresh) ++ (instancetype)label +{ + UILabel *label = [[self alloc] init]; + label.font = MJRefreshLabelFont; + label.textColor = MJRefreshLabelTextColor; + label.autoresizingMask = UIViewAutoresizingFlexibleWidth; + label.textAlignment = NSTextAlignmentCenter; + label.backgroundColor = [UIColor clearColor]; + return label; +} +@end \ No newline at end of file diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshFooter.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshFooter.h new file mode 100644 index 0000000..ce6fba7 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshFooter.h @@ -0,0 +1,25 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// MJRefreshFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/3/5. +// Copyright (c) 2015年 小码哥. All rights reserved. +// 上拉刷新控件 + +#import "MJRefreshComponent.h" + +@interface MJRefreshFooter : MJRefreshComponent +/** 创建footer */ ++ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock; +/** 创建footer */ ++ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; + +/** 提示没有更多的数据 */ +- (void)noticeNoMoreData; +/** 重置没有更多的数据(消除没有更多数据的状态) */ +- (void)resetNoMoreData; + +/** 忽略多少scrollView的contentInset的bottom */ +@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshFooter.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshFooter.m new file mode 100644 index 0000000..6d4a202 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshFooter.m @@ -0,0 +1,50 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// MJRefreshFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/3/5. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshFooter.h" + +@interface MJRefreshFooter() + +@end + +@implementation MJRefreshFooter +#pragma mark - 构造方法 ++ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock +{ + MJRefreshFooter *cmp = [[self alloc] init]; + cmp.refreshingBlock = refreshingBlock; + return cmp; +} ++ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action +{ + MJRefreshFooter *cmp = [[self alloc] init]; + [cmp setRefreshingTarget:target refreshingAction:action]; + return cmp; +} + +#pragma mark - 重写父类的方法 +- (void)prepare +{ + [super prepare]; + + // 设置自己的高度 + self.mj_h = MJRefreshFooterHeight; +} + +#pragma mark - 公共方法 +- (void)noticeNoMoreData +{ + self.state = MJRefreshStateNoMoreData; +} + +- (void)resetNoMoreData +{ + self.state = MJRefreshStateIdle; +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshHeader.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshHeader.h new file mode 100644 index 0000000..0816024 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshHeader.h @@ -0,0 +1,25 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// MJRefreshHeader.h +// MJRefreshExample +// +// Created by MJ Lee on 15/3/4. +// Copyright (c) 2015年 小码哥. All rights reserved. +// 下拉刷新控件:负责监控用户下拉的状态 + +#import "MJRefreshComponent.h" + +@interface MJRefreshHeader : MJRefreshComponent +/** 创建header */ ++ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock; +/** 创建header */ ++ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; + +/** 这个key用来存储上一次下拉刷新成功的时间 */ +@property (copy, nonatomic) NSString *lastUpdatedTimeKey; +/** 上一次下拉刷新成功的时间 */ +@property (strong, nonatomic, readonly) NSDate *lastUpdatedTime; + +/** 忽略多少scrollView的contentInset的top */ +@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshHeader.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshHeader.m new file mode 100644 index 0000000..5800dce --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Base/MJRefreshHeader.m @@ -0,0 +1,143 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// MJRefreshHeader.m +// MJRefreshExample +// +// Created by MJ Lee on 15/3/4. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshHeader.h" + +@interface MJRefreshHeader() + +@end + +@implementation MJRefreshHeader +#pragma mark - 构造方法 ++ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock +{ + MJRefreshHeader *cmp = [[self alloc] init]; + cmp.refreshingBlock = refreshingBlock; + return cmp; +} ++ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action +{ + MJRefreshHeader *cmp = [[self alloc] init]; + [cmp setRefreshingTarget:target refreshingAction:action]; + return cmp; +} + +#pragma mark - 覆盖父类的方法 +- (void)prepare +{ + [super prepare]; + + // 设置key + self.lastUpdatedTimeKey = MJRefreshHeaderLastUpdatedTimeKey; + + // 设置高度 + self.mj_h = MJRefreshHeaderHeight; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + // 设置y值(当自己的高度发生改变了,肯定要重新调整Y值,所以放到placeSubviews方法中设置y值) + self.mj_y = - self.mj_h - self.ignoredScrollViewContentInsetTop; +} + +- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change +{ + [super scrollViewContentOffsetDidChange:change]; + + // 在刷新的refreshing状态 + if (self.state == MJRefreshStateRefreshing) { + // sectionheader停留解决 + return; + } + + // 跳转到下一个控制器时,contentInset可能会变 + _scrollViewOriginalInset = self.scrollView.contentInset; + + // 当前的contentOffset + CGFloat offsetY = self.scrollView.mj_offsetY; + // 头部控件刚好出现的offsetY + CGFloat happenOffsetY = - self.scrollViewOriginalInset.top; + + // 如果是向上滚动到看不见头部控件,直接返回 + if (offsetY >= happenOffsetY) return; + + // 普通 和 即将刷新 的临界点 + CGFloat normal2pullingOffsetY = happenOffsetY - self.mj_h; + CGFloat pullingPercent = (happenOffsetY - offsetY) / self.mj_h; + if (self.scrollView.isDragging) { // 如果正在拖拽 + self.pullingPercent = pullingPercent; + if (self.state == MJRefreshStateIdle && offsetY < normal2pullingOffsetY) { + // 转为即将刷新状态 + self.state = MJRefreshStatePulling; + } else if (self.state == MJRefreshStatePulling && offsetY >= normal2pullingOffsetY) { + // 转为普通状态 + self.state = MJRefreshStateIdle; + } + } else if (self.state == MJRefreshStatePulling) {// 即将刷新 && 手松开 + // 开始刷新 + [self beginRefreshing]; + } else if (pullingPercent < 1) { + self.pullingPercent = pullingPercent; + } +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 根据状态做事情 + if (state == MJRefreshStateIdle) { + if (oldState != MJRefreshStateRefreshing) return; + + // 保存刷新时间 + [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:self.lastUpdatedTimeKey]; + [[NSUserDefaults standardUserDefaults] synchronize]; + + // 恢复inset和offset + [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{ + self.scrollView.mj_insetT -= self.mj_h; + + // 自动调整透明度 + if (self.isAutoChangeAlpha) self.alpha = 0.0; + } completion:^(BOOL finished) { + self.pullingPercent = 0.0; + }]; + } else if (state == MJRefreshStateRefreshing) { + [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{ + // 增加滚动区域 + CGFloat top = self.scrollViewOriginalInset.top + self.mj_h; + self.scrollView.mj_insetT = top; + + // 设置滚动位置 + self.scrollView.mj_offsetY = - top; + } completion:^(BOOL finished) { + [self executeRefreshingCallback]; + }]; + } +} + +#pragma mark - 公共方法 +- (void)endRefreshing +{ + if ([self.scrollView isKindOfClass:[UICollectionView class]]) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [super endRefreshing]; + }); + } else { + [super endRefreshing]; + } +} + +- (NSDate *)lastUpdatedTime +{ + return [[NSUserDefaults standardUserDefaults] objectForKey:self.lastUpdatedTimeKey]; +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h new file mode 100644 index 0000000..4c96286 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h @@ -0,0 +1,15 @@ +// +// MJRefreshAutoGifFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshAutoStateFooter.h" + +@interface MJRefreshAutoGifFooter : MJRefreshAutoStateFooter +/** 设置state状态下的动画图片images 动画持续时间duration*/ +- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; +- (void)setImages:(NSArray *)images forState:(MJRefreshState)state; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m new file mode 100644 index 0000000..0ab312e --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m @@ -0,0 +1,104 @@ +// +// MJRefreshAutoGifFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshAutoGifFooter.h" + +@interface MJRefreshAutoGifFooter() +@property (weak, nonatomic) UIImageView *gifView; +/** 所有状态对应的动画图片 */ +@property (strong, nonatomic) NSMutableDictionary *stateImages; +/** 所有状态对应的动画时间 */ +@property (strong, nonatomic) NSMutableDictionary *stateDurations; +@end + +@implementation MJRefreshAutoGifFooter +#pragma mark - 懒加载 +- (UIImageView *)gifView +{ + if (!_gifView) { + UIImageView *gifView = [[UIImageView alloc] init]; + [self addSubview:_gifView = gifView]; + } + return _gifView; +} + +- (NSMutableDictionary *)stateImages +{ + if (!_stateImages) { + self.stateImages = [NSMutableDictionary dictionary]; + } + return _stateImages; +} + +- (NSMutableDictionary *)stateDurations +{ + if (!_stateDurations) { + self.stateDurations = [NSMutableDictionary dictionary]; + } + return _stateDurations; +} + +#pragma mark - 公共方法 +- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state +{ + if (images == nil) return; + + self.stateImages[@(state)] = images; + self.stateDurations[@(state)] = @(duration); + + /* 根据图片设置控件的高度 */ + UIImage *image = [images firstObject]; + if (image.size.height > self.mj_h) { + self.mj_h = image.size.height; + } +} + +- (void)setImages:(NSArray *)images forState:(MJRefreshState)state +{ + [self setImages:images duration:images.count * 0.1 forState:state]; +} + +#pragma mark - 实现父类的方法 +- (void)placeSubviews +{ + [super placeSubviews]; + + self.gifView.frame = self.bounds; + if (self.isRefreshingTitleHidden) { + self.gifView.contentMode = UIViewContentModeCenter; + } else { + self.gifView.contentMode = UIViewContentModeRight; + self.gifView.mj_w = self.mj_w * 0.5 - 90; + } +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 根据状态做事情 + if (state == MJRefreshStateRefreshing) { + NSArray *images = self.stateImages[@(state)]; + if (images.count == 0) return; + [self.gifView stopAnimating]; + + self.gifView.hidden = NO; + if (images.count == 1) { // 单张图片 + self.gifView.image = [images lastObject]; + } else { // 多张图片 + self.gifView.animationImages = images; + self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue]; + [self.gifView startAnimating]; + } + } else if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) { + [self.gifView stopAnimating]; + self.gifView.hidden = YES; + } +} +@end + diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h new file mode 100644 index 0000000..5549cff --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h @@ -0,0 +1,14 @@ +// +// MJRefreshAutoNormalFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshAutoStateFooter.h" + +@interface MJRefreshAutoNormalFooter : MJRefreshAutoStateFooter +/** 菊花的样式 */ +@property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m new file mode 100644 index 0000000..76be140 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m @@ -0,0 +1,67 @@ +// +// MJRefreshAutoNormalFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshAutoNormalFooter.h" + +@interface MJRefreshAutoNormalFooter() +@property (weak, nonatomic) UIActivityIndicatorView *loadingView; +@end + +@implementation MJRefreshAutoNormalFooter +#pragma mark - 懒加载子控件 +- (UIActivityIndicatorView *)loadingView +{ + if (!_loadingView) { + UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:self.activityIndicatorViewStyle]; + loadingView.hidesWhenStopped = YES; + [self addSubview:_loadingView = loadingView]; + } + return _loadingView; +} + +- (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle +{ + _activityIndicatorViewStyle = activityIndicatorViewStyle; + + self.loadingView = nil; + [self setNeedsLayout]; +} +#pragma makr - 重写父类的方法 +- (void)prepare +{ + [super prepare]; + + self.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + // 圈圈 + CGFloat arrowCenterX = self.mj_w * 0.5; + if (!self.isRefreshingTitleHidden) { + arrowCenterX -= 100; + } + CGFloat arrowCenterY = self.mj_h * 0.5; + self.loadingView.center = CGPointMake(arrowCenterX, arrowCenterY); +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 根据状态做事情 + if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) { + [self.loadingView stopAnimating]; + } else if (state == MJRefreshStateRefreshing) { + [self.loadingView startAnimating]; + } +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h new file mode 100644 index 0000000..956188b --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h @@ -0,0 +1,20 @@ +// +// MJRefreshAutoStateFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/6/13. +// Copyright © 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshAutoFooter.h" + +@interface MJRefreshAutoStateFooter : MJRefreshAutoFooter +/** 显示刷新状态的label */ +@property (weak, nonatomic, readonly) UILabel *stateLabel; + +/** 设置state状态下的文字 */ +- (void)setTitle:(NSString *)title forState:(MJRefreshState)state; + +/** 隐藏刷新状态的文字 */ +@property (assign, nonatomic, getter=isRefreshingTitleHidden) BOOL refreshingTitleHidden; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m new file mode 100644 index 0000000..ccbc602 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m @@ -0,0 +1,87 @@ +// +// MJRefreshAutoStateFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/6/13. +// Copyright © 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshAutoStateFooter.h" + +@interface MJRefreshAutoStateFooter() +{ + /** 显示刷新状态的label */ + __weak UILabel *_stateLabel; +} +/** 所有状态对应的文字 */ +@property (strong, nonatomic) NSMutableDictionary *stateTitles; +@end + +@implementation MJRefreshAutoStateFooter +#pragma mark - 懒加载 +- (NSMutableDictionary *)stateTitles +{ + if (!_stateTitles) { + self.stateTitles = [NSMutableDictionary dictionary]; + } + return _stateTitles; +} + +- (UILabel *)stateLabel +{ + if (!_stateLabel) { + [self addSubview:_stateLabel = [UILabel label]]; + } + return _stateLabel; +} + +#pragma mark - 公共方法 +- (void)setTitle:(NSString *)title forState:(MJRefreshState)state +{ + if (title == nil) return; + self.stateTitles[@(state)] = title; + self.stateLabel.text = self.stateTitles[@(self.state)]; +} + +#pragma mark - 私有方法 +- (void)stateLabelClick +{ + if (self.state == MJRefreshStateIdle) { + [self beginRefreshing]; + } +} + +#pragma mark - 重写父类的方法 +- (void)prepare +{ + [super prepare]; + + // 初始化文字 + [self setTitle:MJRefreshAutoFooterIdleText forState:MJRefreshStateIdle]; + [self setTitle:MJRefreshAutoFooterRefreshingText forState:MJRefreshStateRefreshing]; + [self setTitle:MJRefreshAutoFooterNoMoreDataText forState:MJRefreshStateNoMoreData]; + + // 监听label + self.stateLabel.userInteractionEnabled = YES; + [self.stateLabel addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(stateLabelClick)]]; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + // 状态标签 + self.stateLabel.frame = self.bounds; +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + if (self.isRefreshingTitleHidden && state == MJRefreshStateRefreshing) { + self.stateLabel.text = nil; + } else { + self.stateLabel.text = self.stateTitles[@(state)]; + } +} +@end \ No newline at end of file diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h new file mode 100644 index 0000000..10d92e4 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h @@ -0,0 +1,15 @@ +// +// MJRefreshBackGifFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshBackStateFooter.h" + +@interface MJRefreshBackGifFooter : MJRefreshBackStateFooter +/** 设置state状态下的动画图片images 动画持续时间duration*/ +- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; +- (void)setImages:(NSArray *)images forState:(MJRefreshState)state; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m new file mode 100644 index 0000000..ce18b53 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m @@ -0,0 +1,115 @@ +// +// MJRefreshBackGifFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshBackGifFooter.h" + +@interface MJRefreshBackGifFooter() +@property (weak, nonatomic) UIImageView *gifView; +/** 所有状态对应的动画图片 */ +@property (strong, nonatomic) NSMutableDictionary *stateImages; +/** 所有状态对应的动画时间 */ +@property (strong, nonatomic) NSMutableDictionary *stateDurations; +@end + +@implementation MJRefreshBackGifFooter +#pragma mark - 懒加载 +- (UIImageView *)gifView +{ + if (!_gifView) { + UIImageView *gifView = [[UIImageView alloc] init]; + [self addSubview:_gifView = gifView]; + } + return _gifView; +} + +- (NSMutableDictionary *)stateImages +{ + if (!_stateImages) { + self.stateImages = [NSMutableDictionary dictionary]; + } + return _stateImages; +} + +- (NSMutableDictionary *)stateDurations +{ + if (!_stateDurations) { + self.stateDurations = [NSMutableDictionary dictionary]; + } + return _stateDurations; +} + +#pragma mark - 公共方法 +- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state +{ + if (images == nil) return; + + self.stateImages[@(state)] = images; + self.stateDurations[@(state)] = @(duration); + + /* 根据图片设置控件的高度 */ + UIImage *image = [images firstObject]; + if (image.size.height > self.mj_h) { + self.mj_h = image.size.height; + } +} + +- (void)setImages:(NSArray *)images forState:(MJRefreshState)state +{ + [self setImages:images duration:images.count * 0.1 forState:state]; +} + +#pragma mark - 实现父类的方法 +- (void)setPullingPercent:(CGFloat)pullingPercent +{ + [super setPullingPercent:pullingPercent]; + NSArray *images = self.stateImages[@(MJRefreshStateIdle)]; + if (self.state != MJRefreshStateIdle || images.count == 0) return; + [self.gifView stopAnimating]; + NSUInteger index = images.count * pullingPercent; + if (index >= images.count) index = images.count - 1; + self.gifView.image = images[index]; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + self.gifView.frame = self.bounds; + if (self.stateLabel.hidden) { + self.gifView.contentMode = UIViewContentModeCenter; + } else { + self.gifView.contentMode = UIViewContentModeRight; + self.gifView.mj_w = self.mj_w * 0.5 - 90; + } +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 根据状态做事情 + if (state == MJRefreshStatePulling || state == MJRefreshStateRefreshing) { + NSArray *images = self.stateImages[@(state)]; + if (images.count == 0) return; + + self.gifView.hidden = NO; + [self.gifView stopAnimating]; + if (images.count == 1) { // 单张图片 + self.gifView.image = [images lastObject]; + } else { // 多张图片 + self.gifView.animationImages = images; + self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue]; + [self.gifView startAnimating]; + } + } else if (state == MJRefreshStateIdle) { + self.gifView.hidden = NO; + } else if (state == MJRefreshStateNoMoreData) { + self.gifView.hidden = YES; + } +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h new file mode 100644 index 0000000..90e8b77 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h @@ -0,0 +1,15 @@ +// +// MJRefreshBackNormalFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshBackStateFooter.h" + +@interface MJRefreshBackNormalFooter : MJRefreshBackStateFooter +@property (weak, nonatomic, readonly) UIImageView *arrowView; +/** 菊花的样式 */ +@property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m new file mode 100644 index 0000000..7b7b930 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m @@ -0,0 +1,109 @@ +// +// MJRefreshBackNormalFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshBackNormalFooter.h" + +@interface MJRefreshBackNormalFooter() +{ + __weak UIImageView *_arrowView; +} +@property (weak, nonatomic) UIActivityIndicatorView *loadingView; +@end + +@implementation MJRefreshBackNormalFooter +#pragma mark - 懒加载子控件 +- (UIImageView *)arrowView +{ + if (!_arrowView) { + UIImageView *arrowView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:MJRefreshSrcName(@"arrow.png")]]; + [self addSubview:_arrowView = arrowView]; + } + return _arrowView; +} + +- (UIActivityIndicatorView *)loadingView +{ + if (!_loadingView) { + UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:self.activityIndicatorViewStyle]; + loadingView.hidesWhenStopped = YES; + [self addSubview:_loadingView = loadingView]; + } + return _loadingView; +} + +- (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle +{ + _activityIndicatorViewStyle = activityIndicatorViewStyle; + + self.loadingView = nil; + [self setNeedsLayout]; +} +#pragma makr - 重写父类的方法 +- (void)prepare +{ + [super prepare]; + + self.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + // 箭头 + self.arrowView.mj_size = self.arrowView.image.size; + CGFloat arrowCenterX = self.mj_w * 0.5; + if (!self.stateLabel.hidden) { + arrowCenterX -= 100; + } + CGFloat arrowCenterY = self.mj_h * 0.5; + self.arrowView.center = CGPointMake(arrowCenterX, arrowCenterY); + + // 圈圈 + self.loadingView.frame = self.arrowView.frame; +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 根据状态做事情 + if (state == MJRefreshStateIdle) { + if (oldState == MJRefreshStateRefreshing) { + self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI); + [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{ + self.loadingView.alpha = 0.0; + } completion:^(BOOL finished) { + self.loadingView.alpha = 1.0; + [self.loadingView stopAnimating]; + + self.arrowView.hidden = NO; + }]; + } else { + self.arrowView.hidden = NO; + [self.loadingView stopAnimating]; + [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{ + self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI); + }]; + } + } else if (state == MJRefreshStatePulling) { + self.arrowView.hidden = NO; + [self.loadingView stopAnimating]; + [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{ + self.arrowView.transform = CGAffineTransformIdentity; + }]; + } else if (state == MJRefreshStateRefreshing) { + self.arrowView.hidden = YES; + [self.loadingView startAnimating]; + } else if (state == MJRefreshStateNoMoreData) { + self.arrowView.hidden = YES; + [self.loadingView stopAnimating]; + } +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h new file mode 100644 index 0000000..f90cd6c --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h @@ -0,0 +1,16 @@ +// +// MJRefreshBackStateFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/6/13. +// Copyright © 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshBackFooter.h" + +@interface MJRefreshBackStateFooter : MJRefreshBackFooter +/** 显示刷新状态的label */ +@property (weak, nonatomic, readonly) UILabel *stateLabel; +/** 设置state状态下的文字 */ +- (void)setTitle:(NSString *)title forState:(MJRefreshState)state; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m new file mode 100644 index 0000000..e43e9c8 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m @@ -0,0 +1,73 @@ +// +// MJRefreshBackStateFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/6/13. +// Copyright © 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshBackStateFooter.h" + +@interface MJRefreshBackStateFooter() +{ + /** 显示刷新状态的label */ + __weak UILabel *_stateLabel; +} +/** 所有状态对应的文字 */ +@property (strong, nonatomic) NSMutableDictionary *stateTitles; +@end + +@implementation MJRefreshBackStateFooter +#pragma mark - 懒加载 +- (NSMutableDictionary *)stateTitles +{ + if (!_stateTitles) { + self.stateTitles = [NSMutableDictionary dictionary]; + } + return _stateTitles; +} + +- (UILabel *)stateLabel +{ + if (!_stateLabel) { + [self addSubview:_stateLabel = [UILabel label]]; + } + return _stateLabel; +} + +#pragma mark - 公共方法 +- (void)setTitle:(NSString *)title forState:(MJRefreshState)state +{ + if (title == nil) return; + self.stateTitles[@(state)] = title; + self.stateLabel.text = self.stateTitles[@(self.state)]; +} + +#pragma mark - 重写父类的方法 +- (void)prepare +{ + [super prepare]; + + // 初始化文字 + [self setTitle:MJRefreshBackFooterIdleText forState:MJRefreshStateIdle]; + [self setTitle:MJRefreshBackFooterPullingText forState:MJRefreshStatePulling]; + [self setTitle:MJRefreshBackFooterRefreshingText forState:MJRefreshStateRefreshing]; + [self setTitle:MJRefreshBackFooterNoMoreDataText forState:MJRefreshStateNoMoreData]; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + // 状态标签 + self.stateLabel.frame = self.bounds; +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 设置状态文字 + self.stateLabel.text = self.stateTitles[@(state)]; +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h new file mode 100644 index 0000000..560c847 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h @@ -0,0 +1,15 @@ +// +// MJRefreshGifHeader.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshStateHeader.h" + +@interface MJRefreshGifHeader : MJRefreshStateHeader +/** 设置state状态下的动画图片images 动画持续时间duration*/ +- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; +- (void)setImages:(NSArray *)images forState:(MJRefreshState)state; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m new file mode 100644 index 0000000..aa2ddd5 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m @@ -0,0 +1,112 @@ +// +// MJRefreshGifHeader.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshGifHeader.h" + +@interface MJRefreshGifHeader() +@property (weak, nonatomic) UIImageView *gifView; +/** 所有状态对应的动画图片 */ +@property (strong, nonatomic) NSMutableDictionary *stateImages; +/** 所有状态对应的动画时间 */ +@property (strong, nonatomic) NSMutableDictionary *stateDurations; +@end + +@implementation MJRefreshGifHeader +#pragma mark - 懒加载 +- (UIImageView *)gifView +{ + if (!_gifView) { + UIImageView *gifView = [[UIImageView alloc] init]; + [self addSubview:_gifView = gifView]; + } + return _gifView; +} + +- (NSMutableDictionary *)stateImages +{ + if (!_stateImages) { + self.stateImages = [NSMutableDictionary dictionary]; + } + return _stateImages; +} + +- (NSMutableDictionary *)stateDurations +{ + if (!_stateDurations) { + self.stateDurations = [NSMutableDictionary dictionary]; + } + return _stateDurations; +} + +#pragma mark - 公共方法 +- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state +{ + if (images == nil) return; + + self.stateImages[@(state)] = images; + self.stateDurations[@(state)] = @(duration); + + /* 根据图片设置控件的高度 */ + UIImage *image = [images firstObject]; + if (image.size.height > self.mj_h) { + self.mj_h = image.size.height; + } +} + +- (void)setImages:(NSArray *)images forState:(MJRefreshState)state +{ + [self setImages:images duration:images.count * 0.1 forState:state]; +} + +#pragma mark - 实现父类的方法 +- (void)setPullingPercent:(CGFloat)pullingPercent +{ + [super setPullingPercent:pullingPercent]; + NSArray *images = self.stateImages[@(MJRefreshStateIdle)]; + if (self.state != MJRefreshStateIdle || images.count == 0) return; + // 停止动画 + [self.gifView stopAnimating]; + // 设置当前需要显示的图片 + NSUInteger index = images.count * pullingPercent; + if (index >= images.count) index = images.count - 1; + self.gifView.image = images[index]; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + self.gifView.frame = self.bounds; + if (self.stateLabel.hidden && self.lastUpdatedTimeLabel.hidden) { + self.gifView.contentMode = UIViewContentModeCenter; + } else { + self.gifView.contentMode = UIViewContentModeRight; + self.gifView.mj_w = self.mj_w * 0.5 - 90; + } +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 根据状态做事情 + if (state == MJRefreshStatePulling || state == MJRefreshStateRefreshing) { + NSArray *images = self.stateImages[@(state)]; + if (images.count == 0) return; + + [self.gifView stopAnimating]; + if (images.count == 1) { // 单张图片 + self.gifView.image = [images lastObject]; + } else { // 多张图片 + self.gifView.animationImages = images; + self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue]; + [self.gifView startAnimating]; + } + } +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h new file mode 100644 index 0000000..547d05e --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h @@ -0,0 +1,15 @@ +// +// MJRefreshNormalHeader.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshStateHeader.h" + +@interface MJRefreshNormalHeader : MJRefreshStateHeader +@property (weak, nonatomic, readonly) UIImageView *arrowView; +/** 菊花的样式 */ +@property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m new file mode 100644 index 0000000..3ed5c36 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m @@ -0,0 +1,115 @@ +// +// MJRefreshNormalHeader.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshNormalHeader.h" + +@interface MJRefreshNormalHeader() +{ + __weak UIImageView *_arrowView; +} +@property (weak, nonatomic) UIActivityIndicatorView *loadingView; +@end + +@implementation MJRefreshNormalHeader +#pragma mark - 懒加载子控件 +- (UIImageView *)arrowView +{ + if (!_arrowView) { + UIImage *image = [UIImage imageNamed:MJRefreshSrcName(@"arrow.png")]; + if (!image) { + image = [UIImage imageNamed:MJRefreshFrameworkSrcName(@"arrow.png")]; + } + UIImageView *arrowView = [[UIImageView alloc] initWithImage:image]; + [self addSubview:_arrowView = arrowView]; + } + return _arrowView; +} + +- (UIActivityIndicatorView *)loadingView +{ + if (!_loadingView) { + UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:self.activityIndicatorViewStyle]; + loadingView.hidesWhenStopped = YES; + [self addSubview:_loadingView = loadingView]; + } + return _loadingView; +} + +#pragma mark - 公共方法 +- (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle +{ + _activityIndicatorViewStyle = activityIndicatorViewStyle; + + self.loadingView = nil; + [self setNeedsLayout]; +} + +#pragma makr - 重写父类的方法 +- (void)prepare +{ + [super prepare]; + + self.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + // 箭头 + self.arrowView.mj_size = self.arrowView.image.size; + CGFloat arrowCenterX = self.mj_w * 0.5; + if (!self.stateLabel.hidden) { + arrowCenterX -= 100; + } + CGFloat arrowCenterY = self.mj_h * 0.5; + self.arrowView.center = CGPointMake(arrowCenterX, arrowCenterY); + + // 圈圈 + self.loadingView.frame = self.arrowView.frame; +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 根据状态做事情 + if (state == MJRefreshStateIdle) { + if (oldState == MJRefreshStateRefreshing) { + self.arrowView.transform = CGAffineTransformIdentity; + + [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{ + self.loadingView.alpha = 0.0; + } completion:^(BOOL finished) { + // 如果执行完动画发现不是idle状态,就直接返回,进入其他状态 + if (self.state != MJRefreshStateIdle) return; + + self.loadingView.alpha = 1.0; + [self.loadingView stopAnimating]; + self.arrowView.hidden = NO; + }]; + } else { + [self.loadingView stopAnimating]; + self.arrowView.hidden = NO; + [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{ + self.arrowView.transform = CGAffineTransformIdentity; + }]; + } + } else if (state == MJRefreshStatePulling) { + [self.loadingView stopAnimating]; + self.arrowView.hidden = NO; + [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{ + self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI); + }]; + } else if (state == MJRefreshStateRefreshing) { + self.loadingView.alpha = 1.0; // 防止refreshing -> idle的动画完毕动作没有被执行 + [self.loadingView startAnimating]; + self.arrowView.hidden = YES; + } +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h new file mode 100644 index 0000000..5909532 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h @@ -0,0 +1,23 @@ +// +// MJRefreshStateHeader.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshHeader.h" + +@interface MJRefreshStateHeader : MJRefreshHeader +#pragma mark - 刷新时间相关 +/** 利用这个block来决定显示的更新时间文字 */ +@property (copy, nonatomic) NSString *(^lastUpdatedTimeText)(NSDate *lastUpdatedTime); +/** 显示上一次刷新时间的label */ +@property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel; + +#pragma mark - 状态相关 +/** 显示刷新状态的label */ +@property (weak, nonatomic, readonly) UILabel *stateLabel; +/** 设置state状态下的文字 */ +- (void)setTitle:(NSString *)title forState:(MJRefreshState)state; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m new file mode 100644 index 0000000..20ee3ef --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m @@ -0,0 +1,139 @@ +// +// MJRefreshStateHeader.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshStateHeader.h" + +@interface MJRefreshStateHeader() +{ + /** 显示上一次刷新时间的label */ + __weak UILabel *_lastUpdatedTimeLabel; + /** 显示刷新状态的label */ + __weak UILabel *_stateLabel; +} +/** 所有状态对应的文字 */ +@property (strong, nonatomic) NSMutableDictionary *stateTitles; +@end + +@implementation MJRefreshStateHeader +#pragma mark - 懒加载 +- (NSMutableDictionary *)stateTitles +{ + if (!_stateTitles) { + self.stateTitles = [NSMutableDictionary dictionary]; + } + return _stateTitles; +} + +- (UILabel *)stateLabel +{ + if (!_stateLabel) { + [self addSubview:_stateLabel = [UILabel label]]; + } + return _stateLabel; +} + +- (UILabel *)lastUpdatedTimeLabel +{ + if (!_lastUpdatedTimeLabel) { + [self addSubview:_lastUpdatedTimeLabel = [UILabel label]]; + } + return _lastUpdatedTimeLabel; +} + +#pragma mark - 公共方法 +- (void)setTitle:(NSString *)title forState:(MJRefreshState)state +{ + if (title == nil) return; + self.stateTitles[@(state)] = title; + self.stateLabel.text = self.stateTitles[@(self.state)]; +} + +#pragma mark key的处理 +- (void)setLastUpdatedTimeKey:(NSString *)lastUpdatedTimeKey +{ + [super setLastUpdatedTimeKey:lastUpdatedTimeKey]; + + NSDate *lastUpdatedTime = [[NSUserDefaults standardUserDefaults] objectForKey:lastUpdatedTimeKey]; + + // 如果有block + if (self.lastUpdatedTimeText) { + self.lastUpdatedTimeLabel.text = self.lastUpdatedTimeText(lastUpdatedTime); + return; + } + + if (lastUpdatedTime) { + // 1.获得年月日 + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSUInteger unitFlags = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour |NSCalendarUnitMinute; + NSDateComponents *cmp1 = [calendar components:unitFlags fromDate:lastUpdatedTime]; + NSDateComponents *cmp2 = [calendar components:unitFlags fromDate:[NSDate date]]; + + // 2.格式化日期 + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + if ([cmp1 day] == [cmp2 day]) { // 今天 + formatter.dateFormat = @"今天 HH:mm"; + } else if ([cmp1 year] == [cmp2 year]) { // 今年 + formatter.dateFormat = @"MM-dd HH:mm"; + } else { + formatter.dateFormat = @"yyyy-MM-dd HH:mm"; + } + NSString *time = [formatter stringFromDate:lastUpdatedTime]; + + // 3.显示日期 + self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"最后更新:%@", time]; + } else { + self.lastUpdatedTimeLabel.text = @"最后更新:无记录"; + } +} + +#pragma mark - 覆盖父类的方法 +- (void)prepare +{ + [super prepare]; + + // 初始化文字 + [self setTitle:MJRefreshHeaderIdleText forState:MJRefreshStateIdle]; + [self setTitle:MJRefreshHeaderPullingText forState:MJRefreshStatePulling]; + [self setTitle:MJRefreshHeaderRefreshingText forState:MJRefreshStateRefreshing]; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + if (self.stateLabel.hidden) return; + + if (self.lastUpdatedTimeLabel.hidden) { + // 状态 + self.stateLabel.frame = self.bounds; + } else { + // 状态 + self.stateLabel.mj_x = 0; + self.stateLabel.mj_y = 0; + self.stateLabel.mj_w = self.mj_w; + self.stateLabel.mj_h = self.mj_h * 0.5; + + // 更新时间 + self.lastUpdatedTimeLabel.mj_x = 0; + self.lastUpdatedTimeLabel.mj_y = self.stateLabel.mj_h; + self.lastUpdatedTimeLabel.mj_w = self.mj_w; + self.lastUpdatedTimeLabel.mj_h = self.mj_h - self.lastUpdatedTimeLabel.mj_y; + } +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 设置状态文字 + self.stateLabel.text = self.stateTitles[@(state)]; + + // 重新设置key(重新显示时间) + self.lastUpdatedTimeKey = self.lastUpdatedTimeKey; +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..b1078de8653b1c7167cb0c0663b595b0b42cfede GIT binary patch literal 1033 zcmeAS@N?(olHy`uVBq!ia0vp^azGrw!3HGxl8){JQjEnx?oJHr&dIz4aukw1f_xbm zs?-=58d?|_egTCVUNA6}8Za=tN?>5Hn!&&zUNC1@pbb!hv%n*=n1O*?7=#%aX3dcR z8Wx!u5>XQ2>tmIipR1RclAn~SSCLx)RL#I(Q(*;U=BAb;Dpcg=|?L9&C18K8MsJ85o#kJzX3_GFacvIO}!TL7-u_ z%iap1n#n=h6|e3~d$2lgyfVv7!^!dED`t+SAkVCY8eJmqt1^Evs9xVCJXxY*S@9or&8vV%`^cW33fMDJ;untOX+<2tVR`rZ(&)aRdn9yIC< zske|Zd;PVFF}we}#J*o$5(gR=z5ngMHq86wZprKqYyslWR$1gr9Amt?Z1(BJEIT^> zrXH+cpdKQ9fOnH6TlKth&I9aLiIN`#USz9HF6?mB?qj_3@Pps-&rVqyieBdz27I@i z>nDFHYvVDN9>(^=^WN)n@i(V!zUd_Ji~CP_#nPb47OBa$N2j(qIv-?dm)H4jaZD`r zDaX;}kF1mb)TgM4oSzxw>v`jP)>dP_{Oz~%6RXcHEMPnvsjb@P*c`d{u|;|F!3QP< ze`JsC7Exx2vvEIYG5xgcXWONZubgLn+^JY_YW}N_N{bu}H7`l8y8X6JW%5bi9g*9X zc{C;nW~3O*>nQlqyMys?ZclS=pvE(|Ala5Fr=Lbg{Ioo)I3@0niTKj~B~}qDuD`B5 wbpCQ_#rt;;V&CstCu^gZY^cBni@!6bA6V0Vv8{}Z(F12XPgg&ebxsLQ0NSRDTL1t6 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/MJRefresh.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/MJRefresh.h new file mode 100644 index 0000000..196e6ec --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/MJRefresh.h @@ -0,0 +1,14 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 + +#import "UIScrollView+MJRefresh.h" +#import "UIScrollView+MJExtension.h" +#import "UIView+MJExtension.h" + +#import "MJRefreshNormalHeader.h" +#import "MJRefreshGifHeader.h" + +#import "MJRefreshBackNormalFooter.h" +#import "MJRefreshBackGifFooter.h" +#import "MJRefreshAutoNormalFooter.h" +#import "MJRefreshAutoGifFooter.h" \ No newline at end of file diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/MJRefreshConst.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/MJRefreshConst.h new file mode 100644 index 0000000..9a9d905 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/MJRefreshConst.h @@ -0,0 +1,63 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +#import +#import + +// 日志输出 +#ifdef DEBUG +#define MJRefreshLog(...) NSLog(__VA_ARGS__) +#else +#define MJRefreshLog(...) +#endif + +// 过期提醒 +#define MJRefreshDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead) + +// 运行时objc_MJRefreshMsgSend +#define MJRefreshMsgSend(...) ((void (*)(void *, SEL, UIView *))objc_msgSend)(__VA_ARGS__) +#define MJRefreshMsgTarget(target) (__bridge void *)(target) + +// RGB颜色 +#define MJRefreshColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0] + +// 文字颜色 +#define MJRefreshLabelTextColor MJRefreshColor(90, 90, 90) + +// 字体大小 +#define MJRefreshLabelFont [UIFont boldSystemFontOfSize:14] + +// 图片路径 +#define MJRefreshSrcName(file) [@"MJRefresh.bundle" stringByAppendingPathComponent:file] +#define MJRefreshFrameworkSrcName(file) [@"Frameworks/MJRefresh.framework/MJRefresh.bundle" stringByAppendingPathComponent:file] + +// 常量 +UIKIT_EXTERN const CGFloat MJRefreshHeaderHeight; +UIKIT_EXTERN const CGFloat MJRefreshFooterHeight; +UIKIT_EXTERN const CGFloat MJRefreshFastAnimationDuration; +UIKIT_EXTERN const CGFloat MJRefreshSlowAnimationDuration; + +UIKIT_EXTERN NSString *const MJRefreshKeyPathContentOffset; +UIKIT_EXTERN NSString *const MJRefreshKeyPathContentSize; +UIKIT_EXTERN NSString *const MJRefreshKeyPathContentInset; +UIKIT_EXTERN NSString *const MJRefreshKeyPathPanState; + +UIKIT_EXTERN NSString *const MJRefreshHeaderLastUpdatedTimeKey; + +UIKIT_EXTERN NSString *const MJRefreshHeaderIdleText; +UIKIT_EXTERN NSString *const MJRefreshHeaderPullingText; +UIKIT_EXTERN NSString *const MJRefreshHeaderRefreshingText; + +UIKIT_EXTERN NSString *const MJRefreshAutoFooterIdleText; +UIKIT_EXTERN NSString *const MJRefreshAutoFooterRefreshingText; +UIKIT_EXTERN NSString *const MJRefreshAutoFooterNoMoreDataText; + +UIKIT_EXTERN NSString *const MJRefreshBackFooterIdleText; +UIKIT_EXTERN NSString *const MJRefreshBackFooterPullingText; +UIKIT_EXTERN NSString *const MJRefreshBackFooterRefreshingText; +UIKIT_EXTERN NSString *const MJRefreshBackFooterNoMoreDataText; + +// 状态检查 +#define MJRefreshCheckState \ +MJRefreshState oldState = self.state; \ +if (state == oldState) return; \ +[super setState:state]; diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/MJRefreshConst.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/MJRefreshConst.m new file mode 100644 index 0000000..91e04f3 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/MJRefreshConst.m @@ -0,0 +1,28 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +#import + +const CGFloat MJRefreshHeaderHeight = 54.0; +const CGFloat MJRefreshFooterHeight = 44.0; +const CGFloat MJRefreshFastAnimationDuration = 0.25; +const CGFloat MJRefreshSlowAnimationDuration = 0.4; + +NSString *const MJRefreshKeyPathContentOffset = @"contentOffset"; +NSString *const MJRefreshKeyPathContentInset = @"contentInset"; +NSString *const MJRefreshKeyPathContentSize = @"contentSize"; +NSString *const MJRefreshKeyPathPanState = @"state"; + +NSString *const MJRefreshHeaderLastUpdatedTimeKey = @"MJRefreshHeaderLastUpdatedTimeKey"; + +NSString *const MJRefreshHeaderIdleText = @"下拉可以刷新"; +NSString *const MJRefreshHeaderPullingText = @"松开立即刷新"; +NSString *const MJRefreshHeaderRefreshingText = @"正在刷新数据中..."; + +NSString *const MJRefreshAutoFooterIdleText = @"点击或上拉加载更多"; +NSString *const MJRefreshAutoFooterRefreshingText = @"正在加载更多的数据..."; +NSString *const MJRefreshAutoFooterNoMoreDataText = @"已经全部加载完毕"; + +NSString *const MJRefreshBackFooterIdleText = @"上拉可以加载更多"; +NSString *const MJRefreshBackFooterPullingText = @"松开立即加载更多"; +NSString *const MJRefreshBackFooterRefreshingText = @"正在加载更多的数据..."; +NSString *const MJRefreshBackFooterNoMoreDataText = @"已经全部加载完毕"; \ No newline at end of file diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIScrollView+MJExtension.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIScrollView+MJExtension.h new file mode 100644 index 0000000..734110f --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIScrollView+MJExtension.h @@ -0,0 +1,23 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// UIScrollView+Extension.h +// MJRefreshExample +// +// Created by MJ Lee on 14-5-28. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import + +@interface UIScrollView (MJExtension) +@property (assign, nonatomic) CGFloat mj_insetT; +@property (assign, nonatomic) CGFloat mj_insetB; +@property (assign, nonatomic) CGFloat mj_insetL; +@property (assign, nonatomic) CGFloat mj_insetR; + +@property (assign, nonatomic) CGFloat mj_offsetX; +@property (assign, nonatomic) CGFloat mj_offsetY; + +@property (assign, nonatomic) CGFloat mj_contentW; +@property (assign, nonatomic) CGFloat mj_contentH; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIScrollView+MJExtension.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIScrollView+MJExtension.m new file mode 100644 index 0000000..6a13f5f --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIScrollView+MJExtension.m @@ -0,0 +1,110 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// UIScrollView+Extension.m +// MJRefreshExample +// +// Created by MJ Lee on 14-5-28. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import "UIScrollView+MJExtension.h" +#import + +@implementation UIScrollView (MJExtension) + +- (void)setMj_insetT:(CGFloat)mj_insetT +{ + UIEdgeInsets inset = self.contentInset; + inset.top = mj_insetT; + self.contentInset = inset; +} + +- (CGFloat)mj_insetT +{ + return self.contentInset.top; +} + +- (void)setMj_insetB:(CGFloat)mj_insetB +{ + UIEdgeInsets inset = self.contentInset; + inset.bottom = mj_insetB; + self.contentInset = inset; +} + +- (CGFloat)mj_insetB +{ + return self.contentInset.bottom; +} + +- (void)setMj_insetL:(CGFloat)mj_insetL +{ + UIEdgeInsets inset = self.contentInset; + inset.left = mj_insetL; + self.contentInset = inset; +} + +- (CGFloat)mj_insetL +{ + return self.contentInset.left; +} + +- (void)setMj_insetR:(CGFloat)mj_insetR +{ + UIEdgeInsets inset = self.contentInset; + inset.right = mj_insetR; + self.contentInset = inset; +} + +- (CGFloat)mj_insetR +{ + return self.contentInset.right; +} + +- (void)setMj_offsetX:(CGFloat)mj_offsetX +{ + CGPoint offset = self.contentOffset; + offset.x = mj_offsetX; + self.contentOffset = offset; +} + +- (CGFloat)mj_offsetX +{ + return self.contentOffset.x; +} + +- (void)setMj_offsetY:(CGFloat)mj_offsetY +{ + CGPoint offset = self.contentOffset; + offset.y = mj_offsetY; + self.contentOffset = offset; +} + +- (CGFloat)mj_offsetY +{ + return self.contentOffset.y; +} + +- (void)setMj_contentW:(CGFloat)mj_contentW +{ + CGSize size = self.contentSize; + size.width = mj_contentW; + self.contentSize = size; +} + +- (CGFloat)mj_contentW +{ + return self.contentSize.width; +} + +- (void)setMj_contentH:(CGFloat)mj_contentH +{ + CGSize size = self.contentSize; + size.height = mj_contentH; + self.contentSize = size; +} + +- (CGFloat)mj_contentH +{ + return self.contentSize.height; +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h new file mode 100644 index 0000000..e12e1c7 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h @@ -0,0 +1,19 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// UIScrollView+MJRefresh.h +// MJRefreshExample +// +// Created by MJ Lee on 15/3/4. +// Copyright (c) 2015年 小码哥. All rights reserved. +// 给ScrollView增加下拉刷新、上拉刷新的功能 + +#import + +@class MJRefreshHeader, MJRefreshFooter; + +@interface UIScrollView (MJRefresh) +/** 下拉刷新控件 */ +@property (strong, nonatomic) MJRefreshHeader *header; +/** 上拉刷新控件 */ +@property (strong, nonatomic) MJRefreshFooter *footer; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m new file mode 100644 index 0000000..2a83bd4 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m @@ -0,0 +1,60 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// UIScrollView+MJRefresh.m +// MJRefreshExample +// +// Created by MJ Lee on 15/3/4. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "UIScrollView+MJRefresh.h" +#import "MJRefreshHeader.h" +#import "MJRefreshFooter.h" +#import + +@implementation UIScrollView (MJRefresh) + +#pragma mark - header +static const char MJRefreshHeaderKey = '\0'; +- (void)setHeader:(MJRefreshHeader *)header +{ + if (header != self.header) { + // 删除旧的,添加新的 + [self.header removeFromSuperview]; + [self addSubview:header]; + + // 存储新的 + [self willChangeValueForKey:@"header"]; // KVO + objc_setAssociatedObject(self, &MJRefreshHeaderKey, + header, OBJC_ASSOCIATION_ASSIGN); + [self didChangeValueForKey:@"header"]; // KVO + } +} + +- (MJRefreshHeader *)header +{ + return objc_getAssociatedObject(self, &MJRefreshHeaderKey); +} + +#pragma mark - footer +static const char MJRefreshFooterKey = '\0'; +- (void)setFooter:(MJRefreshFooter *)footer +{ + if (footer != self.footer) { + // 删除旧的,添加新的 + [self.footer removeFromSuperview]; + [self addSubview:footer]; + + // 存储新的 + [self willChangeValueForKey:@"footer"]; // KVO + objc_setAssociatedObject(self, &MJRefreshFooterKey, + footer, OBJC_ASSOCIATION_ASSIGN); + [self didChangeValueForKey:@"footer"]; // KVO + } +} + +- (MJRefreshFooter *)footer +{ + return objc_getAssociatedObject(self, &MJRefreshFooterKey); +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIView+MJExtension.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIView+MJExtension.h new file mode 100644 index 0000000..7fde7c1 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIView+MJExtension.h @@ -0,0 +1,19 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// UIView+Extension.h +// MJRefreshExample +// +// Created by MJ Lee on 14-5-28. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import + +@interface UIView (MJExtension) +@property (assign, nonatomic) CGFloat mj_x; +@property (assign, nonatomic) CGFloat mj_y; +@property (assign, nonatomic) CGFloat mj_w; +@property (assign, nonatomic) CGFloat mj_h; +@property (assign, nonatomic) CGSize mj_size; +@property (assign, nonatomic) CGPoint mj_origin; +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIView+MJExtension.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIView+MJExtension.m new file mode 100644 index 0000000..7e8eda2 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/MJRefresh/UIView+MJExtension.m @@ -0,0 +1,84 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// UIView+Extension.m +// MJRefreshExample +// +// Created by MJ Lee on 14-5-28. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import "UIView+MJExtension.h" + +@implementation UIView (MJExtension) +- (void)setMj_x:(CGFloat)mj_x +{ + CGRect frame = self.frame; + frame.origin.x = mj_x; + self.frame = frame; +} + +- (CGFloat)mj_x +{ + return self.frame.origin.x; +} + +- (void)setMj_y:(CGFloat)mj_y +{ + CGRect frame = self.frame; + frame.origin.y = mj_y; + self.frame = frame; +} + +- (CGFloat)mj_y +{ + return self.frame.origin.y; +} + +- (void)setMj_w:(CGFloat)mj_w +{ + CGRect frame = self.frame; + frame.size.width = mj_w; + self.frame = frame; +} + +- (CGFloat)mj_w +{ + return self.frame.size.width; +} + +- (void)setMj_h:(CGFloat)mj_h +{ + CGRect frame = self.frame; + frame.size.height = mj_h; + self.frame = frame; +} + +- (CGFloat)mj_h +{ + return self.frame.size.height; +} + +- (void)setMj_size:(CGSize)mj_size +{ + CGRect frame = self.frame; + frame.size = mj_size; + self.frame = frame; +} + +- (CGSize)mj_size +{ + return self.frame.size; +} + +- (void)setMj_origin:(CGPoint)mj_origin +{ + CGRect frame = self.frame; + frame.origin = mj_origin; + self.frame = frame; +} + +- (CGPoint)mj_origin +{ + return self.frame.origin; +} +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/README.md b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/README.md new file mode 100644 index 0000000..6ba453f --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/MJRefresh/README.md @@ -0,0 +1,286 @@ +![(logo)](http://images.cnitblog.com/blog2015/497279/201505/051004492043385.png) +## MJRefresh +* The easiest way to use pull-to-refresh +* 用法最简单的下拉刷新框架:一行代码搞定 + +## Contents +* Getting Started + * [Features【支持哪些控件的刷新】](#支持哪些控件的刷新) + * [Installation【如何使用MJRefresh】](#如何使用MJRefresh) + * [Who's using【已经超过上百个App正在使用MJRefresh】](#已经超过上百个App正在使用MJRefresh) + * [Classes【MJRefresh类结构图】](#MJRefresh类结构图) +* Examples + * [Reference【参考】](#参考) + * [下拉刷新01-默认](#下拉刷新01-默认) + * [下拉刷新02-动画图片](#下拉刷新02-动画图片) + * [下拉刷新03-隐藏时间](#下拉刷新03-隐藏时间) + * [下拉刷新04-隐藏状态和时间](#下拉刷新04-隐藏状态和时间) + * [下拉刷新05-自定义文字](#下拉刷新05-自定义文字) + * [下拉刷新06-自定义刷新控件](#下拉刷新06-自定义刷新控件) + * [上拉刷新01-默认](#上拉刷新01-默认) + * [上拉刷新02-动画图片](#上拉刷新02-动画图片) + * [上拉刷新03-隐藏刷新状态的文字](#上拉刷新03-隐藏刷新状态的文字) + * [上拉刷新04-全部加载完毕](#上拉刷新04-全部加载完毕) + * [上拉刷新05-自定义文字](#上拉刷新05-自定义文字) + * [上拉刷新06-加载后隐藏](#上拉刷新06-加载后隐藏) + * [上拉刷新07-自动回弹的上拉01](#上拉刷新07-自动回弹的上拉01) + * [上拉刷新08-自动回弹的上拉02](#上拉刷新08-自动回弹的上拉02) + * [上拉刷新09-自定义刷新控件(自动刷新)](#上拉刷新09-自定义刷新控件(自动刷新)) + * [上拉刷新10-自定义刷新控件(自动回弹)](#上拉刷新10-自定义刷新控件(自动回弹)) + * [UICollectionView01-上下拉刷新](#UICollectionView01-上下拉刷新) + * [UIWebView01-下拉刷新](#UIWebView01-下拉刷新) +* [期待](#期待) + +## 支持哪些控件的刷新 +* `UIScrollView`、`UITableView`、`UICollectionView`、`UIWebView` + +## 如何使用MJRefresh +* cocoapods导入:`pod 'MJRefresh'` +* 手动导入: + * 将`MJRefresh`文件夹中的所有文件拽入项目中 + * 导入主头文件:`#import "MJRefresh.h"` + +```objc +Base Custom +MJRefresh.bundle MJRefresh.h +MJRefreshConst.h MJRefreshConst.m +UIScrollView+MJExtension.h UIScrollView+MJExtension.m +UIScrollView+MJRefresh.h UIScrollView+MJRefresh.m +UIView+MJExtension.h UIView+MJExtension.m +``` + +## 已经超过上百个App正在使用MJRefresh + +* 更多App信息可以关注:[M了个J-博客园](http://www.cnblogs.com/mjios/p/4409853.html) + +## MJRefresh类结构图 +![](http://images0.cnblogs.com/blog2015/497279/201506/132232456139177.png) +- 图中`红色文字的类`:可以直接拿来用 + - 下拉刷新控件的种类 + - 默认(Normal):`MJRefreshNormalHeader` + - 动图(Gif):`MJRefreshGifHeader` + - 上拉刷新控件的种类 + - 自动刷新(Auto) + - 默认(Normal):`MJRefreshAutoNormalFooter` + - 动图(Gif):`MJRefreshAutoGifFooter` + - 自动回弹(Back) + - 默认(Normal):`MJRefreshBackNormalFooter` + - 动图(Gif):`MJRefreshBackGifFooter` +- 图中`非红色文字的类`:拿来继承,用于自定义刷新控件 +- 关于如何自定义刷新控件,可以参考下图的类
+ + +## 参考 +```objc +* 由于这个框架的功能较多,就不写具体文字描述其用法 +* 大家可以直接参考示例中的MJTableViewController、MJCollectionViewController、MJWebViewController,更为直观快速 +``` + + +## 下拉刷新01-默认 +```objc +self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + // 进入刷新状态后会自动调用这个block +}]; +或 +// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法) +self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)]; + +// 马上进入刷新状态 +[self.tableView.header beginRefreshing]; +``` +![(下拉刷新01-普通)](http://images0.cnblogs.com/blog2015/497279/201506/141204343486151.gif) + +## 下拉刷新02-动画图片 +```objc +// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法) +MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)]; +// 设置普通状态的动画图片 +[header setImages:idleImages forState:MJRefreshStateIdle]; +// 设置即将刷新状态的动画图片(一松开就会刷新的状态) +[header setImages:pullingImages forState:MJRefreshStatePulling]; +// 设置正在刷新状态的动画图片 +[header setImages:refreshingImages forState:MJRefreshStateRefreshing]; +// 设置header +self.tableView.header = header; +``` +![(下拉刷新02-动画图片)](http://images0.cnblogs.com/blog2015/497279/201506/141204402238389.gif) + +## 下拉刷新03-隐藏时间 +```objc +// 隐藏时间 +header.lastUpdatedTimeLabel.hidden = YES; +``` +![(下拉刷新03-隐藏时间)](http://images0.cnblogs.com/blog2015/497279/201506/141204456132944.gif) + +## 下拉刷新04-隐藏状态和时间 +```objc +// 隐藏时间 +header.lastUpdatedTimeLabel.hidden = YES; + +// 隐藏状态 +header.stateLabel.hidden = YES; +``` +![(下拉刷新04-隐藏状态和时间0)](http://images0.cnblogs.com/blog2015/497279/201506/141204508639539.gif) + +## 下拉刷新05-自定义文字 +```objc +// 设置文字 +[header setTitle:@"Pull down to refresh" forState:MJRefreshStateIdle]; +[header setTitle:@"Release to refresh" forState:MJRefreshStatePulling]; +[header setTitle:@"Loading ..." forState:MJRefreshStateRefreshing]; + +// 设置字体 +header.stateLabel.font = [UIFont systemFontOfSize:15]; +header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14]; + +// 设置颜色 +header.stateLabel.textColor = [UIColor redColor]; +header.lastUpdatedTimeLabel.textColor = [UIColor blueColor]; +``` +![(下拉刷新05-自定义文字)](http://images0.cnblogs.com/blog2015/497279/201506/141204563633593.gif) + +## 下拉刷新06-自定义刷新控件 +```objc +self.tableView.header = [MJDIYHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)]; +// 具体实现参考MJDIYHeader.h和MJDIYHeader.m +``` +![(下拉刷新06-自定义刷新控件)](http://images0.cnblogs.com/blog2015/497279/201506/141205019261159.gif) + +## 上拉刷新01-默认 +```objc +self.tableView.footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{ + // 进入刷新状态后会自动调用这个block +}]; +或 +// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法) +self.tableView.footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)]; +``` +![(上拉刷新01-默认)](http://images0.cnblogs.com/blog2015/497279/201506/141205090047696.gif) + +## 上拉刷新02-动画图片 +```objc +// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法) +MJRefreshAutoGifFooter *footer = [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)]; + +// 设置刷新图片 +[footer setImages:refreshingImages forState:MJRefreshStateRefreshing]; + +// 设置尾部 +self.tableView.footer = footer; +``` +![(上拉刷新02-动画图片)](http://images0.cnblogs.com/blog2015/497279/201506/141205141445793.gif) + +## 上拉刷新03-隐藏刷新状态的文字 +```objc +// 隐藏刷新状态的文字 +footer.refreshingTitleHidden = YES; +// 如果没有上面的方法,就用footer.stateLabel.hidden = YES; +``` +![(上拉刷新03-隐藏刷新状态的文字)](http://images0.cnblogs.com/blog2015/497279/201506/141205200985774.gif) + +## 上拉刷新04-全部加载完毕 +```objc +// 变为没有更多数据的状态 +[footer noticeNoMoreData]; +``` +![(上拉刷新04-全部加载完毕)](http://images0.cnblogs.com/blog2015/497279/201506/141205248634686.gif) + +## 上拉刷新05-自定义文字 +```objc +// 设置文字 +[footer setTitle:@"Click or drag up to refresh" forState:MJRefreshStateIdle]; +[footer setTitle:@"Loading more ..." forState:MJRefreshStateRefreshing]; +[footer setTitle:@"No more data" forState:MJRefreshStateNoMoreData]; + +// 设置字体 +footer.stateLabel.font = [UIFont systemFontOfSize:17]; + +// 设置颜色 +footer.stateLabel.textColor = [UIColor blueColor]; +``` +![(上拉刷新05-自定义文字)](http://images0.cnblogs.com/blog2015/497279/201506/141205295511153.gif) + +## 上拉刷新06-加载后隐藏 +```objc +// 隐藏当前的上拉刷新控件 +self.tableView.footer.hidden = YES; +``` +![(上拉刷新06-加载后隐藏)](http://images0.cnblogs.com/blog2015/497279/201506/141205343481821.gif) + +## 上拉刷新07-自动回弹的上拉01 +```objc +self.tableView.footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)]; +``` +![(上拉刷新07-自动回弹的上拉01)](http://images0.cnblogs.com/blog2015/497279/201506/141205392239231.gif) + +## 上拉刷新08-自动回弹的上拉02 +```objc +MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)]; + +// 设置普通状态的动画图片 +[footer setImages:idleImages forState:MJRefreshStateIdle]; +// 设置即将刷新状态的动画图片(一松开就会刷新的状态) +[footer setImages:pullingImages forState:MJRefreshStatePulling]; +// 设置正在刷新状态的动画图片 +[footer setImages:refreshingImages forState:MJRefreshStateRefreshing]; + +// 设置尾部 +self.tableView.footer = footer; +``` +![(上拉刷新07-自动回弹的上拉02)](http://images0.cnblogs.com/blog2015/497279/201506/141205441443628.gif) + +## 上拉刷新09-自定义刷新控件(自动刷新) +```objc +self.tableView.footer = [MJDIYAutoFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)]; +// 具体实现参考MJDIYAutoFooter.h和MJDIYAutoFooter.m +``` +![(上拉刷新09-自定义刷新控件(自动刷新))](http://images0.cnblogs.com/blog2015/497279/201506/141205500195866.gif) + +## 上拉刷新10-自定义刷新控件(自动回弹) +```objc +self.tableView.footer = [MJDIYBackFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)]; +// 具体实现参考MJDIYBackFooter.h和MJDIYBackFooter.m +``` +![(上拉刷新10-自定义刷新控件(自动回弹))](http://images0.cnblogs.com/blog2015/497279/201506/141205560666819.gif) + +## UICollectionView01-上下拉刷新 +```objc +// 下拉刷新 +self.collectionView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + // 进入刷新状态后会自动调用这个block +}]; + +// 上拉刷新 +self.collectionView.footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{ + // 进入刷新状态后会自动调用这个block +}]; +``` +![(UICollectionView01-上下拉刷新)](http://images0.cnblogs.com/blog2015/497279/201506/141206021603758.gif) + +## UIWebView01-下拉刷新 +```objc +// 添加下拉刷新控件 +self.webView.scrollView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + // 进入刷新状态后会自动调用这个block +}]; +``` +![(UICollectionView01-上下拉刷新)](http://images0.cnblogs.com/blog2015/497279/201506/141206080514524.gif) + +## 提醒 +* 本框架纯ARC,兼容的系统>=iOS6.0、iPhone\iPad横竖屏 + +## 期待 +* 如果在使用过程中遇到BUG,希望你能Issues我,谢谢(或者尝试下载最新的框架代码看看BUG修复没有) +* 如果在使用过程中发现功能不够用,希望你能Issues我,我非常想为这个框架增加更多好用的功能,谢谢 +* 如果你想为MJRefresh输出代码,请拼命Pull Requests我 +* 一起携手打造天朝乃至世界最好用的刷新框架,做天朝程序员的骄傲 +* 如果你开发的应用中用到了MJRefresh,希望你能到[CocoaControls](https://www.cocoacontrols.com/controls/mjrefresh)添加你应用的iTunes路径,我将会安装使用你的应用,并且根据众多应用的使用情况,对MJRefresh进行一个更好的设计和完善,提供更多好用的功能,谢谢 + * 步骤01(微信是举个例子,百度“你的应用名称 itunes”) +![(step01)](http://ww4.sinaimg.cn/mw1024/800cdf9ctw1eq0viiv5rsj20sm0ea41t.jpg) + * 步骤02 +![(step02)](http://ww2.sinaimg.cn/mw1024/800cdf9ctw1eq0vilejxlj20tu0me7a0.jpg) + * 步骤03 +![(step03)](http://ww1.sinaimg.cn/mw1024/800cdf9ctw1eq0viocpo5j20wc0dc0un.jpg) + * 步骤04 +![(step04)](http://ww3.sinaimg.cn/mw1024/800cdf9ctw1eq0vir137xj20si0gewgu.jpg) \ No newline at end of file diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/XYString/XYString.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/XYString/XYString.h new file mode 100644 index 0000000..42c2397 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/XYString/XYString.h @@ -0,0 +1,60 @@ + +#import +#import + +@interface XYString : NSObject + +#pragma mark - json转换 ++(id )getObjectFromJsonString:(NSString *)jsonString; ++(NSString *)getJsonStringFromObject:(id)object; + +#pragma mark - NSDate互转NSString ++(NSDate *)NSStringToDate:(NSString *)dateString; ++(NSDate *)NSStringToDate:(NSString *)dateString withFormat:(NSString *)formatestr; ++(NSString *)NSDateToString:(NSDate *)dateFromString withFormat:(NSString *)formatestr; + +#pragma mark - 判断字符串是否为空,为空的话返回 “” (一般用于保存字典时) ++(NSString *)IsNotNull:(NSString*)string; ++(BOOL) isBlankString:(id)string; + + +#pragma mark - 如何通过一个整型的变量来控制数值保留的小数点位数。以往我们通类似@"%.2f"来指定保留2位小数位,现在我想通过一个变量来控制保留的位数 ++(NSString *)newFloat:(float)value withNumber:(int)numberOfPlace; + + +#pragma mark - 使用subString去除float后面无效的0 ++(NSString *)changeFloatWithString:(NSString *)stringFloat; + +#pragma mark - 去除float后面无效的0 ++(NSString *)changeFloatWithFloat:(CGFloat)floatValue; + + +#pragma mark - 手机号码验证 ++(BOOL) isValidateMobile:(NSString *)mobile; + +#pragma mark - 阿里云压缩图片 ++(NSURL*)UrlWithStringForImage:(NSString*)string; ++(NSString*)removeYaSuoAttribute:(NSString*)string; + +#pragma mark - 字符串类型判断 ++ (BOOL)isPureInt:(NSString*)string; ++ (BOOL)isPureFloat:(NSString*)string; + +#pragma mark - 计算内容文本的高度方法 ++ (CGFloat)HeightForText:(NSString *)text withSizeOfLabelFont:(CGFloat)font withWidthOfContent:(CGFloat)contentWidth; + +#pragma mark - 计算字符串长度 ++ (CGFloat)WidthForString:(NSString *)text withSizeOfFont:(CGFloat)font; + + +#pragma mark - 计算两个时间相差多少秒 + ++(NSInteger)getSecondsWithBeginDate:(NSString*)currentDateString AndEndDate:(NSString*)tomDateString; + +#pragma mark - 根据出生日期获取年龄 ++ (NSInteger)ageWithDateOfBirth:(NSDate *)date; + +#pragma mark - 根据经纬度计算两个位置之间的距离 ++(double)distanceBetweenOrderBylat1:(double)lat1 lat2:(double)lat2 lng1:(double)lng1 lng2:(double)lng2; + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/XYString/XYString.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/XYString/XYString.m new file mode 100644 index 0000000..8a23b6e --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/Lib/XYString/XYString.m @@ -0,0 +1,271 @@ + + +#import "XYString.h" + +@implementation XYString + +#pragma mark - json转换 ++(id )getObjectFromJsonString:(NSString *)jsonString +{ + NSError *error = nil; + if (jsonString) { + id rev=[NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUnicodeStringEncoding] options:NSJSONReadingMutableLeaves error:&error]; + if (error==nil) { + return rev; + } + else + { + return nil; + } + } + return nil; +} + ++(NSString *)getJsonStringFromObject:(id)object +{ + if ([NSJSONSerialization isValidJSONObject:object]) + + { + + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:object options:0 error:nil]; + + + + return [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding]; + + } + + return nil; +} + +#pragma mark - NSDate互转NSString ++(NSDate *)NSStringToDate:(NSString *)dateString +{ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; + NSDate *dateFromString = [[NSDate alloc] init]; + dateFromString = [dateFormatter dateFromString:dateString]; + return dateFromString; +} + ++(NSDate *)NSStringToDate:(NSString *)dateString withFormat:(NSString *)formatestr{ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setDateFormat:formatestr]; + NSDate *dateFromString = [[NSDate alloc] init]; + dateFromString = [dateFormatter dateFromString:dateString]; + return dateFromString; +} + ++(NSString *)NSDateToString:(NSDate *)dateFromString withFormat:(NSString *)formatestr +{ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setDateFormat:formatestr]; + NSString *strDate = [dateFormatter stringFromDate:dateFromString]; + return strDate; +} + +#pragma mark - 判断字符串是否为空,为空的话返回 “” (一般用于保存字典时) ++(NSString *)IsNotNull:(id)string +{ + NSString * str = (NSString*)string; + if ([self isBlankString:str]){ + string = @""; + } + return string; + +} + +//..判断字符串是否为空字符的方法 ++(BOOL) isBlankString:(id)string { + NSString * str = (NSString*)string; + if ([str isEqualToString:@"(null)"]) { + return YES; + } + if (str == nil || str == NULL) { + return YES; + } + if ([str isKindOfClass:[NSNull class]]) { + return YES; + } + if ([[str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0) { + return YES; + } + return NO; +} + + +#pragma mark - 使用subString去除float后面无效的0 ++(NSString *)changeFloatWithString:(NSString *)stringFloat + +{ + const char *floatChars = [stringFloat UTF8String]; + NSUInteger length = [stringFloat length]; + NSUInteger zeroLength = 0; + NSInteger i = length-1; + for(; i>=0; i--) + { + if(floatChars[i] == '0') { + zeroLength++; + } else { + if(floatChars[i] == '.') + i--; + break; + } + } + NSString *returnString; + if(i == -1) { + returnString = @"0"; + } else { + returnString = [stringFloat substringToIndex:i+1]; + } + return returnString; +} + +#pragma mark - 去除float后面无效的0 ++(NSString *)changeFloatWithFloat:(CGFloat)floatValue + +{ + return [self changeFloatWithString:[NSString stringWithFormat:@"%f",floatValue]]; +} + +#pragma mark - 如何通过一个整型的变量来控制数值保留的小数点位数。以往我们通类似@"%.2f"来指定保留2位小数位,现在我想通过一个变量来控制保留的位数 ++(NSString *)newFloat:(float)value withNumber:(int)numberOfPlace +{ + NSString *formatStr = @"%0."; + formatStr = [formatStr stringByAppendingFormat:@"%df", numberOfPlace]; + NSLog(@"____%@",formatStr); + + formatStr = [NSString stringWithFormat:formatStr, value]; + NSLog(@"____%@",formatStr); + + printf("formatStr %s\n", [formatStr UTF8String]); + return formatStr; +} + + +#pragma mark - 手机号码验证 ++(BOOL) isValidateMobile:(NSString *)mobile +{ + /* + //手机号以13, 15,18开头,八个 \d 数字字符 + NSString *phoneRegex = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$"; + NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex]; + return [phoneTest evaluateWithObject:mobile]; + */ + + NSPredicate* phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"1[34578]([0-9]){9}"]; + + return [phoneTest evaluateWithObject:mobile]; + +} + +#pragma mark - 阿里云压缩图片 ++(NSURL*)UrlWithStringForImage:(NSString*)string{ + NSString * str = [NSString stringWithFormat:@"%@@800w_600h_10Q.jpg",string]; + NSLog(@"加载图片地址=%@",str); + return [NSURL URLWithString:str]; +} + +//..去掉压缩属性“@800w_600h_10Q.jpg” ++(NSString*)removeYaSuoAttribute:(NSString*)string{ + NSString * str = @""; + if ([string rangeOfString:@"@"].location != NSNotFound) { + NSArray * arry = [string componentsSeparatedByString:@"@"]; + str = arry[0]; + } + return str; +} + +#pragma mark - 字符串类型判断 +//..判断是否为整形: ++ (BOOL)isPureInt:(NSString*)string{ + NSScanner* scan = [NSScanner scannerWithString:string]; + int val; + return[scan scanInt:&val] && [scan isAtEnd]; +} + +//判断是否为浮点形: ++ (BOOL)isPureFloat:(NSString*)string{ + NSScanner* scan = [NSScanner scannerWithString:string]; + float val; + return[scan scanFloat:&val] && [scan isAtEnd]; +} + + +#pragma mark - 计算内容文本的高度方法 ++ (CGFloat)HeightForText:(NSString *)text withSizeOfLabelFont:(CGFloat)font withWidthOfContent:(CGFloat)contentWidth +{ + NSDictionary *dict = @{NSFontAttributeName:[UIFont systemFontOfSize:font]}; + CGSize size = CGSizeMake(contentWidth, 2000); + CGRect frame = [text boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil]; + return frame.size.height; +} + +#pragma mark - 计算字符串长度 ++ (CGFloat)WidthForString:(NSString *)text withSizeOfFont:(CGFloat)font +{ + NSDictionary *dict = @{NSFontAttributeName:[UIFont systemFontOfSize:font]}; + CGSize size = [text sizeWithAttributes:dict]; + return size.width; +} + + + +#pragma mark - 计算两个时间相差多少秒 + ++(NSInteger)getSecondsWithBeginDate:(NSString*)currentDateString AndEndDate:(NSString*)tomDateString{ + + NSDate * currentDate = [XYString NSStringToDate:currentDateString withFormat:@"yyyy-MM-dd HH:mm:ss"]; + NSInteger currSec = [currentDate timeIntervalSince1970]; + + NSDate *tomDate = [XYString NSStringToDate:tomDateString withFormat:@"yyyy-MM-dd HH:mm:ss"]; + NSInteger tomSec = [tomDate timeIntervalSince1970]; + + NSInteger newSec = tomSec - currSec; + NSLog(@"相差秒:%ld",(long)newSec); + return newSec; +} + + +#pragma mark - 根据出生日期获取年龄 ++ (NSInteger)ageWithDateOfBirth:(NSDate *)date; +{ + // 出生日期转换 年月日 + NSDateComponents *components1 = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:date]; + NSInteger brithDateYear = [components1 year]; + NSInteger brithDateDay = [components1 day]; + NSInteger brithDateMonth = [components1 month]; + + // 获取系统当前 年月日 + NSDateComponents *components2 = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]]; + NSInteger currentDateYear = [components2 year]; + NSInteger currentDateDay = [components2 day]; + NSInteger currentDateMonth = [components2 month]; + + // 计算年龄 + NSInteger iAge = currentDateYear - brithDateYear - 1; + if ((currentDateMonth > brithDateMonth) || (currentDateMonth == brithDateMonth && currentDateDay >= brithDateDay)) { + iAge++; + } + + return iAge; +} + + +#pragma mark - 根据经纬度计算两个位置之间的距离 ++(double)distanceBetweenOrderBylat1:(double)lat1 lat2:(double)lat2 lng1:(double)lng1 lng2:(double)lng2{ + double dd = M_PI/180; + double x1=lat1*dd,x2=lat2*dd; + double y1=lng1*dd,y2=lng2*dd; + double R = 6371004; + double distance = (2*R*asin(sqrt(2-2*cos(x1)*cos(x2)*cos(y1-y2) - 2*sin(x1)*sin(x2))/2)); + //返回km + return distance/1000; + + //返回m + //return distance; + +} + + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Ads.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Ads.h new file mode 100644 index 0000000..b8e242f --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Ads.h @@ -0,0 +1,19 @@ +// +// Ads.h +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import + +@interface Ads : NSObject + +@property (nonatomic,copy) NSString *title; +@property (nonatomic,copy) NSString *tag; +@property (nonatomic,copy) NSString *imgsrc; +@property (nonatomic,copy) NSString *subtitle; +@property (nonatomic,copy) NSString *url; + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Ads.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Ads.m new file mode 100644 index 0000000..89d7f8c --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Ads.m @@ -0,0 +1,13 @@ +// +// Ads.m +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import "Ads.h" + +@implementation Ads + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Editor.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Editor.h new file mode 100644 index 0000000..cb16dea --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Editor.h @@ -0,0 +1,13 @@ +// +// Editor.h +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import + +@interface Editor : NSObject + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Editor.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Editor.m new file mode 100644 index 0000000..78643cf --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Editor.m @@ -0,0 +1,13 @@ +// +// Editor.m +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import "Editor.h" + +@implementation Editor + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Imgextra.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Imgextra.h new file mode 100644 index 0000000..d5a540c --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Imgextra.h @@ -0,0 +1,14 @@ +// +// Imgextra.h +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import + +@interface Imgextra : NSObject +@property (nonatomic,copy) NSString *imgsrc; + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Imgextra.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Imgextra.m new file mode 100644 index 0000000..9a885b9 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/model/Imgextra.m @@ -0,0 +1,13 @@ +// +// Imgextra.m +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import "Imgextra.h" + +@implementation Imgextra + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/model/ThreeModel.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/model/ThreeModel.h new file mode 100644 index 0000000..988e78c --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/model/ThreeModel.h @@ -0,0 +1,129 @@ +// +// ThreeModel.h +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import +#import "Ads.h" +#import "Imgextra.h" +#import "Editor.h" + +@interface ThreeModel : NSObject + +@property (nonatomic,copy) NSString *tname; + +/** + * 新闻发布时间 + */ +@property (nonatomic,copy) NSString *ptime; + +/** + * 标题 + */ +@property (nonatomic,copy) NSString *title; + +/** + * 跟帖人数 + */ +@property (nonatomic,copy)NSNumber *replyCount; + +/** + * 新闻ID + */ +@property (nonatomic,copy) NSString *docid; + +/** + * 图片连接 + */ +@property (nonatomic,copy) NSString *imgsrc; + +/** + * 描述 + */ +@property (nonatomic,copy) NSString *digest; + +/** + * 大图样式 + */ +@property (nonatomic,copy)NSNumber *imgType; + + +/** + * 多图数组 + * 里面放的是Imgextra模型 + */ +@property (nonatomic,strong)NSArray *imgextra; + +/** + * 里面放的是Editor模型 + */ +@property (nonatomic,strong)NSArray *editor; + +/** + * 里面放的是Ads模型 + */ +@property (nonatomic,strong)NSArray *ads; + +@property (nonatomic,strong)NSArray *videoID; +@property (nonatomic,strong)NSArray *specialextra; +@property (nonatomic,strong)NSArray *applist; + +@property (nonatomic,copy) NSString *photosetID; +@property (nonatomic,copy)NSNumber *hasHead; +@property (nonatomic,copy)NSNumber *hasImg; +@property (nonatomic,copy) NSString *lmodify; +@property (nonatomic,copy) NSString *template; +@property (nonatomic,copy) NSString *skipType; + + +@property (nonatomic,copy)NSNumber *votecount; +@property (nonatomic,copy)NSNumber *voteCount; +@property (nonatomic,copy) NSString *alias; + + +@property (nonatomic,assign)BOOL hasCover; +@property (nonatomic,copy)NSNumber *hasAD; +@property (nonatomic,copy)NSNumber *priority; +@property (nonatomic,copy) NSString *cid; + + +@property (nonatomic,assign)BOOL hasIcon; +@property (nonatomic,copy) NSString *ename; +@property (nonatomic,copy) NSString *skipID; +@property (nonatomic,copy)NSNumber *order; + + + +@property (nonatomic,copy) NSString *url_3w; +@property (nonatomic,copy) NSString *specialID; +@property (nonatomic,copy) NSString *timeConsuming; +@property (nonatomic,copy) NSString *subtitle; +@property (nonatomic,copy) NSString *adTitle; +@property (nonatomic,copy) NSString *url; +@property (nonatomic,copy) NSString *source; + + +@property (nonatomic,copy) NSString *TAGS; +@property (nonatomic,copy) NSString *TAG; + + +@property (nonatomic,copy) NSString *boardid; +@property (nonatomic,copy) NSString *commentid; +@property (nonatomic,copy)NSNumber *speciallogo; +@property (nonatomic,copy) NSString *specialtip; +@property (nonatomic,copy) NSString *specialadlogo; + +@property (nonatomic,copy) NSString *pixel; + + +@property (nonatomic,copy) NSString *wap_portal; +@property (nonatomic,copy) NSString *live_info; + + + +@property (nonatomic,copy) NSString *videosource; + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/model/ThreeModel.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/model/ThreeModel.m new file mode 100644 index 0000000..c582bfb --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/model/ThreeModel.m @@ -0,0 +1,22 @@ +// +// ThreeModel.m +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import "ThreeModel.h" +#import "MJExtension.h" +@implementation ThreeModel + ++(NSDictionary*)mj_objectClassInArray{ + + return @{ + @"imgextra":@"Imgextra", + @"editor":@"Editor", + @"ads":@"Ads" + }; +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeBaseCell.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeBaseCell.h new file mode 100644 index 0000000..b7fa426 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeBaseCell.h @@ -0,0 +1,60 @@ +// +// ThreeBaseCell.h +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import +#import "UIView+SDAutoLayout.h" +#import "UIImageView+WebCache.h" +#import "SDCycleScrollView.h" +#import "ThreeModel.h" + +@interface ThreeBaseCell : UITableViewCell + +/** + * 图片 + */ +@property (strong, nonatomic) UIImageView *imgIcon; + + +/** + * 标题 + */ +@property (strong, nonatomic) UILabel *lblTitle; + + +/** + * 描述 + */ +@property (strong, nonatomic) UILabel *lblSubtitle; + +/** + * 第二张图片(如果有的话) + */ +@property (strong, nonatomic) UIImageView *imgOther1; + + +/** + * 第三张图片(如果有的话) + */ +@property (strong, nonatomic) UIImageView *imgOther2; + +/** + * 底部分界线 + */ +@property (strong, nonatomic) UIView *lineView; + +/** + * 滚动图片区 + */ +@property(nonatomic ,strong) SDCycleScrollView * cycleScrollView; + +// 数据模型 +@property(nonatomic ,strong) ThreeModel * threeModel; + ++(NSString *)cellIdentifierForRow:(ThreeModel *)threeModel; + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeBaseCell.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeBaseCell.m new file mode 100644 index 0000000..e592ca7 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeBaseCell.m @@ -0,0 +1,62 @@ +// +// ThreeBaseCell.m +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#define rgba(r,g,b,a) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:a] + +#import "ThreeBaseCell.h" + +@implementation ThreeBaseCell + +// 获取数据类型对应的cell ++(NSString *)cellIdentifierForRow:(ThreeModel *)threeModel{ + + if (threeModel.hasHead){ + return @"ThreeFourthCell"; + }else if (threeModel.imgType){ + return @"ThreeThirdCell"; + }else if (threeModel.imgextra){ + return @"ThreeSecondCell"; + }else{ + return @"ThreeFirstCell"; + } + +} + +-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ + + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + + self.imgIcon = [UIImageView new]; + [self.contentView addSubview:self.imgIcon]; + + self.lblTitle = [UILabel new]; + self.lblTitle.font = [UIFont systemFontOfSize:15]; + [self.contentView addSubview:self.lblTitle]; + + self.lblSubtitle = [UILabel new]; + self.lblSubtitle.textColor = [UIColor grayColor]; + self.lblSubtitle.font = [UIFont systemFontOfSize:13]; + [self.contentView addSubview:self.lblSubtitle]; + + self.lineView = [UIView new]; + self.lineView.backgroundColor = rgba(238, 238, 238, 1.0); + [self.contentView addSubview:self.lineView]; + + self.imgOther1 = [UIImageView new]; + [self.contentView addSubview:self.imgOther1]; + + self.imgOther2 = [UIImageView new]; + [self.contentView addSubview:self.imgOther2]; + + + } + return self; +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeFirstCell.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeFirstCell.h new file mode 100644 index 0000000..2cb8a6d --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeFirstCell.h @@ -0,0 +1,13 @@ +// +// ThreeFirstCell.h +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import "ThreeBaseCell.h" + +@interface ThreeFirstCell : ThreeBaseCell + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeFirstCell.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeFirstCell.m new file mode 100644 index 0000000..d64450f --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeFirstCell.m @@ -0,0 +1,67 @@ +// +// ThreeFirstCell.m +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import "ThreeFirstCell.h" + +@implementation ThreeFirstCell + + +-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ + + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + + [self setup]; + } + return self; +} + +-(void)setup{ + + + // 设置约束 + CGFloat margin = 10; + + self.imgIcon.sd_layout + .leftSpaceToView(self.contentView,margin) + .topSpaceToView(self.contentView,margin) + .widthIs(90) + .heightIs(65); + + self.lblTitle.sd_layout + .leftSpaceToView(self.imgIcon ,margin) + .topSpaceToView(self.contentView,margin) + .rightSpaceToView(self.contentView,margin) + .heightIs(21); + + self.lblSubtitle.sd_layout + .topSpaceToView(self.lblTitle,margin) + .leftSpaceToView(self.imgIcon,margin) + .rightSpaceToView(self.contentView,margin) + .autoHeightRatio(0); + + self.lineView.sd_layout + .topSpaceToView(self.imgIcon,margin) + .rightSpaceToView(self.contentView,0) + .leftSpaceToView(self.contentView,0) + .heightIs(1); + + [self setupAutoHeightWithBottomView:self.lineView bottomMargin:0]; +} + + +-(void)setThreeModel:(ThreeModel *)threeModel{ + + self.lblTitle.text = threeModel.title; + self.lblSubtitle.text = [NSString stringWithFormat:@"%@",threeModel.digest]; + [self.imgIcon sd_setImageWithURL:[NSURL URLWithString:threeModel.imgsrc] placeholderImage:[UIImage imageNamed:@"303"]]; + +} + + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeFourthCell.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeFourthCell.h new file mode 100644 index 0000000..6873344 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeFourthCell.h @@ -0,0 +1,13 @@ +// +// ThreeFourthCell.h +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import "ThreeBaseCell.h" + +@interface ThreeFourthCell : ThreeBaseCell + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeFourthCell.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeFourthCell.m new file mode 100644 index 0000000..ce20ad4 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeFourthCell.m @@ -0,0 +1,65 @@ +// +// ThreeFourthCell.m +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import "ThreeFourthCell.h" + +@implementation ThreeFourthCell + +-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ + + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + + [self setup]; + } + return self; +} + + +-(void)setup{ + // 滚动图片区 + self.cycleScrollView = [[SDCycleScrollView alloc] init]; + [self.contentView addSubview:self.cycleScrollView]; + + + //设置约束 + CGFloat margin = 0; + self.cycleScrollView.sd_layout + .topSpaceToView(self.contentView,margin) + .leftSpaceToView(self.contentView,margin) + .rightSpaceToView(self.contentView,margin) + .heightIs(175); + + [self setupAutoHeightWithBottomView:self.cycleScrollView bottomMargin:0]; + + +} + +-(void)setThreeModel:(ThreeModel *)threeModel{ + + // 获取滚动图片区数据 + NSMutableArray * imagesURLStrings = [NSMutableArray array]; + NSMutableArray * titles = [NSMutableArray array]; + [threeModel.ads enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + Ads * ads = (Ads*)obj; + [imagesURLStrings addObject:ads.imgsrc]; + [titles addObject:ads.title]; + + }]; + + self.cycleScrollView.pageControlAliment = SDCycleScrollViewPageContolAlimentRight;// 分页控件位置 + self.cycleScrollView.pageControlStyle = SDCycleScrollViewPageContolStyleClassic;// 分页控件风格 + self.cycleScrollView.delegate = self; + self.cycleScrollView.titlesGroup = titles; + self.cycleScrollView.imageURLStringsGroup = imagesURLStrings; + self.cycleScrollView.currentPageDotColor = [UIColor whiteColor]; // 自定义分页控件小圆标颜色 + self.cycleScrollView.placeholderImage = [UIImage imageNamed:@"303"]; + +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeSecondCell.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeSecondCell.h new file mode 100644 index 0000000..6eaca4c --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeSecondCell.h @@ -0,0 +1,13 @@ +// +// ThreeSecondCell.h +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import "ThreeBaseCell.h" + +@interface ThreeSecondCell : ThreeBaseCell + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeSecondCell.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeSecondCell.m new file mode 100644 index 0000000..cf724f3 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeSecondCell.m @@ -0,0 +1,78 @@ +// +// ThreeSecondCell.m +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import "ThreeSecondCell.h" + +@implementation ThreeSecondCell + + +-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ + + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + + [self setup]; + } + return self; +} + +-(void)setup{ + + // 设置约束 + CGFloat margin = 10; + UIView * contentView = self.contentView; + + NSArray * equalSubViews = [NSArray arrayWithObjects:self.imgIcon,self.imgOther1,self.imgOther2,nil]; + self.contentView.sd_equalWidthSubviews = equalSubViews; + + self.lblTitle.sd_layout + .topSpaceToView(contentView,margin) + .leftSpaceToView(contentView,margin) + .rightSpaceToView(contentView,margin) + .heightIs(21); + + self.imgIcon.sd_layout + .leftSpaceToView(contentView,margin) + .topSpaceToView(self.lblTitle,margin) + .autoHeightRatio(0.75); + + self.imgOther1.sd_layout + .leftSpaceToView(self.imgIcon,margin) + .topSpaceToView(self.lblTitle,margin) + .autoHeightRatio(0.75); + + self.imgOther2.sd_layout + .leftSpaceToView(self.imgOther1,margin) + .rightSpaceToView(contentView,margin) + .topSpaceToView(self.lblTitle,margin) + .autoHeightRatio(0.75); + + self.lineView.sd_layout + .topSpaceToView(self.imgOther2,margin) + .leftSpaceToView(contentView,margin) + .rightSpaceToView(contentView,margin) + .heightIs(1); + + [self setupAutoHeightWithBottomView:self.lineView bottomMargin:0]; + +} + +-(void)setThreeModel:(ThreeModel *)threeModel{ + + + [self.imgIcon sd_setImageWithURL:[NSURL URLWithString:threeModel.imgsrc] placeholderImage:[UIImage imageNamed:@"303"]]; + self.lblTitle.text = threeModel.title; + + // 多图 + Imgextra * imgextra1 = threeModel.imgextra[0]; + Imgextra * imgextra2 = threeModel.imgextra[1]; + [self.imgOther1 sd_setImageWithURL:[NSURL URLWithString:imgextra1.imgsrc] placeholderImage:[UIImage imageNamed:@"303"]]; + [self.imgOther2 sd_setImageWithURL:[NSURL URLWithString:imgextra2.imgsrc] placeholderImage:[UIImage imageNamed:@"303"]]; +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeThirdCell.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeThirdCell.h new file mode 100644 index 0000000..55718cf --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeThirdCell.h @@ -0,0 +1,13 @@ +// +// ThreeThirdCell.h +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import "ThreeBaseCell.h" + +@interface ThreeThirdCell : ThreeBaseCell + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeThirdCell.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeThirdCell.m new file mode 100644 index 0000000..cf9ff44 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeThirdCell.m @@ -0,0 +1,65 @@ +// +// ThreeThirdCell.m +// SDAutoLayoutDemo +// +// Created by lixiya on 16/1/14. +// Copyright © 2016年 lixiya. All rights reserved. +// + +#import "ThreeThirdCell.h" + +@implementation ThreeThirdCell + + +-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ + + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + + [self setup]; + } + return self; +} + +-(void)setup{ + + // 设置约束 + CGFloat margin = 10; + + self.lblTitle.sd_layout + .leftSpaceToView(self.contentView,margin) + .rightSpaceToView(self.contentView,margin) + .topSpaceToView(self.contentView,margin) + .heightIs(21); + + self.imgIcon.sd_layout + .topSpaceToView(self.lblTitle,margin) + .rightSpaceToView(self.contentView,margin) + .leftSpaceToView(self.contentView,margin) + .heightIs(130); + + self.lblSubtitle.sd_layout + .topSpaceToView(self.imgIcon,margin) + .rightSpaceToView(self.contentView,margin) + .leftSpaceToView(self.contentView,margin) + .autoHeightRatio(0); + + self.lineView.sd_layout + .topSpaceToView(self.lblSubtitle,margin) + .rightSpaceToView(self.contentView,0) + .leftSpaceToView(self.contentView,0) + .heightIs(1); + + [self setupAutoHeightWithBottomView:self.lineView bottomMargin:0]; + +} + +-(void)setThreeModel:(ThreeModel *)threeModel{ + + self.lblTitle.text = threeModel.title; + self.lblSubtitle.text = [NSString stringWithFormat:@"%@",threeModel.digest]; + [self.imgIcon sd_setImageWithURL:[NSURL URLWithString:threeModel.imgsrc] placeholderImage:[UIImage imageNamed:@"303"]]; + +} + +@end diff --git a/SDAutoLayoutDemo/Info.plist b/SDAutoLayoutDemo/Info.plist index 40c6215..9c07aa9 100644 --- a/SDAutoLayoutDemo/Info.plist +++ b/SDAutoLayoutDemo/Info.plist @@ -43,5 +43,10 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + diff --git a/SDAutoLayoutDemo/Others/DemoTableViewControler.m b/SDAutoLayoutDemo/Others/DemoTableViewControler.m index 864fa96..3765baf 100644 --- a/SDAutoLayoutDemo/Others/DemoTableViewControler.m +++ b/SDAutoLayoutDemo/Others/DemoTableViewControler.m @@ -37,6 +37,7 @@ NSString * const demo7Content = @"利用“普通版tableview的《多cell》高度自适应”2步设置完成tableview的排布"; NSString * const demo8Content = @"利用“升级版tableview的《多cell》高度自适应”1步完成tableview的排布"; NSString * const demo9Content = @"利用SDAutoLayout仿制微信朋友圈。高仿微信计划:\n1.高仿朋友圈 \n2.完善细节 \n3.高仿完整微信app \nPS:代码会持续在我的github更新"; +NSString * const demo10Content = @"一个SDAutoLayout使用者贡献的仿网易新闻界面"; @implementation DemoTableViewControler { @@ -50,16 +51,16 @@ - (void)viewDidLoad self.view.backgroundColor = [UIColor whiteColor]; - [self.navigationController pushViewController:[NSClassFromString(@"DemoVC9") new] animated:YES]; + [self.navigationController pushViewController:[NSClassFromString(@"DemoVC10") new] animated:YES]; - _contenArray = @[demo0Content, demo1Content, demo2Content, demo3Content, demo4Content, demo5Content, demo6Content, demo7Content, demo8Content, demo9Content]; + _contenArray = @[demo0Content, demo1Content, demo2Content, demo3Content, demo4Content, demo5Content, demo6Content, demo7Content, demo8Content, demo9Content, demo10Content]; } #pragma mark - tableview datasourece and delegate - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 10; + return 11; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath From 7ab52a9771f7de53bd4939b68055cc75054f62b4 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 21 Jan 2016 10:47:54 +0800 Subject: [PATCH 051/276] =?UTF-8?q?=E6=8E=A8=E8=8D=90=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E2=80=9C=E6=99=AE=E9=80=9A=E7=AE=80=E5=8C=96=E7=89=88=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E2=80=9D=EF=BC=9B=E9=80=82=E9=85=8Dios7;=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0SDAutoLayout=E5=BA=93=E4=BD=BF=E7=94=A8=E8=80=85?= =?UTF-8?q?=E8=B4=A1=E7=8C=AE=E7=9A=84=E7=BD=91=E6=98=93=E6=96=B0=E9=97=BB?= =?UTF-8?q?demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 63640 -> 64122 bytes .../SDCycleScrollView/SDCycleScrollView.m | 8 -------- 2 files changed, 8 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 8e8d403d6c31a212ce49df693a167574361086fe..26f352edaac4e6d250a2c19d9e1dc29cc18dd2bc 100644 GIT binary patch literal 64122 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

>L`V;E+wg_W&iyr=z#88L`m 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 literal 63640 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 P|Fs7h|Jwh(y#V Date: Thu, 21 Jan 2016 11:51:34 +0800 Subject: [PATCH 052/276] Update README.md --- README.md | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index a0928b6..c5f5705 100644 --- a/README.md +++ b/README.md @@ -15,45 +15,37 @@ # ☆新增:cell高度自适应 + label文字自适应☆ -![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif) +![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif)![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif) -![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) -## >>>>> 升级版:tableview 高度自适应设置只需要2步 +## >>>>> 普通(简化)版【推荐使用】:tableview 高度自适应设置只需要2步 1. >> 设置cell高度自适应: // cell布局设置好之后调用此方法就可以实现高度自适应(注意:如果用高度自适应则不要再以cell的底边为参照去布局其子view) [cell setupAutoHeightWithBottomView:_view4 bottomMargin:10]; - 2. >> 获取自动计算出的cell高度 + 2. >> 设置 tableview 数据源和代理 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - // 获取cell高度 - return [self cellHeightForIndexPath:indexPath cellContentViewWidth:[UIScreen mainScreen].bounds.size.width]; + // >>>>>>>>>>>>>>>>>>>>> * cell自适应 * >>>>>>>>>>>>>>>>>>>>>>>> + id model = self.modelsArray[indexPath.row]; + return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:[DemoVC9Cell class] contentViewWidth:[self cellContentViewWith]]; } - - -## >>>>> 普通版:tableview 高度自适应设置只需要3步 + + +## >>>>> 升级版(适应于cell条数少于100的tableview):tableview 高度自适应设置只需要2步 1. >> 设置cell高度自适应: // cell布局设置好之后调用此方法就可以实现高度自适应(注意:如果用高度自适应则不要再以cell的底边为参照去布局其子view) [cell setupAutoHeightWithBottomView:_view4 bottomMargin:10]; - 2. >> 设置 tableview 数据源和代理 - - - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section - { - // 2.1 注册模型cell - [self.tableView startAutoCellHeightWithCellClass:“cell类名” contentViewWidth:“contentview宽度”]; - - return _rowCount; - } + 2. >> 获取自动计算出的cell高度 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - // 2.2 根据模型取得cell高度 - return [self.tableView cellHeightForIndexPath:indexPath model:“model” keyPath:@"model属性名"]; + // 获取cell高度 + return [self cellHeightForIndexPath:indexPath cellContentViewWidth:[UIScreen mainScreen].bounds.size.width]; } From 14e74deb2fb22bc81ea9b5610daa3f67e9994b88 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 21 Jan 2016 11:53:03 +0800 Subject: [PATCH 053/276] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c5f5705..e209e74 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ ![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif)![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif) -## >>>>> 普通(简化)版【推荐使用】:tableview 高度自适应设置只需要2步 +## >> 普通(简化)版【推荐使用】:tableview 高度自适应设置只需要2步 1. >> 设置cell高度自适应: // cell布局设置好之后调用此方法就可以实现高度自适应(注意:如果用高度自适应则不要再以cell的底边为参照去布局其子view) @@ -34,7 +34,7 @@ } -## >>>>> 升级版(适应于cell条数少于100的tableview):tableview 高度自适应设置只需要2步 +## >> 升级版(适应于cell条数少于100的tableview):tableview 高度自适应设置只需要2步 1. >> 设置cell高度自适应: // cell布局设置好之后调用此方法就可以实现高度自适应(注意:如果用高度自适应则不要再以cell的底边为参照去布局其子view) From 3517e72edbb9939556f5db1bf235836aaf119f13 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 21 Jan 2016 11:54:15 +0800 Subject: [PATCH 054/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e209e74..b18bc16 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ // cell布局设置好之后调用此方法就可以实现高度自适应(注意:如果用高度自适应则不要再以cell的底边为参照去布局其子view) [cell setupAutoHeightWithBottomView:_view4 bottomMargin:10]; - 2. >> 设置 tableview 数据源和代理 + 2. >> 获取自动计算出的cell高度 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { From 50a34b3a4a8a89a1b6a7c69d8decd412cb316342 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 21 Jan 2016 11:54:55 +0800 Subject: [PATCH 055/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b18bc16..798df2f 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ { // >>>>>>>>>>>>>>>>>>>>> * cell自适应 * >>>>>>>>>>>>>>>>>>>>>>>> id model = self.modelsArray[indexPath.row]; - return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:[DemoVC9Cell class] contentViewWidth:[self cellContentViewWith]]; + return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:[DemoVC9Cell class] contentViewWidth:cellContentViewWith]; } From 1905de20aafbfa75697e9fd6c03064b3a516feb9 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 21 Jan 2016 11:56:04 +0800 Subject: [PATCH 056/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 798df2f..95a680b 100644 --- a/README.md +++ b/README.md @@ -28,8 +28,8 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - // >>>>>>>>>>>>>>>>>>>>> * cell自适应 * >>>>>>>>>>>>>>>>>>>>>>>> id model = self.modelsArray[indexPath.row]; + // 获取cell高度 return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:[DemoVC9Cell class] contentViewWidth:cellContentViewWith]; } From 4dec511c4b6b49d688fed62374b78afc38e4f473 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 21 Jan 2016 11:57:15 +0800 Subject: [PATCH 057/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 95a680b..976c532 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ # ☆新增:cell高度自适应 + label文字自适应☆ -![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif)![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif) +![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) ## >> 普通(简化)版【推荐使用】:tableview 高度自适应设置只需要2步 From 50d90f5ea34382ef2042be563f484c13ac6c02d1 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 21 Jan 2016 14:46:15 +0800 Subject: [PATCH 058/276] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=20=E5=B1=80=E9=83=A8?= =?UTF-8?q?=E5=88=B7=E6=96=B0=20cell=E9=AB=98=E5=BA=A6=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E7=9A=84=E8=87=AA=E5=8A=A8=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 64122 -> 67629 bytes .../UITableView+SDAutoTableViewCellHeight.h | 2 ++ .../UITableView+SDAutoTableViewCellHeight.m | 33 +++++++++++++----- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 26f352edaac4e6d250a2c19d9e1dc29cc18dd2bc..f7559f1cba6fb8e176d23c1e6193c6863640abc6 100644 GIT binary patch literal 67629 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 W+d|@<%<|=npRiSnpG$uqE&D%qBPOo^ literal 64122 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

>L`V;E+wg_W&iyr=z#88L`m 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 diff --git a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h index 6af712d..1d17e34 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h +++ b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h @@ -138,6 +138,8 @@ - (void)clearHeightCache; +- (void)clearHeightCacheOfIndexPaths:(NSArray *)indexPaths; + - (NSNumber *)heightCacheForIndexPath:(NSIndexPath *)indexPath; - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath; diff --git a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m index 8b97e9a..ce0f17f 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m @@ -92,6 +92,14 @@ - (void)clearHeightCache [_cacheDictionary removeAllObjects]; } +- (void)clearHeightCacheOfIndexPaths:(NSArray *)indexPaths +{ + [indexPaths enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) { + NSString *cacheKey = [NSString stringWithFormat:@"%ld%ld", (long)indexPath.section, (long)indexPath.row]; + [_cacheDictionary removeObjectForKey:cacheKey]; + }]; +} + - (NSNumber *)heightCacheForIndexPath:(NSIndexPath *)indexPath { NSString *cacheKey = [NSString stringWithFormat:@"%ld%ld", (long)indexPath.section, (long)indexPath.row]; @@ -166,9 +174,16 @@ @implementation UITableView (SDAutoTableViewCellHeight) + (void)load { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - Method reloadData = class_getInstanceMethod(self, @selector(reloadData)); - Method sd_reloadData = class_getInstanceMethod(self, @selector(sd_reloadData)); - method_exchangeImplementations(reloadData, sd_reloadData); + + NSArray *selStringsArray = @[@"reloadData", @"reloadRowsAtIndexPaths:withRowAnimation:"]; + + [selStringsArray enumerateObjectsUsingBlock:^(NSString *selString, NSUInteger idx, BOOL *stop) { + NSString *mySelString = [@"sd_" stringByAppendingString:selString]; + + Method originalMethod = class_getInstanceMethod(self, NSSelectorFromString(selString)); + Method myMethod = class_getInstanceMethod(self, NSSelectorFromString(mySelString)); + method_exchangeImplementations(originalMethod, myMethod); + }]; }); } @@ -177,6 +192,13 @@ - (void)sd_reloadData [self.cellAutoHeightManager clearHeightCache]; [self sd_reloadData]; } + +- (void)sd_reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation +{ + [self.cellAutoHeightManager clearHeightCacheOfIndexPaths:indexPaths]; + [self sd_reloadRowsAtIndexPaths:indexPaths withRowAnimation:animation]; +} + /* * 下一步即将实现的功能 @@ -190,11 +212,6 @@ - (void)sd_deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAn [self sd_deleteRowsAtIndexPaths:indexPaths withRowAnimation:animation]; } - - (void)sd_reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation - { - [self sd_reloadRowsAtIndexPaths:indexPaths withRowAnimation:animation]; - } - - (void)sd_moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath { [self sd_moveRowAtIndexPath:indexPath toIndexPath:newIndexPath]; From b63e468df5bb9ea3f927d2b775ee4cbdeafe09dc Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 21 Jan 2016 15:01:14 +0800 Subject: [PATCH 059/276] Update README.md --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.md b/README.md index 976c532..4bc6ec7 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,26 @@ 支持pod: pod 'SDAutoLayout', '~> 1.3' +## 更新记录: + +2016.01.21 -- 实现tableview局部刷新cell高度缓存的自动管理 + +2016.01.20 -- demo中的tableview适配在ios7上的屏幕旋转问题 + +2016.01.18 -- 推出“普通简化版”tableview的cell自动高度方法(推荐使用),原来的需2步设置的普通版方法将标记过期 + +2016.01.13 -- 增加在不确定bottom view的情况下的cell高度自适应方法 + +2016.01.07 -- 1.增加 scrollview 横向内容自适应功能;2.增加view宽高相等的功能 + +2016.01.03 -- 增加任何类型对象都可以实现一行代码搞定cell高度自适应;增加文档注释 + +2015.12.08 -- 重大升级:1.支持scrollview内容自适应;2.任意添加或者修改约束不冲突;3.性能提升40%以上;4.添加最大、最小宽高约束 + + + + + # ☆新增:cell高度自适应 + label文字自适应☆ ![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) From 3c8c56948cb0d83617339abd190bb42ac00c9346 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 21 Jan 2016 15:07:29 +0800 Subject: [PATCH 060/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4bc6ec7..f3f11eb 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ 2016.01.21 -- 实现tableview局部刷新cell高度缓存的自动管理 -2016.01.20 -- demo中的tableview适配在ios7上的屏幕旋转问题 +2016.01.20 -- demo适配在ios7上的屏幕旋转问题 2016.01.18 -- 推出“普通简化版”tableview的cell自动高度方法(推荐使用),原来的需2步设置的普通版方法将标记过期 From 4402a0d64718d6a7796568408451b03a3110f87e Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 21 Jan 2016 16:40:16 +0800 Subject: [PATCH 061/276] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index f3f11eb..769f257 100644 --- a/README.md +++ b/README.md @@ -134,6 +134,10 @@ # PS +// 如果需要用“断言”调试程序请打开此宏(位于UIView+SDAutoLayout.h) + +//#define SDDebugWithAssert + ![](http://ww3.sinaimg.cn/bmiddle/9b8146edgw1ex4mukixr6g209g07lhdt.gif) From 6a78363121101dfd974a76f394021700a132bc29 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Fri, 22 Jan 2016 19:54:37 +0800 Subject: [PATCH 062/276] =?UTF-8?q?=E5=AE=8C=E5=96=84=20=E6=9C=8B=E5=8F=8B?= =?UTF-8?q?=E5=9C=88=20demo=EF=BC=88=E5=A2=9E=E5=8A=A0=E6=96=87=E5=AD=97?= =?UTF-8?q?=E5=B1=95=E5=BC=80=E5=8A=9F=E8=83=BD=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 67629 -> 66530 bytes SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.h | 4 ++ SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m | 28 ++++++++++ SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m | 12 ++++- SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.h | 4 ++ SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m | 51 ++++++++++++++++-- .../SDAutoLayout/UIView+SDAutoLayout.h | 3 ++ .../SDAutoLayout/UIView+SDAutoLayout.m | 36 +++++++++++-- 8 files changed, 127 insertions(+), 11 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index f7559f1cba6fb8e176d23c1e6193c6863640abc6..505ee04c264a84ef35e8cc1889ae38d5f2d5da49 100644 GIT binary patch literal 66530 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 literal 67629 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 W+d|@<%<|=npRiSnpG$uqE&D%qBPOo^ diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.h index 7e12b1a..c8480e5 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.h +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.h @@ -31,4 +31,8 @@ @property (nonatomic, copy) NSString *content; @property (nonatomic, strong) NSArray *picNamesArray; +@property (nonatomic, assign) BOOL isOpening; + +@property (nonatomic, assign, readonly) BOOL shouldShowMoreButton; + @end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m index 4ed2ebb..9251703 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m @@ -23,7 +23,35 @@ */ #import "Demo9Model.h" +#import + +extern const CGFloat contentLabelFontSize; +extern const CGFloat maxContentLabelHeight; @implementation Demo9Model +@synthesize shouldShowMoreButton = _shouldShowMoreButton; + +- (void)setContent:(NSString *)content +{ + _content = content; + + CGFloat contentW = [UIScreen mainScreen].bounds.size.width - 70; + CGRect textRect = [content boundingRectWithSize:CGSizeMake(contentW, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:contentLabelFontSize]} context:nil]; + if (textRect.size.height > maxContentLabelHeight) { + _shouldShowMoreButton = YES; + } else { + _shouldShowMoreButton = NO; + } +} + +- (void)setIsOpening:(BOOL)isOpening +{ + if (!_shouldShowMoreButton) { + _isOpening = NO; + } else { + _isOpening = isOpening; + } +} + @end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m index 5eaa148..73469ea 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m @@ -100,7 +100,7 @@ - (void)creatModelsWithCount:(NSInteger)count NSArray *textArray = @[@"当你的 app 没有提供 3x 的 LaunchImage 时,系统默认进入兼容模式,大屏幕一切按照 320 宽度渲染,屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。", @"然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。", - @"当你的 app 没有提供 3x 的 LaunchImage 时", + @"当你的 app 没有提供 3x 的 LaunchImage 时屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。", @"但是建议不要长期处于这种模式下,否则在大屏上会显得字大,内容少,容易遭到用户投诉。", @"屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。" ]; @@ -151,7 +151,15 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { DemoVC9Cell *cell = [tableView dequeueReusableCellWithIdentifier:kDemoVC9CellId]; - + cell.indexPath = indexPath; + __weak typeof(self) weakSelf = self; + if (!cell.moreButtonClickedBlock) { + [cell setMoreButtonClickedBlock:^(NSIndexPath *indexPath) { + Demo9Model *model = weakSelf.modelsArray[indexPath.row]; + model.isOpening = !model.isOpening; + [weakSelf.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + }]; + } cell.model = self.modelsArray[indexPath.row]; return cell; } diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.h index 03803ab..cab9408 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.h +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.h @@ -29,4 +29,8 @@ @property (nonatomic, strong) Demo9Model *model; +@property (nonatomic, strong) NSIndexPath *indexPath; + +@property (nonatomic, copy) void (^moreButtonClickedBlock)(NSIndexPath *indexPath); + @end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m index 1bb230e..6cdfb34 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m @@ -30,6 +30,9 @@ #import "SDWeiXinPhotoContainerView.h" +const CGFloat contentLabelFontSize = 15; +const CGFloat maxContentLabelHeight = 60; + @implementation DemoVC9Cell { UIImageView *_iconView; @@ -37,6 +40,8 @@ @implementation DemoVC9Cell UILabel *_contentLabel; SDWeiXinPhotoContainerView *_picContainerView; UILabel *_timeLabel; + UIButton *_moreButton; + BOOL _shouldOpenContentLabel; } @@ -50,6 +55,9 @@ - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSStr - (void)setup { + + _shouldOpenContentLabel = NO; + _iconView = [UIImageView new]; _nameLable = [UILabel new]; @@ -57,7 +65,13 @@ - (void)setup _nameLable.textColor = [UIColor colorWithRed:(54 / 255.0) green:(71 / 255.0) blue:(121 / 255.0) alpha:0.9]; _contentLabel = [UILabel new]; - _contentLabel.font = [UIFont systemFontOfSize:15]; + _contentLabel.font = [UIFont systemFontOfSize:contentLabelFontSize]; + + _moreButton = [UIButton new]; + [_moreButton setTitle:@"显示全部" forState:UIControlStateNormal]; + [_moreButton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; + [_moreButton addTarget:self action:@selector(moreButtonClicked) forControlEvents:UIControlEventTouchUpInside]; + _moreButton.titleLabel.font = [UIFont systemFontOfSize:14]; _picContainerView = [SDWeiXinPhotoContainerView new]; @@ -65,7 +79,7 @@ - (void)setup _timeLabel.font = [UIFont systemFontOfSize:13]; _timeLabel.textColor = [UIColor lightGrayColor]; - NSArray *views = @[_iconView, _nameLable, _contentLabel, _picContainerView, _timeLabel]; + NSArray *views = @[_iconView, _nameLable, _contentLabel, _moreButton, _picContainerView, _timeLabel]; [views enumerateObjectsUsingBlock:^(UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { [self.contentView addSubview:obj]; @@ -92,6 +106,13 @@ - (void)setup .rightSpaceToView(contentView, margin) .autoHeightRatio(0); + // morebutton的高度在setmodel里面设置 + _moreButton.sd_layout + .leftEqualToView(_contentLabel) + .topSpaceToView(_contentLabel, 0) + .widthIs(60); + + _picContainerView.sd_layout .leftEqualToView(_contentLabel); @@ -102,7 +123,6 @@ - (void)setup .autoHeightRatio(0); [self setupAutoHeightWithBottomView:_timeLabel bottomMargin:margin + 5]; - } @@ -110,16 +130,39 @@ - (void)setModel:(Demo9Model *)model { _model = model; + _shouldOpenContentLabel = NO; + _iconView.image = [UIImage imageNamed:model.iconName]; _nameLable.text = model.name; _contentLabel.text = model.content; _picContainerView.picPathStringsArray = model.picNamesArray; + + if (model.shouldShowMoreButton) { // 如果文字高度超过60 + _moreButton.sd_layout.heightIs(20); + _moreButton.hidden = NO; + if (model.isOpening) { // 如果需要展开 + _contentLabel.sd_layout.maxHeightIs(MAXFLOAT); + } else { + _contentLabel.sd_layout.maxHeightIs(60); + } + } else { + _moreButton.sd_layout.heightIs(0); + _moreButton.hidden = YES; + } + CGFloat picContainerTopMargin = 0; if (model.picNamesArray.count) { picContainerTopMargin = 10; } - _picContainerView.sd_layout.topSpaceToView(_contentLabel, picContainerTopMargin); + _picContainerView.sd_layout.topSpaceToView(_moreButton, picContainerTopMargin); _timeLabel.text = @"1分钟前"; } +- (void)moreButtonClicked +{ + if (self.moreButtonClickedBlock) { + self.moreButtonClickedBlock(self.indexPath); + } +} + @end diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h index 4746cd1..48170c6 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h @@ -189,6 +189,9 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @interface UIView (SDLayoutExtention) +/** 自动布局完成后的回调block,可以在这里获取到view的真实frame */ +@property (nonatomic) void (^didFinishAutoLayoutBlock)(CGRect frame); + /* 设置圆角 */ /** 设置圆角半径值 */ diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m index 19593ae..9a28e3f 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m @@ -480,6 +480,16 @@ - (void)setSd_rightMargin:(CGFloat)sd_rightMargin @implementation UIView (SDLayoutExtention) +- (void (^)(CGRect))didFinishAutoLayoutBlock +{ + return objc_getAssociatedObject(self, _cmd); +} + +- (void)setDidFinishAutoLayoutBlock:(void (^)(CGRect))didFinishAutoLayoutBlock +{ + objc_setAssociatedObject(self, @selector(didFinishAutoLayoutBlock), didFinishAutoLayoutBlock, OBJC_ASSOCIATION_COPY_NONATOMIC); +} + - (NSNumber *)sd_cornerRadius { return objc_getAssociatedObject(self, _cmd); @@ -560,9 +570,16 @@ + (void)load { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - Method layoutSubviews = class_getInstanceMethod(self, @selector(layoutSubviews)); - Method sd_autolayout = class_getInstanceMethod(self, @selector(sd_autolayout)); - method_exchangeImplementations(layoutSubviews, sd_autolayout); + + NSArray *selStringsArray = @[@"layoutSubviews"]; + + [selStringsArray enumerateObjectsUsingBlock:^(NSString *selString, NSUInteger idx, BOOL *stop) { + NSString *mySelString = [@"sd_" stringByAppendingString:selString]; + + Method originalMethod = class_getInstanceMethod(self, NSSelectorFromString(selString)); + Method myMethod = class_getInstanceMethod(self, NSSelectorFromString(mySelString)); + method_exchangeImplementations(originalMethod, myMethod); + }]; }); } @@ -662,9 +679,9 @@ - (SDAutoLayoutModel *)sd_resetLayout return [self sd_layout]; } -- (void)sd_autolayout +- (void)sd_layoutSubviews { - [self sd_autolayout]; + [self sd_layoutSubviews]; if (self.sd_equalWidthSubviews.count) { __block CGFloat totalMargin = 0; @@ -736,6 +753,9 @@ - (void)sd_autolayout } self.height = contentHeight; } + if (self.didFinishAutoLayoutBlock) { + self.didFinishAutoLayoutBlock(self.frame); + } } } @@ -743,6 +763,8 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model { UIView *view = model.needsAutoResizeView; + if (!view) return; + if (view.sd_maxWidth && (model.rightSpaceToView || model.rightEqualToView)) { // 靠右布局前提设置 if ([view isKindOfClass:[UILabel class]]) { UILabel *label = (UILabel *)view; @@ -971,6 +993,10 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model view.height = view.width; } + if (view.didFinishAutoLayoutBlock) { + view.didFinishAutoLayoutBlock(view.frame); + } + CGFloat cornerRadius = view.layer.cornerRadius; CGFloat newCornerRadius = 0; From 7d0a893349fbb95f2ec1f716e8f8c21a08b6ac2a Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Fri, 22 Jan 2016 20:24:20 +0800 Subject: [PATCH 063/276] =?UTF-8?q?=E5=AE=8C=E5=96=84=20=E6=9C=8B=E5=8F=8B?= =?UTF-8?q?=E5=9C=88=20demo=EF=BC=88=E5=A2=9E=E5=8A=A0=E6=96=87=E5=AD=97?= =?UTF-8?q?=E5=B1=95=E5=BC=80=E5=8A=9F=E8=83=BD=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 66530 -> 66665 bytes SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m | 11 +++++++++-- SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 505ee04c264a84ef35e8cc1889ae38d5f2d5da49..cc4038a3283994dbd3d8ea8fb8871a977eed61fb 100644 GIT binary patch delta 15900 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 diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m index 9251703..848eed6 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m @@ -31,18 +31,25 @@ @implementation Demo9Model @synthesize shouldShowMoreButton = _shouldShowMoreButton; +@synthesize content = _content; + - (void)setContent:(NSString *)content { _content = content; - +} + +- (NSString *)content +{ CGFloat contentW = [UIScreen mainScreen].bounds.size.width - 70; - CGRect textRect = [content boundingRectWithSize:CGSizeMake(contentW, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:contentLabelFontSize]} context:nil]; + CGRect textRect = [_content boundingRectWithSize:CGSizeMake(contentW, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:contentLabelFontSize]} context:nil]; if (textRect.size.height > maxContentLabelHeight) { _shouldShowMoreButton = YES; } else { _shouldShowMoreButton = NO; } + + return _content; } - (void)setIsOpening:(BOOL)isOpening diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m index 6cdfb34..e7811f3 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m @@ -31,7 +31,7 @@ #import "SDWeiXinPhotoContainerView.h" const CGFloat contentLabelFontSize = 15; -const CGFloat maxContentLabelHeight = 60; +const CGFloat maxContentLabelHeight = 54; @implementation DemoVC9Cell { From 75e44a64fc1ffcc7232190efea9d9bbca59455ce Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sat, 23 Jan 2016 18:52:22 +0800 Subject: [PATCH 064/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A0label=E5=AF=B9attribu?= =?UTF-8?q?tedString=E7=9A=84=E5=86=85=E5=AE=B9=E8=87=AA=E9=80=82=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDAutoLayoutDemo.xcodeproj/project.pbxproj | 7 +- .../UserInterfaceState.xcuserstate | Bin 0 -> 16375 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 320 ------------------ .../xcschemes/SDAutoLayoutDemo.xcscheme | 67 ++-- .../xcschemes/xcschememanagement.plist | 4 +- SDAutoLayoutDemo/Info.plist | 10 +- .../SDAutoLayout/UIView+SDAutoLayout.h | 3 + .../SDAutoLayout/UIView+SDAutoLayout.m | 85 +++-- 8 files changed, 98 insertions(+), 398 deletions(-) create mode 100644 SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate rename "SDAutoLayoutDemo.xcodeproj/xcuserdata/aier.xcuserdatad/xcschemes/SDAutoLayout \346\265\213\350\257\225 Demo.xcscheme" => SDAutoLayoutDemo.xcodeproj/xcuserdata/aier.xcuserdatad/xcschemes/SDAutoLayoutDemo.xcscheme (51%) diff --git a/SDAutoLayoutDemo.xcodeproj/project.pbxproj b/SDAutoLayoutDemo.xcodeproj/project.pbxproj index b040467..0a89f19 100644 --- a/SDAutoLayoutDemo.xcodeproj/project.pbxproj +++ b/SDAutoLayoutDemo.xcodeproj/project.pbxproj @@ -1101,6 +1101,7 @@ TargetAttributes = { 487D3EB01BCB9EC700A66173 = { CreatedOnToolsVersion = 6.4; + DevelopmentTeam = V4Q779DR3D; }; 487D3EC91BCB9EC700A66173 = { CreatedOnToolsVersion = 6.4; @@ -1416,12 +1417,13 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; INFOPLIST_FILE = SDAutoLayoutDemo/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 6.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.gsdios.test; PRODUCT_NAME = SDAutoLayoutDemo; - PROVISIONING_PROFILE = "93045a84-2289-43e6-8406-321145a49475"; + PROVISIONING_PROFILE = ""; }; name = Debug; }; @@ -1430,12 +1432,13 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; INFOPLIST_FILE = SDAutoLayoutDemo/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 6.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.gsdios.test; PRODUCT_NAME = SDAutoLayoutDemo; - PROVISIONING_PROFILE = "93045a84-2289-43e6-8406-321145a49475"; + PROVISIONING_PROFILE = ""; }; name = Release; }; diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..bbf80e8d7d6880d110905ac7880e42751d2e10ab GIT binary patch literal 16375 zcmd6O2VhfG+weK(-jq_>|Jv?v?tkRBOO4l<&ARDcRm85)bmp_@@Pav~R+jOvjG`H&yY zKr_)?G!M;3x1u}Ho#-BPFItS2pvTbTXccNg&1f}RgVv&TXd~K=o+nXr1#iVq<2UhJ_-*_Seiy%o-^Y9K2Y4_35bwkL@d5lPK8`=bC-7Q{t2w@0IBt%9y5>4bJnWT_Zl1|hlkK~gAQb>A|UZfu>CM9G58AQs- zSTc^>MC_!BRFi3BI+;Ocl38RnnM3B1d1O9$n5-m^kVna5}E95Zwh5SLTG7Q5q;Y?R1iiu|8 znM5X)NoO>SmN7CWrYF;j>CNSndQuCW(~8JS;w?6&oJAVXPNEHbIeZW73K|Q5Ay-Dm-&#{ z$9&8jWsWhQGhZ;Ln6u1x%#X}3%&*LEEXzvRFgB8nW_z%SY!a(tGguRAW-Y9hwXvn_ zb?hK^Fnc{agdNHbV@I+#vktbBtzxTLCtJh1**ez8`q??`T=ow3PId{qlwHO?z^-JQ z*cNs(`waU$yOVu|eVskX9%2u(AF)T+kJ&HTlk8XQDfSHeE&Dxtp8bLSk^PzdLlP$G zA_WU&zHx!9vNPgq+vYaW-nZ9xG-Fk{DGOFAT zpRXB3At@!4X+|81rYwD)PO)>bg9i+}(c_)sYj9LK2Y9L)>zws|JC{)~&{{OmoLgcj zDJ{)6*vxr(hGJ7ut|5P5sin9yFE7tlTpC0ik5ZAk1tp;Fs0T_!NhlemPzepAU1&J% zN+W2u7NkH*l!nrg3T2>78cCz*TuSL8x|Kdn%|J%6*Xfwj;BnRaeMMD%*EEOUS#9SM z2RLgSjc)(IYM0;RE%U=$U#Z7iK5D3MLSUM+tZI_8&Itg-$5D;-1Drm;tKQ)ULt^Jl zLmfVUiKni??F4`$1^eRj1Bc?WVu#OJ9a!k{&m84!@OXiBSx^c$y6USv(|vZX`zU7> ztPzO_jtVq%4NAa-tVrFA%*aBeRMw1aD3@|{yug`yOqHkFnFC@T;_~N&!pJG}G zy`#=KM*P$1D<574o6-!!_A$fDMg&|)N1Cew^u^h^%|ZH#8o(D-1ysdn6vgjoXfT#| z>IEI~0p4j&x2FNf9|;`Rc)WE!qif_OPrY+QSx!Uis}8fu1`O#i!B;)SST+;XtOVf7NUvegDYIl>AH^ZLPat?fH=j@P5h4$hbVd54wN|E?ogC-0w@)BuJJ!c*^w{M zz|oFMx3dGoZO;M`gPg9~N&Zk$_y8$s{}r)^DE{pM#40;C`9GFHh}hd~i@b%u2L24Dw~f^A6hqNwn?wdGZoGa zuMqw+%@tiu3tDgIVuqIuYxE0eWq=D}6Hh&mxf->g4ah!Wcv<_qAlIAF7J=(0&}Q@` zdWu@9jpow4HE1h(8o1s@^JxKaUHJc&>xHGtA-7DJZO+ZL>Xl|wo^9^9+2%qEJmluh z4RZ1l+TAH9ucJ4BlecIu+8a3OL(PI5m!!V7aOwEj<~&=0URjWrJ9q4CizOfaHnqXq zgZ6g{?*KXo@D9^{v_HTr65-v~XVsvWC(h0-Fcszki2!TvczDXq%hxNd);5@*pwByn z`33qCV17kQ=m3B@u$9Kxld0+nv#pl=LK_eXtd4^Ra~>dQr}A5LzEg-lpdSI^BlJ2t z2q1#i2Do07Q{6Ofc0q0-=ucs88(CM-ADsfZictW_^>j!(kcDCHlEq^M#WR~M1wk0N z3y$mz29Cl~v=Vc47#$8UMzj*Lv5(^B@w4-+`5>QMa~_C4FW&}SwlRj|aZ;!7l5t9a zrW@#}cA9QG{l`07M4HSNTN_OoSlcO#Y^(#C40JRt2N)G1O^Z$)on{d>4ahL(T5<&) zvs#3QcA~7fpi_W_xF-PYO~=r&0C1cL@UFclKCzCQU6^MPc+8zUW_E!ogvDY!0I8dB z37yb{2hy8DqE>u;z!Xljb3=kw{NIfla%KooeFH@4#@4ffhv8Ac2Of?`;F0(SYNt0- z2d!L#%kXGijw@&tZJ<->9O2Y!LIQX(C&=*ya)F_cpXB%;EcH)=K*Y}JJDEDt>zwBD zH2Ow6ytU5Ow4_8x@j9O#w0uF!I@Hq|@&=QWV74I=Viz%X1Ri8@BDM>{y@^&g;hU*b zU?qA$#pp7DTp^4Y46&|nzmSaLYFyilow$b9P&f4i0l2Um$(!+HJcZWMNzJ$p*Hagr zOs7l)FoUZh=yugWwqWNtcorZIbJW(m{16M;xwLixg&=HSrs`jPGZOw0ZTAM;*euxS zAoA&WRtWOhcn+oTeRsZ>`+81IT&%de7&dL8QB$4mi z@tsZh4(g?|58{RRZhQ~O;$FN6--quX>kGIb@E>D^fHvUV##gtd+>p7@M(U?NI_rN| zJp~)ZU%fix)1VlZ;pLF4;s@}9bQ+!Bj91`?=nOiOnk&TpuMl^>QyyVsI);!!C>4-3 zUWJ?NTuO+pUaM}aaWh_x?Eh*SxLer!YZr@HZpCYxg?$LJ(t_6`^{Q3EArHhGcoW`? z`P0uyBdT9*5fP8f#X|PJ*tMNJfJw8vD(-rg~fnN2WFoci?@utTMbtF5d`}>K-j;bkT&ISlxp{8Z$w0}Qa z#8KgJH#$}Q!vj_dRUu_2LCU{T=PUU4Ke6)%z6#=BNgol!uj(&?LN_SOiyK|;>eh`T zVI<<(m82VqBvJHnx{5XlD>-rLsGfgA0f`|Ae}dDU^dO0JHC;p30-S#5L%7*b6sQ|f zk~E>TRPFFPMnn@wWw2R*3ByXldiDNiO@hr`!ev}yQgTM7&TPwXEt7VQ=oT3zh0;)~ zNX5DlMDRs^sJK)%LTwSsqmh&uTh>@r<#bj%s}DrWBVyuvbW&7pj*X)%l{6=GhdO6h z+O1-ESt*o_U}lNO?eQK=NmWEB)6!M&zRWet30P}N-HuuxJPY0CvR8w0UHv9VY z9qsja{1l^b6b)5j6|`q8(3}|v#l}%k#;b&e%v5N}G@@J3?Pw9CgpWWIW))fu%@-lH z+5)YYSJB&OAGBLOM<>xKbQ)u5uteiTXs%>n1GeGbcrdh6hC{qnjwj-qA>Q!fMm!6g z?GoGq7JL_eRg^M;pgZtSzt->8FT9(s3%C}dA{i6geEtB?zSZz56WKw`!c*{cWRV=C zUWd;REy>1biJln1SgfZT=!0}4-Lwv$BPL=d7Wg!Q;dp{>rcc4=6N33j|NC=3dS(My z_IcGdaAU^oG;dhx8S6T?kJCxlMYJehz(7lu&HOvVJl_ig|6 z>Jyn5K)n6GSo9;60hBxb?^b#PK@)M3I%waJ8d6Ip5f_2T~iyK?WuvCQ^0hwNAwq1xgG+*K+k8i$K$SacnAAhD@|hH(K_a+EDjlp zpB*S2<7!CB+vBWj%lu1A=(haVKK@t@;V)M&LFVd=_Zu> zU69nx6sEOhTOzq8(+5OTT!&dSEx+CY}qN}q_#<@5=f1TadW ze>BqJp9Eg9$R~8{9Kr6JPwW^$)Z1C59!kcdO0OeOf!jb@$a=DYY$Th=6J#@ak~~E} zr2FW8dVn6Jhv;GY5k0bjY$Z>Fh*!YB+sSie2gLLr(;q;k{c)q;ElfwyMTTx^BVarD%S&t;93bufEehlN}WtY~d= z2IL|NRoVKgy?ASCVqDjzdLc$P^kg?PDFRJG82C@7ix?CP z=Gahq1j;7`bf@2iY z5y6Iz7ikMn4FSqusU>)d5W^*8pJ4lfMz52xq~O@V8E_3ka9{0~YJ6}E>Xnf6H8fVj z1&W+1!=%9Nh2Sr#P=LQ&4$yA}0jFZPKk0nCP5=N&4@{EmrzCPM{>!O3fXQnW2 z(ctq~%Hwd+LW@G53ig)qGCs!7H1fDBk0W^8jmMGK*j&-X28~+>;}?9@!QQpLVipL- zjmJ^{C)O>qKU`#TdTSu@R<<@}HDv<=QJHYTwf5wgyt_ldTT~Gto zGn)l$8<>sECguqqC-OLn$H_cSSpzZb3T6w0Sw`VVrV62zolB~4cwIse03o+?x)8?r zMmeSjs$Osm6GKN^k6~FAT+Oj_%8j6qBY*-M>m(0nK0y^_G^Nq0lG>;8U%o!f%1lD)n<6+JTGWni4 z&to{smUfw3U@l!l`(@^59-DY<2HHWHM9Zb>&z}h4`F9qDu46F^X3)xGn_#$Qu(D%t ztLi^CupG5=!**f22KSDI^PktccWe~U$x2xnkMnulvyDzx&c)H;pkaiB7(EurtvpUcc6ti!UjW*1}F&qTVJ_l3`p=h2V7?}X0Av1(z1ROl1Q6uVw zZii4>=xmzM{&cp^N$fDEPDms{>+8iJxpM$PgAzaw_CkngIziGFLJ6b<%mOsP zaE8@FEk(SM8zMa+O%oF1)?x%)Mip+U3M97DEvBS`WWmDAD3(OiXt^y3= zDnN3hxGJ~xJ0Dz0z{y%nxq_Ru2-hp};2J{E%d!u$E82ze5D%^LDM6Hvu#dH~{y2~A zZEZ`onOy@zYdzS|WY@DBg+;*Fm?m};j~(qpPqI+sXcEXD-^6a^ab^3^ zHg>x(^em67ngodfClf_Z@`Kk419cMi1@^^ua>3m>+sS>EeJ#W_uy3&M3(EZ_`xg5) z`wpl$xVc&$!@j$C4EqjRK4l%K^#^1HeC{LP2|Dct4+LL+$ZQ1zC+HI#d*S>H76PQe zRqfh9!9lono&e(kOEuc-fWQ;d|3GvLCo*9`@pWyA+d4l`c?q-xgD~OtcReU?vD;HM z1r`b2LI6-TMd&L6E+Lc+C}nU{-ozh7|1QJZ_+oJoX86 z3jt7ou8<>R=gjbakYk#2Fx*jaIo$4j_GTl1Yg%YFwfoYpI9WlsNU zcykWf;XX7x++>=OU*o7W6`JyME6pabFYRHXC2(m;(BFUHT!KQoz+MF93S0tVFY$PK z(92%IwX4}**k9S-cszs0vw1wP-7;R4kWk+#VI(Y%XYzQKU@ioY(YC!p;Y!uNp?^nr zD(NbTyaqs&M9SkiJf16d`Nfz*TzlV%khL+A_-ocC2*_{gfV`~&DFA5YRFW)FfccT6 zNK$zWCvbiXtEG}iWkp8{gT>dv|8?v(FyX=Aew;)j(Uu2vFwm0gfzpu<W|&qyKL$5ba-KSY51V<>%)hJKOO#Z_^aW&!{6wd+11k3)-|td zLDwx^U+nsF*H^plj?hNrMHEEzjOZP)A!2*Pj)P*y6QY?*-MoOhpPAZosNmHZ>X_{0e&6MUydrJpN%cVC-ZKrN*(lj)*+iL3=95v` zU9!7n_sZ^*EtWkjdqnn_Y?Z88wnnyD_MGf>*&f+m**@6;*&*3+*$LSfvXin?veU93 zWWRIaTpX9mDY!WiGC$|ck~<4Z%4ly{eJX`=x?IWMW2uU zG5RMtmWRp1k3JX#(jkCUt9dGc}cD!E%eRX$ICtNb?k9rAnRi{$sqm&ljOACa$> zZ>}6!&x7)p#7w#7pA4#P^IZkFSrP9zQ>RLHzCU zcg8P_zbAfC{L1*|_%-qC;@8JN6~8t9nfPbppNl_{AWi6*P?B(c!o-Bh2~!h%35^NU z6Xqq*g!u^z5^hhpFJW=Q@`N=Bn-VrBJe9CDVMoHwgk1?QCA^aGPQv>MpCz14xR7u$ z;c~*2?x;KI&UO#$9^O5=d-v{X-L;8}67NrZD6u8+$;4+9UrXGZxG(WQ;-SQk5d-9ItohgYa zSt;5SU5X*)u9OE;)~2+iY)ILZvN`3cl&vYxq`a2$ddizAZ>PMQ@_xz(DIccnPx(Am zl3JSDn7TamnbZ$bzfL`$dLi{<>SYD1=%Gkbq$m`MG=)l$smM}j6*`4MQLGrCC{+wn z3{ebM+@Kh(s8Ebmj8{xlxD;~~3l%#RdlbJZyDF2FI^_W61f@$kM>$VPmGhMgl(#GI zR4!EBqg?KsOAC6o>4oXN()*;3N_VFF)9*-MoxV1`C4EEs zru5C}pQWEp{~`TC`o;9i=~vQ!RfVf!R6SHlsuYz%m9HvP6{{So8r5y8C8}kr2UROn zYgJFHwyCzOcBtM{9Z?-seWE(9`a$(a2Ff5AY{ujaU&dV-i!#<^Y|c26@o8pwW?H5y zGcz+QQ=4hY%+1WtEX*vUwpfdb)b1dX9RYdZYR^^-=Yg>Qm~|>ND!gSz%e>SrJ*0S<);n zD<&&GD>F-zrOV36GG|${^0ErEdSwmD8lC0Ix;5+ZtQWK1$vT#GI_rn53t1PlE@xfQ z5RF6=u8Gh@X=Ix2nhZ^jrbJV!8LSzi8KxPb8KZG%sx`Hm$(lNiM>9t=PeV2HHTP*2 zYnEyr&@^k-Xx3@gYo68Y(CpOg((KiIqB*WPq4`1^p|xuJYm2o5w58e++ELna?TuQG zc8>No?VZ}YwTrZiwGV3_)vnSuYu9R9v|F@qYY%8Y)t=E_&|cDB(f+2rnjM}UksX;W z%Z|>D$u?&X&z_pSFnekCvg`-5S7)!wUZ1@w`^oGr+0SRcl>KV<>)CH+AILtEeJuNU z_LteGvcJjxHv5V$QWvL7)#-F5omH2o>!s_fE7FzdhUqGFRk|9TOXt?r>l$a^{eAjn`sMnE^^fbD^=tJl z`t|y)`j_;(^>6Cm(SM-dr$4Aatp7}ZR)10dv;J589|mlQFhm(RLyRHb(A`jA7;l(m zSY%jf*l5^n*kX9bu-)*yVVB`$!v}_ah69E}hK~#%8$K}{H=HnB$cfA8opW=}+?=MI zw{kwr*_U%5=S0qTIp=dOW3n;T2tV90Rv2d)HyGbG z9x@&=9y1;{es28IcoA;iNKE0TZYHUTGpS4_Q?4oB)YH_@RBRe(y3RDnRBoDJvYQ;H zYSR=`y=kh+Z<=PBYg%YpY+7boZhF|%WLjftF>N$GVcKTeWjbW~!t|BtwCP*ZIn#O5 z?`C9X%wguP=5FTh<|K29S!q_8GtCxruDQV6%iP!8-#pAb(p+Y)Fpo8lH%~H8G1r@? zn*HW!<^|@(=4IyP=7-IXnjbemVcu+h(!9m|qWN9(9`lFh1Lni#kIkQ$zcGJnK4(5} z{?UBVeA#@((!*l446{tK+-kYsvfT2py|rTl@}w=HB{0jga9@ literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo.xcodeproj/xcuserdata/aier.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/SDAutoLayoutDemo.xcodeproj/xcuserdata/aier.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index a99c4bd..2dfc689 100644 --- a/SDAutoLayoutDemo.xcodeproj/xcuserdata/aier.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/SDAutoLayoutDemo.xcodeproj/xcuserdata/aier.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -43,38 +43,6 @@ endingLineNumber = "146" landmarkName = "heightEqualToWidth" landmarkType = "19"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BuildableName = "SDAutoLayoutDemo.app" + BlueprintName = "SDAutoLayoutDemo" + ReferencedContainer = "container:SDAutoLayoutDemo.xcodeproj"> + shouldUseLaunchSchemeArgsEnv = "YES"> - - - - + BuildableName = "SDAutoLayoutDemo.app" + BlueprintName = "SDAutoLayoutDemo" + ReferencedContainer = "container:SDAutoLayoutDemo.xcodeproj"> + + - + + BuildableName = "SDAutoLayoutDemo.app" + BlueprintName = "SDAutoLayoutDemo" + ReferencedContainer = "container:SDAutoLayoutDemo.xcodeproj"> - + + BuildableName = "SDAutoLayoutDemo.app" + BlueprintName = "SDAutoLayoutDemo" + ReferencedContainer = "container:SDAutoLayoutDemo.xcodeproj"> diff --git a/SDAutoLayoutDemo.xcodeproj/xcuserdata/aier.xcuserdatad/xcschemes/xcschememanagement.plist b/SDAutoLayoutDemo.xcodeproj/xcuserdata/aier.xcuserdatad/xcschemes/xcschememanagement.plist index 85e0a4c..d124b41 100644 --- a/SDAutoLayoutDemo.xcodeproj/xcuserdata/aier.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/SDAutoLayoutDemo.xcodeproj/xcuserdata/aier.xcuserdatad/xcschemes/xcschememanagement.plist @@ -4,10 +4,10 @@ SchemeUserState - SDAutoLayout 测试 Demo.xcscheme + SDAutoLayoutDemo.xcscheme orderHint - 0 + 1 SuppressBuildableAutocreation diff --git a/SDAutoLayoutDemo/Info.plist b/SDAutoLayoutDemo/Info.plist index 9c07aa9..028efc3 100644 --- a/SDAutoLayoutDemo/Info.plist +++ b/SDAutoLayoutDemo/Info.plist @@ -22,6 +22,11 @@ 1 LSRequiresIPhoneOS + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile @@ -43,10 +48,5 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h index 48170c6..3794644 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h @@ -220,6 +220,9 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @interface UILabel (SDLabelAutoResize) +/** 是否是attributedString */ +@property (nonatomic) BOOL isAttributedContent; + /** 设置单行文本label宽度自适应 */ - (void)setSingleLineAutoResizeWithMaxWidth:(CGFloat)maxWidth; diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m index 9a28e3f..d6cb196 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m @@ -551,6 +551,16 @@ - (void)setupAutoContentSizeWithRightView:(UIView *)rightView rightMargin:(CGFlo @implementation UILabel (SDLabelAutoResize) +- (BOOL)isAttributedContent +{ + return [objc_getAssociatedObject(self, _cmd) boolValue]; +} + +- (void)setIsAttributedContent:(BOOL)isAttributedContent +{ + objc_setAssociatedObject(self, @selector(isAttributedContent), @(isAttributedContent), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + - (void)setSingleLineAutoResizeWithMaxWidth:(CGFloat)maxWidth { self.sd_maxWidth = @(maxWidth); @@ -771,9 +781,16 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model CGFloat width = [view.sd_maxWidth floatValue] > 0 ? [view.sd_maxWidth floatValue] : MAXFLOAT; label.numberOfLines = 1; if (label.text.length) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.width = rect.size.width; - label.fixedWith = @(label.width); + if (!label.isAttributedContent) { + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.width = rect.size.width; + label.fixedWith = @(label.width); + } else{ + [label sizeToFit]; + if (label.width > width) { + label.width = width; + } + } } else { label.width = 0; } @@ -788,8 +805,12 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model UILabel *label = (UILabel *)view; label.numberOfLines = 0; if (label.text.length) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.height = rect.size.height; + if (!label.isAttributedContent) { + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.height = rect.size.height; + } else { + [label sizeToFit]; + } } else { label.height = 0; } @@ -936,33 +957,22 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model } } - if (view.autoHeightRatioValue && view.width > 0) { - if ([view.autoHeightRatioValue floatValue] > 0) { - view.height = view.width * [view.autoHeightRatioValue floatValue]; - } else { - if ([view isKindOfClass:[UILabel class]]) { - UILabel *label = (UILabel *)view; - label.numberOfLines = 0; - if (label.text.length) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.height = rect.size.height; - } else { - label.height = 0; - } - } else { - view.height = 0; - } - } - } - if (view.sd_maxWidth) { if ([view isKindOfClass:[UILabel class]]) { UILabel *label = (UILabel *)view; CGFloat width = [view.sd_maxWidth floatValue] > 0 ? [view.sd_maxWidth floatValue] : MAXFLOAT; label.numberOfLines = 1; if (label.text.length) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.width = rect.size.width; + if (!label.isAttributedContent) { + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.width = rect.size.width; + label.fixedWith = @(label.width); + } else{ + [label sizeToFit]; + if (label.width > width) { + label.width = width; + } + } } else { label.width = 0; } @@ -977,6 +987,29 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model view.width = [model.minWidth floatValue]; } + if (view.autoHeightRatioValue && view.width > 0) { + if ([view.autoHeightRatioValue floatValue] > 0) { + view.height = view.width * [view.autoHeightRatioValue floatValue]; + } else { + if ([view isKindOfClass:[UILabel class]]) { + UILabel *label = (UILabel *)view; + label.numberOfLines = 0; + if (label.text.length) { + if (!label.isAttributedContent) { + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.height = rect.size.height; + } else { + [label sizeToFit]; + } + } else { + label.height = 0; + } + } else { + view.height = 0; + } + } + } + if (model.maxHeight && [model.maxHeight floatValue] < view.height) { view.height = [model.maxHeight floatValue]; } From 299ad36a8a34644df164c6ae3661ec84a4bc1515 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sat, 23 Jan 2016 18:54:03 +0800 Subject: [PATCH 065/276] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 769f257..94dec83 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ ## 更新记录: +2016.01.23 -- 增加label对attributedString的内容自适应 + 2016.01.21 -- 实现tableview局部刷新cell高度缓存的自动管理 2016.01.20 -- demo适配在ios7上的屏幕旋转问题 From 511a5d7f3bfa2b84e6c208f45c77977c379c6ce3 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 24 Jan 2016 18:31:20 +0800 Subject: [PATCH 066/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A0label=E5=AF=B9attribu?= =?UTF-8?q?tedString=E7=9A=84=E5=86=85=E5=AE=B9=E8=87=AA=E9=80=82=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 16375 -> 17894 bytes SDAutoLayoutDemo/DemoVC/DemoVC4/DemoVC4.m | 28 +++++++++- .../Others/DemoTableViewControler.m | 2 +- .../SDAutoLayout/UIView+SDAutoLayout.m | 50 +++++++++--------- 4 files changed, 53 insertions(+), 27 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate index bbf80e8d7d6880d110905ac7880e42751d2e10ab..6dd8c0c7c9c587186081f779dba7ae7acc33de83 100644 GIT binary patch delta 10070 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 B_@Mv* delta 8779 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 width) { label.width = width; } } + label.fixedWith = @(label.width); } else { label.width = 0; } } } - if (view.autoHeightRatioValue && view.width > 0 && (model.bottomEqualToView || model.bottomSpaceToView)) { // 底部布局前提设置 - if ([view.autoHeightRatioValue floatValue] > 0) { - view.height = view.width * [view.autoHeightRatioValue floatValue]; - } else { - if ([view isKindOfClass:[UILabel class]]) { - UILabel *label = (UILabel *)view; - label.numberOfLines = 0; - if (label.text.length) { - if (!label.isAttributedContent) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.height = rect.size.height; - } else { - [label sizeToFit]; - } - } else { - label.height = 0; - } - } else { - view.height = 0; - } - } - } - if (model.width) { view.width = [model.width.value floatValue]; view.fixedWith = @(view.width); @@ -896,6 +873,31 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model } + if (view.autoHeightRatioValue && view.width > 0 && (model.bottomEqualToView || model.bottomSpaceToView)) { // 底部布局前提设置 + if ([view.autoHeightRatioValue floatValue] > 0) { + view.height = view.width * [view.autoHeightRatioValue floatValue]; + } else { + if ([view isKindOfClass:[UILabel class]]) { + UILabel *label = (UILabel *)view; + label.numberOfLines = 0; + if (label.text.length) { + if (!label.isAttributedContent) { + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.height = rect.size.height; + } else { + [label sizeToFit]; + } + label.fixedHeight = @(label.height); + } else { + label.height = 0; + } + } else { + view.height = 0; + } + } + } + + if (model.top) { if (view.superview == model.top.refView) { if (!view.fixedHeight) { // view.autoTop && view.autoBottom && view.bottom From 8437c8404716f388f263ca9ab87f114716dc27d7 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 24 Jan 2016 22:34:07 +0800 Subject: [PATCH 067/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 94dec83..1d1f03c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # SDAutoLayout(一行代码搞定自动布局!) -### QQ交流群:497140713(已满)519489682(新开) +### QQ交流群:497140713(一群)519489682(二群) ☆☆ SDAutoLayout 基础版视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ From f7b63d7822e9ce2ef5f7c11cfff32d193e65364a Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 25 Jan 2016 13:41:28 +0800 Subject: [PATCH 068/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A0label=E5=AF=B9attribu?= =?UTF-8?q?tedString=E7=9A=84=E5=86=85=E5=AE=B9=E8=87=AA=E9=80=82=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 66665 -> 66679 bytes .../SDAutoLayout/UIView+SDAutoLayout.m | 4 ++++ 2 files changed, 4 insertions(+) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index cc4038a3283994dbd3d8ea8fb8871a977eed61fb..3c748440608267089ea8a5097126fe794d1a3840 100644 GIT binary patch literal 66679 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 literal 66665 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͒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 diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m index e3cd247..3653bca 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m @@ -879,6 +879,10 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model } else { if ([view isKindOfClass:[UILabel class]]) { UILabel *label = (UILabel *)view; + if (model.top || model.equalTop) { + model.bottom = nil; + model.equalBottom = nil; + } label.numberOfLines = 0; if (label.text.length) { if (!label.isAttributedContent) { From e247e99aef8a5dd2d302a0b9e5a786c2bc86b142 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 25 Jan 2016 15:15:55 +0800 Subject: [PATCH 069/276] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E9=87=8D=E7=BD=AE?= =?UTF-8?q?=E7=BA=A6=E6=9D=9F=E6=97=B6=E5=80=99=E7=9A=84=20=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 66679 -> 66617 bytes .../SDAutoLayout/UIView+SDAutoLayout.m | 3 +++ 2 files changed, 3 insertions(+) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 3c748440608267089ea8a5097126fe794d1a3840..b68c330902a02e9bb7c746f76abc29426ac86cb8 100644 GIT binary patch delta 24117 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 Zx%7YID5YM#|JyA7U(c;cOKqIG{69(04gmlF delta 23891 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

gnC6Y3f29~u(+ zI5ax6AhayBJ9Huhg~~%@s45f+#X@@MO6YdzLFiHFDO;Cqz&2!Cv6<|f?Az=+Y-cu` z&0#-bN3x%>li7LfLUu8`jI}LiSFvl^Z`mK%AK88Ee)a%+m_5ptu%#@;)`ru=eZphI zE5bX%`@%)x1K|^4AnXjoVNbX$Tpq3rhr`jZ5RQkFVKuCWt?-jb%Sf-ts7OI%No0Lw zOJrMQXXJ;-{>Z_|;mFZQNd$@1a?QE6Tsy8k*OBYbePZLj;x=rdV^d?(V>4sl#}3Di#!6zPu~V_L zv5PS@=8NGmB32dSV%0G*mWU~0U9p|mPaG-^7jwj1F;AQ$&KDPnOT=%)72;}fow!Tf zE$$WfiwDIc;xFPc@q`G7Wuhq7#_Pm8#BDv}pT#G~XT|5n7sLzVOXG#{4e?F!t?}*g zUGd%Vz40UQvvFsfj3?v2#~(>8r8d$V(pyposgpEWnjtNe7E8;d<TP60H&)6I~Kni5`iM5}zl=CB8`H*%D-eOI%G{ zPdrc7Pxeh_Cub+uCr>AxNmmj{qDg-;n52?S(n{V=-c8<5K1e=FK9xJkedG`1Y?xOk@Mtyd8#~Jo+~eq3*@D8p?pks%Mn?UWw}N+Oys~x=dZJu2Q$E+tpp_ZuPY4RAJSlmZ_8)Qzcba zYt%p0C+c(cWldU5>zYnAU2D4AYI@WhtEsH{S4-3CX$`c-S_`eU)>dn$_0vAqMr&iW z30j_(ug%ovX!Es2+7j&>ZJlP*_G;%eSS!~mwSY!yv{tQ&T0&E_8qLt2>Y4greUd&~ zpQkU>7wgOP<@yf&fPPp%s+Z`c`YHXA?$lx3qnGJ6N@sOWuhu19)@yV_uhsAB&-7PD zU88}KZZtD8j8;Z_Bg^P-WE%sFLB^-XXk)A~!N@c6jhV(gW1+FwSY~W6wiw%toyHzx zpYfA%$S5@~7;eLBR2Y7PG-!i0IKwoq8;{JUW;b($Inw;p9Bqy@7ud`~bFI0}Ja59L z+q`UIrq7I-k|~=treUVc8|HoUf%(XMYW`=wvR<=Zw^~|ltj<<9>s{+TYmhb68gAuS z6RbQd- Date: Mon, 25 Jan 2016 20:04:12 +0800 Subject: [PATCH 070/276] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=9C=8B=E5=8F=8B?= =?UTF-8?q?=E5=9C=88demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 17894 -> 18381 bytes SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m | 2 ++ 2 files changed, 2 insertions(+) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate index 6dd8c0c7c9c587186081f779dba7ae7acc33de83..eec2ee5dd1f649235b95b1f560d425c532da16f7 100644 GIT binary patch delta 9871 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 T@a}?xu;xy_skzr)>xcdy3KFxO delta 9575 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 diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m index e7811f3..b07fcb2 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m @@ -142,8 +142,10 @@ - (void)setModel:(Demo9Model *)model _moreButton.hidden = NO; if (model.isOpening) { // 如果需要展开 _contentLabel.sd_layout.maxHeightIs(MAXFLOAT); + [_moreButton setTitle:@"收起文字" forState:UIControlStateNormal]; } else { _contentLabel.sd_layout.maxHeightIs(60); + [_moreButton setTitle:@"显示全部" forState:UIControlStateNormal]; } } else { _moreButton.sd_layout.heightIs(0); From 35075f821094474f117f9d787b5d4cf845fb898b Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 28 Jan 2016 17:50:06 +0800 Subject: [PATCH 071/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d1f03c..74529dd 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # SDAutoLayout(一行代码搞定自动布局!) -### QQ交流群:497140713(一群)519489682(二群) +### QQ交流群:519489682(已满)497140713 ☆☆ SDAutoLayout 基础版视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ From a94da630d50d8c474e62743e0353c9be5f0a388c Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 28 Jan 2016 19:07:00 +0800 Subject: [PATCH 072/276] Update README.md --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 74529dd..7927401 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,10 @@ # SDAutoLayout(一行代码搞定自动布局!) + +### 招募SDAutoLayout库合作开发者: +要求有两年以上的iOS开发经验,热衷于简洁高效的纯代码UI。有意向的私聊(QQ:2689718696)! +(SDAutoLayout在正式发布不到三个月的时间里已经得到许多开发者的支持,截至目前qq群一和群二 总人数500人左右,github上的star数量突破1100,期待与你共同维护一个优秀的开源框架!!!) + + ### QQ交流群:519489682(已满)497140713 ☆☆ SDAutoLayout 基础版视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ @@ -8,7 +14,6 @@ - 一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. 支持pod: pod 'SDAutoLayout', '~> 1.3' From b3ac9333f0b51bd50150d4e9c96ad1ef5b9379c4 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 28 Jan 2016 20:43:46 +0800 Subject: [PATCH 073/276] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8D=95=E8=A1=8C?= =?UTF-8?q?=E6=96=87=E6=9C=AC=E8=87=AA=E9=80=82=E5=BA=94=E6=97=B6=E5=81=B6?= =?UTF-8?q?=E5=B0=94=E5=87=BA=E7=8E=B0=E7=9A=84=E8=AE=A1=E7=AE=97=E4=B8=8D?= =?UTF-8?q?=E5=87=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDAutoLayout.podspec | 8 ++++---- .../UserInterfaceState.xcuserstate | Bin 66617 -> 66989 bytes SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m | 7 ++++++- .../DemoVC/DemoVC5/DemoVC5CellTableViewCell.m | 4 ++++ SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m | 2 ++ 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/SDAutoLayout.podspec b/SDAutoLayout.podspec index 60f80b8..b204010 100644 --- a/SDAutoLayout.podspec +++ b/SDAutoLayout.podspec @@ -1,8 +1,8 @@ Pod::Spec.new do |s| s.name = "SDAutoLayout" - s.version = "1.3" - s.summary = "一行代码搞定自动布局!支持Cell和Tableview高度自适应,Label和ScrollView内容自适应,致力于做最简单易用的AutoLayout库。The most easy way for autoLayout. Based Runtime." + s.version = "1.31" + s.summary = "The most easy way for autoLayout. Based Runtime. 1.31版本更新内容:1.增加label对attributedString的内容自适应;2.实现tableview局部刷新cell高度缓存的自动管理。" s.homepage = "https://github.com/gsdios/SDAutoLayout" # s.screenshots = "https://camo.githubusercontent.com/5d9e879c7006297b3d6e12c20c6cd1e15bf83016/687474703a2f2f7777332e73696e61696d672e636e2f626d6964646c652f39623831343665646777316578346d756b69787236673230396730376c6864742e676966" @@ -14,9 +14,9 @@ Pod::Spec.new do |s| s.platform = :ios s.platform = :ios, "7.0" - s.source = { :git => "https://github.com/gsdios/SDAutoLayout.git", :tag => "1.3"} + s.source = { :git => "https://github.com/gsdios/SDAutoLayout.git", :tag => "1.31"} - s.source_files = "SDAutoLayout 测试 Demo/SDAutoLayout/**/*.{h,m}" + s.source_files = "SDAutoLayoutDemo/SDAutoLayout/**/*.{h,m}" # s.public_header_files = "Classes/**/*.h" diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index b68c330902a02e9bb7c746f76abc29426ac86cb8..8fc29367489f9cc497433a2f4fb37f26331a89a9 100644 GIT binary patch literal 66989 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�FC)0&FV~YZz+=@VX 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 IY~1Vr0FU%bm;e9( delta 10628 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 wGwqpanXb(2%;uRbGh1c4Gbd->&3u{_mL Date: Tue, 2 Feb 2016 11:49:51 +0800 Subject: [PATCH 078/276] =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 67933 -> 69618 bytes SDAutoLayoutDemo/DemoVC/DemoVC2/DemoVC2.m | 1 - .../SDAutoLayout/UIView+SDAutoLayout.m | 4 ++++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index ec873880b841faf10d22885d4fd4a0e264cf29ba..c8c6feaa9795fc78897f5e2c909599f404d1052b 100644 GIT binary patch literal 69618 zcmdR12Ygh;)}Og|?$+COqZH{?T1ao8KuCfFLJhsRrfkAOl8w6wMMU?YViy~r*hmPX zSg@dCq1g+F3Rdi5!-k5zeP{07O|oIZ_r8bWJ@sdjTmEy-nKP%&+?nF)3SY1$F>x=U zL?9wzL?V{Br{bQT)^ol$5cK)0ruFm}&-Iqn1gG~b3Y5(8;pIs^Yy8!2LYJ-C=#ri$ zR$?P@NW=u&zfy^vl+FQb>!tLW8qC0#{tpf}Prw2rQ$x6%#t4!V)vLpRX}=)?38 zx|MFDPtYgnv-CN-i@r!-p?m1-^bPtpeTRNPKct_~Pw5x*OL~xgOMjq0(qHLs^e=%3 zOppY-;1EFH9093)6)e!s&uXC=p79If7596sm-P5EK>&3x%_VB?1Ubg=NBp!llAx!j-~R z!U|!fuv)l5xJ6haGzja2+l39n-NHuUeqocaS$J63B5V~N7oHHF5uO!x3cG}tg;#{v zgx7_A!rQ|8!Uw{~!Y9H3;S1p#;h=Cx_(AwZ_*M8*_)8Q;CfY>1sEDfQ7URUWVmq;; z*h%arb{Bh#CyV{X0b-(S+#M*LnpB>pV^BK{%%$pj`cE3>f^*omwSYs=cP_Ut6qfpua1*#H*L2C@W}$dcHp zYzQ05hOulmoaL}wHl9sj6ImhiurpW@D`q9ElzCYh3$P%oVYO^NTfi2wMeG8$j9ths zVi&VZ*rn_;b{)H(t!6i{8`(|lW_Am^gWbvQVt2Dg*rV(*wuL>%o@Xzxoop9-k?m$L zvA5Yf>|J(%eZjtDU$L**H|!w$mi@v0WPeFSqLLtq5|ebvCApLzuUdPqH` zUQ%xX__=$njy`U%B4AyPns*umljA1 zrA5*O(lY5n=_2W3=@RKuX_a)HbiK4%x>Z^)-6q{GJs>?OJtS?Go|K-Fo|c}G_DFlB zSEbja*QGb4H>HoIPoz(!&!j`r57Lj)PtwoQFVe5lZx*Y?X0clw7NGUnlBI*C zqotFjuce=*zh!_W(~@NwWEpHZ%`(!GZy9BoVwq~0W|?mBTFNZtmY}7^QfrxSS!y}Y za=zsP%T<=EE!SACwXCt!S?Vo!TQ*wmvD|CfV%cihX4!7pY1w6Y(X!jJ&+@kA9m~6x z1C}o=Us`^){9^gl@|)FawOQ>}hqaBht+k!Cz4at(2Wv-bCu?78KWl&M0Bfc-%R0z9 z!g`u@q&43<**e8K)jG{uYV}&ntO0A#T4SxXf_16&JnQ+^3#`km7g{f}UTa-pU1_bi zuC+E;@3G!%z0Z2Tb(?j&b%%Ag^(E_G>l@ZLt#4WPSwFRYX8qiH!1|;0C+p8PW|M3d zo7EO)JHd9Mt(&d8t%ohamS{_|CEJGBhT4YN3T$I+V{PMXGi|eMvu&r_=Gx}jDr}Xu zMYgkSi*0AyF0x&0yTo>>?Rwj4+YPoGZ8zE0*y?Qcwzam6wtH;%+U~P$wQaL)x9zY! zZhOM^r0pr&%eGf+du)4c@7q4GeQ5j0_KoeJ?OWS-wm)ru*@>On6}xKJ?7F?9y_3DO zy`R0meSkgFo@F0oA8bF(KGL3VA7!6npK70GpKkZs%k1U$IrbWRt$n_If&D!D`SuI! z%j{R%ud!ciUtwQqUuD0}e!YF2{Z{*W`)&43_6O__+8?q%VSm#8l>KS@EA~D1z4lk_ zAJ{*%e`Np0e$f7{{SW(}_P-oXhwM-sszY<=4wu92=~QRIyy)2N*yniL@s8tN#{tI|jxQZwIeu~c>iEs^yVK^hI~`7^ zv#qn8v%T{qX9s6TXD4T8XFq3u=KyECGs`*1IoNrMbEGrhIm$WOIn_DMIo&zKS>`Nv z&T-Z_Yn}6*OP%LA&v#zwyvljC^BU(Z&Na?DXT9@o=SJr}&U>9(oLimSoZFo{ox7Yb zI^S~cbH43-$N9PQfb$FIPtKp6zc_!DEwWX%$#&TxJ7rl`IZ5fDbW}Pi-IZQSA7y|NuOum1%Bji_Ww?@~sxnQPuAHuvDsz-drAqND3zWsm*-A(O<#Oc;Ww~;ta+R`5xlXxBS*P5ptXFPR zZddM5?pHP`4=4{Rk0{%f9m?a%^U4d#PGy(!qOwPMUHM4auY9b0qI{}+rF^Y?ul%O` zuKc0=sajO4YExy^rMlHPwS(GG?WA^7PgeV@1Jp$I6m^)It>&pC)KThab(}h0oup1v zXQ^kXW$IjYp6XW@sEgIJ)sPD6h3ZA>W$Lx+YV~Gyt-4;lOTAm&s6L@SsXnDXtv;hZ zt3IbbufCw}RClQ_s=L*f)R)zL>f7o&>bvSE>Ou8e^*i-@^^p35`lCiPstKB?DVnNj zny#Isbf+4{4jVhqXtv zN3}iLUhP%wHSKln4ed?sEp4Cnw)T$pk+xqupnakJp#7-*r2VY@uB*DH>$*#K>v8%C z`iXiQy}RB+@2U6F6ZAwqQy-!a)pPXI^pSeLK1Ls_kJAhFsrod1mOfiA(!F|_Uars6 z{d%=NUtgdv(J$05(l6F8(XY_g=yiI%zE*G0*Xg(F>-GEfP5J}+gZg9ollrszbNVj* zMSZuvN8hWzp}(oWqra zxh`>C>RRr))^(lhM%NnGt*$#<_q#T^9&l}OZFRlq+U~*B;ki*M8T>u1{Q_ zx;}G#?mFN)==#?6lj~Z_j31@?yKBayKi*gj4G&Wc+ccXr&8xKP}Aam(T^j=L=G>bUFT*2LAt z-5$3g?vA+o<2J=T5Vs|6YuvWD?QuIM_pGX|sMtg7#6g@yCK_>19a}hXo_A4j2L233 z@>6=2R1^h+^+X|RNC=7bL?^Bg1GWsrLmvHv{M@{${=mFoby0~o*I!aw>8+~q=smMj z(^8T%QnTX|hbJe-r{<;S#b*uA$c|6T%E`>l&dbTmOUsNj-G+1{12&Mhq#bEbP9hyh zN79LOCS6F^kQB0ntRY*-9&&`7AvvUk)D5IN=|OsuUZgiUne-uj@$c>-Eu@3E57?=| zh5;J~EC4KsS2dssNagT=w`g9q-&a)=%r2?%%`d9)mU{G)a=m3mwG}marM?<}ps)t7 z21obr$8A67VVI-RjCpjdSU$n^48^ zfQ%ty$v85eOdu0Ooj?qMcsYn`LEH-B;~>5S;)lRG0P6y50I)=(1A0#@@t1lBqOy$k z)eMYgXkekgHc;Zt!3R)oM|*IJ&%40n)EkJ1!=tAk?Ug2M-Wf#!U(jD=Ht*3hqF&6e zs__QOP>YAx`YKAjfy1ao6ksG!0(@DUJTRINVb8MGCttv33p*_HCLjRG)Fz-(KAc@l>>{aQ6~qM z)(jlu3zirh7_<+tH4D&m9HGUd z3ah|h9%(0{*+t|NGGL>AJ}D+8q?C9`87U`oh>y%A^GF4$Bvr&us>zuoK!T)()ROsR z0a-{Ek+aBRayD5)&LQWL5CO83oJYx03bbHgY@JK<*%SlDo*=WFxtU z+)M5w_mfTJ0rDVuh-@YglSjy-E_Hp@%{bhaL@W32h7Q z2t5&cD)da~xzG!tU7_8fmqU9(uZCU^y&2jUdMET==!4Klp^rnKhCUB{5&A0hP3YUu z_n{v`KZSk?{TBKo^cPSHR0JvkwF0#Rbplm@qRDpwjRSfj(6&I^1ML8`6VNU|y8-P1 zv=`TsPswNGb8>)uLB1qkk*~=&s7_tfP2=bZ^hDZ*wx#W8dwLS>Ks(Y-v@`8OyV7p7 zJMBSx(q6PTJ(>2QeQ7`1pAMk$bRbQji8P5O(-fLY(`Y))pqVs_4x)qUDfCo2gbt;{ zXf_>Ab7(Hjqa)~PbR^BEqv&W_K*!LrbQ~Q|C(wzskWQkL=@dGZPNUQ53_6p}qO+zHK+gfX z4Cp05uLimr=*>WH1-b#~-9R4z`Y_NfKz9Ir3g}LtF9Cf6==(tT1N{u>mp~5!Jp}Y8 zpuYkA3j`4a3kVJnR1n-Cv;m<#2%SLa20~vD;z39RAr*v75C(%V6ok`27zM%@5GH^y z351y-ct9uyp$r5c2o)eygAfE^0SJphI2VNTK)4WuD?zvxgd0Iv1407`w}Egc2={<+ zKL`(k@CXQ7L3kX5r$Klggcm`04TQHqco&2ZLHGoO&q4SSgl|Cj354H3_!C45q6DHH zL>WYkH{w8S3t|TlJA>FA#9kow1u-7PBoNa;JQc)j5c5FH2XPFD<3TJ0aSDhtKs+79 zVi3zf^nq9jVl{|0AfAn$au2N}PFh9%w3?pDqp@O)6lUVjfVTo8i}~IV33Uy1@#xiM zXsZV$BqU4@Vr-F69xP43_+uW{S`&KZrS%$~(7575)!QSLX0ud6~VkNA$`{ z!;6QrlVz}#H3owVWTH7uV9?alqgS;8O_MM-uLvN2>a%^Zgod3*lw`N8+ ze5uiJACF#fY#RO-I-~^!R~i)bYfTEW2F_`&04od%26*&UtssM_5jZ)2Qc-b*mxr_c z%^Qt>b0rz+^_9=5iSDq~2C)NMhuA6JDhzIOo*V)Xc1`#MHF3 z%(S$W#H943l%!^lG`?L_T7u6cHW$gq21y02=_t~og>t~4U~FqrkRGk8-xw5(_vrUU z)Z%|($Z=yA&Bq~wkBP_BzJ~`>_=lNhP05Mj;eIh1pXAZciwNraEQDaXw98iStyFLo}?YyO8>9zisSnC8*1i%6%nRjf7`NbpsaRMeJw6L8L_B*94F zb8teV##iZ$QY67n;Z#`br9@z(t@YhzA8qP3=BRUFCiow&Yp zPWR~d|Mv;{$j-i?s2Hm(%|lC}t-;6{9=#^Q$Uisw6PkJ4!$(?2gOXy8zPJ@Ai82F` zY%n?%6S^4$;cU|J5KUAk^)@Ie^XLty9DJe-vDzWRhqQ zJJ+LMaBO69)Ht;Tv4^KCQKY3Aq*eTbRl`Qh6g`*+84cs?_A#nHA5|vk2Xnm@-g2Cj zkEUX%K}EGk-yG?g)^?dkc0xzCjZIawXl`;1ZUP?tiU>FVpn;4sOIesDPxbny`KpYH z8Ba}c$a(`t{21kp@(mhsi9+jDi=zwW!dQcX`K?JoN_0OJ8Wb%2AJaNa%W;hh_G&Pi zn`s6&XB}5(7-iFD8w8#0(JzS%gVr9@&Ew$8qMA9;0xLG?JIAA!MdZkP;Rsx^62xAP1{E`yCzLpW(DVPQ&3^hvhN=V)Bv-xT-o0bbQRy527~D7xsst~45DJVFMM zm$aTWYnrYzC&OCQ^Mnfwf-dvuo=86)18Wh^ZjKliU1BtPg-7=tn?{dnCJvA8mmAGr zc^vZS=)!K4W?X9!b#-gT4H?l%&-Dfc*S01FnbAh&W`ly2|6sb160QQKM60Jh0H+uAkB6R)tII<&WH2Iad8sM;E zvv8lm%+1H4*VDtjo*v!n4;cilX+47euDc&I2&zA3mePo!T9gnPY4{fxm^O9llS{z1c?6x&X|YBYT3KiF_n zfhnrc@Rrf=-K}GwqgM*GSU42zLf#U}mdF-|^qqH%AWf8kq^NTdBZAx4DxPtp;1$J$fj@)_<1h{tFH} z?6T4#KM!BpEy@N}kGGDwKDrxeZmva_LD!T2W9vyqV2vZX*V`C;JnhlXY_(obGrKuT z`8pV6Jo^uNzeXjC@;zc#qv7XU`_q9a=6e}5>};L6xNxX^*rdAH&!FPPW0uMsb^QN} zbzw2VAnK*#pq^2qJ=GxNmDZXvh-y2_XnSvKMn_rEV`PXy!D}A<@>Z}BTr-M|dW12j zY5tn)Ur<%y=L=EC;Tl+TWl)rmatspRz*U#6K%zN>()bW+@~Xy{Rn1miiX#n@-ty=R zjtxmhY2g34;#eGG5c9T24;~w0jykw`A?Zj_#zcdVcaIApQ5rMVAmn|I{$NBR{|kk> z)4cvlZ%trPv=g6Y@bcj?Gu?)&{XeQuQC_XcAZmYW+O6bhv6LAUeDYs8&;K_`)Wo8y z^60fP;yioy$i>;oQM~z4UP`9riMh%B8asH1z)z#$}rPygmaz7s@V}{ z=f$%O(!TcS%OdvaA56y%OMJqg;5E$)MA^=B4cZR2(r0&3O`mTx{avfAe~)VXVx#dx z$IQ+i&5Its{+;X3;U8UzR~SV7_&@eB5&y_2%3WMzu<>(i8iVM`CGk3gf?r#cf{bVx z++;p%&X{lcUq0 zJ57p&|HU|B5`Op5qRw}($qxGmYb~i^Cl_7k7aufRwj8sG$)nj%gM=8HMTn1@RM`G2 z1F0j|Z;zH#Z8uqRw2EUo+EU{vi~f{JmE3G0=sy_3G-k$)<%7xjM)=Zy3~meO!@b~e zC1~`(e%>TdJq{)BMhh6DfjO9y z$qcvh>jShe(0)MsH!zLqq&ss19RM_*@9R3y*jcpQ_<*kxx1)$`2g!q1+ytSr8aJVB zachb%=)-N7a^@5Tib`;^PorKod!(<_n_W?n9}L!danIFWEnX_bZ_x1J(&)E(WIr}; z(>b4?Q$B5R;()H{X<19A@Lv*_7~7<=j;xbMj~iP!rnZLf{E+LzJ!kz@Nab3*)tN4w zHMX$nT6hCX)|K_*%y(nmSr66|XcEw5peaC88(434vdMfJ(DeTT=5tnWIdtVU(>c#c ziHT`TB0MCs49-IeOJ!*+9cU)dETDsc4sKwXEDL!U4D=MBr*a;K9N!M?cf%iRH@-P* zaZ++(I4w8TM!+dNm!#yJlfQ|u*q8Zn~Dp?hB zQw?-H&cDr_wxXI5K%V+odeXzQRkYdzrGUwiPU!p1{WuS;MQn}qqPLH-*FSFM; zKQTx8>+B8W2VHax&|1z9chM;Mp(`i%i@P#B;!;x^huM2?umfyhlF&{aUM$`>bosOm3hNI4d*RG#O~DnaKyQv{51M}lu`=%8+2)jT>L3n95|y9c%D?v zfn#|e=}akrz-U(Q0D30}zRLt2_r#VD4*WHfI~~;1%+wSv{$#GRP2xXG;=zoxSUOu; zB4IGI5$HWY?*)2agA|f@FoPERexRE;F1OgnaoEiq{C?lvy$maxoZQ61Wztn#G%+>v zYUvsj4UW49fj-1pKp$;5ofV4*oU(n^;$++ck4NDMHyuOrv?$fQL0WS};5w-ufg6B6 z0`yT1{8$)xWkdhHeZn-RpkY8`*IeEkq>V?E_dU|Rh>6193UnLC+-_pd9Flp*{@$~3 zOr~d|>rG0_NHOA4Lr0qA@UXP?h|t@l?Ffw#2LAU1hkh~w-L3zwMW`Yv95^v6gX?s( z?~+7jdTz}zXSRz(APNV>j-)rht7<+4v+L&Z^|Xz(Dg(#1Idlimh`)Y za%TRJ{*?Z*5TI`YeGBM5pl>%=1dB+zTO^?G0DYG;^WO1greIh9oKxG+TAZ0|Sj@y! z?pLx>vYLBfi)J|i8H$QNJ)zM_hPD$z8Y1Se%-KCM?S!HYt^-d5tP+ImMEFMA+e$9E8mS zimLlHhy5lDyKGn9v)#}nBqpOkGgG*>B&Ve}&xI_bE#o>@gQbQPh>g6Qe>K$AAtVIF~hmT%wf+j99wJ(HYu%9 zn=NxJl}F^e%Hl`*&II~1&|f&#uMxfN|h}OEN34PcZua3 z#0>%c9q1n%_s>W-EzIsRj^pwuI?KqL@b{>GT4uTQh`e8Bxg2qqgFrx_h${#t?#$5- z4EU{kBpBfW%}R|L0V^!4Ik7Q2=?2SZ^6>twoB+zaWIAr3u>ECDLXv)NXPR3zm#5IZBoF+E{-)DJ<1IMas zS~goAM&L(5aDpInV8sN^S$+SMJP(%8Qh4^6l$g%FR!UkDModkrzr*r02aZ()usmaV z7J>0t55&|tu*(GQcbOwS^eskWi5xdM*@*BmlbZ)jmX|EAB5urh)$*Fsw%4#Fyd&>4g-9JOm$p7q|BZk~dHOGZj2b~`eix&#M8CYB9QBN~~vI;}cl zTV<Mu4Id&h!K8~Jr;*?wW-m!@fXH++=4)dTI ztHaHQv$eC;@DZ`fI@X?6^byvRLFfm#=OOYlz?9XXyaUduuSHCmk#+M@RHH&$^GBxP}Y_Apt=n8Zz$Ow@y84br>|WN#KL6!;YjP)@_l; z?Kcajay7w3(NL2#Lrs#>(eoxZMse2Z*3&t5EQ4nCSkEvekOjh^W)c{B)MZard2+FEJFlC-rNgi}D^QxU?DumD!&<)0fwo(=X>jbY49dS+6iowUxkF6NrN zz`D@7$a)qC!$8OeVK@jm4c4=*OAr^&A41vYaa^qDA5Tplquz4mrn8%DJys{9hP?G+ z>lH`TlI7MbO?i(5!I*^zd*q=Heem&sOcWBgpnTROq8O{JH*&C8hTeLU^=1=nGzbOF zIxpv%_m`cv!3-HPn)G0ubpwZr<&3O%Snot3-wnc85XNyK)T zA;Pi1rzxTa*e2`495$wUJz{;-q;Mh#h0Q1&x^nZj1vZmHGzAf6AGbbB2CTC_f#X2N z=}HBJ$;NzTKV! z9uM%FC=@=5af+kG-5}mgYI1L;oxUlT8!1ov%aHEoH1hUClQK(;74<514zqNj6_W2ng7;_&H6<_sf zw{3I7VgmkwFAe4Ym$|>}k6!v>DcOyt&Oe2k(jl0v~@C}=7KP{1curd-2vwX}zsc;(QCENa(JGw0$>I@VQgRCK=ZwUp z=A+P-V$0-2#&RIGEZZQH$TL9*G$V4{rlsR=_Zj@+Nd}QoXv?KUqw#i2n;uPCd1jT{85QIe>^ehu}=*rQK zz9nH$jIMZn4<*pdao9YzQZCO}#RQwzR)(;1KsXzOB^>q~6Ly9x`if&1;V9=PYXa7iVFM^34{;?`6@wOwYzxkxme zwkvGQZCBc^;)YYW2!xA4xCDet*V(SIU5n5wZL2`I41~)$_!S^5NBpD2ge{kG{7Y*; z{?*kUVKZ&Jg&SuVb(+@q-?7dm{wh3U7}tO_nObhV!?rmk3uBDGx6K2h>^gtnB!vIQ z|1sP^sW(_MpzFYa16vsSa8s###`Eu+itPr{Q!`q+0krL>J>GHs#9VIM4HtvuXY6&f z^UZ52wg%hnT$f^w`3<%^u*2^H0d?VO-rd)jx-@R%Q>(kCqeIV1#ZV(Fi7S6v#OKHJ*}if3Ndfl$vuaUzC;=B%Fl;HvF2aT*@wos^6zEuUH7 z^TJKI`)!{iZp@6V0Y5U&xGsli;)qb)4irBw{a61SaI5y6TaO|0b+U*$O#K_bLb&Tu<3*LyE+!(&w z1-tb~G}~=$x8X95 z<;3l6?d?pbb}!)ecul$6(7)(+FIR*+4p*W?u)5fLa;#W}*WSzC+r-)g!UN5)`n~m@phh6#_S|}iXD?mdpZa>ayD~@AC54*{w#lIldvR={ZLPN&nGt) zb?m3ujk04*5{KJ!5H$}3tm{0+QMZ_={jS{q^qIXmi72`xOx18G7-k|Vvq_Gl?Y!<7 z(@WYX*e4?JBoMZNu$=?%Fo9=ew(Y-TI_hc`FXUw5Y%Lae($fruYC@i2H>!`ZrXlTT z*ozPuBey3&c#IF$pXQtymM>OG_=s(8F6|5LOE_q(@`C*w`?&}TAiMy=P7aE*8eIDaU31wv z2dy}k5>t$nm7B|y%qa6>ztDae;@U5=Uu?g`eklmML3jy-mqB=?!G5{@3dFqmaCNkk_S@}ubK%Fz673u9_aN?lAnXI-ZH|i*CLDKY z>HQD6$DoPe)-nmJp9q^6RsFVawr}CEF^9}n`!nM+-?qPFTA@!t_zZC))u@Tq(|46^#X3)7dL|#`i78DcW51nyi`Zg4 zVE@9zI{?BL&G3e<>J*sp%8bQEZ4sSBqgDIPZmhP6*+)Oy`Dz<1m7(`Brac<7x=zaq zf1j~9D-*{@dS-eA%t0IyQs$rz!67;r2nRv<7KHCW_`bnmaac)rhaH4NApF23h)a8p z8;`yxcTnu7#3rEDk&39PN;sn4Z(o-f$vo_8s_!_uJ5D}Q2RiyV`kFFFuWU?>L}b3wGxoht!-KeKM&FU> zNaIAtnv8U$J2FhHzd$6-l%e2-?YEq{%*=Vy8x62yh$9D~VwwR*t|JfmJq<(wL=mAx zX6paMf!D6|O*f!2jWsJcWcfOuMwJ-jn0Q293muaX6i@QD0B(SWpf(e9sP~88EB?S$ zHd);D@aj7DPI3m%gc}vtG0RcJfn&u9j$%iN!MNxE(bhx2Dj=$yMjWGtLD@Iw>7PzFpwd%#?wiEpyC(7$InF`M*vfORBV>~2 z0@2-!yqUxNi9~Od$6B%AxY2PF0^b5+I}qD*;FC{C>on*4YsdGT z?^uOF$05fLi2DcME%khU(;JC4( zET`yXq`MPGcru7795>a(9W>(ku{1o5mY!iOrs0I+9D2C#owCz~s7}SHIyI*bVmgQ! zAZCJ?)!=kH;}G>k5C?%cn4_M8sK+tJn*8OA>n}Tp*O&O3u`Hu3o17U{26A?B8reuJ zSL^KM#B9Xb2gD&D4(0p|Go>_i=0&wh&xg%EsvQq-(djk`X`nNOi$0dBI8&Wz2#PWr z4q^@m%{4*CJ)Yd>yO(Bj_25xU5?_{yq$ee%paaA;7m*G))j6DF$BM|EInG?f9swf$ zcN)hYX=3+ZQ}FbBtXpwhwA`FvJ_puBaDj6I2aRR7ofDmf2s#aig5sg6jPm9u)&gAeRA1~p%F z9%0<)vJuF{U@!L+1s~OO7bLOP!aY^sWGLDu{fVM4TR$-cu)E^3ixKr1G>o3qP^K z6+nC`9~Pk^3}5TKo|71>NZ?%Uya8cv0&ymYvpDQ*6L#jQ58VFaBbY2ErJ~wo8XxE2 z*|^OOt#hrDuZ4)2ggS3`Za~~SLG*xl2FEQjacAUSv?=~>)W+csN5SSCN>W$oI9Mx zN{E=S&p2@<1n>BA5Tj-gR$lzYn62R<+7y{NcRTm;u8N8Es`E7@@eL5?0&XpZBvypG zYUPS&HZBW~9yEnGdZKb4=ey32IA|;j?%ePE*d(wDL_dN?lzha6<3Ags^Eklh_6!WC zBK`iQ^IP6Ov7$%kch2vT#vedD6T|?gF=*0Qux0mz!MDs_oQ9Lce3YlAC871egOT|Z zG`fcf_HQylZ0GOJKb(I$F#@dxaXyF(KwQ`$Q&}M0Wd`CRz`d3bdof}kNArEg>4CBg z#4(A6yTHwxeqW#r5zZY>? zWg4aFbetyPvclPWlvQJRCwG#&BevXG?jm=UyMYKGo(JLuAYRxY_mF$ay<`j_E(Y-u z5HAJsG6Zk7*`aKl2MOX*kKVoU*lTZbZF&5B{JuAc$6jZYm1Y%Xl@zBXdYhk3EgNSu zf_VN>UM$WkE-5Q6@s>rsXq=n~;Sc>hXm!+georWzNCm(`%(NSM4D$OWKDNard zYm$7bJcJBbvxakRe%~r*%jlV+uH?x$ffaQnUmn%s${4v2XH3XiavOPv1jvV>x)2sT zPYewO+GU+QNuDfEk*CVjKtvmQHHa%gTn!?x4M&=tDRUPS(@e@mGP)SK6vX8q@((Y> zt4tNZnY^!`I&}1zJbA9nGmzN8)iP!vGG-vxfOstjUJ(J_u=0!_F)+gww|v|3}FcAdOjz7oN&mXYQgK;$1fi0DCX#umbJK=LYMf`0SA zKLymCfAZ|f4hH=tK4UY|@%{>5$)c{+#*ZV;)}X0E1%GXPV-;7M#?#_s+n2RdeJ!OH-Mj-x6i{lL2s#f z2lqZL^Oe_{`_y`Lm-!yf7>*D4=i?{p0gv7ze|TXddAPKqwxp&uV4T3yv~j9OZ<9Yf zr>JUvQ80S*pI3;3IOXT$=dsi7GQLumcgnk_jxEd%1d0~b%RA}9sioesBHZ`Jqqof; zKCZT=0?&<%28qbzWqA+p!&gAOw@%&*;(aEs1x3M{(N(zZZnKxC`bul&^cWU6NccYy zfH&oLx#M_C-Y35;zXReX5FY^XK@cBmkl&Nvmp_m{1aUKn4}Ba%{AmZ-%gChP9H!3cRuf#q30*lc9 z1-#Y%K+VvKqS~sGIfdR}5Y=I#x9rr6GH-HLa&dYo#)0AH6{=t^+uV^Tl7cf`bqc1i zPt++k5c!lwvw@}<2cLuZq(`3|*%9JD+iJ918>id%^T z@o5mB0rA<`MG(X@df#XlRSC3`IE*?^c3b5f7VI#(gi_M)H26W{Uv1ppoGLx2=U9NOi zy45RPl&&DY0OBqXcN?0Z^iX=@sM%?Z8l|^#^68BWo{Yh>R_V=$kNIq0rDvVe55yPo z1ssexzN)Jy1&XSIyekX6CA9%x%_0+Nppt+aL4@~+DD>8>RR$`Fbm8Q&h4@EAddUhF zO6!#rB^AV%LEKZXq$?R9z6v6rd1&6BrNWf!{xGJRW~Gww7D<={1o}M`o7# zOKL08JWZa6DEmNs3q&lWwbCBi5lKY)1f6}qU7>T6X6wY%xEab!kKVC46D{SiR+**D zrVIb(Dcsy7cgm!e??zPCqhN_UBKl$w-$g|=#p~tbEd%kr7UG?&%u^;C^7;V8_YHZq z#?cZHd6}AHNb8(;JHHm;qgn~_p?9Vd0P!ObKdx756wC%c1;%F)nk&4q?=Fb@kEtoe z?bmRfs1cepZ_C(67ew5lx)o02ZlWO~l%>jr=(&~il=GDflw}}dMfY5bnU)3oq zK>XU^#)Yb1$SLNrQGSiLGHg4pS9;bfs};-}z5($EH2)Epo0U4^u2*hR(1{!b@!NW( zURev`cOZTb;-T3H*Ay0dbRGZZ$YYAit9&)JrCyKTtw~l<4L7~kW0-fC5nvhPoOM<< z)bo9YA{5-IY-~ZnJ<7cx{sZO! z@lO!{s#l&-o&`pLQS7lProv4zdpIVGDD~!BjPXFmG?=>;JVvBbl-9IVtF_9@$}8Mr z9{sVSo6NlmPRB$=Z*M5?@NxF0@|Lnsc^jAn%mT~`%+{d1tGuVYuY3T^4p`V@alrTt zmq-6!9cP~@2lzPq9GIg{`2v{psN?J#KF$s*-vX0?;rvSDI6I{L#I^hfTGoDmCjwjUt?1bjyNmW!;)s$_( z+5&3>>_lS}RUVu0{Ae5BMvtzM*Y&I)a!Z(3^#rwT^ypICsqKNa1J>T?rx+%~ub)5) zNiNAIwWNmlNdYM$i|{A^t83-xOJ5~j@vfItl1Tcbc2>JYj{vp1it|o&Y7bx?>(pMr zI%8|i9HDBQJp_EGwZT#86PH%J&;Re`Pink6utobxYC4WUHCatjQ`IzJU4eB6+?b8^ zZcsDSOf^d#1gsCRzQFnc>)(R9p+*eMx_R`BDC$b8YyVZsXeDvdD(a`zYOaaa?B+mbV8~Jr14>TI#R7ini1?(utn~QQ zv=JHc*?Gy?@tJ8ki8*QbjdpHcQe?0%RnO<5I}ccToq7Q<{{3FFDppJ9XNErN#oU-( z0xT1a*{hgFjaM&MCa71a%c-AasAs9ypo8@;tS+i5HB#Y{fUmk{y00pHzz49wAz}lT z3@mGpxdDmx6?Z0!Qia>p4a8li-VSU? zoq7kbp*-kA=&?nWUh@N~7~w~xKkiW8urSoe_ z4eH`s+#i&eos*rKIXo+VL}o7P`S84q_{@yF5vcK*S;G@YBxj{(=1p0cneItXo#GqM zv8S6qG6p0^6xLSqJxR^pE%cW2iU7*6-C?hctLBg6Ev{?PXp?+36<#Cu zR^L;4u2bJvKTtnZKT`Jtn*?koFb}X2U^uHA34qj3)h{^lpQ)d#2Y^imHU-$!wd$AZ zSL)Y*n@qClz-Ac4_dcw-C|Yq3R6nm%dG!8Ae{gtF$-F{uHEyVi9pusb9{p*v4P(sq z7-lmfBvL}U_7Vv0BYao{9_f;w)Zb!p^}G6q`X{hifE#79(~+wl!%Rdnq3h(~wZ4i- z1z%&DEe3#Q*BqJ?*crfzfE616x`{Ax&{62oT-u2-;N*1ZQ_FZ7+|#a7EkR1}p5@o#R=dJOAriqNI# zA!`WFOK3BY??dk`TolAid2&7n8;+m8zS8^TK7D7Hq*mdJ)68GJ9Ed+t-=`m9n+5zm z1L7S66B3bzsocmQX9g{W)kP)V;fX{SLk@&XPKgj%pWF}sPD_v4Ww$X%g7bvdU7MVnXJLt+jV3;xt-iYHj^FXS@JS@gM2{tlTXNJlu`?I(UWL5 z+LOl9RC)@{rv-E@9Zx6I+4KzRr2$$?&!Wre)pR|5m_9~#m{Jy~`I8I{{|x`2PXH@3 zJe}56>o&Ww$efGnw-zsTrwdWe{IBpJ(|T(C$$(qc&$Qm!$?5^EuZAHl8jv}_d}u>} z%>_2^R`p9QUK^+-;Q!+ddr|?c5||$t{=%1n;Pm*>Ex@Ej)o9uO<{_jDA3FKyNc^F~ znnm1a{mqknM`+{8SF}tViCNkpuJ^oTi-m+UPOtR-k_oKJl-4QQsit7O_1YqBY)|N|Hu4gtfO!wNy2{zkyMhQ<56UXnJ&X@Yr}CWfT$r6Ewp)Igwk^Z*{_Y% z^0iUgXstjSqm9+ZY54tm4`4OG<^x*@>?~ks1MWJ@Lco>+JD(f)rc^+iYzD8jt$aj4 z^V5E`872)_uPZq=x#{6Y1T>wi(|q4~&11HVo~adDj^er0Ym^3Hg_43scTobWh%xN|)q+LV?tk*zW zs-35uuU()m(=G&t|6K&^VqlmPUJC3oV3)7gF4iv5E+wkAl&2`bt^l?iq^Hn4@@ILD zLK99$n?DuvLjQsh0SpQ-+UFNAB@c36kAtDvLWfjbQJk8ZofDs)lg*?3)SUS2R37&y zjz~>OPfJTr&l!QGa|9R{z~vL((%3i{dk<*dh}nEoJCmz?XV!X~D(xP<3qEdy>fYFh zm@acbgAIPNPH|Bn9~Wa7XAhV;K=@u!@$jfyZ5QK=G%ktCSi$N9kA;+Xt$!s zduq398?-w#{Ek7pTiXb1wUG$!1F0`ai6A`)(st|w=?RdY#IE2Os#!SC4tR^u$Kl_F zbNma&7R~pSo6&w7T+D>iH$_$9Ihmk&7>7rX=lsX)waGO;oH$v;Asc5hOzcKnv$?1~ ziR$=V%m~Y?q7Y{B`I20|bg-PSlZlXOHsy+IDS+_PF+h_N4Zd_B5~?fZYh}CSW%My9L-9V0FOifvpABut9xPdyY#N z<-1FJQQNJ(q`k}q%hrX(i?hIN53pZA(m`^8WR~i6F3SkXCd)hpG$qcnV^1Lp7LQdb zhQPmBf%KaXV#ydFN<$!OVZwrlv(cn*s}dQ}Z( zvjJ}qe=%pqu?iC*w6V`-R1_`p*Varzn-G!UyW0C$Inv$(c59u6a})e~Z`@$PBrL2M zM`|O2@v-(P$M^);ZFSmbz&CMEn8ep*MIQK4J4oDXwXd|VwQqoJ0EYFHJJ)L8qV&H9 zb{C&QX1Ge?5T>G04WlqITtwBaDmQ*@JbeST14|Rp&xTL@Xn8$yjItTa{emSg?N?y9 z-s`Rib${si9pQTIPwg+AU{OlYMV$e|p>_|jdx6~t?0#UIfIYBYx9C>grrULg?$l*q z4+47#*rUK+1hx&>ZeTAV>$AAV@+h5$%`;6R4f4^9m}^OTruu-h}_Fth`rBq&?aj)Gjb2tGayQJZ85G{4CjiNn#PyJn^Tiv3FvM0j>H{% z@wDDa?@YSuT>&@IXAkp|6t3(#WQ5>>vif^tFJgXG@2#IqoO&OicdGrKh#%~~wmneDV z`i-EZ(X?UmXs*FCR6nVDwo~EY*+X`$4uqOd`_-D^@HPN&5LCB0li`P$` z(bW88gD|7xF^}3lojc(vIe31Lk(21d^lWoEMpKuYS*!8d_#$7RULPJ=vT?*`B8}(j zdHSh*nBQH%dui`>3 z9Dlf;?XZMs4_`;4jMt~@GpHZf3&3`U$UhjvH#-E$6yoW+CwASoUO$7&F4lS$^UY$t z1ZP%TszQ^TqlaI;UdrMA<>zM^i`{d5r3LcTXV!m^mSmNv0{Q(O`GL| z`gAh}e8JSg3N%YP=H$3E^DZ=CE!VoGC=jtIHfV~dv4PbAs)z3p^xd0fhj6!AM>ks~MW36Ax zrGil?F35@)Ykj%C3XQdXrGAxuwSJ9$t-eCXkO^nn-vRb6F!W>Z14BRdAvf07>#Ow} z^c(e?H1zCftUm(wDX<@a9RNJ*0kii1He(&>gWL4G&>+WLp|9VqZ$yKPj%h!zkGVnq z#5Bk=N8Rat&l`J%eshETkiOY8$iNN(9@P=CpQa{m;nr}gzD?h*@6gfQd=BgjU|5Gf z2n?6LG+M(OO@oAjLWE!k*q6}8#=BuV* z`u50%Dcs6i=7YFU;OG`i^OzQFQP_f=5MP4%5Kk8{UgBZsR3CRg>5UHLsN~&J~ z-EizxSmNh}!md#_IjM!XiWV~fV+PUB7tyzgdc;8I(NdURm%}BaeR4TLVs)e^CybNi z!VU}iE4&zA;X-oGcjS4OD~>#Nbpgo^lB3?$&D9+wBtynA_P0yE8vCfnFxYI=bR+cjbq#0%9Pb(kcp8g@ zQa{wxr9Fl%ofh?CiYqmGUecA}%HphMg5<7q4FW0dsH_g*tPXVz0|}*q>$V$N&2f!r zLD6ZhkszH2QX5VYx-wI@dkj1Ox+sdqxW>15ae`|i;K49bdwdZ~@AzsY@!+XSk73h| z_sL$@RM#}ubmDYjFyWfznvJ!4UXwSqnCB#8c><-kE%#RWYJ>mR*mVFjm2_(quZ<$P zNf1F4J0en4M8$?8iUkp*iK6sQsDV%dHz0%nArM+<(m{F$rHJ(2LJQKnu5GPre-jXX z-QEAawJF$w z52cSX0QKBJ8S_SU9hjSN|fmEn@hS0sP-I1Rda6Te7X# zb?ri+JqWb<7r}}$Lz({+tk6ybycFj*!HU8G!HTj$*`n-F_9zDg+JZn}mWd$HHU!%K zi(p+)Gnci>C5iaE{9iOS!Vz2CYMMFSmb%%ime$D@Tn zyV>2a$CG10`k}&r^h4cbkHOD46%+#%wFvSrE8f2W0>2M?A}X4#fU$i7|DWs&Ivy$( z6~_**`M+;TMBQVT{{P9kv|e)I_f?G?L#1mUzSuBicQ!2 zReI#1@)1ZJf%b!y0qB~Zi;l{rDoRj*B=EQVGLH-@5t>b@Nc#lwkE}4p|Mm^8h$vF*}=+uXgqd z+qieMU)+^I+Bs|Xwh8)(jbf@A833`dWDNX04;$k8i7|qV4vW%rscU|LX;6QlUH~=< z>Nx_PNY4<|Sa^f;_+eyHxOE@k^g8B!8N~ z(prnAuC&z83rBx`%l!O4wA6r|@b2Xvgn{V30(x*MO$-KZ)CKm>lJNx&Q~+o$c+mg= zb3sh%lHvwS!qWdK1uQ+4UrLdIWtV#$22=7H=!>Nq8{{KDG>9PFTKisi8|ynf(HS2uKY*up_`^v|v2oNi4hy`792+vKoQ(7WPEg83s;P zz`y$$pSJLj>>xGR1$Jfcf&WYbG?JxUOxT@+3ns!IuqTWxQ&WE9q#%$10@)#u;m^ow z7@Q=mscvl#$d5~N&j+Re00H)e$*>;+86l7{0+}Si{%`;sh(KUASs@S(teYj`2LPUw z)l>i($;3|2W^wp_(n$a*5vIeTa2Om8N5GLV1CD~D0WENWNWz9le!xOsuJ0(dIm z{>7e6f|HlZOoWp_lm?s%vZt-U!S~?|(1}310dc-I_Mm<8fS6~^W{vYY75HJf7U!O zvM+!jb3MQy1FM)VQ~xCg+av-QIq>^jwPrIk*;>ZGWnM{IoG3s_n7<`1k19c7l3;qOuhQFYO;BN@zjX-x1 z$OnOZ7t}R!D&HkE2iR=3qdD0wW`KD3f!&3zuO)*I_V&W2U;+VXV8Mo7fR~Hy?pRQK z*g@|fp8XAo=I*Kc5QCjRx<IHE=U}I|rPC-T<1o6)l1WHfF#=JA)92hCsn7=pAUVweyyvfhH7! zKy>zuW$)(U3oB*UQlsT9fdy|!V0VbMBF;|P$Vo-d5$xv+U3{BQ8sxj6hc{9JA#Y}S zmX?I2hdisIzVL7+?5_K1cmKR+%Tn1(JKW+B{q%d;>qYIIO)@!=#u zfHztaErmd#2zX~CXXn58DuCwptKP|03q^MA5|LgkK?abz(1#Hy0@!Q6*z7BC=wp21 z=;P=UY)Q>vo9s{|0wsb+Tee?*YoElwjmV;dX|bZy+%3sydGs0dSu{}Pq7Wzsf$kv? z7@H;N6n%ct5|3Wcpn%&&Qc7gM&Y~K7RK$U8JFp?MW2OtdA<*kUSCMyE*rM4^vSYV? z+WF|q=qmtXg<=sX4nVA0Y^sNzp@{TSvgBelp^MclT~%Many^&)&f|t`54;Ev73@VN z0<0X7zxU%ww8xLdfBrT)z^(lsSH;5lwhPMge>WhPZOo;4s*5(|5WkPUjlP4{L+hgr z(1vIuv@zNQfzl8t9f9s6PzC~JB2X3rWg}1y0_ENZa>5*KfwlzS)@U5~WWR(P%0nPv zY!|TqEJUCp_IL5J>^NsNr4n>Ed!x5+qfgU1I<$s_KGy@&; zJ9L4LMS&|u7~5a`izt;_6@#S&~z|5ic?8oWs;5nYM~kMtOUY7*Hp@Tcr!?=wOR z1Iw2EKdo~1N?fEfgTdRnochbo@JkLH-(?O-4s}2yHUbAe*@M4Lz^5VjW=GB0b66}y z)!A@J-sZ5Tfvf*5*6zQj{EWW)St5wT2NfG`bPpq`n}q7Z}r<0G6_kLk3W1Pl1Ex`nV>!o^ieB`U(zK1oZ{UWx z_j0Rn-{Q98cHqWyJ9E2myKxh_J-JET-rPRi(cH1z_rMWEDctGYncO+t`P_xv#o%n7 zPVVPCt9j5oVm!Baa3BgjnWr2?CpYs<@=Wv0@_-0ap65I-LD=XUo_9PSKw#)+UNkQj zL^2A2$ir>CJ9+o;ih&qFDG=;;7)18zgD|9y4Qn@?+F%AaZI3p5=9A#F`lkjQy46Fbv!WZC+@MTyTR)JN4xvl|B^&7xU z*M;xE`miBv44cB{uqA8_+rW0P1B?d-o(t>-Y&1`p1bf3iz{sKi!-@*ifTa`;ETkA< z$0Wija5|g`=K#Z@2rh*m!j*6}(7qesW^^xl06l~rL64)S(6i{L=;!EH=r`#1=)cfk z(BCmDFsm?YFzYcq7(NUd!;jg7*^JqW*^b$T5ykAoNMNKfhcL33W0(_|)0nduMT`>W zGUh5q6{C*P!suXhF?tw7j0wgZV}-H7*kkY*0>%yFfgxe;V#pYO3>6cM3B^QUqA;}exg~`PfV2Uwim~u=N<}s!Y(}-!ov}3w3OiVw9g&D?-VJ0y%n0d?}n3tG8 zG4C)RF`qHtupC%U>}u>fEH`!o7RF++0$3sJ7VI|cPV6467m*YRd ze~Mq8zlOh)znh=Q-?ve5quNIGjhY*^H$K|fwy|Sl*Tx!es6#-R&>jJd`T>?D< zy#oE4Y&N-X^4NrI@)8sl6cZE|ln|5>EEjANY!Pe|><~IEbXMq`(0L&xp)#R*p+=!* zq1MgEHlN?DwE5EJE1PRJcW&<9%-q~3d_h=USW{SASVy>Bcu06ycvN_N%f&64TeP?6 zY`L|ieaq06;Vq+E#<$vS_1KDR_1bz@VF$Y*XH*v+dTl z+uQWEO>BF)?e(@d+um(A*lx4kZo9*F{PvmcZ??bN{$cxHJF<5?+)=TkYDe`>v7NFz zkM5M)d17bn&aRz3J9~Hb@4B!{eV67g?Oi&%KJ4b)4eegDd)@Aq-2=N>yPxbH*>ii3 z?6ue%v3L92_WAAe-xs(qXy1GBmExAwy@2i6=|cYy1F_krL8^aEiBA`WUC zG&pE<(Bz=m!TE#l4}LuO>EM?`frp|F#T<$|6fd(yW}nP{8A%yw8M;ioOrlJ(OzL6y z@YciI4(~X;>u}oPqQfPJ%ML%3-79-o_K55;+2gXAvSqRlWh-Q>j_f=ledOQ~a17&- z;v+Rj>W(xVX*zo4=#8T{kLn)1b4>8qo@0BD?K`&rSmv>^V-Js29IKK$E~g}SN$!f= zRk?1tQMqxsNxA9c8pjQe8yz<}Zgza~_^ac89)ElM{RzVpwkPaQIG%7iF>>PBiRUL? zo_Kvy~h)d zGV!wKOe=1S+4?kmhIeaf23hRVjurpo5ZEah3{dF5xy&#$IkExKBA zwe0Fc6@rS73R#7s5}@+s+S+UDuW?`Fy%v5g=~~LQv}^ZO52&6}l~+BhdQLT4^`UBo zYL#lWnwXlb+EFz*wG(QO)Y{ZK)VkDquKQf4Uk|$;ah;*QRvoLpQGJuTkUB*@LY<)= ztsbkvry;DdRb!jR4h^bCv_`DPJ&i<75zYOYlA6+*hcsVle%1W0#i7NiWu}GKa@KOu za@TsL^;PS;HitH+c8zwYcDFWDyZ?sP4Wk<-H_UEW-uR@mT4$}!dL14enog|FJ)H!d zvpCfs(t?S9+y4#ypyI~(qx?qKf3+_`@z^G^1iJUv-G1wBQ* z3woFI^7X3ps`YC0>h*8vo9Nr<+w0@?3HomOclF8o{`!IXG<~{$j((s1lmV9k#z5F$ zr@?-Mvj!IpGz|<5tPE@n><#b+1Ot-6T?4WK#URjtW{_#nV=!*G)(~YVWGHGVZFtB~ z*6^6&2}4CgCBw^x%7)hruN&eF!wr)S+YI{*Ck>w)ell8V1R1S0;xghj+Gr$bBy6G zHo=+*mnA^Gj6jDX0Vx%*-o?lX2;CVnkkwonO!!!YNlnTW2S3%$IJknM2MKBo0XW2n$4NL zHT!11-W+YtZ@$TVv-wtYQS*J~66R9o2h9(gpE6f6*D$|r4nh;nP0cOL9n77~UCiCg zJ_$_u=h+9Zn9I%kFIAS4hp|LdoK?#Z?P)i(rd;7L68N z7DE#4J?f< z%`7b}tu1XW11t+IA6q`Pd}H~|YPA*GYO~c=tL;|1tVFG(tqxhqS{=1IZgtA)h81EJ zWL0WaZPjiyXf5*&MOCV`FAxXX9Z*w(+;2+63E#+Qiz#+a%ef*reNJ+7#J5wrRB)w3)D(wwbee zX7j@4gUu(KuQuOpSJ9bWXqRc1W0!ANWLIieZC7j8VAo{VYS&>mU^ij+%LD1d#meX@PFeW`t&eY<^^J=4D5o@GC2KVv^{|IGe{ z{c8s~wtMIOF)n@r&bk{0jUk{2DwT9*yV6 z3*d$DTkw1EQuw2IMf_E~DqbD0h1bCw;!W`8cuPDEZ-;lq-^GXEqw#V01bi|+4WEZE z#Fya9@a6a_d?TKTAHhGvzr}yRf5Lyo|8QFC#O1{6#OH)|;&5S7QCuOH= zPS>3@o$fdpI2k*cI$1bbJ2^QaP86pIr+B9%r&Oo=PFYUHPGwHzPL)p8PPI;LPW?_( zPS2fQIlXau@AQ}R3g=bMYn<0Pb31Qv7I5C_Ea`mQ`JD3w=S$AY&exo8INx%<r8YeJBK;PIVU(LJEu8kI2SsXI6rVMcdl}N?A+qq?>z4O!uf;qC+DxuKL{%c zTm)VMihw5Y6E+dH6T}I!1O>tsf(k*6ph3_k=o5?xrUY|>6~Tr;Adm<_gh)a(A&!th zNG4_2rmhL65bI$5wgek1>gww4>g!5z4R8%|4RMWjO>r%7EqASQee7E2 z+UVNl%5?2_9dv!-I_f&-`p)%-8@C(QO~6gaZHwDBH!-*UZc=Us++^I2xXHU+b<=S( zb+dJIaC35VadUU`ar1KvaHF~fyM?;Nx}~}mx>dM6a;tHxcWZL%cI$N;aAUa*yN$Wc zyS;V$?#|_oao^}J=q~Io;=b2i++EUL+WnBbth=f^!QIzA*S*ZW#=X^j(0#&v+I`Ob znfnX(5AL7bzq)@Xt{|==@(=}xyND7*Y2qQGEb$oeEK!lDM7%^)CSD`nAQ}*Dhy>=W@!(+F{UJr2(S&w5LCp=Dhobfp4alu2?L&w9&!_agaDkt4ZrfFbPW%APJI$Ng|}Z zq{F1sq$?y1k~Zlk={8B9WI?hf*^=x@coKm`BKeadNeQH6QW`0PluarjJs?$(sz{GX zb)Z7+Q< zBQH}gb1y3|8!v*_U9TXo7_StsbgxXW9It$@hhCLl)m}AT^Ud%ZW>o8Nnrw~+T1?`_^<-iN$TdSCL^@YeRe>3!Q<-`mLB#@pT-@9pgE>P_@U zykopGyt}GQ~^#;4wA+;@#H*7t<3qOYp&O^tT=={xN^=ljg}t?v)=Ix;_bD|tJ4 z7g?0Nk9>$MOFl+EPCi9GL%u}TCL59M$gX4}86kU$2z7*uiUTBuhFl?uidZ9kL5S)H|96t zH|;m)_uB6>WfcWQ5u^xHL?}BbyD5^C0~8sGEae#G1Vxc@jdF`(PO+!pDFlie#e+ho z_*1A98ih^?r`)4tQc5Xxly*uNg-PkBuqcz18Ol868RZ4#HRY2(r$4X1kpE8qJ^o_; z`~9W-kNO|?Kjkm)ui$^)U&a51zk$DvKf&M4-@~8ef7hStAM79MAMVfakMU3O&-X9) zZ}RW<@AV(>AMzjZpY?z0|J?tj|DXQv0yYF34p0cN3~&ta2p|W91;hm;1SAKf1!M#i z29yLm2q+Jz3V0mQ63`zo9`GXIL%^qiuK_;-R|awg@&=*;(SiJdn*z57?hlj=R0zBh zs1m3as1c|gs2^w)Xc}l9XccG^NC>HN8m>>8surjbZuqLoRuqm)R za3pXp@Lk|HDhHL5x|+I<3RAIE0jeNXm?}cuOO>T6P_Ix`sA^OVsy0=hYD6`qnp3T) zHdF%Dn;J}wqQ+9=sY%pSYA&^aT1+jaKBQJs8>rpXQR*D^8TAGAHT5m^EA>av%Ai$2 zYl7AX?FzaabR&oqPuX!W!vS~qQoHck7J_L=rAm?M}ocy;iGU^o~XyfIiXSU7lh z@WJ2{!54$of;ED*gKq}k4mJ(82(}Kk3APW$2YUpQgTsR3f)j$1gVTaDf(wI7f*%Bz z2Ui6@4sHo%1`h{64So~+KKQTTFTvkK)`YAN;R)Fg0*7EjwuI~pIT9itq7ZUEJXuAyFZ*A@LzeA*ms`Aq64DA*CS?Ln=cWLOMeRLuNu= zhWr`wF63j#XF4Z+HGLhOi_S|&(FN%{=u-5f^yBnX^fUBxbY=QA`gOVnU7LQBZbY}C z6X-tlAbJQrj2=mkrYF?yUQVy0chiUHBlL0l6n&QdivEWFp8k>knf@(w zbtqrxrqJD?lA#AeWkQdH%7rR~o)5hkdO7rJsA{NAs7a`8C^6JGloA>kN(-fj#)RGr zO$<#AO$*HkEew4W+8o*+Iu<$^Iukk{`bX%y(2t>?L%)Xp2wNG(6^0Gl8YUhl6Lus_ zF6?BOeAvaXD`6^Os$uG3T4DBKQDNy}U16-SnXp%3U&EpBwc%Xhyy2*D!EoVlk?`%| zyTV1orNiaI6~eED-w3}Ieka@@+&CN;ZWrzt?iB74?jG(F9vU7Wo*iBi{vf;}{84yK zcx!k^cy~B6yg!^3J{kTz{C&jA2rfV-Kt*68Hb#gr;SqsEct`j~&>|QSsS&vm1rfy&WfA2ObrFpbEfH-Ioe@0|Pa@_b z-bH+iqTphVC5{|@13PcJ<3P*}W?u|Scc{)-l@^a+WNYzO7NZm-iNW)0uNV7=G zNXJOeNJ?ZxWPD^&WNPI7$gIfX$g;@t$jZp-$lA!Z$ic|T$XAhnMSh9=&RD@%#o%G^ zG0+SwLx3T~*vXJ$$T2Q3t}(7NG#NJ-w;09@GlnI@nqkXuV7N2Lj1a~>Mmi&tk;BMm z6fr6p)r?w3J)?=y%IIZ`GX7w^V|-+MW_*j{h*}rL9kn3}6@`h~7$p)V7IiS{bd*xm z<*2Jss!{4ux>0&jhEc{*W>J<=j!~qjps2{G=%~1;gs9}G?5Mn`!l>e?vZ(T?x~QJ0 z(WpP7-bHM>d| z?lF{@fEa2_a7;-|ZA^VkV@ylTtC+7b-(xvqIb%g*WnvG<%ElgxJs*1^Rw?#!taj{; zSe;niSc_Q8SgTl@Soc_REG0G|HYheYHZ=BLY+`ImYA16Tm*ceJ^y6@G z&T+1B#5g3*J1#Je7DtZ@i;Iklj!TZqi+dQ?7}pcm7dII9ByKcrBJO$ItGG9D@8Ukj zeUAHfZ}q)(_v-Go-(%gIzW3+7&-cE?bHsDTua4gk565HUH^vLb3&-z{KNx>9{!+Yh z{I&S&@tW~B;!Wbs;w|E><6p*qNm!k*E`d8?Ljs(DO%O@gk+3^qZ-RJ&WWs?2uCneV<4=2wgKTCd*{5tt<^4H{VDI6*5QUp@AriiBOOOZ&C zPPv$(mU1V>B*iMlCB-9!lyWzPk`kCgOQEO4rzEB%r=+C{r;4SDr%I$sr>3M9q!y=^ zrIx2wr9Ms_Nu5o7n)*ETRT@XyrnDVtl4%FhWYUhL$))9|Jxr@et52Iw`y+jQx=8x| zbgA@%>4(#grXNo~mwqArQo3^b?R5Qgqjb}Bi}bPd`SkbcpVPnH=eQ5uUwfbHKJR^@ z`@;9P-rs)T<-YHIzx)38srSEStj|Da@Mmnw*qpI7Lo{PwhD3&R#-R+^4E>DYjOvW1 z86Pq}Wqi%}k-0Jx%G{K>J#$Z{Smyprsmv3ZXEM)aUdX(XsgkLdsgY@z>696rnVgxO zS&;cCvo5nSvn8`LvnR7Jb1;*YIhpw}izACOYjxJTEWxauS$nd?vi4_5Ws$Rjv*NOn zvQo3|XXRw&XBB0YW>sa?XANb&$oi1YpDmnyB3mu{PPSgQezsAzUAAjBF&oMD&i2iw zWz)06vl-bj+4r(rvOndB=3L9s&C$y-%rVI^&#}ruaws`LIUzY=IgvRjIT<oHE%`Us=PIM+<6=F;5=-eSe|;Gex5;|VV+5zL!MKfOP+h4XP#FcEiWW5G%q5r zFK;q$DsMV(F7I95w|tI#&ivK+>+<1zY`#FgQ2v(uZTS-UQuzn+W%6`QvvX2x#f`-+#qGrd#goNf zO5l<`CC5vymspjMO1w(yN?J>LN`_0Gmb@-`Tk@ggQz=I&XX)zFb*0>;r%G>>+LyYO z`j%2k150V8^wRKBMrmqkc4=N|VQEQeWodP3ZD~VkbLpEhk+REW>SZ^}aAj^~US&RI zeq{k=^s?|WMp;bRy|VPOjIzA4%Cfq$#PO^9VUHpnF&@QKb60Pw7OEDm7O8fqMykE4?^ctmUsr#t{_%Ll z<5iD+9@8I(J&t%BRl{AgsYbMBUyVeKbj_g}*_vZDCu%O&T&+>9QLoXgxlwbg=5~#K zjcrXqO@A#^yQlVSt!}Mz?cLg_+SuCo+N9dl+WWOxwYjwgwZ*k%we7WCwanW7T2}3F z?O5$(?R4#2?X%h!wO{IZ>-N-X)|uBa>Qd_-)HT)h)=kuXsQXm+weCm#%6h1NZ9P{# zZ#}9WQ@^)fyk4^YK)p=;k$SoMllAiT3iapfFV^3x$Jcw;N7tv;SJn5{e{A4t;BVN` zu)ASzgLs2v!-0ky4JHld4OR^{4fYNA2G<61Lr_CVLs&y(!@Y*YhLnc%hRlY6hF6Vi z8u=R0jr@(98h1C!G#+V`YdqN~->A@dzVTwCcH_;)+l~5-MvbP87LC@8wvEI_N@Ggn zgT}tbw~arVgqlQ~q?-;k$u=EpI?<%qq||h|NxA7-)AgoXO=eB@P2{HNri`Y_CRWpM z(^%7F(@fKRvtaX%W{GC$=0nZ0&BvNgG@ow1(yZ02+pO1Y*lf~l+w9WJXpU>HY;I|8 zZ|-VlHa}?|X@1uHqWN|6+vd;BUt89-aJOt|fm^n=Y;W1sBHAL?a-ro?i*k!fOG(S4 zmcEvume(zxT6ebYZN1*A*Gg%PXl1lUx5l-mwPv(tx8}7rwf40RwmxYcZJlVHZsTs- z)V8^8Yuom=U2URmGHu7(PPLtBJJ)u(?P{B9n|hm8n|E7GTTxqOTXkD)TSFVOZL)2q zZNBY~wwG;xw!Lfn*uJ`bT|0OChIY6e+b+;9)V`&CU%PC(YP)eesXe|utNlTHO?!QN zQ+sQBNBcngQ2R*xSo>uAO#93B&mF5eHg#<7*xIqZV^@c0hjhpBj#C|HI?i=m=(yCO z+@aH<+o9KC*kRq_+Cl6s;T-)5+Hfckb=f@3iQ&?zHW6=nUv&bS8GDbf$M^cII@Jc0TN^?5ysr?QH1m>|}LL zcYf_!*9CWBy9By~y0&!f>Dt>R-X+;}pi8Dpt;?p1-j&t$psS+mQCCe@eOFW0aM#nW z=UuP5-gLe1`m39}8`~||E!-{Ay`x*ITc-O+w_Nw>?z7#B-Adh>-R9l)-EQ4}-PG>j z?$B;VcTD%a?!@k_?&9v6?%M9U?#Axk?t$*1?vd{C?y2sNJsdqy&)OcY9^M|I9+93M zJ-d7M^+@zc_Z;du*>k?$D9zEn9Mo&&pQ_ob-Y|nhpA3ZOb zYnXh@jm#ZPMW!nAI#ZK*gL#W-$8=;mGhLZPCc>mJ!nGczj z%ob)lvx~`Ojx(p2v&^T=56n-@ugo94+`Sum;a+U7Xs=A~kzTpp6TKR}+Pylxy1jRL z&3Y|+alLlEuDvO}8NI!|BYm8GYx^Ynd04~PwD4>%9R3}g;e4zvuk4|EMM2l@wC1Ah$sHSlHN`{0VfRfB5=1qb&GiVsQ- z9vGAzJT`b@@bsYkpz@&lpw^(ypzfg2py{B+p!J~bAaT%tFlsP%Fn%y;Fm>?$VAf#n zVAbH`!Mef5!Ir`H!LC8(VE^Fg;N0M=!HfXE9i*toy7iRxYc6Rm`ek)w7ydt*j1K zH*1tN!J1~xv7WJBus#oM7=nkeLjprWLtBQn4ecD-GbA>&f9TB6xuFX~mxh#wt_@uu z(j2-mbZh9&kiigTC~s(Z=>3zePn4e+J-PcN?n&p9!6!3M=AZmI3=MM+iwy4@J~Avn ztUP>e`1-Ks@SS0UVY6ZUu=}v*u-CB9aNsa)m_8gn%ot7>E*dT$?iwB*emeYd_{Ye~ z5ol!1$odhU5zNS*kwYWLM^25L8M!o~Hlj6RG-5O2HbNXhM!ZG>Mp8$zN2*77$vWMWc^K>qa|A2S=Zb zj*iZaJ{$dG^smt`qu<9?jIA15Gq!1L_t>5>(XoAFN5;;NT^zeIrZT2BrZJ{Hc5}>P z%zDgr%zg|%Mi_G&^B5zIg^iVtjgGGz-#UJF+-%%#+7e*J~IAs0yQB%ad|>};?9J@gz<#ggw2Hg1b%`r;WiOEQ8F<; z@pR(Z#EXf~lhEYaNv=uWNz^1}a_i*w$z7A8llvwmCZ#8}Cj%#QCMzc!CR-;vCc7tl zC+8-AOs$>bn&O>8P3@i%o!U1gF(o~9Xv%cTcFJYSeadsnYszQJZz_C>F%>g)Z>oE0 zbZTO1dTMU!_0+d%j%m*6)zj!{{^?EAo2SoCU!K;Pwwn%{PMj{DE}Jf&u9|*4T{qo0 z-7?)i-8DTmJu^K&{m1mn>DSY5r$0>pHT`A!`^=^p(V62jDl@ldoM!xI(q<}Vm@~sO zBQxVOPiLOZyqNhg^Ks_$Ea&X1*)_9#v#43j?6%pRvwLR6X7|rZ%^saSJ$rUmaaL*e z@~rl(?yTOd;jG!Llqo8~spZJXOUw`Wdl?!uh;JT$*yUSM8me#`u}`GfOE=1(qA8aY<3 PT>M5iFMcn5&Y%7t#j3n8 delta 32632 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 Date: Sun, 14 Feb 2016 21:45:13 +0800 Subject: [PATCH 079/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c0334cf..58c8af3 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ 一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. -支持pod: pod 'SDAutoLayout', '~> 1.3' +支持pod: pod 'SDAutoLayout', '~> 1.31' ## 更新记录: From b1d96a8fdc3fd7958b2b5df00a728a5438450ba2 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Wed, 17 Feb 2016 19:46:10 +0800 Subject: [PATCH 080/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E8=81=8A=E5=A4=A9=E7=95=8C=E9=9D=A2demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDAutoLayoutDemo.xcodeproj/project.pbxproj | 270 +++ .../UserInterfaceState.xcuserstate | Bin 69618 -> 70755 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 32 - .../SDAnalogDataGenerator.h | 17 + .../SDAnalogDataGenerator.m | 112 + .../DemoVC/DemoVC11/ChatController/DemoVC11.h | 13 + .../DemoVC/DemoVC11/ChatController/DemoVC11.m | 103 + .../ChatController/Models/SDChatModel.h | 24 + .../ChatController/Models/SDChatModel.m | 13 + .../SDChatTableViewController.h | 13 + .../SDChatTableViewController.m | 99 + .../Views/SDChatTableViewCell.h | 20 + .../Views/SDChatTableViewCell.m | 214 ++ .../DemoVC11/GloabalDefines/GlobalDefines.h | 16 + .../WebViewController/SDWebViewController.h | 17 + .../WebViewController/SDWebViewController.m | 56 + .../Images/Home.xcassets/Contents.json | 6 + .../ReceiverAppNodeBkg.imageset/Contents.json | 21 + .../ReceiverAppNodeBkg@2x.png | Bin 0 -> 697 bytes .../Contents.json | 22 + .../ReceiverAppNodeBkg_HL@2x.png | Bin 0 -> 743 bytes .../ReceiverAppNodeBkg_HL@3x.png | Bin 0 -> 1203 bytes .../Contents.json | 22 + .../ReceiverTextNodeBkg@2x.png | Bin 0 -> 595 bytes .../ReceiverTextNodeBkg@3x.png | Bin 0 -> 1025 bytes .../Contents.json | 22 + .../ReceiverTextNodeBkgHL@2x.png | Bin 0 -> 666 bytes .../ReceiverTextNodeBkgHL@3x.png | Bin 0 -> 1087 bytes .../ScanBook.imageset/Contents.json | 22 + .../ScanBook.imageset/ScanBook@2x.png | Bin 0 -> 306 bytes .../ScanBook.imageset/ScanBook@3x.png | Bin 0 -> 405 bytes .../ScanBook_HL.imageset/Contents.json | 22 + .../ScanBook_HL.imageset/ScanBook_HL@2x.png | Bin 0 -> 378 bytes .../ScanBook_HL.imageset/ScanBook_HL@3x.png | Bin 0 -> 461 bytes .../ScanBtombarBG.imageset/Contents.json | 21 + .../ScanBtombarBG@2x.png | Bin 0 -> 139 bytes .../Contents.json | 21 + .../ScanDetaiPictureRectangle@2x.png | Bin 0 -> 141 bytes .../Contents.json | 21 + .../ScanDetaiPictureSquare@2x.png | Bin 0 -> 142 bytes .../ScanDetailCellBg.imageset/Contents.json | 21 + .../ScanDetailCellBg@2x.png | Bin 0 -> 114 bytes .../Contents.json | 21 + .../ScanDetailCellBgWithArrow@2x.png | Bin 0 -> 415 bytes .../Contents.json | 21 + .../ScanDetailCellBgWithArrowHL@2x.png | Bin 0 -> 367 bytes .../Contents.json | 21 + .../ScanDetailMediaPlayIcon@2x.png | Bin 0 -> 1738 bytes .../Contents.json | 21 + .../ScanDetailMediaPlayIconHL@2x.png | Bin 0 -> 1627 bytes .../Contents.json | 21 + .../ScanDetailMovieIcon@2x.png | Bin 0 -> 1407 bytes .../Contents.json | 21 + .../ScanDetailMovieIcon_Hl@2x.png | Bin 0 -> 1365 bytes .../Contents.json | 21 + .../ScanDetailMusicIcon@2x.png | Bin 0 -> 672 bytes .../Contents.json | 21 + .../ScanDetailMusicIcon_Hl@2x.png | Bin 0 -> 643 bytes .../Contents.json | 21 + .../ScanDetailMusicStopIcon@2x.png | Bin 0 -> 585 bytes .../Contents.json | 21 + .../ScanDetailMusicStopIcon_Hl@2x.png | Bin 0 -> 558 bytes .../ScanQR1.imageset/Contents.json | 22 + .../ScanQR1.imageset/ScanQR1@2x.png | Bin 0 -> 106 bytes .../ScanQR1.imageset/ScanQR1@3x.png | Bin 0 -> 107 bytes .../ScanQR2.imageset/Contents.json | 22 + .../ScanQR2.imageset/ScanQR2@2x.png | Bin 0 -> 106 bytes .../ScanQR2.imageset/ScanQR2@3x.png | Bin 0 -> 107 bytes .../ScanQR3.imageset/Contents.json | 22 + .../ScanQR3.imageset/ScanQR3@2x.png | Bin 0 -> 106 bytes .../ScanQR3.imageset/ScanQR3@3x.png | Bin 0 -> 107 bytes .../ScanQR4.imageset/Contents.json | 22 + .../ScanQR4.imageset/ScanQR4@2x.png | Bin 0 -> 106 bytes .../ScanQR4.imageset/ScanQR4@3x.png | Bin 0 -> 107 bytes .../ScanQRCode.imageset/Contents.json | 22 + .../ScanQRCode.imageset/ScanQRCode@2x.png | Bin 0 -> 164 bytes .../ScanQRCode.imageset/ScanQRCode@3x.png | Bin 0 -> 176 bytes .../ScanQRCode_HL.imageset/Contents.json | 22 + .../ScanQRCode_HL@2x.png | Bin 0 -> 164 bytes .../ScanQRCode_HL@3x.png | Bin 0 -> 176 bytes .../ScanStreet.imageset/Contents.json | 22 + .../ScanStreet.imageset/ScanStreet@2x.png | Bin 0 -> 601 bytes .../ScanStreet.imageset/ScanStreet@3x.png | Bin 0 -> 950 bytes .../ScanStreet_HL.imageset/Contents.json | 22 + .../ScanStreet_HL@2x.png | Bin 0 -> 797 bytes .../ScanStreet_HL@3x.png | Bin 0 -> 1256 bytes .../ScanWord.imageset/Contents.json | 22 + .../ScanWord.imageset/ScanWord@2x.png | Bin 0 -> 417 bytes .../ScanWord.imageset/ScanWord@3x.png | Bin 0 -> 756 bytes .../ScanWord_HL.imageset/Contents.json | 22 + .../ScanWord_HL.imageset/ScanWord_HL@2x.png | Bin 0 -> 445 bytes .../ScanWord_HL.imageset/ScanWord_HL@3x.png | Bin 0 -> 830 bytes .../Scantv.imageset/Contents.json | 21 + .../Scantv.imageset/Scantv@2x.png | Bin 0 -> 1335 bytes .../Scantv_HL.imageset/Contents.json | 21 + .../Scantv_HL.imageset/Scantv_HL@2x.png | Bin 0 -> 2098 bytes .../Contents.json | 21 + .../ScanwithoutCommodityIcon@2x.png | Bin 0 -> 980 bytes .../Contents.json | 21 + .../SenderAppCardNodeBkg@2x.png | Bin 0 -> 709 bytes .../Contents.json | 21 + .../SenderAppCardNodeBkg_HL@2x.png | Bin 0 -> 742 bytes .../SenderAppNodeBkg.imageset/Contents.json | 22 + .../SenderAppNodeBkg@2x.png | Bin 0 -> 1268 bytes .../SenderAppNodeBkg@3x.png | Bin 0 -> 2207 bytes .../Contents.json | 22 + .../SenderAppNodeBkg_HL@2x.png | Bin 0 -> 1332 bytes .../SenderAppNodeBkg_HL@3x.png | Bin 0 -> 2192 bytes .../Contents.json | 22 + .../SenderImageNodeBorder@2x.png | Bin 0 -> 655 bytes .../SenderImageNodeBorder@3x.png | Bin 0 -> 861 bytes .../Contents.json | 21 + .../SenderImageNodeMask@2x.png | Bin 0 -> 346 bytes .../SenderTextNodeBkg.imageset/Contents.json | 31 + .../SenderTextNodeBkg@2x.png | Bin 0 -> 1007 bytes .../SenderTextNodeBkg@2x~ipad.png | Bin 0 -> 1743 bytes .../SenderTextNodeBkg@3x.png | Bin 0 -> 1658 bytes .../Contents.json | 31 + .../SenderTextNodeBkgHL@2x.png | Bin 0 -> 1100 bytes .../SenderTextNodeBkgHL@2x~ipad.png | Bin 0 -> 1688 bytes .../SenderTextNodeBkgHL@3x.png | Bin 0 -> 1761 bytes .../Contents.json | 22 + .../SenderVoiceNodeBack@2x.png | Bin 0 -> 1097 bytes .../SenderVoiceNodeBack@3x.png | Bin 0 -> 1761 bytes .../Contents.json | 21 + .../SenderVoiceNodeBkgforward@2x.png | Bin 0 -> 1701 bytes .../Contents.json | 21 + .../SenderVoiceNodeBkgforwardHL@2x.png | Bin 0 -> 1692 bytes .../Contents.json | 22 + .../SenderVoiceNodeDownloading@2x.png | Bin 0 -> 1036 bytes .../SenderVoiceNodeDownloading@3x.png | Bin 0 -> 1439 bytes .../Contents.json | 22 + .../SenderVoiceNodePlaying@2x.png | Bin 0 -> 640 bytes .../SenderVoiceNodePlaying@3x.png | Bin 0 -> 886 bytes .../Contents.json | 22 + .../SenderVoiceNodePlaying001@2x.png | Bin 0 -> 196 bytes .../SenderVoiceNodePlaying001@3x.png | Bin 0 -> 249 bytes .../Contents.json | 22 + .../SenderVoiceNodePlaying002@2x.png | Bin 0 -> 342 bytes .../SenderVoiceNodePlaying002@3x.png | Bin 0 -> 461 bytes .../Contents.json | 22 + .../SenderVoiceNodePlaying003@2x.png | Bin 0 -> 544 bytes .../SenderVoiceNodePlaying003@3x.png | Bin 0 -> 765 bytes .../barbuttonicon_add.imageset/Contents.json | 23 + .../barbuttonicon_add.png | Bin 0 -> 103 bytes .../barbuttonicon_add@2x.png | Bin 0 -> 130 bytes .../barbuttonicon_add@3x.png | Bin 0 -> 150 bytes .../Contents.json | 22 + .../contacts_add_friend@2x.png | Bin 0 -> 398 bytes .../contacts_add_friend@3x.png | Bin 0 -> 584 bytes .../Contents.json | 22 + .../contacts_add_newmessage@2x.png | Bin 0 -> 384 bytes .../contacts_add_newmessage@3x.png | Bin 0 -> 505 bytes .../contacts_add_scan.imageset/Contents.json | 22 + .../contacts_add_scan@2x.png | Bin 0 -> 393 bytes .../contacts_add_scan@3x.png | Bin 0 -> 579 bytes .../Contents.json | 21 + .../icon_sight_capture_mask@2x.png | Bin 0 -> 1959 bytes SDAutoLayoutDemo/Images/cell_icons/0.jpg | Bin 0 -> 9810 bytes SDAutoLayoutDemo/Images/cell_icons/1.jpg | Bin 0 -> 10535 bytes SDAutoLayoutDemo/Images/cell_icons/10.jpg | Bin 0 -> 7662 bytes SDAutoLayoutDemo/Images/cell_icons/11.jpg | Bin 0 -> 141960 bytes SDAutoLayoutDemo/Images/cell_icons/12.jpg | Bin 0 -> 10792 bytes SDAutoLayoutDemo/Images/cell_icons/13.jpg | Bin 0 -> 20075 bytes SDAutoLayoutDemo/Images/cell_icons/14.jpg | Bin 0 -> 16376 bytes SDAutoLayoutDemo/Images/cell_icons/15.jpg | Bin 0 -> 214603 bytes SDAutoLayoutDemo/Images/cell_icons/16.jpg | Bin 0 -> 6014 bytes SDAutoLayoutDemo/Images/cell_icons/17.jpg | Bin 0 -> 9688 bytes SDAutoLayoutDemo/Images/cell_icons/18.jpg | Bin 0 -> 8034 bytes SDAutoLayoutDemo/Images/cell_icons/19.jpg | Bin 0 -> 45048 bytes SDAutoLayoutDemo/Images/cell_icons/2.jpg | Bin 0 -> 6862 bytes SDAutoLayoutDemo/Images/cell_icons/20.jpg | Bin 0 -> 36113 bytes SDAutoLayoutDemo/Images/cell_icons/21.jpg | Bin 0 -> 8543 bytes SDAutoLayoutDemo/Images/cell_icons/22.jpg | Bin 0 -> 7317 bytes SDAutoLayoutDemo/Images/cell_icons/23.jpg | Bin 0 -> 7165 bytes SDAutoLayoutDemo/Images/cell_icons/3.jpg | Bin 0 -> 65034 bytes SDAutoLayoutDemo/Images/cell_icons/4.jpg | Bin 0 -> 99804 bytes SDAutoLayoutDemo/Images/cell_icons/5.jpg | Bin 0 -> 8235 bytes SDAutoLayoutDemo/Images/cell_icons/6.jpg | Bin 0 -> 7355 bytes SDAutoLayoutDemo/Images/cell_icons/7.jpg | Bin 0 -> 15087 bytes SDAutoLayoutDemo/Images/cell_icons/8.jpg | Bin 0 -> 13511 bytes SDAutoLayoutDemo/Images/cell_icons/9.jpg | Bin 0 -> 7074 bytes SDAutoLayoutDemo/Images/test/test0.jpg | Bin 0 -> 6693 bytes SDAutoLayoutDemo/Images/test/test1.jpg | Bin 0 -> 6394 bytes SDAutoLayoutDemo/Images/test/test2.jpg | Bin 0 -> 15408 bytes SDAutoLayoutDemo/Images/test/test3.jpg | Bin 0 -> 12238 bytes SDAutoLayoutDemo/Images/test/test4.jpg | Bin 0 -> 14856 bytes .../Others/DemoTableViewControler.m | 7 +- .../SDAutoLayout/UIView+SDAutoLayout.h | 25 +- .../SDAutoLayout/UIView+SDAutoLayout.m | 144 +- .../Vender/MLEmojiLabel/MLEmojiLabel.h | 50 + .../Vender/MLEmojiLabel/MLEmojiLabel.m | 716 +++++++ .../Expression_100@2x.png | Bin 0 -> 2026 bytes .../Expression_101@2x.png | Bin 0 -> 2650 bytes .../Expression_102@2x.png | Bin 0 -> 2260 bytes .../Expression_103@2x.png | Bin 0 -> 2955 bytes .../Expression_104@2x.png | Bin 0 -> 2121 bytes .../Expression_105@2x.png | Bin 0 -> 2232 bytes .../Expression_10@2x.png | Bin 0 -> 2823 bytes .../Expression_11@2x.png | Bin 0 -> 2698 bytes .../Expression_12@2x.png | Bin 0 -> 2963 bytes .../Expression_13@2x.png | Bin 0 -> 2812 bytes .../Expression_14@2x.png | Bin 0 -> 2765 bytes .../Expression_15@2x.png | Bin 0 -> 2769 bytes .../Expression_16@2x.png | Bin 0 -> 2786 bytes .../Expression_17@2x.png | Bin 0 -> 2940 bytes .../Expression_18@2x.png | Bin 0 -> 3008 bytes .../Expression_19@2x.png | Bin 0 -> 2933 bytes .../Expression_1@2x.png | Bin 0 -> 2824 bytes .../Expression_20@2x.png | Bin 0 -> 3091 bytes .../Expression_21@2x.png | Bin 0 -> 2914 bytes .../Expression_22@2x.png | Bin 0 -> 2788 bytes .../Expression_23@2x.png | Bin 0 -> 2779 bytes .../Expression_24@2x.png | Bin 0 -> 2781 bytes .../Expression_25@2x.png | Bin 0 -> 2834 bytes .../Expression_26@2x.png | Bin 0 -> 2713 bytes .../Expression_27@2x.png | Bin 0 -> 2584 bytes .../Expression_28@2x.png | Bin 0 -> 2730 bytes .../Expression_29@2x.png | Bin 0 -> 2938 bytes .../Expression_2@2x.png | Bin 0 -> 2849 bytes .../Expression_30@2x.png | Bin 0 -> 2653 bytes .../Expression_31@2x.png | Bin 0 -> 2991 bytes .../Expression_32@2x.png | Bin 0 -> 2927 bytes .../Expression_33@2x.png | Bin 0 -> 2847 bytes .../Expression_34@2x.png | Bin 0 -> 2928 bytes .../Expression_35@2x.png | Bin 0 -> 2978 bytes .../Expression_36@2x.png | Bin 0 -> 3205 bytes .../Expression_37@2x.png | Bin 0 -> 1227 bytes .../Expression_38@2x.png | Bin 0 -> 2171 bytes .../Expression_39@2x.png | Bin 0 -> 2387 bytes .../Expression_3@2x.png | Bin 0 -> 2693 bytes .../Expression_40@2x.png | Bin 0 -> 2723 bytes .../Expression_41@2x.png | Bin 0 -> 2850 bytes .../Expression_42@2x.png | Bin 0 -> 3078 bytes .../Expression_43@2x.png | Bin 0 -> 2990 bytes .../Expression_44@2x.png | Bin 0 -> 2922 bytes .../Expression_45@2x.png | Bin 0 -> 2793 bytes .../Expression_46@2x.png | Bin 0 -> 2552 bytes .../Expression_47@2x.png | Bin 0 -> 2567 bytes .../Expression_48@2x.png | Bin 0 -> 2807 bytes .../Expression_49@2x.png | Bin 0 -> 2700 bytes .../Expression_4@2x.png | Bin 0 -> 3071 bytes .../Expression_50@2x.png | Bin 0 -> 2701 bytes .../Expression_51@2x.png | Bin 0 -> 2849 bytes .../Expression_52@2x.png | Bin 0 -> 2822 bytes .../Expression_53@2x.png | Bin 0 -> 2683 bytes .../Expression_54@2x.png | Bin 0 -> 2835 bytes .../Expression_55@2x.png | Bin 0 -> 3035 bytes .../Expression_56@2x.png | Bin 0 -> 1628 bytes .../Expression_57@2x.png | Bin 0 -> 2648 bytes .../Expression_58@2x.png | Bin 0 -> 2568 bytes .../Expression_59@2x.png | Bin 0 -> 3143 bytes .../Expression_5@2x.png | Bin 0 -> 2786 bytes .../Expression_60@2x.png | Bin 0 -> 2302 bytes .../Expression_61@2x.png | Bin 0 -> 2536 bytes .../Expression_62@2x.png | Bin 0 -> 2292 bytes .../Expression_63@2x.png | Bin 0 -> 2488 bytes .../Expression_64@2x.png | Bin 0 -> 1229 bytes .../Expression_65@2x.png | Bin 0 -> 1483 bytes .../Expression_66@2x.png | Bin 0 -> 1586 bytes .../Expression_67@2x.png | Bin 0 -> 1517 bytes .../Expression_68@2x.png | Bin 0 -> 2171 bytes .../Expression_69@2x.png | Bin 0 -> 1660 bytes .../Expression_6@2x.png | Bin 0 -> 2289 bytes .../Expression_70@2x.png | Bin 0 -> 1044 bytes .../Expression_71@2x.png | Bin 0 -> 2032 bytes .../Expression_72@2x.png | Bin 0 -> 1208 bytes .../Expression_73@2x.png | Bin 0 -> 2556 bytes .../Expression_74@2x.png | Bin 0 -> 2096 bytes .../Expression_75@2x.png | Bin 0 -> 2562 bytes .../Expression_76@2x.png | Bin 0 -> 1944 bytes .../Expression_77@2x.png | Bin 0 -> 2354 bytes .../Expression_78@2x.png | Bin 0 -> 1590 bytes .../Expression_79@2x.png | Bin 0 -> 2597 bytes .../Expression_7@2x.png | Bin 0 -> 2919 bytes .../Expression_80@2x.png | Bin 0 -> 1719 bytes .../Expression_81@2x.png | Bin 0 -> 1750 bytes .../Expression_82@2x.png | Bin 0 -> 2393 bytes .../Expression_83@2x.png | Bin 0 -> 2544 bytes .../Expression_84@2x.png | Bin 0 -> 2285 bytes .../Expression_85@2x.png | Bin 0 -> 2320 bytes .../Expression_86@2x.png | Bin 0 -> 2677 bytes .../Expression_87@2x.png | Bin 0 -> 2055 bytes .../Expression_88@2x.png | Bin 0 -> 2345 bytes .../Expression_89@2x.png | Bin 0 -> 2068 bytes .../Expression_8@2x.png | Bin 0 -> 2863 bytes .../Expression_90@2x.png | Bin 0 -> 2479 bytes .../Expression_91@2x.png | Bin 0 -> 2551 bytes .../Expression_92@2x.png | Bin 0 -> 2042 bytes .../Expression_93@2x.png | Bin 0 -> 2005 bytes .../Expression_94@2x.png | Bin 0 -> 2479 bytes .../Expression_95@2x.png | Bin 0 -> 2384 bytes .../Expression_96@2x.png | Bin 0 -> 2353 bytes .../Expression_97@2x.png | Bin 0 -> 2654 bytes .../Expression_98@2x.png | Bin 0 -> 2077 bytes .../Expression_99@2x.png | Bin 0 -> 2233 bytes .../Expression_9@2x.png | Bin 0 -> 2728 bytes .../gifexpression.bundle/Expression_2@2x.gif | Bin 0 -> 1628 bytes .../gifexpression.bundle/Expression_53@2x.gif | Bin 0 -> 1578 bytes .../MLEmojiLabel/MLEmoji_Expression.plist | 106 + .../MLEmoji_ExpressionImage.plist | 206 ++ .../TTTAttributedLabel/TTTAttributedLabel.h | 698 ++++++ .../TTTAttributedLabel/TTTAttributedLabel.m | 1887 +++++++++++++++++ 303 files changed, 5978 insertions(+), 69 deletions(-) create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC11/AnalogDataGenerator/SDAnalogDataGenerator.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC11/AnalogDataGenerator/SDAnalogDataGenerator.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Models/SDChatModel.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Models/SDChatModel.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/SDChatTableViewController.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/SDChatTableViewController.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC11/GloabalDefines/GlobalDefines.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC11/WebViewController/SDWebViewController.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC11/WebViewController/SDWebViewController.m create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg.imageset/ReceiverAppNodeBkg@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg_HL.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg_HL.imageset/ReceiverAppNodeBkg_HL@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg_HL.imageset/ReceiverAppNodeBkg_HL@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ReceiverTextNodeBkg.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ReceiverTextNodeBkg.imageset/ReceiverTextNodeBkg@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ReceiverTextNodeBkg.imageset/ReceiverTextNodeBkg@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ReceiverTextNodeBkgHL.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ReceiverTextNodeBkgHL.imageset/ReceiverTextNodeBkgHL@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ReceiverTextNodeBkgHL.imageset/ReceiverTextNodeBkgHL@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanBook.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanBook.imageset/ScanBook@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanBook.imageset/ScanBook@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanBook_HL.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanBook_HL.imageset/ScanBook_HL@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanBook_HL.imageset/ScanBook_HL@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanBtombarBG.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanBtombarBG.imageset/ScanBtombarBG@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetaiPictureRectangle.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetaiPictureRectangle.imageset/ScanDetaiPictureRectangle@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetaiPictureSquare.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetaiPictureSquare.imageset/ScanDetaiPictureSquare@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBg.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBg.imageset/ScanDetailCellBg@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBgWithArrow.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBgWithArrow.imageset/ScanDetailCellBgWithArrow@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBgWithArrowHL.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBgWithArrowHL.imageset/ScanDetailCellBgWithArrowHL@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMediaPlayIcon.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMediaPlayIcon.imageset/ScanDetailMediaPlayIcon@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMediaPlayIconHL.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMediaPlayIconHL.imageset/ScanDetailMediaPlayIconHL@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMovieIcon.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMovieIcon.imageset/ScanDetailMovieIcon@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMovieIcon_Hl.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMovieIcon_Hl.imageset/ScanDetailMovieIcon_Hl@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMusicIcon.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMusicIcon.imageset/ScanDetailMusicIcon@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMusicIcon_Hl.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMusicIcon_Hl.imageset/ScanDetailMusicIcon_Hl@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMusicStopIcon.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMusicStopIcon.imageset/ScanDetailMusicStopIcon@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMusicStopIcon_Hl.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMusicStopIcon_Hl.imageset/ScanDetailMusicStopIcon_Hl@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQR1.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQR1.imageset/ScanQR1@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQR1.imageset/ScanQR1@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQR2.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQR2.imageset/ScanQR2@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQR2.imageset/ScanQR2@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQR3.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQR3.imageset/ScanQR3@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQR3.imageset/ScanQR3@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQR4.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQR4.imageset/ScanQR4@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQR4.imageset/ScanQR4@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode.imageset/ScanQRCode@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode.imageset/ScanQRCode@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode_HL.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode_HL.imageset/ScanQRCode_HL@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode_HL.imageset/ScanQRCode_HL@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanStreet.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanStreet.imageset/ScanStreet@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanStreet.imageset/ScanStreet@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanStreet_HL.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanStreet_HL.imageset/ScanStreet_HL@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanStreet_HL.imageset/ScanStreet_HL@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanWord.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanWord.imageset/ScanWord@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanWord.imageset/ScanWord@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanWord_HL.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanWord_HL.imageset/ScanWord_HL@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanWord_HL.imageset/ScanWord_HL@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/Scantv.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/Scantv.imageset/Scantv@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/Scantv_HL.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/Scantv_HL.imageset/Scantv_HL@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanwithoutCommodityIcon.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/ScanwithoutCommodityIcon.imageset/ScanwithoutCommodityIcon@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderAppCardNodeBkg.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderAppCardNodeBkg.imageset/SenderAppCardNodeBkg@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderAppCardNodeBkg_HL.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderAppCardNodeBkg_HL.imageset/SenderAppCardNodeBkg_HL@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderAppNodeBkg.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderAppNodeBkg.imageset/SenderAppNodeBkg@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderAppNodeBkg.imageset/SenderAppNodeBkg@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderAppNodeBkg_HL.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderAppNodeBkg_HL.imageset/SenderAppNodeBkg_HL@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderAppNodeBkg_HL.imageset/SenderAppNodeBkg_HL@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderImageNodeBorder.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderImageNodeBorder.imageset/SenderImageNodeBorder@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderImageNodeBorder.imageset/SenderImageNodeBorder@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderImageNodeMask.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderImageNodeMask.imageset/SenderImageNodeMask@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkg.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkg.imageset/SenderTextNodeBkg@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkg.imageset/SenderTextNodeBkg@2x~ipad.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkg.imageset/SenderTextNodeBkg@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkgHL.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkgHL.imageset/SenderTextNodeBkgHL@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkgHL.imageset/SenderTextNodeBkgHL@2x~ipad.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkgHL.imageset/SenderTextNodeBkgHL@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeBack.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeBack.imageset/SenderVoiceNodeBack@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeBack.imageset/SenderVoiceNodeBack@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeBkgforward.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeBkgforward.imageset/SenderVoiceNodeBkgforward@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeBkgforwardHL.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeBkgforwardHL.imageset/SenderVoiceNodeBkgforwardHL@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeDownloading.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeDownloading.imageset/SenderVoiceNodeDownloading@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeDownloading.imageset/SenderVoiceNodeDownloading@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying.imageset/SenderVoiceNodePlaying@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying.imageset/SenderVoiceNodePlaying@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying001.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying001.imageset/SenderVoiceNodePlaying001@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying001.imageset/SenderVoiceNodePlaying001@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying002.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying002.imageset/SenderVoiceNodePlaying002@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying002.imageset/SenderVoiceNodePlaying002@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying003.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying003.imageset/SenderVoiceNodePlaying003@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying003.imageset/SenderVoiceNodePlaying003@3x.png create mode 100755 SDAutoLayoutDemo/Images/Home.xcassets/barbuttonicon_add.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Home.xcassets/barbuttonicon_add.imageset/barbuttonicon_add.png create mode 100755 SDAutoLayoutDemo/Images/Home.xcassets/barbuttonicon_add.imageset/barbuttonicon_add@2x.png create mode 100755 SDAutoLayoutDemo/Images/Home.xcassets/barbuttonicon_add.imageset/barbuttonicon_add@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/contacts_add_friend.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/contacts_add_friend.imageset/contacts_add_friend@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/contacts_add_friend.imageset/contacts_add_friend@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/contacts_add_newmessage.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/contacts_add_newmessage.imageset/contacts_add_newmessage@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/contacts_add_newmessage.imageset/contacts_add_newmessage@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/contacts_add_scan.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/contacts_add_scan.imageset/contacts_add_scan@2x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/contacts_add_scan.imageset/contacts_add_scan@3x.png create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/icon_sight_capture_mask.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Home.xcassets/icon_sight_capture_mask.imageset/icon_sight_capture_mask@2x.png create mode 100644 SDAutoLayoutDemo/Images/cell_icons/0.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/1.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/10.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/11.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/12.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/13.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/14.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/15.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/16.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/17.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/18.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/19.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/2.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/20.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/21.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/22.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/23.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/3.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/4.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/5.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/6.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/7.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/8.jpg create mode 100644 SDAutoLayoutDemo/Images/cell_icons/9.jpg create mode 100644 SDAutoLayoutDemo/Images/test/test0.jpg create mode 100644 SDAutoLayoutDemo/Images/test/test1.jpg create mode 100644 SDAutoLayoutDemo/Images/test/test2.jpg create mode 100644 SDAutoLayoutDemo/Images/test/test3.jpg create mode 100644 SDAutoLayoutDemo/Images/test/test4.jpg mode change 100644 => 100755 SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h mode change 100644 => 100755 SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmojiLabel.h create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmojiLabel.m create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_100@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_101@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_102@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_103@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_104@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_105@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_10@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_11@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_12@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_13@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_14@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_15@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_16@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_17@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_18@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_19@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_1@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_20@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_21@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_22@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_23@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_24@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_25@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_26@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_27@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_28@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_29@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_2@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_30@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_31@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_32@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_33@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_34@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_35@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_36@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_37@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_38@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_39@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_3@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_40@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_41@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_42@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_43@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_44@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_45@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_46@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_47@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_48@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_49@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_4@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_50@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_51@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_52@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_53@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_54@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_55@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_56@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_57@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_58@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_59@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_5@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_60@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_61@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_62@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_63@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_64@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_65@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_66@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_67@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_68@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_69@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_6@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_70@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_71@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_72@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_73@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_74@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_75@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_76@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_77@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_78@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_79@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_7@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_80@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_81@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_82@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_83@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_84@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_85@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_86@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_87@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_88@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_89@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_8@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_90@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_91@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_92@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_93@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_94@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_95@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_96@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_97@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_98@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_99@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_9@2x.png create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/gifexpression.bundle/Expression_2@2x.gif create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/gifexpression.bundle/Expression_53@2x.gif create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.plist create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_ExpressionImage.plist create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/TTTAttributedLabel/TTTAttributedLabel.h create mode 100755 SDAutoLayoutDemo/Vender/MLEmojiLabel/TTTAttributedLabel/TTTAttributedLabel.m diff --git a/SDAutoLayoutDemo.xcodeproj/project.pbxproj b/SDAutoLayoutDemo.xcodeproj/project.pbxproj index 0a89f19..66bb7ec 100644 --- a/SDAutoLayoutDemo.xcodeproj/project.pbxproj +++ b/SDAutoLayoutDemo.xcodeproj/project.pbxproj @@ -83,6 +83,47 @@ 48DBCD211C01E045002EC476 /* pic2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD171C01E045002EC476 /* pic2.jpg */; }; 48DBCD221C01E045002EC476 /* pic3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD181C01E045002EC476 /* pic3.jpg */; }; 48DBCD231C01E045002EC476 /* pic4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD191C01E045002EC476 /* pic4.jpg */; }; + 48EB72EF1C748D6C003A818E /* SDWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EB72E31C748D6C003A818E /* SDWebViewController.m */; }; + 48EB72F01C748D6C003A818E /* SDChatModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EB72E71C748D6C003A818E /* SDChatModel.m */; }; + 48EB72F11C748D6C003A818E /* SDChatTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EB72E91C748D6C003A818E /* SDChatTableViewController.m */; }; + 48EB72F21C748D6C003A818E /* SDChatTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EB72EC1C748D6C003A818E /* SDChatTableViewCell.m */; }; + 48EB72FC1C748DF5003A818E /* MLEmoji_Expression.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 48EB72F41C748DF5003A818E /* MLEmoji_Expression.bundle */; }; + 48EB72FD1C748DF5003A818E /* MLEmoji_Expression.plist in Resources */ = {isa = PBXBuildFile; fileRef = 48EB72F51C748DF5003A818E /* MLEmoji_Expression.plist */; }; + 48EB72FE1C748DF5003A818E /* MLEmoji_ExpressionImage.plist in Resources */ = {isa = PBXBuildFile; fileRef = 48EB72F61C748DF5003A818E /* MLEmoji_ExpressionImage.plist */; }; + 48EB72FF1C748DF5003A818E /* MLEmojiLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EB72F81C748DF5003A818E /* MLEmojiLabel.m */; }; + 48EB73001C748DF5003A818E /* TTTAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EB72FB1C748DF5003A818E /* TTTAttributedLabel.m */; }; + 48EB73041C748E1A003A818E /* SDAnalogDataGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EB73031C748E1A003A818E /* SDAnalogDataGenerator.m */; }; + 48EB73241C748EDE003A818E /* test0.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73061C748EDE003A818E /* test0.jpg */; }; + 48EB73251C748EDE003A818E /* test1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73071C748EDE003A818E /* test1.jpg */; }; + 48EB73261C748EDE003A818E /* test2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73081C748EDE003A818E /* test2.jpg */; }; + 48EB73271C748EDE003A818E /* test3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73091C748EDE003A818E /* test3.jpg */; }; + 48EB73281C748EDE003A818E /* test4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB730A1C748EDE003A818E /* test4.jpg */; }; + 48EB73291C748EDE003A818E /* 0.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB730C1C748EDE003A818E /* 0.jpg */; }; + 48EB732A1C748EDE003A818E /* 1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB730D1C748EDE003A818E /* 1.jpg */; }; + 48EB732B1C748EDE003A818E /* 10.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB730E1C748EDE003A818E /* 10.jpg */; }; + 48EB732C1C748EDE003A818E /* 11.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB730F1C748EDE003A818E /* 11.jpg */; }; + 48EB732D1C748EDE003A818E /* 12.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73101C748EDE003A818E /* 12.jpg */; }; + 48EB732E1C748EDE003A818E /* 13.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73111C748EDE003A818E /* 13.jpg */; }; + 48EB732F1C748EDE003A818E /* 14.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73121C748EDE003A818E /* 14.jpg */; }; + 48EB73301C748EDE003A818E /* 15.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73131C748EDE003A818E /* 15.jpg */; }; + 48EB73311C748EDE003A818E /* 16.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73141C748EDE003A818E /* 16.jpg */; }; + 48EB73321C748EDE003A818E /* 17.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73151C748EDE003A818E /* 17.jpg */; }; + 48EB73331C748EDE003A818E /* 18.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73161C748EDE003A818E /* 18.jpg */; }; + 48EB73341C748EDE003A818E /* 19.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73171C748EDE003A818E /* 19.jpg */; }; + 48EB73351C748EDE003A818E /* 2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73181C748EDE003A818E /* 2.jpg */; }; + 48EB73361C748EDE003A818E /* 20.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73191C748EDE003A818E /* 20.jpg */; }; + 48EB73371C748EDE003A818E /* 21.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB731A1C748EDE003A818E /* 21.jpg */; }; + 48EB73381C748EDE003A818E /* 22.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB731B1C748EDE003A818E /* 22.jpg */; }; + 48EB73391C748EDE003A818E /* 23.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB731C1C748EDE003A818E /* 23.jpg */; }; + 48EB733A1C748EDE003A818E /* 3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB731D1C748EDE003A818E /* 3.jpg */; }; + 48EB733B1C748EDE003A818E /* 4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB731E1C748EDE003A818E /* 4.jpg */; }; + 48EB733C1C748EDE003A818E /* 5.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB731F1C748EDE003A818E /* 5.jpg */; }; + 48EB733D1C748EDE003A818E /* 6.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73201C748EDE003A818E /* 6.jpg */; }; + 48EB733E1C748EDE003A818E /* 7.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73211C748EDE003A818E /* 7.jpg */; }; + 48EB733F1C748EDE003A818E /* 8.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73221C748EDE003A818E /* 8.jpg */; }; + 48EB73401C748EDE003A818E /* 9.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73231C748EDE003A818E /* 9.jpg */; }; + 48EB73431C748F26003A818E /* DemoVC11.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EB73421C748F26003A818E /* DemoVC11.m */; }; + 48EB73451C749212003A818E /* Home.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73441C749212003A818E /* Home.xcassets */; }; 48FC0E161C4FB3A8004098B8 /* Ads.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E041C4FB3A8004098B8 /* Ads.m */; }; 48FC0E171C4FB3A8004098B8 /* Editor.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E061C4FB3A8004098B8 /* Editor.m */; }; 48FC0E181C4FB3A8004098B8 /* Imgextra.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E081C4FB3A8004098B8 /* Imgextra.m */; }; @@ -297,6 +338,56 @@ 48DBCD171C01E045002EC476 /* pic2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic2.jpg; sourceTree = ""; }; 48DBCD181C01E045002EC476 /* pic3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic3.jpg; sourceTree = ""; }; 48DBCD191C01E045002EC476 /* pic4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pic4.jpg; sourceTree = ""; }; + 48EB72E21C748D6C003A818E /* SDWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebViewController.h; sourceTree = ""; }; + 48EB72E31C748D6C003A818E /* SDWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebViewController.m; sourceTree = ""; }; + 48EB72E61C748D6C003A818E /* SDChatModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDChatModel.h; sourceTree = ""; }; + 48EB72E71C748D6C003A818E /* SDChatModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDChatModel.m; sourceTree = ""; }; + 48EB72E81C748D6C003A818E /* SDChatTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDChatTableViewController.h; sourceTree = ""; }; + 48EB72E91C748D6C003A818E /* SDChatTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDChatTableViewController.m; sourceTree = ""; }; + 48EB72EB1C748D6C003A818E /* SDChatTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDChatTableViewCell.h; sourceTree = ""; }; + 48EB72EC1C748D6C003A818E /* SDChatTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDChatTableViewCell.m; sourceTree = ""; }; + 48EB72EE1C748D6C003A818E /* GlobalDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GlobalDefines.h; sourceTree = ""; }; + 48EB72F41C748DF5003A818E /* MLEmoji_Expression.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MLEmoji_Expression.bundle; sourceTree = ""; }; + 48EB72F51C748DF5003A818E /* MLEmoji_Expression.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = MLEmoji_Expression.plist; sourceTree = ""; }; + 48EB72F61C748DF5003A818E /* MLEmoji_ExpressionImage.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = MLEmoji_ExpressionImage.plist; sourceTree = ""; }; + 48EB72F71C748DF5003A818E /* MLEmojiLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MLEmojiLabel.h; sourceTree = ""; }; + 48EB72F81C748DF5003A818E /* MLEmojiLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MLEmojiLabel.m; sourceTree = ""; }; + 48EB72FA1C748DF5003A818E /* TTTAttributedLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTTAttributedLabel.h; sourceTree = ""; }; + 48EB72FB1C748DF5003A818E /* TTTAttributedLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTTAttributedLabel.m; sourceTree = ""; }; + 48EB73021C748E1A003A818E /* SDAnalogDataGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDAnalogDataGenerator.h; sourceTree = ""; }; + 48EB73031C748E1A003A818E /* SDAnalogDataGenerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDAnalogDataGenerator.m; sourceTree = ""; }; + 48EB73061C748EDE003A818E /* test0.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = test0.jpg; sourceTree = ""; }; + 48EB73071C748EDE003A818E /* test1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = test1.jpg; sourceTree = ""; }; + 48EB73081C748EDE003A818E /* test2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = test2.jpg; sourceTree = ""; }; + 48EB73091C748EDE003A818E /* test3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = test3.jpg; sourceTree = ""; }; + 48EB730A1C748EDE003A818E /* test4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = test4.jpg; sourceTree = ""; }; + 48EB730C1C748EDE003A818E /* 0.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 0.jpg; sourceTree = ""; }; + 48EB730D1C748EDE003A818E /* 1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 1.jpg; sourceTree = ""; }; + 48EB730E1C748EDE003A818E /* 10.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 10.jpg; sourceTree = ""; }; + 48EB730F1C748EDE003A818E /* 11.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 11.jpg; sourceTree = ""; }; + 48EB73101C748EDE003A818E /* 12.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 12.jpg; sourceTree = ""; }; + 48EB73111C748EDE003A818E /* 13.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 13.jpg; sourceTree = ""; }; + 48EB73121C748EDE003A818E /* 14.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 14.jpg; sourceTree = ""; }; + 48EB73131C748EDE003A818E /* 15.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 15.jpg; sourceTree = ""; }; + 48EB73141C748EDE003A818E /* 16.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 16.jpg; sourceTree = ""; }; + 48EB73151C748EDE003A818E /* 17.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 17.jpg; sourceTree = ""; }; + 48EB73161C748EDE003A818E /* 18.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 18.jpg; sourceTree = ""; }; + 48EB73171C748EDE003A818E /* 19.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 19.jpg; sourceTree = ""; }; + 48EB73181C748EDE003A818E /* 2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 2.jpg; sourceTree = ""; }; + 48EB73191C748EDE003A818E /* 20.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 20.jpg; sourceTree = ""; }; + 48EB731A1C748EDE003A818E /* 21.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 21.jpg; sourceTree = ""; }; + 48EB731B1C748EDE003A818E /* 22.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 22.jpg; sourceTree = ""; }; + 48EB731C1C748EDE003A818E /* 23.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 23.jpg; sourceTree = ""; }; + 48EB731D1C748EDE003A818E /* 3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 3.jpg; sourceTree = ""; }; + 48EB731E1C748EDE003A818E /* 4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 4.jpg; sourceTree = ""; }; + 48EB731F1C748EDE003A818E /* 5.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 5.jpg; sourceTree = ""; }; + 48EB73201C748EDE003A818E /* 6.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 6.jpg; sourceTree = ""; }; + 48EB73211C748EDE003A818E /* 7.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 7.jpg; sourceTree = ""; }; + 48EB73221C748EDE003A818E /* 8.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 8.jpg; sourceTree = ""; }; + 48EB73231C748EDE003A818E /* 9.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 9.jpg; sourceTree = ""; }; + 48EB73411C748F26003A818E /* DemoVC11.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC11.h; sourceTree = ""; }; + 48EB73421C748F26003A818E /* DemoVC11.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC11.m; sourceTree = ""; }; + 48EB73441C749212003A818E /* Home.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Home.xcassets; sourceTree = ""; }; 48FC0E031C4FB3A8004098B8 /* Ads.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Ads.h; sourceTree = ""; }; 48FC0E041C4FB3A8004098B8 /* Ads.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Ads.m; sourceTree = ""; }; 48FC0E051C4FB3A8004098B8 /* Editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Editor.h; sourceTree = ""; }; @@ -448,6 +539,7 @@ 485302961C3F648F004361A7 /* Vender */ = { isa = PBXGroup; children = ( + 48EB72F31C748DF5003A818E /* MLEmojiLabel */, 485302E41C3F65EE004361A7 /* SDCycleScrollView */, 485302971C3F648F004361A7 /* SDPhotoBrowser */, 4853029F1C3F6490004361A7 /* SDRefeshView */, @@ -559,6 +651,7 @@ 485303021C3F977A004361A7 /* DemoVC */ = { isa = PBXGroup; children = ( + 48EB72E01C748D40003A818E /* DemoVC11 */, 48FC0E011C4FB399004098B8 /* DemoVC10 */, 485303031C3F977A004361A7 /* DemoVC0 */, 485303061C3F977A004361A7 /* DemoVC1 */, @@ -762,6 +855,9 @@ 48DBCD0F1C01DEB1002EC476 /* Images */ = { isa = PBXGroup; children = ( + 48EB73441C749212003A818E /* Home.xcassets */, + 48EB73051C748EDE003A818E /* test */, + 48EB730B1C748EDE003A818E /* cell_icons */, 4841F5F01C2ACC2B004979F4 /* pbg.jpg */, 4841F5F11C2ACC2B004979F4 /* picon.jpg */, 4841F5E51C2ABC60004979F4 /* pic5.jpg */, @@ -782,6 +878,139 @@ path = Images; sourceTree = ""; }; + 48EB72E01C748D40003A818E /* DemoVC11 */ = { + isa = PBXGroup; + children = ( + 48EB73011C748E1A003A818E /* AnalogDataGenerator */, + 48EB72E11C748D6C003A818E /* WebViewController */, + 48EB72E41C748D6C003A818E /* ChatController */, + 48EB72ED1C748D6C003A818E /* GloabalDefines */, + ); + path = DemoVC11; + sourceTree = ""; + }; + 48EB72E11C748D6C003A818E /* WebViewController */ = { + isa = PBXGroup; + children = ( + 48EB72E21C748D6C003A818E /* SDWebViewController.h */, + 48EB72E31C748D6C003A818E /* SDWebViewController.m */, + ); + path = WebViewController; + sourceTree = ""; + }; + 48EB72E41C748D6C003A818E /* ChatController */ = { + isa = PBXGroup; + children = ( + 48EB72E51C748D6C003A818E /* Models */, + 48EB72E81C748D6C003A818E /* SDChatTableViewController.h */, + 48EB72E91C748D6C003A818E /* SDChatTableViewController.m */, + 48EB72EA1C748D6C003A818E /* Views */, + 48EB73411C748F26003A818E /* DemoVC11.h */, + 48EB73421C748F26003A818E /* DemoVC11.m */, + ); + path = ChatController; + sourceTree = ""; + }; + 48EB72E51C748D6C003A818E /* Models */ = { + isa = PBXGroup; + children = ( + 48EB72E61C748D6C003A818E /* SDChatModel.h */, + 48EB72E71C748D6C003A818E /* SDChatModel.m */, + ); + path = Models; + sourceTree = ""; + }; + 48EB72EA1C748D6C003A818E /* Views */ = { + isa = PBXGroup; + children = ( + 48EB72EB1C748D6C003A818E /* SDChatTableViewCell.h */, + 48EB72EC1C748D6C003A818E /* SDChatTableViewCell.m */, + ); + path = Views; + sourceTree = ""; + }; + 48EB72ED1C748D6C003A818E /* GloabalDefines */ = { + isa = PBXGroup; + children = ( + 48EB72EE1C748D6C003A818E /* GlobalDefines.h */, + ); + path = GloabalDefines; + sourceTree = ""; + }; + 48EB72F31C748DF5003A818E /* MLEmojiLabel */ = { + isa = PBXGroup; + children = ( + 48EB72F41C748DF5003A818E /* MLEmoji_Expression.bundle */, + 48EB72F51C748DF5003A818E /* MLEmoji_Expression.plist */, + 48EB72F61C748DF5003A818E /* MLEmoji_ExpressionImage.plist */, + 48EB72F71C748DF5003A818E /* MLEmojiLabel.h */, + 48EB72F81C748DF5003A818E /* MLEmojiLabel.m */, + 48EB72F91C748DF5003A818E /* TTTAttributedLabel */, + ); + path = MLEmojiLabel; + sourceTree = ""; + }; + 48EB72F91C748DF5003A818E /* TTTAttributedLabel */ = { + isa = PBXGroup; + children = ( + 48EB72FA1C748DF5003A818E /* TTTAttributedLabel.h */, + 48EB72FB1C748DF5003A818E /* TTTAttributedLabel.m */, + ); + path = TTTAttributedLabel; + sourceTree = ""; + }; + 48EB73011C748E1A003A818E /* AnalogDataGenerator */ = { + isa = PBXGroup; + children = ( + 48EB73021C748E1A003A818E /* SDAnalogDataGenerator.h */, + 48EB73031C748E1A003A818E /* SDAnalogDataGenerator.m */, + ); + path = AnalogDataGenerator; + sourceTree = ""; + }; + 48EB73051C748EDE003A818E /* test */ = { + isa = PBXGroup; + children = ( + 48EB73061C748EDE003A818E /* test0.jpg */, + 48EB73071C748EDE003A818E /* test1.jpg */, + 48EB73081C748EDE003A818E /* test2.jpg */, + 48EB73091C748EDE003A818E /* test3.jpg */, + 48EB730A1C748EDE003A818E /* test4.jpg */, + ); + path = test; + sourceTree = ""; + }; + 48EB730B1C748EDE003A818E /* cell_icons */ = { + isa = PBXGroup; + children = ( + 48EB730C1C748EDE003A818E /* 0.jpg */, + 48EB730D1C748EDE003A818E /* 1.jpg */, + 48EB730E1C748EDE003A818E /* 10.jpg */, + 48EB730F1C748EDE003A818E /* 11.jpg */, + 48EB73101C748EDE003A818E /* 12.jpg */, + 48EB73111C748EDE003A818E /* 13.jpg */, + 48EB73121C748EDE003A818E /* 14.jpg */, + 48EB73131C748EDE003A818E /* 15.jpg */, + 48EB73141C748EDE003A818E /* 16.jpg */, + 48EB73151C748EDE003A818E /* 17.jpg */, + 48EB73161C748EDE003A818E /* 18.jpg */, + 48EB73171C748EDE003A818E /* 19.jpg */, + 48EB73181C748EDE003A818E /* 2.jpg */, + 48EB73191C748EDE003A818E /* 20.jpg */, + 48EB731A1C748EDE003A818E /* 21.jpg */, + 48EB731B1C748EDE003A818E /* 22.jpg */, + 48EB731C1C748EDE003A818E /* 23.jpg */, + 48EB731D1C748EDE003A818E /* 3.jpg */, + 48EB731E1C748EDE003A818E /* 4.jpg */, + 48EB731F1C748EDE003A818E /* 5.jpg */, + 48EB73201C748EDE003A818E /* 6.jpg */, + 48EB73211C748EDE003A818E /* 7.jpg */, + 48EB73221C748EDE003A818E /* 8.jpg */, + 48EB73231C748EDE003A818E /* 9.jpg */, + ); + path = cell_icons; + sourceTree = ""; + }; 48FC0E011C4FB399004098B8 /* DemoVC10 */ = { isa = PBXGroup; children = ( @@ -1133,29 +1362,62 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 48EB732A1C748EDE003A818E /* 1.jpg in Resources */, + 48EB73281C748EDE003A818E /* test4.jpg in Resources */, + 48EB733D1C748EDE003A818E /* 6.jpg in Resources */, 48DBCD1A1C01E045002EC476 /* icon0.jpg in Resources */, 4841F5E91C2ABC60004979F4 /* pic5.jpg in Resources */, + 48EB72FE1C748DF5003A818E /* MLEmoji_ExpressionImage.plist in Resources */, + 48EB73381C748EDE003A818E /* 22.jpg in Resources */, + 48EB732C1C748EDE003A818E /* 11.jpg in Resources */, + 48EB73341C748EDE003A818E /* 19.jpg in Resources */, + 48EB73291C748EDE003A818E /* 0.jpg in Resources */, + 48EB732E1C748EDE003A818E /* 13.jpg in Resources */, + 48EB73261C748EDE003A818E /* test2.jpg in Resources */, 48FC0EC21C4FB60A004098B8 /* MJRefresh.bundle in Resources */, 4841F5EB1C2ABC60004979F4 /* pic7.jpg in Resources */, + 48EB73251C748EDE003A818E /* test1.jpg in Resources */, 48FC0E9E1C4FB60A004098B8 /* LICENSE in Resources */, 48DBCD221C01E045002EC476 /* pic3.jpg in Resources */, 48DBCD211C01E045002EC476 /* pic2.jpg in Resources */, + 48EB73451C749212003A818E /* Home.xcassets in Resources */, + 48EB73241C748EDE003A818E /* test0.jpg in Resources */, 48DBCD231C01E045002EC476 /* pic4.jpg in Resources */, 48DBCD1F1C01E045002EC476 /* pic0.jpg in Resources */, 485302CF1C3F6490004361A7 /* sdRefeshView_arrow@2x.png in Resources */, + 48EB72FD1C748DF5003A818E /* MLEmoji_Expression.plist in Resources */, + 48EB73311C748EDE003A818E /* 16.jpg in Resources */, + 48EB73351C748EDE003A818E /* 2.jpg in Resources */, 4841F5F21C2ACC2B004979F4 /* pbg.jpg in Resources */, + 48EB732D1C748EDE003A818E /* 12.jpg in Resources */, + 48EB73391C748EDE003A818E /* 23.jpg in Resources */, 487D3EC01BCB9EC700A66173 /* Main.storyboard in Resources */, 4841F5F31C2ACC2B004979F4 /* picon.jpg in Resources */, + 48EB73321C748EDE003A818E /* 17.jpg in Resources */, + 48EB73331C748EDE003A818E /* 18.jpg in Resources */, + 48EB72FC1C748DF5003A818E /* MLEmoji_Expression.bundle in Resources */, + 48EB73401C748EDE003A818E /* 9.jpg in Resources */, 48DBCD1B1C01E045002EC476 /* icon1.jpg in Resources */, + 48EB73301C748EDE003A818E /* 15.jpg in Resources */, 48DBCD201C01E045002EC476 /* pic1.jpg in Resources */, 4841F5EA1C2ABC60004979F4 /* pic6.jpg in Resources */, 487D3EC51BCB9EC700A66173 /* LaunchScreen.xib in Resources */, + 48EB73361C748EDE003A818E /* 20.jpg in Resources */, + 48EB733B1C748EDE003A818E /* 4.jpg in Resources */, + 48EB73371C748EDE003A818E /* 21.jpg in Resources */, 48FC0EB31C4FB60A004098B8 /* LICENSE in Resources */, 48DBCD1D1C01E045002EC476 /* icon3.jpg in Resources */, + 48EB733C1C748EDE003A818E /* 5.jpg in Resources */, 4841F5EC1C2ABC60004979F4 /* pic8.jpg in Resources */, 487D3EC21BCB9EC700A66173 /* Images.xcassets in Resources */, + 48EB732B1C748EDE003A818E /* 10.jpg in Resources */, + 48EB732F1C748EDE003A818E /* 14.jpg in Resources */, + 48EB733F1C748EDE003A818E /* 8.jpg in Resources */, 48DBCD1C1C01E045002EC476 /* icon2.jpg in Resources */, + 48EB733E1C748EDE003A818E /* 7.jpg in Resources */, 48DBCD1E1C01E045002EC476 /* icon4.jpg in Resources */, + 48EB733A1C748EDE003A818E /* 3.jpg in Resources */, + 48EB73271C748EDE003A818E /* test3.jpg in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1181,6 +1443,9 @@ 485302F61C3F65EE004361A7 /* TADotView.m in Sources */, 485303481C3F977A004361A7 /* SDWeiXinPhotoContainerView.m in Sources */, 485302DB1C3F6490004361A7 /* SDWebImageManager.m in Sources */, + 48EB72F11C748D6C003A818E /* SDChatTableViewController.m in Sources */, + 48EB73001C748DF5003A818E /* TTTAttributedLabel.m in Sources */, + 48EB73041C748E1A003A818E /* SDAnalogDataGenerator.m in Sources */, 485302F51C3F65EE004361A7 /* TAAnimatedDotView.m in Sources */, 48FC0EB21C4FB60A004098B8 /* NSString+MJExtension.m in Sources */, 485302FA1C3F65EE004361A7 /* UIView+SDExtension.m in Sources */, @@ -1216,6 +1481,7 @@ 48FC0E1B1C4FB3A8004098B8 /* ThreeFirstCell.m in Sources */, 48FC0E211C4FB3EA004098B8 /* DemoVC10.m in Sources */, 48FC0E9D1C4FB60A004098B8 /* AFURLSessionManager.m in Sources */, + 48EB72FF1C748DF5003A818E /* MLEmojiLabel.m in Sources */, 48FC0E991C4FB60A004098B8 /* AFSecurityPolicy.m in Sources */, 48FC0EC41C4FB60A004098B8 /* UIScrollView+MJExtension.m in Sources */, 48FC0E9F1C4FB60A004098B8 /* README.md in Sources */, @@ -1225,10 +1491,12 @@ 99A697751C423B0D004EA699 /* UIView+SDAutoLayout.m in Sources */, 48FC0E1C1C4FB3A8004098B8 /* ThreeFourthCell.m in Sources */, 485302D21C3F6490004361A7 /* SDRefreshView.m in Sources */, + 48EB72F01C748D6C003A818E /* SDChatModel.m in Sources */, 48FC0E951C4FB60A004098B8 /* AFHTTPRequestOperation.m in Sources */, 4853033D1C3F977A004361A7 /* DemoVC5Model.m in Sources */, 485302DE1C3F6490004361A7 /* UIImage+GIF.m in Sources */, 48FC0EB01C4FB60A004098B8 /* NSObject+MJKeyValue.m in Sources */, + 48EB72F21C748D6C003A818E /* SDChatTableViewCell.m in Sources */, 48FC0EC11C4FB60A004098B8 /* MJRefreshStateHeader.m in Sources */, 48FC0EB81C4FB60A004098B8 /* MJRefreshHeader.m in Sources */, 48FC0EB71C4FB60A004098B8 /* MJRefreshFooter.m in Sources */, @@ -1243,6 +1511,7 @@ 48FC0EBB1C4FB60A004098B8 /* MJRefreshAutoStateFooter.m in Sources */, 48FC0EAF1C4FB60A004098B8 /* NSObject+MJCoding.m in Sources */, 48FC0EB41C4FB60A004098B8 /* MJRefreshAutoFooter.m in Sources */, + 48EB72EF1C748D6C003A818E /* SDWebViewController.m in Sources */, 48FC0E171C4FB3A8004098B8 /* Editor.m in Sources */, 485303551C3F97E6004361A7 /* DemoCell.m in Sources */, 48FC0EA61C4FB60A004098B8 /* UIRefreshControl+AFNetworking.m in Sources */, @@ -1263,6 +1532,7 @@ 485303521C3F97AA004361A7 /* ViewController.m in Sources */, 99A697741C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m in Sources */, 48FC0EAC1C4FB60A004098B8 /* MJPropertyKey.m in Sources */, + 48EB73431C748F26003A818E /* DemoVC11.m in Sources */, 485302D71C3F6490004361A7 /* SDWebImageCompat.m in Sources */, 485303461C3F977A004361A7 /* DemoVC9Cell.m in Sources */, 48FC0E1A1C4FB3A8004098B8 /* ThreeBaseCell.m in Sources */, diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index c8c6feaa9795fc78897f5e2c909599f404d1052b..1e98c1dc1ccece388f82167259c2184b94375a99 100644 GIT binary patch literal 70755 zcmdR12YeL8_utu_y?(oUcPOYx2N6i`AcT;jkt(6L5=| zh#(4*Km}PawaaOjJE6xsf2b}HteMawSU%fd5w4rq!xyTU6~N15dW3_uZhncPn9B6pK*3vAcMJ*jwx;CW&ccx|l8Ihy%ov#KB^LSS*%^r;0V(Ej5t=D zC{7ZmiC(cntQ2R70kK-F5kq2~IA2^KE*6)FAf72M6PJq@h%3ZP#7o61#g*bJakY58 zxK?ZwZxA<%o5b71&ElQnUE)@8oA{vkkoc(hn7BjSDLyMcC%z!=5%-BNi?54si0_E+ ziXVs{il2&~iC>9di{Fbsh`)%xihqcIN|Hn+i)59Yk|Mb!kJMi3Aa#_Em%2*bq+Zeq zQeUZ`lq#i3SyHytUm76gOM|5%saPtNPL)PTBc(EFj5I--C{2~7N##<7G*g--RY}#- zTqz{Yljci{q{Wghfpm_vOgdk>K)P7EM7lz{Qo2T3C0!?7FRhmvrJJOU(yh{M(jC&B z(!J7F=>h3MX}k2O^rW;ydPaIydR}@#dP&+Ry(Yaby)C^X?Uz1~K9N3^zLdU_zLUO} zewKcb4oH7ckxJA|E!07s)J5I&Xxg40M?2Ckv@7jNd(l3$FHNDTG?Ql0JldZQqWQFt z7SU5^DIHEn&`ESMokFM5Y1B)nQy(p-GiZp`(J-y2^XPoKfSygyq08uUdM-VWo=-2J zSJA8KHFOodk#3+j(T#Kyy_w!ZZ>8Jlee{0%0DX`?L?5P)&}Zp$bQj%CpQkU-J@iHT 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 M=6^5zeA@DV0R26DEC2ui literal 69618 zcmdR12Ygh;)}Og|?$+COqZH{?T1ao8KuCfFLJhsRrfkAOl8w6wMMU?YViy~r*hmPX zSg@dCq1g+F3Rdi5!-k5zeP{07O|oIZ_r8bWJ@sdjTmEy-nKP%&+?nF)3SY1$F>x=U zL?9wzL?V{Br{bQT)^ol$5cK)0ruFm}&-Iqn1gG~b3Y5(8;pIs^Yy8!2LYJ-C=#ri$ zR$?P@NW=u&zfy^vl+FQb>!tLW8qC0#{tpf}Prw2rQ$x6%#t4!V)vLpRX}=)?38 zx|MFDPtYgnv-CN-i@r!-p?m1-^bPtpeTRNPKct_~Pw5x*OL~xgOMjq0(qHLs^e=%3 zOppY-;1EFH9093)6)e!s&uXC=p79If7596sm-P5EK>&3x%_VB?1Ubg=NBp!llAx!j-~R z!U|!fuv)l5xJ6haGzja2+l39n-NHuUeqocaS$J63B5V~N7oHHF5uO!x3cG}tg;#{v zgx7_A!rQ|8!Uw{~!Y9H3;S1p#;h=Cx_(AwZ_*M8*_)8Q;CfY>1sEDfQ7URUWVmq;; z*h%arb{Bh#CyV{X0b-(S+#M*LnpB>pV^BK{%%$pj`cE3>f^*omwSYs=cP_Ut6qfpua1*#H*L2C@W}$dcHp zYzQ05hOulmoaL}wHl9sj6ImhiurpW@D`q9ElzCYh3$P%oVYO^NTfi2wMeG8$j9ths zVi&VZ*rn_;b{)H(t!6i{8`(|lW_Am^gWbvQVt2Dg*rV(*wuL>%o@Xzxoop9-k?m$L zvA5Yf>|J(%eZjtDU$L**H|!w$mi@v0WPeFSqLLtq5|ebvCApLzuUdPqH` zUQ%xX__=$njy`U%B4AyPns*umljA1 zrA5*O(lY5n=_2W3=@RKuX_a)HbiK4%x>Z^)-6q{GJs>?OJtS?Go|K-Fo|c}G_DFlB zSEbja*QGb4H>HoIPoz(!&!j`r57Lj)PtwoQFVe5lZx*Y?X0clw7NGUnlBI*C zqotFjuce=*zh!_W(~@NwWEpHZ%`(!GZy9BoVwq~0W|?mBTFNZtmY}7^QfrxSS!y}Y za=zsP%T<=EE!SACwXCt!S?Vo!TQ*wmvD|CfV%cihX4!7pY1w6Y(X!jJ&+@kA9m~6x z1C}o=Us`^){9^gl@|)FawOQ>}hqaBht+k!Cz4at(2Wv-bCu?78KWl&M0Bfc-%R0z9 z!g`u@q&43<**e8K)jG{uYV}&ntO0A#T4SxXf_16&JnQ+^3#`km7g{f}UTa-pU1_bi zuC+E;@3G!%z0Z2Tb(?j&b%%Ag^(E_G>l@ZLt#4WPSwFRYX8qiH!1|;0C+p8PW|M3d zo7EO)JHd9Mt(&d8t%ohamS{_|CEJGBhT4YN3T$I+V{PMXGi|eMvu&r_=Gx}jDr}Xu zMYgkSi*0AyF0x&0yTo>>?Rwj4+YPoGZ8zE0*y?Qcwzam6wtH;%+U~P$wQaL)x9zY! zZhOM^r0pr&%eGf+du)4c@7q4GeQ5j0_KoeJ?OWS-wm)ru*@>On6}xKJ?7F?9y_3DO zy`R0meSkgFo@F0oA8bF(KGL3VA7!6npK70GpKkZs%k1U$IrbWRt$n_If&D!D`SuI! z%j{R%ud!ciUtwQqUuD0}e!YF2{Z{*W`)&43_6O__+8?q%VSm#8l>KS@EA~D1z4lk_ zAJ{*%e`Np0e$f7{{SW(}_P-oXhwM-sszY<=4wu92=~QRIyy)2N*yniL@s8tN#{tI|jxQZwIeu~c>iEs^yVK^hI~`7^ zv#qn8v%T{qX9s6TXD4T8XFq3u=KyECGs`*1IoNrMbEGrhIm$WOIn_DMIo&zKS>`Nv z&T-Z_Yn}6*OP%LA&v#zwyvljC^BU(Z&Na?DXT9@o=SJr}&U>9(oLimSoZFo{ox7Yb zI^S~cbH43-$N9PQfb$FIPtKp6zc_!DEwWX%$#&TxJ7rl`IZ5fDbW}Pi-IZQSA7y|NuOum1%Bji_Ww?@~sxnQPuAHuvDsz-drAqND3zWsm*-A(O<#Oc;Ww~;ta+R`5xlXxBS*P5ptXFPR zZddM5?pHP`4=4{Rk0{%f9m?a%^U4d#PGy(!qOwPMUHM4auY9b0qI{}+rF^Y?ul%O` zuKc0=sajO4YExy^rMlHPwS(GG?WA^7PgeV@1Jp$I6m^)It>&pC)KThab(}h0oup1v zXQ^kXW$IjYp6XW@sEgIJ)sPD6h3ZA>W$Lx+YV~Gyt-4;lOTAm&s6L@SsXnDXtv;hZ zt3IbbufCw}RClQ_s=L*f)R)zL>f7o&>bvSE>Ou8e^*i-@^^p35`lCiPstKB?DVnNj zny#Isbf+4{4jVhqXtv zN3}iLUhP%wHSKln4ed?sEp4Cnw)T$pk+xqupnakJp#7-*r2VY@uB*DH>$*#K>v8%C z`iXiQy}RB+@2U6F6ZAwqQy-!a)pPXI^pSeLK1Ls_kJAhFsrod1mOfiA(!F|_Uars6 z{d%=NUtgdv(J$05(l6F8(XY_g=yiI%zE*G0*Xg(F>-GEfP5J}+gZg9ollrszbNVj* zMSZuvN8hWzp}(oWqra zxh`>C>RRr))^(lhM%NnGt*$#<_q#T^9&l}OZFRlq+U~*B;ki*M8T>u1{Q_ zx;}G#?mFN)==#?6lj~Z_j31@?yKBayKi*gj4G&Wc+ccXr&8xKP}Aam(T^j=L=G>bUFT*2LAt z-5$3g?vA+o<2J=T5Vs|6YuvWD?QuIM_pGX|sMtg7#6g@yCK_>19a}hXo_A4j2L233 z@>6=2R1^h+^+X|RNC=7bL?^Bg1GWsrLmvHv{M@{${=mFoby0~o*I!aw>8+~q=smMj z(^8T%QnTX|hbJe-r{<;S#b*uA$c|6T%E`>l&dbTmOUsNj-G+1{12&Mhq#bEbP9hyh zN79LOCS6F^kQB0ntRY*-9&&`7AvvUk)D5IN=|OsuUZgiUne-uj@$c>-Eu@3E57?=| zh5;J~EC4KsS2dssNagT=w`g9q-&a)=%r2?%%`d9)mU{G)a=m3mwG}marM?<}ps)t7 z21obr$8A67VVI-RjCpjdSU$n^48^ zfQ%ty$v85eOdu0Ooj?qMcsYn`LEH-B;~>5S;)lRG0P6y50I)=(1A0#@@t1lBqOy$k z)eMYgXkekgHc;Zt!3R)oM|*IJ&%40n)EkJ1!=tAk?Ug2M-Wf#!U(jD=Ht*3hqF&6e zs__QOP>YAx`YKAjfy1ao6ksG!0(@DUJTRINVb8MGCttv33p*_HCLjRG)Fz-(KAc@l>>{aQ6~qM z)(jlu3zirh7_<+tH4D&m9HGUd z3ah|h9%(0{*+t|NGGL>AJ}D+8q?C9`87U`oh>y%A^GF4$Bvr&us>zuoK!T)()ROsR z0a-{Ek+aBRayD5)&LQWL5CO83oJYx03bbHgY@JK<*%SlDo*=WFxtU z+)M5w_mfTJ0rDVuh-@YglSjy-E_Hp@%{bhaL@W32h7Q z2t5&cD)da~xzG!tU7_8fmqU9(uZCU^y&2jUdMET==!4Klp^rnKhCUB{5&A0hP3YUu z_n{v`KZSk?{TBKo^cPSHR0JvkwF0#Rbplm@qRDpwjRSfj(6&I^1ML8`6VNU|y8-P1 zv=`TsPswNGb8>)uLB1qkk*~=&s7_tfP2=bZ^hDZ*wx#W8dwLS>Ks(Y-v@`8OyV7p7 zJMBSx(q6PTJ(>2QeQ7`1pAMk$bRbQji8P5O(-fLY(`Y))pqVs_4x)qUDfCo2gbt;{ zXf_>Ab7(Hjqa)~PbR^BEqv&W_K*!LrbQ~Q|C(wzskWQkL=@dGZPNUQ53_6p}qO+zHK+gfX z4Cp05uLimr=*>WH1-b#~-9R4z`Y_NfKz9Ir3g}LtF9Cf6==(tT1N{u>mp~5!Jp}Y8 zpuYkA3j`4a3kVJnR1n-Cv;m<#2%SLa20~vD;z39RAr*v75C(%V6ok`27zM%@5GH^y z351y-ct9uyp$r5c2o)eygAfE^0SJphI2VNTK)4WuD?zvxgd0Iv1407`w}Egc2={<+ zKL`(k@CXQ7L3kX5r$Klggcm`04TQHqco&2ZLHGoO&q4SSgl|Cj354H3_!C45q6DHH zL>WYkH{w8S3t|TlJA>FA#9kow1u-7PBoNa;JQc)j5c5FH2XPFD<3TJ0aSDhtKs+79 zVi3zf^nq9jVl{|0AfAn$au2N}PFh9%w3?pDqp@O)6lUVjfVTo8i}~IV33Uy1@#xiM zXsZV$BqU4@Vr-F69xP43_+uW{S`&KZrS%$~(7575)!QSLX0ud6~VkNA$`{ z!;6QrlVz}#H3owVWTH7uV9?alqgS;8O_MM-uLvN2>a%^Zgod3*lw`N8+ ze5uiJACF#fY#RO-I-~^!R~i)bYfTEW2F_`&04od%26*&UtssM_5jZ)2Qc-b*mxr_c z%^Qt>b0rz+^_9=5iSDq~2C)NMhuA6JDhzIOo*V)Xc1`#MHF3 z%(S$W#H943l%!^lG`?L_T7u6cHW$gq21y02=_t~og>t~4U~FqrkRGk8-xw5(_vrUU z)Z%|($Z=yA&Bq~wkBP_BzJ~`>_=lNhP05Mj;eIh1pXAZciwNraEQDaXw98iStyFLo}?YyO8>9zisSnC8*1i%6%nRjf7`NbpsaRMeJw6L8L_B*94F zb8teV##iZ$QY67n;Z#`br9@z(t@YhzA8qP3=BRUFCiow&Yp zPWR~d|Mv;{$j-i?s2Hm(%|lC}t-;6{9=#^Q$Uisw6PkJ4!$(?2gOXy8zPJ@Ai82F` zY%n?%6S^4$;cU|J5KUAk^)@Ie^XLty9DJe-vDzWRhqQ zJJ+LMaBO69)Ht;Tv4^KCQKY3Aq*eTbRl`Qh6g`*+84cs?_A#nHA5|vk2Xnm@-g2Cj zkEUX%K}EGk-yG?g)^?dkc0xzCjZIawXl`;1ZUP?tiU>FVpn;4sOIesDPxbny`KpYH z8Ba}c$a(`t{21kp@(mhsi9+jDi=zwW!dQcX`K?JoN_0OJ8Wb%2AJaNa%W;hh_G&Pi zn`s6&XB}5(7-iFD8w8#0(JzS%gVr9@&Ew$8qMA9;0xLG?JIAA!MdZkP;Rsx^62xAP1{E`yCzLpW(DVPQ&3^hvhN=V)Bv-xT-o0bbQRy527~D7xsst~45DJVFMM zm$aTWYnrYzC&OCQ^Mnfwf-dvuo=86)18Wh^ZjKliU1BtPg-7=tn?{dnCJvA8mmAGr zc^vZS=)!K4W?X9!b#-gT4H?l%&-Dfc*S01FnbAh&W`ly2|6sb160QQKM60Jh0H+uAkB6R)tII<&WH2Iad8sM;E zvv8lm%+1H4*VDtjo*v!n4;cilX+47euDc&I2&zA3mePo!T9gnPY4{fxm^O9llS{z1c?6x&X|YBYT3KiF_n zfhnrc@Rrf=-K}GwqgM*GSU42zLf#U}mdF-|^qqH%AWf8kq^NTdBZAx4DxPtp;1$J$fj@)_<1h{tFH} z?6T4#KM!BpEy@N}kGGDwKDrxeZmva_LD!T2W9vyqV2vZX*V`C;JnhlXY_(obGrKuT z`8pV6Jo^uNzeXjC@;zc#qv7XU`_q9a=6e}5>};L6xNxX^*rdAH&!FPPW0uMsb^QN} zbzw2VAnK*#pq^2qJ=GxNmDZXvh-y2_XnSvKMn_rEV`PXy!D}A<@>Z}BTr-M|dW12j zY5tn)Ur<%y=L=EC;Tl+TWl)rmatspRz*U#6K%zN>()bW+@~Xy{Rn1miiX#n@-ty=R zjtxmhY2g34;#eGG5c9T24;~w0jykw`A?Zj_#zcdVcaIApQ5rMVAmn|I{$NBR{|kk> z)4cvlZ%trPv=g6Y@bcj?Gu?)&{XeQuQC_XcAZmYW+O6bhv6LAUeDYs8&;K_`)Wo8y z^60fP;yioy$i>;oQM~z4UP`9riMh%B8asH1z)z#$}rPygmaz7s@V}{ z=f$%O(!TcS%OdvaA56y%OMJqg;5E$)MA^=B4cZR2(r0&3O`mTx{avfAe~)VXVx#dx z$IQ+i&5Its{+;X3;U8UzR~SV7_&@eB5&y_2%3WMzu<>(i8iVM`CGk3gf?r#cf{bVx z++;p%&X{lcUq0 zJ57p&|HU|B5`Op5qRw}($qxGmYb~i^Cl_7k7aufRwj8sG$)nj%gM=8HMTn1@RM`G2 z1F0j|Z;zH#Z8uqRw2EUo+EU{vi~f{JmE3G0=sy_3G-k$)<%7xjM)=Zy3~meO!@b~e zC1~`(e%>TdJq{)BMhh6DfjO9y z$qcvh>jShe(0)MsH!zLqq&ss19RM_*@9R3y*jcpQ_<*kxx1)$`2g!q1+ytSr8aJVB zachb%=)-N7a^@5Tib`;^PorKod!(<_n_W?n9}L!danIFWEnX_bZ_x1J(&)E(WIr}; z(>b4?Q$B5R;()H{X<19A@Lv*_7~7<=j;xbMj~iP!rnZLf{E+LzJ!kz@Nab3*)tN4w zHMX$nT6hCX)|K_*%y(nmSr66|XcEw5peaC88(434vdMfJ(DeTT=5tnWIdtVU(>c#c ziHT`TB0MCs49-IeOJ!*+9cU)dETDsc4sKwXEDL!U4D=MBr*a;K9N!M?cf%iRH@-P* zaZ++(I4w8TM!+dNm!#yJlfQ|u*q8Zn~Dp?hB zQw?-H&cDr_wxXI5K%V+odeXzQRkYdzrGUwiPU!p1{WuS;MQn}qqPLH-*FSFM; zKQTx8>+B8W2VHax&|1z9chM;Mp(`i%i@P#B;!;x^huM2?umfyhlF&{aUM$`>bosOm3hNI4d*RG#O~DnaKyQv{51M}lu`=%8+2)jT>L3n95|y9c%D?v zfn#|e=}akrz-U(Q0D30}zRLt2_r#VD4*WHfI~~;1%+wSv{$#GRP2xXG;=zoxSUOu; zB4IGI5$HWY?*)2agA|f@FoPERexRE;F1OgnaoEiq{C?lvy$maxoZQ61Wztn#G%+>v zYUvsj4UW49fj-1pKp$;5ofV4*oU(n^;$++ck4NDMHyuOrv?$fQL0WS};5w-ufg6B6 z0`yT1{8$)xWkdhHeZn-RpkY8`*IeEkq>V?E_dU|Rh>6193UnLC+-_pd9Flp*{@$~3 zOr~d|>rG0_NHOA4Lr0qA@UXP?h|t@l?Ffw#2LAU1hkh~w-L3zwMW`Yv95^v6gX?s( z?~+7jdTz}zXSRz(APNV>j-)rht7<+4v+L&Z^|Xz(Dg(#1Idlimh`)Y za%TRJ{*?Z*5TI`YeGBM5pl>%=1dB+zTO^?G0DYG;^WO1greIh9oKxG+TAZ0|Sj@y! z?pLx>vYLBfi)J|i8H$QNJ)zM_hPD$z8Y1Se%-KCM?S!HYt^-d5tP+ImMEFMA+e$9E8mS zimLlHhy5lDyKGn9v)#}nBqpOkGgG*>B&Ve}&xI_bE#o>@gQbQPh>g6Qe>K$AAtVIF~hmT%wf+j99wJ(HYu%9 zn=NxJl}F^e%Hl`*&II~1&|f&#uMxfN|h}OEN34PcZua3 z#0>%c9q1n%_s>W-EzIsRj^pwuI?KqL@b{>GT4uTQh`e8Bxg2qqgFrx_h${#t?#$5- z4EU{kBpBfW%}R|L0V^!4Ik7Q2=?2SZ^6>twoB+zaWIAr3u>ECDLXv)NXPR3zm#5IZBoF+E{-)DJ<1IMas zS~goAM&L(5aDpInV8sN^S$+SMJP(%8Qh4^6l$g%FR!UkDModkrzr*r02aZ()usmaV z7J>0t55&|tu*(GQcbOwS^eskWi5xdM*@*BmlbZ)jmX|EAB5urh)$*Fsw%4#Fyd&>4g-9JOm$p7q|BZk~dHOGZj2b~`eix&#M8CYB9QBN~~vI;}cl zTV<Mu4Id&h!K8~Jr;*?wW-m!@fXH++=4)dTI ztHaHQv$eC;@DZ`fI@X?6^byvRLFfm#=OOYlz?9XXyaUduuSHCmk#+M@RHH&$^GBxP}Y_Apt=n8Zz$Ow@y84br>|WN#KL6!;YjP)@_l; z?Kcajay7w3(NL2#Lrs#>(eoxZMse2Z*3&t5EQ4nCSkEvekOjh^W)c{B)MZard2+FEJFlC-rNgi}D^QxU?DumD!&<)0fwo(=X>jbY49dS+6iowUxkF6NrN zz`D@7$a)qC!$8OeVK@jm4c4=*OAr^&A41vYaa^qDA5Tplquz4mrn8%DJys{9hP?G+ z>lH`TlI7MbO?i(5!I*^zd*q=Heem&sOcWBgpnTROq8O{JH*&C8hTeLU^=1=nGzbOF zIxpv%_m`cv!3-HPn)G0ubpwZr<&3O%Snot3-wnc85XNyK)T zA;Pi1rzxTa*e2`495$wUJz{;-q;Mh#h0Q1&x^nZj1vZmHGzAf6AGbbB2CTC_f#X2N z=}HBJ$;NzTKV! z9uM%FC=@=5af+kG-5}mgYI1L;oxUlT8!1ov%aHEoH1hUClQK(;74<514zqNj6_W2ng7;_&H6<_sf zw{3I7VgmkwFAe4Ym$|>}k6!v>DcOyt&Oe2k(jl0v~@C}=7KP{1curd-2vwX}zsc;(QCENa(JGw0$>I@VQgRCK=ZwUp z=A+P-V$0-2#&RIGEZZQH$TL9*G$V4{rlsR=_Zj@+Nd}QoXv?KUqw#i2n;uPCd1jT{85QIe>^ehu}=*rQK zz9nH$jIMZn4<*pdao9YzQZCO}#RQwzR)(;1KsXzOB^>q~6Ly9x`if&1;V9=PYXa7iVFM^34{;?`6@wOwYzxkxme zwkvGQZCBc^;)YYW2!xA4xCDet*V(SIU5n5wZL2`I41~)$_!S^5NBpD2ge{kG{7Y*; z{?*kUVKZ&Jg&SuVb(+@q-?7dm{wh3U7}tO_nObhV!?rmk3uBDGx6K2h>^gtnB!vIQ z|1sP^sW(_MpzFYa16vsSa8s###`Eu+itPr{Q!`q+0krL>J>GHs#9VIM4HtvuXY6&f z^UZ52wg%hnT$f^w`3<%^u*2^H0d?VO-rd)jx-@R%Q>(kCqeIV1#ZV(Fi7S6v#OKHJ*}if3Ndfl$vuaUzC;=B%Fl;HvF2aT*@wos^6zEuUH7 z^TJKI`)!{iZp@6V0Y5U&xGsli;)qb)4irBw{a61SaI5y6TaO|0b+U*$O#K_bLb&Tu<3*LyE+!(&w z1-tb~G}~=$x8X95 z<;3l6?d?pbb}!)ecul$6(7)(+FIR*+4p*W?u)5fLa;#W}*WSzC+r-)g!UN5)`n~m@phh6#_S|}iXD?mdpZa>ayD~@AC54*{w#lIldvR={ZLPN&nGt) zb?m3ujk04*5{KJ!5H$}3tm{0+QMZ_={jS{q^qIXmi72`xOx18G7-k|Vvq_Gl?Y!<7 z(@WYX*e4?JBoMZNu$=?%Fo9=ew(Y-TI_hc`FXUw5Y%Lae($fruYC@i2H>!`ZrXlTT z*ozPuBey3&c#IF$pXQtymM>OG_=s(8F6|5LOE_q(@`C*w`?&}TAiMy=P7aE*8eIDaU31wv z2dy}k5>t$nm7B|y%qa6>ztDae;@U5=Uu?g`eklmML3jy-mqB=?!G5{@3dFqmaCNkk_S@}ubK%Fz673u9_aN?lAnXI-ZH|i*CLDKY z>HQD6$DoPe)-nmJp9q^6RsFVawr}CEF^9}n`!nM+-?qPFTA@!t_zZC))u@Tq(|46^#X3)7dL|#`i78DcW51nyi`Zg4 zVE@9zI{?BL&G3e<>J*sp%8bQEZ4sSBqgDIPZmhP6*+)Oy`Dz<1m7(`Brac<7x=zaq zf1j~9D-*{@dS-eA%t0IyQs$rz!67;r2nRv<7KHCW_`bnmaac)rhaH4NApF23h)a8p z8;`yxcTnu7#3rEDk&39PN;sn4Z(o-f$vo_8s_!_uJ5D}Q2RiyV`kFFFuWU?>L}b3wGxoht!-KeKM&FU> zNaIAtnv8U$J2FhHzd$6-l%e2-?YEq{%*=Vy8x62yh$9D~VwwR*t|JfmJq<(wL=mAx zX6paMf!D6|O*f!2jWsJcWcfOuMwJ-jn0Q293muaX6i@QD0B(SWpf(e9sP~88EB?S$ zHd);D@aj7DPI3m%gc}vtG0RcJfn&u9j$%iN!MNxE(bhx2Dj=$yMjWGtLD@Iw>7PzFpwd%#?wiEpyC(7$InF`M*vfORBV>~2 z0@2-!yqUxNi9~Od$6B%AxY2PF0^b5+I}qD*;FC{C>on*4YsdGT z?^uOF$05fLi2DcME%khU(;JC4( zET`yXq`MPGcru7795>a(9W>(ku{1o5mY!iOrs0I+9D2C#owCz~s7}SHIyI*bVmgQ! zAZCJ?)!=kH;}G>k5C?%cn4_M8sK+tJn*8OA>n}Tp*O&O3u`Hu3o17U{26A?B8reuJ zSL^KM#B9Xb2gD&D4(0p|Go>_i=0&wh&xg%EsvQq-(djk`X`nNOi$0dBI8&Wz2#PWr z4q^@m%{4*CJ)Yd>yO(Bj_25xU5?_{yq$ee%paaA;7m*G))j6DF$BM|EInG?f9swf$ zcN)hYX=3+ZQ}FbBtXpwhwA`FvJ_puBaDj6I2aRR7ofDmf2s#aig5sg6jPm9u)&gAeRA1~p%F z9%0<)vJuF{U@!L+1s~OO7bLOP!aY^sWGLDu{fVM4TR$-cu)E^3ixKr1G>o3qP^K z6+nC`9~Pk^3}5TKo|71>NZ?%Uya8cv0&ymYvpDQ*6L#jQ58VFaBbY2ErJ~wo8XxE2 z*|^OOt#hrDuZ4)2ggS3`Za~~SLG*xl2FEQjacAUSv?=~>)W+csN5SSCN>W$oI9Mx zN{E=S&p2@<1n>BA5Tj-gR$lzYn62R<+7y{NcRTm;u8N8Es`E7@@eL5?0&XpZBvypG zYUPS&HZBW~9yEnGdZKb4=ey32IA|;j?%ePE*d(wDL_dN?lzha6<3Ags^Eklh_6!WC zBK`iQ^IP6Ov7$%kch2vT#vedD6T|?gF=*0Qux0mz!MDs_oQ9Lce3YlAC871egOT|Z zG`fcf_HQylZ0GOJKb(I$F#@dxaXyF(KwQ`$Q&}M0Wd`CRz`d3bdof}kNArEg>4CBg z#4(A6yTHwxeqW#r5zZY>? zWg4aFbetyPvclPWlvQJRCwG#&BevXG?jm=UyMYKGo(JLuAYRxY_mF$ay<`j_E(Y-u z5HAJsG6Zk7*`aKl2MOX*kKVoU*lTZbZF&5B{JuAc$6jZYm1Y%Xl@zBXdYhk3EgNSu zf_VN>UM$WkE-5Q6@s>rsXq=n~;Sc>hXm!+georWzNCm(`%(NSM4D$OWKDNard zYm$7bJcJBbvxakRe%~r*%jlV+uH?x$ffaQnUmn%s${4v2XH3XiavOPv1jvV>x)2sT zPYewO+GU+QNuDfEk*CVjKtvmQHHa%gTn!?x4M&=tDRUPS(@e@mGP)SK6vX8q@((Y> zt4tNZnY^!`I&}1zJbA9nGmzN8)iP!vGG-vxfOstjUJ(J_u=0!_F)+gww|v|3}FcAdOjz7oN&mXYQgK;$1fi0DCX#umbJK=LYMf`0SA zKLymCfAZ|f4hH=tK4UY|@%{>5$)c{+#*ZV;)}X0E1%GXPV-;7M#?#_s+n2RdeJ!OH-Mj-x6i{lL2s#f z2lqZL^Oe_{`_y`Lm-!yf7>*D4=i?{p0gv7ze|TXddAPKqwxp&uV4T3yv~j9OZ<9Yf zr>JUvQ80S*pI3;3IOXT$=dsi7GQLumcgnk_jxEd%1d0~b%RA}9sioesBHZ`Jqqof; zKCZT=0?&<%28qbzWqA+p!&gAOw@%&*;(aEs1x3M{(N(zZZnKxC`bul&^cWU6NccYy zfH&oLx#M_C-Y35;zXReX5FY^XK@cBmkl&Nvmp_m{1aUKn4}Ba%{AmZ-%gChP9H!3cRuf#q30*lc9 z1-#Y%K+VvKqS~sGIfdR}5Y=I#x9rr6GH-HLa&dYo#)0AH6{=t^+uV^Tl7cf`bqc1i zPt++k5c!lwvw@}<2cLuZq(`3|*%9JD+iJ918>id%^T z@o5mB0rA<`MG(X@df#XlRSC3`IE*?^c3b5f7VI#(gi_M)H26W{Uv1ppoGLx2=U9NOi zy45RPl&&DY0OBqXcN?0Z^iX=@sM%?Z8l|^#^68BWo{Yh>R_V=$kNIq0rDvVe55yPo z1ssexzN)Jy1&XSIyekX6CA9%x%_0+Nppt+aL4@~+DD>8>RR$`Fbm8Q&h4@EAddUhF zO6!#rB^AV%LEKZXq$?R9z6v6rd1&6BrNWf!{xGJRW~Gww7D<={1o}M`o7# zOKL08JWZa6DEmNs3q&lWwbCBi5lKY)1f6}qU7>T6X6wY%xEab!kKVC46D{SiR+**D zrVIb(Dcsy7cgm!e??zPCqhN_UBKl$w-$g|=#p~tbEd%kr7UG?&%u^;C^7;V8_YHZq z#?cZHd6}AHNb8(;JHHm;qgn~_p?9Vd0P!ObKdx756wC%c1;%F)nk&4q?=Fb@kEtoe z?bmRfs1cepZ_C(67ew5lx)o02ZlWO~l%>jr=(&~il=GDflw}}dMfY5bnU)3oq zK>XU^#)Yb1$SLNrQGSiLGHg4pS9;bfs};-}z5($EH2)Epo0U4^u2*hR(1{!b@!NW( zURev`cOZTb;-T3H*Ay0dbRGZZ$YYAit9&)JrCyKTtw~l<4L7~kW0-fC5nvhPoOM<< z)bo9YA{5-IY-~ZnJ<7cx{sZO! z@lO!{s#l&-o&`pLQS7lProv4zdpIVGDD~!BjPXFmG?=>;JVvBbl-9IVtF_9@$}8Mr z9{sVSo6NlmPRB$=Z*M5?@NxF0@|Lnsc^jAn%mT~`%+{d1tGuVYuY3T^4p`V@alrTt zmq-6!9cP~@2lzPq9GIg{`2v{psN?J#KF$s*-vX0?;rvSDI6I{L#I^hfTGoDmCjwjUt?1bjyNmW!;)s$_( z+5&3>>_lS}RUVu0{Ae5BMvtzM*Y&I)a!Z(3^#rwT^ypICsqKNa1J>T?rx+%~ub)5) zNiNAIwWNmlNdYM$i|{A^t83-xOJ5~j@vfItl1Tcbc2>JYj{vp1it|o&Y7bx?>(pMr zI%8|i9HDBQJp_EGwZT#86PH%J&;Re`Pink6utobxYC4WUHCatjQ`IzJU4eB6+?b8^ zZcsDSOf^d#1gsCRzQFnc>)(R9p+*eMx_R`BDC$b8YyVZsXeDvdD(a`zYOaaa?B+mbV8~Jr14>TI#R7ini1?(utn~QQ zv=JHc*?Gy?@tJ8ki8*QbjdpHcQe?0%RnO<5I}ccToq7Q<{{3FFDppJ9XNErN#oU-( z0xT1a*{hgFjaM&MCa71a%c-AasAs9ypo8@;tS+i5HB#Y{fUmk{y00pHzz49wAz}lT z3@mGpxdDmx6?Z0!Qia>p4a8li-VSU? zoq7kbp*-kA=&?nWUh@N~7~w~xKkiW8urSoe_ z4eH`s+#i&eos*rKIXo+VL}o7P`S84q_{@yF5vcK*S;G@YBxj{(=1p0cneItXo#GqM zv8S6qG6p0^6xLSqJxR^pE%cW2iU7*6-C?hctLBg6Ev{?PXp?+36<#Cu zR^L;4u2bJvKTtnZKT`Jtn*?koFb}X2U^uHA34qj3)h{^lpQ)d#2Y^imHU-$!wd$AZ zSL)Y*n@qClz-Ac4_dcw-C|Yq3R6nm%dG!8Ae{gtF$-F{uHEyVi9pusb9{p*v4P(sq z7-lmfBvL}U_7Vv0BYao{9_f;w)Zb!p^}G6q`X{hifE#79(~+wl!%Rdnq3h(~wZ4i- z1z%&DEe3#Q*BqJ?*crfzfE616x`{Ax&{62oT-u2-;N*1ZQ_FZ7+|#a7EkR1}p5@o#R=dJOAriqNI# zA!`WFOK3BY??dk`TolAid2&7n8;+m8zS8^TK7D7Hq*mdJ)68GJ9Ed+t-=`m9n+5zm z1L7S66B3bzsocmQX9g{W)kP)V;fX{SLk@&XPKgj%pWF}sPD_v4Ww$X%g7bvdU7MVnXJLt+jV3;xt-iYHj^FXS@JS@gM2{tlTXNJlu`?I(UWL5 z+LOl9RC)@{rv-E@9Zx6I+4KzRr2$$?&!Wre)pR|5m_9~#m{Jy~`I8I{{|x`2PXH@3 zJe}56>o&Ww$efGnw-zsTrwdWe{IBpJ(|T(C$$(qc&$Qm!$?5^EuZAHl8jv}_d}u>} z%>_2^R`p9QUK^+-;Q!+ddr|?c5||$t{=%1n;Pm*>Ex@Ej)o9uO<{_jDA3FKyNc^F~ znnm1a{mqknM`+{8SF}tViCNkpuJ^oTi-m+UPOtR-k_oKJl-4QQsit7O_1YqBY)|N|Hu4gtfO!wNy2{zkyMhQ<56UXnJ&X@Yr}CWfT$r6Ewp)Igwk^Z*{_Y% z^0iUgXstjSqm9+ZY54tm4`4OG<^x*@>?~ks1MWJ@Lco>+JD(f)rc^+iYzD8jt$aj4 z^V5E`872)_uPZq=x#{6Y1T>wi(|q4~&11HVo~adDj^er0Ym^3Hg_43scTobWh%xN|)q+LV?tk*zW zs-35uuU()m(=G&t|6K&^VqlmPUJC3oV3)7gF4iv5E+wkAl&2`bt^l?iq^Hn4@@ILD zLK99$n?DuvLjQsh0SpQ-+UFNAB@c36kAtDvLWfjbQJk8ZofDs)lg*?3)SUS2R37&y zjz~>OPfJTr&l!QGa|9R{z~vL((%3i{dk<*dh}nEoJCmz?XV!X~D(xP<3qEdy>fYFh zm@acbgAIPNPH|Bn9~Wa7XAhV;K=@u!@$jfyZ5QK=G%ktCSi$N9kA;+Xt$!s zduq398?-w#{Ek7pTiXb1wUG$!1F0`ai6A`)(st|w=?RdY#IE2Os#!SC4tR^u$Kl_F zbNma&7R~pSo6&w7T+D>iH$_$9Ihmk&7>7rX=lsX)waGO;oH$v;Asc5hOzcKnv$?1~ ziR$=V%m~Y?q7Y{B`I20|bg-PSlZlXOHsy+IDS+_PF+h_N4Zd_B5~?fZYh}CSW%My9L-9V0FOifvpABut9xPdyY#N z<-1FJQQNJ(q`k}q%hrX(i?hIN53pZA(m`^8WR~i6F3SkXCd)hpG$qcnV^1Lp7LQdb zhQPmBf%KaXV#ydFN<$!OVZwrlv(cn*s}dQ}Z( zvjJ}qe=%pqu?iC*w6V`-R1_`p*Varzn-G!UyW0C$Inv$(c59u6a})e~Z`@$PBrL2M zM`|O2@v-(P$M^);ZFSmbz&CMEn8ep*MIQK4J4oDXwXd|VwQqoJ0EYFHJJ)L8qV&H9 zb{C&QX1Ge?5T>G04WlqITtwBaDmQ*@JbeST14|Rp&xTL@Xn8$yjItTa{emSg?N?y9 z-s`Rib${si9pQTIPwg+AU{OlYMV$e|p>_|jdx6~t?0#UIfIYBYx9C>grrULg?$l*q z4+47#*rUK+1hx&>ZeTAV>$AAV@+h5$%`;6R4f4^9m}^OTruu-h}_Fth`rBq&?aj)Gjb2tGayQJZ85G{4CjiNn#PyJn^Tiv3FvM0j>H{% z@wDDa?@YSuT>&@IXAkp|6t3(#WQ5>>vif^tFJgXG@2#IqoO&OicdGrKh#%~~wmneDV z`i-EZ(X?UmXs*FCR6nVDwo~EY*+X`$4uqOd`_-D^@HPN&5LCB0li`P$` z(bW88gD|7xF^}3lojc(vIe31Lk(21d^lWoEMpKuYS*!8d_#$7RULPJ=vT?*`B8}(j zdHSh*nBQH%dui`>3 z9Dlf;?XZMs4_`;4jMt~@GpHZf3&3`U$UhjvH#-E$6yoW+CwASoUO$7&F4lS$^UY$t z1ZP%TszQ^TqlaI;UdrMA<>zM^i`{d5r3LcTXV!m^mSmNv0{Q(O`GL| z`gAh}e8JSg3N%YP=H$3E^DZ=CE!VoGC=jtIHfV~dv4PbAs)z3p^xd0fhj6!AM>ks~MW36Ax zrGil?F35@)Ykj%C3XQdXrGAxuwSJ9$t-eCXkO^nn-vRb6F!W>Z14BRdAvf07>#Ow} z^c(e?H1zCftUm(wDX<@a9RNJ*0kii1He(&>gWL4G&>+WLp|9VqZ$yKPj%h!zkGVnq z#5Bk=N8Rat&l`J%eshETkiOY8$iNN(9@P=CpQa{m;nr}gzD?h*@6gfQd=BgjU|5Gf z2n?6LG+M(OO@oAjLWE!k*q6}8#=BuV* z`u50%Dcs6i=7YFU;OG`i^OzQFQP_f=5MP4%5Kk8{UgBZsR3CRg>5UHLsN~&J~ z-EizxSmNh}!md#_IjM!XiWV~fV+PUB7tyzgdc;8I(NdURm%}BaeR4TLVs)e^CybNi z!VU}iE4&zA;X-oGcjS4OD~>#Nbpgo^lB3?$&D9+wBtynA_P0yE8vCfnFxYI=bR+cjbq#0%9Pb(kcp8g@ zQa{wxr9Fl%ofh?CiYqmGUecA}%HphMg5<7q4FW0dsH_g*tPXVz0|}*q>$V$N&2f!r zLD6ZhkszH2QX5VYx-wI@dkj1Ox+sdqxW>15ae`|i;K49bdwdZ~@AzsY@!+XSk73h| z_sL$@RM#}ubmDYjFyWfznvJ!4UXwSqnCB#8c><-kE%#RWYJ>mR*mVFjm2_(quZ<$P zNf1F4J0en4M8$?8iUkp*iK6sQsDV%dHz0%nArM+<(m{F$rHJ(2LJQKnu5GPre-jXX z-QEAawJF$w z52cSX0QKBJ8S_SU9hjSN|fmEn@hS0sP-I1Rda6Te7X# zb?ri+JqWb<7r}}$Lz({+tk6ybycFj*!HU8G!HTj$*`n-F_9zDg+JZn}mWd$HHU!%K zi(p+)Gnci>C5iaE{9iOS!Vz2CYMMFSmb%%ime$D@Tn zyV>2a$CG10`k}&r^h4cbkHOD46%+#%wFvSrE8f2W0>2M?A}X4#fU$i7|DWs&Ivy$( z6~_**`M+;TMBQVT{{P9kv|e)I_f?G?L#1mUzSuBicQ!2 zReI#1@)1ZJf%b!y0qB~Zi;l{rDoRj*B=EQVGLH-@5t>b@Nc#lwkE}4p|Mm^8h$vF*}=+uXgqd z+qieMU)+^I+Bs|Xwh8)(jbf@A833`dWDNX04;$k8i7|qV4vW%rscU|LX;6QlUH~=< z>Nx_PNY4<|Sa^f;_+eyHxOE@k^g8B!8N~ z(prnAuC&z83rBx`%l!O4wA6r|@b2Xvgn{V30(x*MO$-KZ)CKm>lJNx&Q~+o$c+mg= zb3sh%lHvwS!qWdK1uQ+4UrLdIWtV#$22=7H=!>Nq8{{KDG>9PFTKisi8|ynf(HS2uKY*up_`^v|v2oNi4hy`792+vKoQ(7WPEg83s;P zz`y$$pSJLj>>xGR1$Jfcf&WYbG?JxUOxT@+3ns!IuqTWxQ&WE9q#%$10@)#u;m^ow z7@Q=mscvl#$d5~N&j+Re00H)e$*>;+86l7{0+}Si{%`;sh(KUASs@S(teYj`2LPUw z)l>i($;3|2W^wp_(n$a*5vIeTa2Om8N5GLV1CD~D0WENWNWz9le!xOsuJ0(dIm z{>7e6f|HlZOoWp_lm?s%vZt-U!S~?|(1}310dc-I_Mm<8fS6~^W{vYY75HJf7U!O zvM+!jb3MQy1FM)VQ~xCg+av-QIq>^jwPrIk*;>ZGWnM{IoG3s_n7<`1k19c7l3;qOuhQFYO;BN@zjX-x1 z$OnOZ7t}R!D&HkE2iR=3qdD0wW`KD3f!&3zuO)*I_V&W2U;+VXV8Mo7fR~Hy?pRQK z*g@|fp8XAo=I*Kc5QCjRx<IHE=U}I|rPC-T<1o6)l1WHfF#=JA)92hCsn7=pAUVweyyvfhH7! zKy>zuW$)(U3oB*UQlsT9fdy|!V0VbMBF;|P$Vo-d5$xv+U3{BQ8sxj6hc{9JA#Y}S zmX?I2hdisIzVL7+?5_K1cmKR+%Tn1(JKW+B{q%d;>qYIIO)@!=#u zfHztaErmd#2zX~CXXn58DuCwptKP|03q^MA5|LgkK?abz(1#Hy0@!Q6*z7BC=wp21 z=;P=UY)Q>vo9s{|0wsb+Tee?*YoElwjmV;dX|bZy+%3sydGs0dSu{}Pq7Wzsf$kv? z7@H;N6n%ct5|3Wcpn%&&Qc7gM&Y~K7RK$U8JFp?MW2OtdA<*kUSCMyE*rM4^vSYV? z+WF|q=qmtXg<=sX4nVA0Y^sNzp@{TSvgBelp^MclT~%Many^&)&f|t`54;Ev73@VN z0<0X7zxU%ww8xLdfBrT)z^(lsSH;5lwhPMge>WhPZOo;4s*5(|5WkPUjlP4{L+hgr z(1vIuv@zNQfzl8t9f9s6PzC~JB2X3rWg}1y0_ENZa>5*KfwlzS)@U5~WWR(P%0nPv zY!|TqEJUCp_IL5J>^NsNr4n>Ed!x5+qfgU1I<$s_KGy@&; zJ9L4LMS&|u7~5a`izt;_6@#S&~z|5ic?8oWs;5nYM~kMtOUY7*Hp@Tcr!?=wOR z1Iw2EKdo~1N?fEfgTdRnochbo@JkLH-(?O-4s}2yHUbAe*@M4Lz^5VjW=GB0b66}y z)!A@J-sZ5Tfvf*5*6zQj{EWW)St5wT2NfG`bPpq`n}q7Z}r<0G6_kLk3W1Pl1Ex`nV>!o^ieB`U(zK1oZ{UWx z_j0Rn-{Q98cHqWyJ9E2myKxh_J-JET-rPRi(cH1z_rMWEDctGYncO+t`P_xv#o%n7 zPVVPCt9j5oVm!Baa3BgjnWr2?CpYs<@=Wv0@_-0ap65I-LD=XUo_9PSKw#)+UNkQj zL^2A2$ir>CJ9+o;ih&qFDG=;;7)18zgD|9y4Qn@?+F%AaZI3p5=9A#F`lkjQy46Fbv!WZC+@MTyTR)JN4xvl|B^&7xU z*M;xE`miBv44cB{uqA8_+rW0P1B?d-o(t>-Y&1`p1bf3iz{sKi!-@*ifTa`;ETkA< z$0Wija5|g`=K#Z@2rh*m!j*6}(7qesW^^xl06l~rL64)S(6i{L=;!EH=r`#1=)cfk z(BCmDFsm?YFzYcq7(NUd!;jg7*^JqW*^b$T5ykAoNMNKfhcL33W0(_|)0nduMT`>W zGUh5q6{C*P!suXhF?tw7j0wgZV}-H7*kkY*0>%yFfgxe;V#pYO3>6cM3B^QUqA;}exg~`PfV2Uwim~u=N<}s!Y(}-!ov}3w3OiVw9g&D?-VJ0y%n0d?}n3tG8 zG4C)RF`qHtupC%U>}u>fEH`!o7RF++0$3sJ7VI|cPV6467m*YRd ze~Mq8zlOh)znh=Q-?ve5quNIGjhY*^H$K|fwy|Sl*Tx!es6#-R&>jJd`T>?D< zy#oE4Y&N-X^4NrI@)8sl6cZE|ln|5>EEjANY!Pe|><~IEbXMq`(0L&xp)#R*p+=!* zq1MgEHlN?DwE5EJE1PRJcW&<9%-q~3d_h=USW{SASVy>Bcu06ycvN_N%f&64TeP?6 zY`L|ieaq06;Vq+E#<$vS_1KDR_1bz@VF$Y*XH*v+dTl z+uQWEO>BF)?e(@d+um(A*lx4kZo9*F{PvmcZ??bN{$cxHJF<5?+)=TkYDe`>v7NFz zkM5M)d17bn&aRz3J9~Hb@4B!{eV67g?Oi&%KJ4b)4eegDd)@Aq-2=N>yPxbH*>ii3 z?6ue%v3L92_WAAe-xs(qXy1GBmExAwy@2i6=|cYy1F_krL8^aEiBA`WUC zG&pE<(Bz=m!TE#l4}LuO>EM?`frp|F#T<$|6fd(yW}nP{8A%yw8M;ioOrlJ(OzL6y z@YciI4(~X;>u}oPqQfPJ%ML%3-79-o_K55;+2gXAvSqRlWh-Q>j_f=ledOQ~a17&- z;v+Rj>W(xVX*zo4=#8T{kLn)1b4>8qo@0BD?K`&rSmv>^V-Js29IKK$E~g}SN$!f= zRk?1tQMqxsNxA9c8pjQe8yz<}Zgza~_^ac89)ElM{RzVpwkPaQIG%7iF>>PBiRUL? zo_Kvy~h)d zGV!wKOe=1S+4?kmhIeaf23hRVjurpo5ZEah3{dF5xy&#$IkExKBA zwe0Fc6@rS73R#7s5}@+s+S+UDuW?`Fy%v5g=~~LQv}^ZO52&6}l~+BhdQLT4^`UBo zYL#lWnwXlb+EFz*wG(QO)Y{ZK)VkDquKQf4Uk|$;ah;*QRvoLpQGJuTkUB*@LY<)= ztsbkvry;DdRb!jR4h^bCv_`DPJ&i<75zYOYlA6+*hcsVle%1W0#i7NiWu}GKa@KOu za@TsL^;PS;HitH+c8zwYcDFWDyZ?sP4Wk<-H_UEW-uR@mT4$}!dL14enog|FJ)H!d zvpCfs(t?S9+y4#ypyI~(qx?qKf3+_`@z^G^1iJUv-G1wBQ* z3woFI^7X3ps`YC0>h*8vo9Nr<+w0@?3HomOclF8o{`!IXG<~{$j((s1lmV9k#z5F$ zr@?-Mvj!IpGz|<5tPE@n><#b+1Ot-6T?4WK#URjtW{_#nV=!*G)(~YVWGHGVZFtB~ z*6^6&2}4CgCBw^x%7)hruN&eF!wr)S+YI{*Ck>w)ell8V1R1S0;xghj+Gr$bBy6G zHo=+*mnA^Gj6jDX0Vx%*-o?lX2;CVnkkwonO!!!YNlnTW2S3%$IJknM2MKBo0XW2n$4NL zHT!11-W+YtZ@$TVv-wtYQS*J~66R9o2h9(gpE6f6*D$|r4nh;nP0cOL9n77~UCiCg zJ_$_u=h+9Zn9I%kFIAS4hp|LdoK?#Z?P)i(rd;7L68N z7DE#4J?f< z%`7b}tu1XW11t+IA6q`Pd}H~|YPA*GYO~c=tL;|1tVFG(tqxhqS{=1IZgtA)h81EJ zWL0WaZPjiyXf5*&MOCV`FAxXX9Z*w(+;2+63E#+Qiz#+a%ef*reNJ+7#J5wrRB)w3)D(wwbee zX7j@4gUu(KuQuOpSJ9bWXqRc1W0!ANWLIieZC7j8VAo{VYS&>mU^ij+%LD1d#meX@PFeW`t&eY<^^J=4D5o@GC2KVv^{|IGe{ z{c8s~wtMIOF)n@r&bk{0jUk{2DwT9*yV6 z3*d$DTkw1EQuw2IMf_E~DqbD0h1bCw;!W`8cuPDEZ-;lq-^GXEqw#V01bi|+4WEZE z#Fya9@a6a_d?TKTAHhGvzr}yRf5Lyo|8QFC#O1{6#OH)|;&5S7QCuOH= zPS>3@o$fdpI2k*cI$1bbJ2^QaP86pIr+B9%r&Oo=PFYUHPGwHzPL)p8PPI;LPW?_( zPS2fQIlXau@AQ}R3g=bMYn<0Pb31Qv7I5C_Ea`mQ`JD3w=S$AY&exo8INx%<r8YeJBK;PIVU(LJEu8kI2SsXI6rVMcdl}N?A+qq?>z4O!uf;qC+DxuKL{%c zTm)VMihw5Y6E+dH6T}I!1O>tsf(k*6ph3_k=o5?xrUY|>6~Tr;Adm<_gh)a(A&!th zNG4_2rmhL65bI$5wgek1>gww4>g!5z4R8%|4RMWjO>r%7EqASQee7E2 z+UVNl%5?2_9dv!-I_f&-`p)%-8@C(QO~6gaZHwDBH!-*UZc=Us++^I2xXHU+b<=S( zb+dJIaC35VadUU`ar1KvaHF~fyM?;Nx}~}mx>dM6a;tHxcWZL%cI$N;aAUa*yN$Wc zyS;V$?#|_oao^}J=q~Io;=b2i++EUL+WnBbth=f^!QIzA*S*ZW#=X^j(0#&v+I`Ob znfnX(5AL7bzq)@Xt{|==@(=}xyND7*Y2qQGEb$oeEK!lDM7%^)CSD`nAQ}*Dhy>=W@!(+F{UJr2(S&w5LCp=Dhobfp4alu2?L&w9&!_agaDkt4ZrfFbPW%APJI$Ng|}Z zq{F1sq$?y1k~Zlk={8B9WI?hf*^=x@coKm`BKeadNeQH6QW`0PluarjJs?$(sz{GX zb)Z7+Q< zBQH}gb1y3|8!v*_U9TXo7_StsbgxXW9It$@hhCLl)m}AT^Ud%ZW>o8Nnrw~+T1?`_^<-iN$TdSCL^@YeRe>3!Q<-`mLB#@pT-@9pgE>P_@U zykopGyt}GQ~^#;4wA+;@#H*7t<3qOYp&O^tT=={xN^=ljg}t?v)=Ix;_bD|tJ4 z7g?0Nk9>$MOFl+EPCi9GL%u}TCL59M$gX4}86kU$2z7*uiUTBuhFl?uidZ9kL5S)H|96t zH|;m)_uB6>WfcWQ5u^xHL?}BbyD5^C0~8sGEae#G1Vxc@jdF`(PO+!pDFlie#e+ho z_*1A98ih^?r`)4tQc5Xxly*uNg-PkBuqcz18Ol868RZ4#HRY2(r$4X1kpE8qJ^o_; z`~9W-kNO|?Kjkm)ui$^)U&a51zk$DvKf&M4-@~8ef7hStAM79MAMVfakMU3O&-X9) zZ}RW<@AV(>AMzjZpY?z0|J?tj|DXQv0yYF34p0cN3~&ta2p|W91;hm;1SAKf1!M#i z29yLm2q+Jz3V0mQ63`zo9`GXIL%^qiuK_;-R|awg@&=*;(SiJdn*z57?hlj=R0zBh zs1m3as1c|gs2^w)Xc}l9XccG^NC>HN8m>>8surjbZuqLoRuqm)R za3pXp@Lk|HDhHL5x|+I<3RAIE0jeNXm?}cuOO>T6P_Ix`sA^OVsy0=hYD6`qnp3T) zHdF%Dn;J}wqQ+9=sY%pSYA&^aT1+jaKBQJs8>rpXQR*D^8TAGAHT5m^EA>av%Ai$2 zYl7AX?FzaabR&oqPuX!W!vS~qQoHck7J_L=rAm?M}ocy;iGU^o~XyfIiXSU7lh z@WJ2{!54$of;ED*gKq}k4mJ(82(}Kk3APW$2YUpQgTsR3f)j$1gVTaDf(wI7f*%Bz z2Ui6@4sHo%1`h{64So~+KKQTTFTvkK)`YAN;R)Fg0*7EjwuI~pIT9itq7ZUEJXuAyFZ*A@LzeA*ms`Aq64DA*CS?Ln=cWLOMeRLuNu= zhWr`wF63j#XF4Z+HGLhOi_S|&(FN%{=u-5f^yBnX^fUBxbY=QA`gOVnU7LQBZbY}C z6X-tlAbJQrj2=mkrYF?yUQVy0chiUHBlL0l6n&QdivEWFp8k>knf@(w zbtqrxrqJD?lA#AeWkQdH%7rR~o)5hkdO7rJsA{NAs7a`8C^6JGloA>kN(-fj#)RGr zO$<#AO$*HkEew4W+8o*+Iu<$^Iukk{`bX%y(2t>?L%)Xp2wNG(6^0Gl8YUhl6Lus_ zF6?BOeAvaXD`6^Os$uG3T4DBKQDNy}U16-SnXp%3U&EpBwc%Xhyy2*D!EoVlk?`%| zyTV1orNiaI6~eED-w3}Ieka@@+&CN;ZWrzt?iB74?jG(F9vU7Wo*iBi{vf;}{84yK zcx!k^cy~B6yg!^3J{kTz{C&jA2rfV-Kt*68Hb#gr;SqsEct`j~&>|QSsS&vm1rfy&WfA2ObrFpbEfH-Ioe@0|Pa@_b z-bH+iqTphVC5{|@13PcJ<3P*}W?u|Scc{)-l@^a+WNYzO7NZm-iNW)0uNV7=G zNXJOeNJ?ZxWPD^&WNPI7$gIfX$g;@t$jZp-$lA!Z$ic|T$XAhnMSh9=&RD@%#o%G^ zG0+SwLx3T~*vXJ$$T2Q3t}(7NG#NJ-w;09@GlnI@nqkXuV7N2Lj1a~>Mmi&tk;BMm z6fr6p)r?w3J)?=y%IIZ`GX7w^V|-+MW_*j{h*}rL9kn3}6@`h~7$p)V7IiS{bd*xm z<*2Jss!{4ux>0&jhEc{*W>J<=j!~qjps2{G=%~1;gs9}G?5Mn`!l>e?vZ(T?x~QJ0 z(WpP7-bHM>d| z?lF{@fEa2_a7;-|ZA^VkV@ylTtC+7b-(xvqIb%g*WnvG<%ElgxJs*1^Rw?#!taj{; zSe;niSc_Q8SgTl@Soc_REG0G|HYheYHZ=BLY+`ImYA16Tm*ceJ^y6@G z&T+1B#5g3*J1#Je7DtZ@i;Iklj!TZqi+dQ?7}pcm7dII9ByKcrBJO$ItGG9D@8Ukj zeUAHfZ}q)(_v-Go-(%gIzW3+7&-cE?bHsDTua4gk565HUH^vLb3&-z{KNx>9{!+Yh z{I&S&@tW~B;!Wbs;w|E><6p*qNm!k*E`d8?Ljs(DO%O@gk+3^qZ-RJ&WWs?2uCneV<4=2wgKTCd*{5tt<^4H{VDI6*5QUp@AriiBOOOZ&C zPPv$(mU1V>B*iMlCB-9!lyWzPk`kCgOQEO4rzEB%r=+C{r;4SDr%I$sr>3M9q!y=^ zrIx2wr9Ms_Nu5o7n)*ETRT@XyrnDVtl4%FhWYUhL$))9|Jxr@et52Iw`y+jQx=8x| zbgA@%>4(#grXNo~mwqArQo3^b?R5Qgqjb}Bi}bPd`SkbcpVPnH=eQ5uUwfbHKJR^@ z`@;9P-rs)T<-YHIzx)38srSEStj|Da@Mmnw*qpI7Lo{PwhD3&R#-R+^4E>DYjOvW1 z86Pq}Wqi%}k-0Jx%G{K>J#$Z{Smyprsmv3ZXEM)aUdX(XsgkLdsgY@z>696rnVgxO zS&;cCvo5nSvn8`LvnR7Jb1;*YIhpw}izACOYjxJTEWxauS$nd?vi4_5Ws$Rjv*NOn zvQo3|XXRw&XBB0YW>sa?XANb&$oi1YpDmnyB3mu{PPSgQezsAzUAAjBF&oMD&i2iw zWz)06vl-bj+4r(rvOndB=3L9s&C$y-%rVI^&#}ruaws`LIUzY=IgvRjIT<oHE%`Us=PIM+<6=F;5=-eSe|;Gex5;|VV+5zL!MKfOP+h4XP#FcEiWW5G%q5r zFK;q$DsMV(F7I95w|tI#&ivK+>+<1zY`#FgQ2v(uZTS-UQuzn+W%6`QvvX2x#f`-+#qGrd#goNf zO5l<`CC5vymspjMO1w(yN?J>LN`_0Gmb@-`Tk@ggQz=I&XX)zFb*0>;r%G>>+LyYO z`j%2k150V8^wRKBMrmqkc4=N|VQEQeWodP3ZD~VkbLpEhk+REW>SZ^}aAj^~US&RI zeq{k=^s?|WMp;bRy|VPOjIzA4%Cfq$#PO^9VUHpnF&@QKb60Pw7OEDm7O8fqMykE4?^ctmUsr#t{_%Ll z<5iD+9@8I(J&t%BRl{AgsYbMBUyVeKbj_g}*_vZDCu%O&T&+>9QLoXgxlwbg=5~#K zjcrXqO@A#^yQlVSt!}Mz?cLg_+SuCo+N9dl+WWOxwYjwgwZ*k%we7WCwanW7T2}3F z?O5$(?R4#2?X%h!wO{IZ>-N-X)|uBa>Qd_-)HT)h)=kuXsQXm+weCm#%6h1NZ9P{# zZ#}9WQ@^)fyk4^YK)p=;k$SoMllAiT3iapfFV^3x$Jcw;N7tv;SJn5{e{A4t;BVN` zu)ASzgLs2v!-0ky4JHld4OR^{4fYNA2G<61Lr_CVLs&y(!@Y*YhLnc%hRlY6hF6Vi z8u=R0jr@(98h1C!G#+V`YdqN~->A@dzVTwCcH_;)+l~5-MvbP87LC@8wvEI_N@Ggn zgT}tbw~arVgqlQ~q?-;k$u=EpI?<%qq||h|NxA7-)AgoXO=eB@P2{HNri`Y_CRWpM z(^%7F(@fKRvtaX%W{GC$=0nZ0&BvNgG@ow1(yZ02+pO1Y*lf~l+w9WJXpU>HY;I|8 zZ|-VlHa}?|X@1uHqWN|6+vd;BUt89-aJOt|fm^n=Y;W1sBHAL?a-ro?i*k!fOG(S4 zmcEvume(zxT6ebYZN1*A*Gg%PXl1lUx5l-mwPv(tx8}7rwf40RwmxYcZJlVHZsTs- z)V8^8Yuom=U2URmGHu7(PPLtBJJ)u(?P{B9n|hm8n|E7GTTxqOTXkD)TSFVOZL)2q zZNBY~wwG;xw!Lfn*uJ`bT|0OChIY6e+b+;9)V`&CU%PC(YP)eesXe|utNlTHO?!QN zQ+sQBNBcngQ2R*xSo>uAO#93B&mF5eHg#<7*xIqZV^@c0hjhpBj#C|HI?i=m=(yCO z+@aH<+o9KC*kRq_+Cl6s;T-)5+Hfckb=f@3iQ&?zHW6=nUv&bS8GDbf$M^cII@Jc0TN^?5ysr?QH1m>|}LL zcYf_!*9CWBy9By~y0&!f>Dt>R-X+;}pi8Dpt;?p1-j&t$psS+mQCCe@eOFW0aM#nW z=UuP5-gLe1`m39}8`~||E!-{Ay`x*ITc-O+w_Nw>?z7#B-Adh>-R9l)-EQ4}-PG>j z?$B;VcTD%a?!@k_?&9v6?%M9U?#Axk?t$*1?vd{C?y2sNJsdqy&)OcY9^M|I9+93M zJ-d7M^+@zc_Z;du*>k?$D9zEn9Mo&&pQ_ob-Y|nhpA3ZOb zYnXh@jm#ZPMW!nAI#ZK*gL#W-$8=;mGhLZPCc>mJ!nGczj z%ob)lvx~`Ojx(p2v&^T=56n-@ugo94+`Sum;a+U7Xs=A~kzTpp6TKR}+Pylxy1jRL z&3Y|+alLlEuDvO}8NI!|BYm8GYx^Ynd04~PwD4>%9R3}g;e4zvuk4|EMM2l@wC1Ah$sHSlHN`{0VfRfB5=1qb&GiVsQ- z9vGAzJT`b@@bsYkpz@&lpw^(ypzfg2py{B+p!J~bAaT%tFlsP%Fn%y;Fm>?$VAf#n zVAbH`!Mef5!Ir`H!LC8(VE^Fg;N0M=!HfXE9i*toy7iRxYc6Rm`ek)w7ydt*j1K zH*1tN!J1~xv7WJBus#oM7=nkeLjprWLtBQn4ecD-GbA>&f9TB6xuFX~mxh#wt_@uu z(j2-mbZh9&kiigTC~s(Z=>3zePn4e+J-PcN?n&p9!6!3M=AZmI3=MM+iwy4@J~Avn ztUP>e`1-Ks@SS0UVY6ZUu=}v*u-CB9aNsa)m_8gn%ot7>E*dT$?iwB*emeYd_{Ye~ z5ol!1$odhU5zNS*kwYWLM^25L8M!o~Hlj6RG-5O2HbNXhM!ZG>Mp8$zN2*77$vWMWc^K>qa|A2S=Zb zj*iZaJ{$dG^smt`qu<9?jIA15Gq!1L_t>5>(XoAFN5;;NT^zeIrZT2BrZJ{Hc5}>P z%zDgr%zg|%Mi_G&^B5zIg^iVtjgGGz-#UJF+-%%#+7e*J~IAs0yQB%ad|>};?9J@gz<#ggw2Hg1b%`r;WiOEQ8F<; z@pR(Z#EXf~lhEYaNv=uWNz^1}a_i*w$z7A8llvwmCZ#8}Cj%#QCMzc!CR-;vCc7tl zC+8-AOs$>bn&O>8P3@i%o!U1gF(o~9Xv%cTcFJYSeadsnYszQJZz_C>F%>g)Z>oE0 zbZTO1dTMU!_0+d%j%m*6)zj!{{^?EAo2SoCU!K;Pwwn%{PMj{DE}Jf&u9|*4T{qo0 z-7?)i-8DTmJu^K&{m1mn>DSY5r$0>pHT`A!`^=^p(V62jDl@ldoM!xI(q<}Vm@~sO zBQxVOPiLOZyqNhg^Ks_$Ea&X1*)_9#v#43j?6%pRvwLR6X7|rZ%^saSJ$rUmaaL*e z@~rl(?yTOd;jG!Llqo8~spZJXOUw`Wdl?!uh;JT$*yUSM8me#`u}`GfOE=1(qA8aY<3 PT>M5iFMcn5&Y%7t#j3n8 diff --git a/SDAutoLayoutDemo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/SDAutoLayoutDemo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 7b58f8a..8f94031 100644 --- a/SDAutoLayoutDemo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/SDAutoLayoutDemo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -13,37 +13,5 @@ stopOnStyle = "0"> - - - - - - - - diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/AnalogDataGenerator/SDAnalogDataGenerator.h b/SDAutoLayoutDemo/DemoVC/DemoVC11/AnalogDataGenerator/SDAnalogDataGenerator.h new file mode 100644 index 0000000..828927b --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/AnalogDataGenerator/SDAnalogDataGenerator.h @@ -0,0 +1,17 @@ +// +// SDAnalogDataGenerator.h +// GSD_WeiXin(wechat) +// +// Created by aier on 16/2/10. +// Copyright © 2016年 GSD. All rights reserved. +// + +#import + +@interface SDAnalogDataGenerator : NSObject + ++ (NSString *)randomName; ++ (NSString *)randomIconImageName; ++ (NSString *)randomMessage; + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/AnalogDataGenerator/SDAnalogDataGenerator.m b/SDAutoLayoutDemo/DemoVC/DemoVC11/AnalogDataGenerator/SDAnalogDataGenerator.m new file mode 100644 index 0000000..fc650cf --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/AnalogDataGenerator/SDAnalogDataGenerator.m @@ -0,0 +1,112 @@ +// +// SDAnalogDataGenerator.m +// GSD_WeiXin(wechat) +// +// Created by aier on 16/2/10. +// Copyright © 2016年 GSD. All rights reserved. +// + +#import "SDAnalogDataGenerator.h" + +static NSArray *namesArray; +static NSArray *iconNamesArray; +static NSArray *messagesArray; + +@implementation SDAnalogDataGenerator + ++ (NSString *)randomName +{ + int randomIndex = arc4random_uniform((int)[self names].count); + return [self names][randomIndex]; +} + ++ (NSString *)randomIconImageName +{ + int randomIndex = arc4random_uniform((int)[self iconNames].count); + return iconNamesArray[randomIndex]; +} + ++ (NSString *)randomMessage +{ + int randomIndex = arc4random_uniform((int)[self messages].count); + return messagesArray[randomIndex]; +} + ++ (NSArray *)names +{ + if (!namesArray) { + namesArray = @[@"二龙湖浩哥", + @"微风", + @"夜在哭泣", + @"GSD_iOS", + @"hello world", + @"大脸猫", + @"你似不似傻", + @"天天向上", + @"不爱掏粪男孩", + @"最爱欧巴", + @"大长腿思密达", + @"别给我晒脸", + @"可爱男孩", + @"筷子姐妹", + @"法海你不懂爱", + @"长城长", + @"老北京麻辣烫", + @"我不搞笑", + @"原来我不帅", + @"亲亲我的宝贝", + @"请叫我吴彦祖", + @"帅锅莱昂纳多", + @"星星之火", + @"雅蠛蝶~雅蠛蝶" + ]; + } + return namesArray; +} + ++ (NSArray *)iconNames +{ + if (!iconNamesArray) { + NSMutableArray *temp = [NSMutableArray new]; + for (int i = 0; i < 24; i++) { + NSString *iconName = [NSString stringWithFormat:@"%d.jpg", i]; + [temp addObject:iconName]; + } + iconNamesArray = [temp copy]; + } + return iconNamesArray; +} + ++ (NSArray *)messages +{ + if (!messagesArray) { + messagesArray = @[@"二龙湖浩哥:什么事?🐂🐂🐂🐂", + @"微风:麻蛋!!!", + @"夜在哭泣:好好地,🐂别瞎胡闹", + @"GSD_iOS:SDAutoLayout 下载地址http://www.cocoachina.com/ios/20151223/14778.html", + @"hello world:🐂🐂🐂我不懂", + @"大脸猫:这。。。。。。酸爽~ http://www.cocoachina.com/ios/20151223/14778.html", + @"你似不似傻:呵呵🐎🐎🐎🐎🐎🐎", + @"天天向上:辛苦了!", + @"不爱掏粪男孩:新年快乐!猴年大吉!摸摸哒 http://www.cocoachina.com/ios/20151223/14778.html", + @"最爱欧巴:[呲牙][呲牙][呲牙]", + @"大长腿思密达:[图片]", + @"别给我晒脸:坑死我了。。。。。", + @"可爱男孩:你谁???🐎🐎🐎🐎", + @"筷子姐妹:和尚。。尼姑。。", + @"法海你不懂爱:春晚太难看啦,妈蛋的🐎🐎🐎🐎🐎🐎🐎🐎", + @"长城长:好好好~~~", + @"老北京麻辣烫:约起 http://www.cocoachina.com/ios/20151223/14778.html", + @"我不搞笑:寒假过得真快", + @"原来我不帅:有木有人儿?", + @"亲亲我的宝贝:你🐎说🐎啥🐎呢", + @"请叫我吴彦祖:好搞笑🐎🐎🐎,下次还来", + @"帅锅莱昂纳多:我不理解 http://www.cocoachina.com/ios/20151223/14778.html", + @"星星之火:脱掉,脱掉,统统脱掉🐎", + @"雅蠛蝶~雅蠛蝶:好脏,好污,好喜欢" + ]; + } + return messagesArray; +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.h b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.h new file mode 100644 index 0000000..e036792 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.h @@ -0,0 +1,13 @@ +// +// DemoVC11.h +// SDAutoLayoutDemo +// +// Created by gsd on 16/2/17. +// Copyright © 2016年 gsd. All rights reserved. +// + +#import + +@interface DemoVC11 : UITableViewController + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.m b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.m new file mode 100644 index 0000000..11b8591 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.m @@ -0,0 +1,103 @@ +// +// DemoVC11.m +// SDAutoLayoutDemo +// +// Created by gsd on 16/2/17. +// Copyright © 2016年 gsd. All rights reserved. +// + +#import "DemoVC11.h" + +#import "GlobalDefines.h" + +#import "SDChatTableViewCell.h" +#import "SDAnalogDataGenerator.h" +#import "SDWebViewController.h" + +#import "UITableView+SDAutoTableViewCellHeight.h" + +#define kChatTableViewControllerCellId @"ChatTableViewController" + +@interface DemoVC11 () + +@property (nonatomic, strong) NSMutableArray *dataArray; + +@end + +@implementation DemoVC11 + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self setupDataWithCount:30]; + + CGFloat rgb = 240; + self.tableView.backgroundColor = SDColor(rgb, rgb, rgb, 1); + + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + + [self.tableView registerClass:[SDChatTableViewCell class] forCellReuseIdentifier:kChatTableViewControllerCellId]; +} + +- (void)setupDataWithCount:(NSInteger)count +{ + if (!self.dataArray) { + self.dataArray = [NSMutableArray new]; + } + for (int i = 0; i < count; i++) { + SDChatModel *model = [SDChatModel new]; + model.messageType = arc4random_uniform(2); + if (model.messageType) { + model.iconName = [SDAnalogDataGenerator randomIconImageName]; + if (arc4random_uniform(10) > 5) { + int index = arc4random_uniform(5); + model.imageName = [NSString stringWithFormat:@"test%d.jpg", index]; + } + } else { + if (arc4random_uniform(10) < 5) { + int index = arc4random_uniform(5); + model.imageName = [NSString stringWithFormat:@"test%d.jpg", index]; + } + model.iconName = @"2.jpg"; + } + + + model.text = [SDAnalogDataGenerator randomMessage]; + [self.dataArray addObject:model]; + } +} + +#pragma mark - tableview delegate and datasource + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + SDChatTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kChatTableViewControllerCellId]; + cell.model = self.dataArray[indexPath.row]; + + __weak typeof(self) weakSelf = self; + [cell setDidSelectLinkTextOperationBlock:^(NSString *link, MLEmojiLabelLinkType type) { + if (type == MLEmojiLabelLinkTypeURL) { + [weakSelf.navigationController pushViewController:[SDWebViewController webViewControllerWithUrlString:link] animated:YES]; + } + }]; + return cell; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + CGFloat h = [self.tableView cellHeightForIndexPath:indexPath model:self.dataArray[indexPath.row] keyPath:@"model" cellClass:[SDChatTableViewCell class] contentViewWidth:[UIScreen mainScreen].bounds.size.width]; + return h; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + NSLog(@">>>>> %@", [self.dataArray[indexPath.row] text]); +} + + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Models/SDChatModel.h b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Models/SDChatModel.h new file mode 100644 index 0000000..0c2b7a2 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Models/SDChatModel.h @@ -0,0 +1,24 @@ +// +// SDChatModel.h +// GSD_WeiXin(wechat) +// +// Created by aier on 16/2/13. +// Copyright © 2016年 GSD. All rights reserved. +// + +#import + +typedef enum : NSUInteger { + SDMessageTypeSendToOthers, + SDMessageTypeSendToMe +} SDMessageType; + +@interface SDChatModel : NSObject + +@property (nonatomic, assign) SDMessageType messageType; + +@property (nonatomic, copy) NSString *text; +@property (nonatomic, copy) NSString *iconName; +@property (nonatomic, copy) NSString *imageName; + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Models/SDChatModel.m b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Models/SDChatModel.m new file mode 100644 index 0000000..bfa5752 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Models/SDChatModel.m @@ -0,0 +1,13 @@ +// +// SDChatModel.m +// GSD_WeiXin(wechat) +// +// Created by aier on 16/2/13. +// Copyright © 2016年 GSD. All rights reserved. +// + +#import "SDChatModel.h" + +@implementation SDChatModel + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/SDChatTableViewController.h b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/SDChatTableViewController.h new file mode 100644 index 0000000..f7fddea --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/SDChatTableViewController.h @@ -0,0 +1,13 @@ +// +// SDChatTableViewController.h +// GSD_WeiXin(wechat) +// +// Created by aier on 16/2/13. +// Copyright © 2016年 GSD. All rights reserved. +// + +#import + +@interface SDChatTableViewController : UITableViewController + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/SDChatTableViewController.m b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/SDChatTableViewController.m new file mode 100644 index 0000000..2b5b33f --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/SDChatTableViewController.m @@ -0,0 +1,99 @@ +// +// SDChatTableViewController.m +// GSD_WeiXin(wechat) +// +// Created by aier on 16/2/13. +// Copyright © 2016年 GSD. All rights reserved. +// + +#import "SDChatTableViewController.h" + +#import "GlobalDefines.h" + +#import "SDChatTableViewCell.h" +#import "SDAnalogDataGenerator.h" +#import "SDWebViewController.h" + +#import "UITableView+SDAutoTableViewCellHeight.h" + +#define kChatTableViewControllerCellId @"ChatTableViewController" + +@interface SDChatTableViewController () + +@property (nonatomic, strong) NSMutableArray *dataArray; + +@end + +@implementation SDChatTableViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self setupDataWithCount:30]; + + CGFloat rgb = 240; + self.tableView.backgroundColor = SDColor(rgb, rgb, rgb, 1); + + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + + [self.tableView registerClass:[SDChatTableViewCell class] forCellReuseIdentifier:kChatTableViewControllerCellId]; +} + +- (void)setupDataWithCount:(NSInteger)count +{ + for (int i = 0; i < count; i++) { + SDChatModel *model = [SDChatModel new]; + model.messageType = arc4random_uniform(2); + if (model.messageType) { + model.iconName = [SDAnalogDataGenerator randomIconImageName]; + if (arc4random_uniform(10) > 5) { + int index = arc4random_uniform(5); + model.imageName = [NSString stringWithFormat:@"test%d.jpg", index]; + } + } else { + if (arc4random_uniform(10) < 5) { + int index = arc4random_uniform(5); + model.imageName = [NSString stringWithFormat:@"test%d.jpg", index]; + } + model.iconName = @"2.jpg"; + } + + + model.text = [SDAnalogDataGenerator randomMessage]; + [self.dataArray addObject:model]; + } +} + +#pragma mark - tableview delegate and datasource + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + SDChatTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kChatTableViewControllerCellId]; + cell.model = self.dataArray[indexPath.row]; + + __weak typeof(self) weakSelf = self; + [cell setDidSelectLinkTextOperationBlock:^(NSString *link, MLEmojiLabelLinkType type) { + if (type == MLEmojiLabelLinkTypeURL) { + [weakSelf.navigationController pushViewController:[SDWebViewController webViewControllerWithUrlString:link] animated:YES]; + } + }]; + return cell; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + CGFloat h = [self.tableView cellHeightForIndexPath:indexPath model:self.dataArray[indexPath.row] keyPath:@"model" cellClass:[SDChatTableViewCell class] contentViewWidth:[UIScreen mainScreen].bounds.size.width]; + return h; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + NSLog(@">>>>> %@", [self.dataArray[indexPath.row] text]); +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.h b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.h new file mode 100644 index 0000000..4344763 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.h @@ -0,0 +1,20 @@ +// +// SDChatTableViewCell.h +// GSD_WeiXin(wechat) +// +// Created by aier on 16/2/13. +// Copyright © 2016年 GSD. All rights reserved. +// + +#import + +#import "SDChatModel.h" +#import "MLEmojiLabel.h" + +@interface SDChatTableViewCell : UITableViewCell + +@property (nonatomic, strong) SDChatModel *model; + +@property (nonatomic, copy) void (^didSelectLinkTextOperationBlock)(NSString *link, MLEmojiLabelLinkType type); + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.m b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.m new file mode 100644 index 0000000..423a200 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.m @@ -0,0 +1,214 @@ +// +// SDChatTableViewCell.m +// GSD_WeiXin(wechat) +// +// Created by aier on 16/2/13. +// Copyright © 2016年 GSD. All rights reserved. +// + +#import "SDChatTableViewCell.h" + +#import "UIView+SDAutoLayout.h" + + +#define kLabelMargin 20.f +#define kLabelTopMargin 8.f +#define kLabelBottomMargin 20.f + +#define kChatCellItemMargin 10.f + +#define kChatCellIconImageViewWH 35.f + +#define kMaxContainerWidth 220.f +#define kMaxLabelWidth (kMaxContainerWidth - kLabelMargin * 2) + +#define kMaxChatImageViewWidth 200.f +#define kMaxChatImageViewHeight 300.f + +@interface SDChatTableViewCell () + +@property (nonatomic, strong) UIView *container; +@property (nonatomic, strong) UIImageView *containerBackgroundImageView; +@property (nonatomic, strong) MLEmojiLabel *label; +@property (nonatomic, strong) UIImageView *iconImageView; +@property (nonatomic, strong) UIImageView *messageImageView; +@property (nonatomic, strong) UIImageView *maskImageView; + +@end + +@implementation SDChatTableViewCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + [self setupView]; + } + return self; +} + +- (void)setupView +{ + self.selectionStyle = UITableViewCellSelectionStyleNone; + + _iconImageView = [UIImageView new]; + [self.contentView addSubview:_iconImageView]; + + _container = [UIView new]; + [self.contentView addSubview:_container]; + + _label = [MLEmojiLabel new]; + _label.delegate = self; + _label.font = [UIFont systemFontOfSize:16.0f]; + _label.numberOfLines = 0; + _label.textInsets = UIEdgeInsetsMake(0, 0, 0, 0); + _label.isAttributedContent = YES; + [_container addSubview:_label]; + + _messageImageView = [UIImageView new]; + [_container addSubview:_messageImageView]; + + _containerBackgroundImageView = [UIImageView new]; + [_container insertSubview:_containerBackgroundImageView atIndex:0]; + + _maskImageView = [UIImageView new]; + + + [self setupAutoHeightWithBottomView:_container bottomMargin:0]; + + // 设置containerBackgroundImageView填充父view + _containerBackgroundImageView.sd_layout.spaceToSuperView(UIEdgeInsetsMake(0, 0, 0, 0)); + +} + +- (void)setModel:(SDChatModel *)model +{ + _model = model; + + // 重置frame,防止重用过程中出现问题(只有在cell布局变化非常大的情况下需要此步设置,一般cell的自动布局不需要这样处理) + _label.frame = CGRectZero; + _container.frame = CGRectZero; + _iconImageView.frame = CGRectZero; + _messageImageView.frame = CGRectZero; + _maskImageView.frame = CGRectZero; + + // 清空之前的约束(只有在cell布局变化非常大的情况下需要此步设置,一般cell的自动布局不需要这样处理) + [_label sd_clearAutoLayoutSettings]; + [_container sd_clearAutoLayoutSettings]; + [_iconImageView sd_clearAutoLayoutSettings]; + [_messageImageView sd_clearAutoLayoutSettings]; + + + _label.text = model.text; + self.iconImageView.image = [UIImage imageNamed:model.iconName]; + + // 根据model设置cell左浮动或者右浮动样式 + [self setMessageOriginWithModel:model]; + + if (model.imageName) { // 有图片的先看下设置图片自动布局 + + // cell重用时候清除只有文字的情况下设置的container宽度自适应约束 + [self.container clearAutoWidthSettings]; + + self.messageImageView.image = [UIImage imageNamed:model.imageName]; + + // 根据图片的宽高尺寸设置图片约束 + CGFloat standardWidthHeightRatio = kMaxChatImageViewWidth / kMaxChatImageViewHeight; + CGFloat widthHeightRatio = 0; + UIImage *image = [UIImage imageNamed:model.imageName]; + CGFloat h = image.size.height; + CGFloat w = image.size.width; + + if (w > kMaxChatImageViewWidth || w > kMaxChatImageViewHeight) { + + widthHeightRatio = w / h; + + if (widthHeightRatio > standardWidthHeightRatio) { + w = kMaxChatImageViewWidth; + h = w * (image.size.height / image.size.width); + } else { + h = kMaxChatImageViewHeight; + w = h * widthHeightRatio; + } + } + + self.messageImageView.size = CGSizeMake(w, h); + _container.sd_layout.widthIs(w).heightIs(h); + + // 设置container以messageImageView为bottomView高度自适应 + [_container setupAutoHeightWithBottomView:self.messageImageView bottomMargin:kChatCellItemMargin]; + + // container按照maskImageView裁剪 + self.container.layer.mask = self.maskImageView.layer; + + __weak typeof(self) weakself = self; + [_containerBackgroundImageView setDidFinishAutoLayoutBlock:^(CGRect frame) { + // 在_containerBackgroundImageView的frame确定之后设置maskImageView的size等于containerBackgroundImageView的size + weakself.maskImageView.size = frame.size; + }]; + + } else if (model.text) { // 没有图片有文字情况下设置文字自动布局 + + // 清除展示图片时候用到的mask + [_container.layer.mask removeFromSuperlayer]; + + // 清除展示图片时候_containerBackgroundImageView用到的didFinishAutoLayoutBlock + _containerBackgroundImageView.didFinishAutoLayoutBlock = nil; + + _label.sd_resetLayout + .leftSpaceToView(_container, kLabelMargin) + .topSpaceToView(_container, kLabelTopMargin) + .autoHeightRatio(0); // 设置label纵向自适应 + + // 设置label横向自适应 + [_label setSingleLineAutoResizeWithMaxWidth:kMaxContainerWidth]; + + // container以label为rightView宽度自适应 + [_container setupAutoWidthWithRightView:_label rightMargin:kLabelMargin]; + + // container以label为bottomView高度自适应 + [_container setupAutoHeightWithBottomView:_label bottomMargin:kLabelBottomMargin]; + } +} + + +- (void)setMessageOriginWithModel:(SDChatModel *)model +{ + if (model.messageType == SDMessageTypeSendToOthers) { + // 发出去的消息设置居右样式 + self.iconImageView.sd_resetLayout + .rightSpaceToView(self.contentView, kChatCellItemMargin) + .topSpaceToView(self.contentView, kChatCellItemMargin) + .widthIs(kChatCellIconImageViewWH) + .heightIs(kChatCellIconImageViewWH); + + _container.sd_resetLayout.topEqualToView(self.iconImageView).rightSpaceToView(self.iconImageView, kChatCellItemMargin); + + _containerBackgroundImageView.image = [[UIImage imageNamed:@"SenderTextNodeBkg"] stretchableImageWithLeftCapWidth:50 topCapHeight:30]; + } else if (model.messageType == SDMessageTypeSendToMe) { + + // 收到的消息设置居左样式 + self.iconImageView.sd_resetLayout + .leftSpaceToView(self.contentView, kChatCellItemMargin) + .topSpaceToView(self.contentView, kChatCellItemMargin) + .widthIs(kChatCellIconImageViewWH) + .heightIs(kChatCellIconImageViewWH); + + _container.sd_resetLayout.topEqualToView(self.iconImageView).leftSpaceToView(self.iconImageView, kChatCellItemMargin); + + _containerBackgroundImageView.image = [[UIImage imageNamed:@"ReceiverTextNodeBkg"] stretchableImageWithLeftCapWidth:50 topCapHeight:30]; + } + + _maskImageView.image = _containerBackgroundImageView.image; +} + + +#pragma mark - MLEmojiLabelDelegate + +- (void)mlEmojiLabel:(MLEmojiLabel *)emojiLabel didSelectLink:(NSString *)link withType:(MLEmojiLabelLinkType)type +{ + if (self.didSelectLinkTextOperationBlock) { + self.didSelectLinkTextOperationBlock(link, type); + } +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/GloabalDefines/GlobalDefines.h b/SDAutoLayoutDemo/DemoVC/DemoVC11/GloabalDefines/GlobalDefines.h new file mode 100644 index 0000000..5898464 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/GloabalDefines/GlobalDefines.h @@ -0,0 +1,16 @@ +// +// GlobalDefines.h +// GSD_WeiXin(wechat) +// +// Created by aier on 16/2/12. +// Copyright © 2016年 GSD. All rights reserved. +// + +#ifndef GlobalDefines_h +#define GlobalDefines_h + +#define SDColor(r, g, b, a) [UIColor colorWithRed:(r / 255.0) green:(g / 255.0) blue:(b / 255.0) alpha:a] + +#define Global_tintColor [UIColor colorWithRed:0 green:(190 / 255.0) blue:(12 / 255.0) alpha:1] + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/WebViewController/SDWebViewController.h b/SDAutoLayoutDemo/DemoVC/DemoVC11/WebViewController/SDWebViewController.h new file mode 100644 index 0000000..10411eb --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/WebViewController/SDWebViewController.h @@ -0,0 +1,17 @@ +// +// SDWebViewController.h +// GSD_WeiXin(wechat) +// +// Created by gsd on 16/2/16. +// Copyright © 2016年 GSD. All rights reserved. +// + +#import + +@interface SDWebViewController : UIViewController + ++ (instancetype)webViewControllerWithUrlString:(NSString *)urlString; + +@property (nonatomic, copy) NSString *urlString; + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/WebViewController/SDWebViewController.m b/SDAutoLayoutDemo/DemoVC/DemoVC11/WebViewController/SDWebViewController.m new file mode 100644 index 0000000..8aa0236 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/WebViewController/SDWebViewController.m @@ -0,0 +1,56 @@ +// +// SDWebViewController.m +// GSD_WeiXin(wechat) +// +// Created by gsd on 16/2/16. +// Copyright © 2016年 GSD. All rights reserved. +// + +#import "SDWebViewController.h" + +@interface SDWebViewController () + +@property (nonatomic, strong) UIWebView *webView; + +@end + +@implementation SDWebViewController + ++ (instancetype)webViewControllerWithUrlString:(NSString *)urlString +{ + SDWebViewController *vc = [SDWebViewController new]; + vc.urlString = urlString; + return vc; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.webView = [UIWebView new]; + self.webView.frame = self.view.bounds; + self.webView.delegate = self; + [self.view addSubview:self.webView]; + + [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.urlString]]]; +} + + +#pragma mark - UIWebViewDelegate + +- (void)webViewDidStartLoad:(UIWebView *)webView +{ + +} + +- (void)webViewDidFinishLoad:(UIWebView *)webView +{ + +} + +- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error +{ + +} + + +@end diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg.imageset/Contents.json new file mode 100644 index 0000000..a50af5c --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ReceiverAppNodeBkg@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg.imageset/ReceiverAppNodeBkg@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg.imageset/ReceiverAppNodeBkg@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..de3c4c51b966262e54fde504d40c3f534a5375c7 GIT binary patch literal 697 zcmeAS@N?(olHy`uVBq!ia0vp^EkK;Z!2%>1qb?n0U|?$Sba4!+V0?SWK2O+Dg0;Y# zaq*M|CIKzN0R?=k9C#-7yjbu+=!)M-`A%UMryqPTSIPycv|PKnRq=?#hR3qPlXH^n z!yZoF#_jRA>ExdGcONXDdGl`M%c~|*y=jKcR_~IzCHoF47#(EKS=eZmRqxOHf0n5V z=Xc8_KXI31GDY(_Cq8($NMYIqFN+1-M$Bq1+}_;{8B1j@Po25pLCRabFewT8WLoIQvGN^@=kyu3*&16tJF=1A<%7CQsaHdjK#Ky4B8MY~lK_nQ z=e)r5``nLo%*$V#GN|e}zPm}InD_4c5}O{GM^^Vrb8V0Cd}KH*7dtav(0R=x-}d`2 za-xrLZtO{)QMbtYw4kKs5wiXH_k%o+uIaZZ55C`!WEbN?Wn*q6-m`2vNB(I z5)WAd)oJnVmvVNTbkWJib9Jy{R)_oUZ^s0zkA(7kJ69QYq$J|rA-_}dZGlI)1D^@a zOS+L9XKR_%vSG~wQNNtY1ycGgxs%?uG_Q!?xO$D^=^4lWUQCTVR$SW_ycv#U+(Xx%l;1*pnDVHWAkN?HA82ADD*h~h)FziMU-o*^{V(?kHSw}-J#GL z!~4H$+u134JG!<>u3fa&$16u~*_QXN50=*I*Lwe6b;tQqqWuD?<8ze1-Bc9HUirCw z!<#xLsa+!?>x10X2XTHiLrwRK9vd@#cV_sZ)VTlEKr}&t;ucLK6VL Cmm{D6 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg_HL.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg_HL.imageset/Contents.json new file mode 100644 index 0000000..d62e8b4 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg_HL.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ReceiverAppNodeBkg_HL@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "ReceiverAppNodeBkg_HL@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg_HL.imageset/ReceiverAppNodeBkg_HL@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg_HL.imageset/ReceiverAppNodeBkg_HL@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2fc61be241f708e710c524c85e444ce3e51e2257 GIT binary patch literal 743 zcmeAS@N?(olHy`uVBq!ia0vp^EkK;Z!2%>1qb?n0U|?G3>EaktaqI1!y?MfpBCHQ4 zHgR}yFKSZSSUh720ogRGp}mz(y5i?niDa9$>P&dku!Ct zI_hVcy9nnV+2FTE!a75#rL5UoRdGw&7O|w;f(`c9&73mUng$=sTVcAX_JSinXOMcB zylu&*y%!s*?5#wY)33j1I8nE7 zj6T!HC7j)Thk2NJK8T6=dh9*X;&E%k3roI>&92guL>hlc9abuoQEGJMkrZnzsB@C> z<78CiaO7|jXcA~qV1Y6J8y;Ew*oz~%hx43m@t;TAR5idLyFlK|sHM-HT}j==K!1L;r1N>_ z7G>ubYunm`6PY-63RZqO62Or3b;+LlUp{SD`o3WbYo~O@+mCZBKAlg0J>%ZA=H8F) zEibn?rJNVye{y@-^z%YH|>9KbLT3En?<&b7azoE{rKIbWcvp4KMti&6(dPC0f z_rI1dSMT~dDfExVlS^J7yS6Po_G5QUxz?>og|4$*nRkWwW!|?v?*04S^q^bmJ%$HU z-@5f(wb*vih2^bS&dT4_Ia#5v_(ZGumg<+Tofh-vqyaGfAfx{__6!Dzcl9T%)jtYM Ozzm+QelF{r5}E)c!9+y> literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg_HL.imageset/ReceiverAppNodeBkg_HL@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverAppNodeBkg_HL.imageset/ReceiverAppNodeBkg_HL@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..36d0e6c5cb57eb36512c2d30de2cb58f916344d9 GIT binary patch literal 1203 zcmeAS@N?(olHy`uVBq!ia0vp^$AEYd2Q!e=Rd7;fU|@6!@Ck7Ra(C|BxqJ8S3l}Z` zNg&v>XV2!%n}H-8K*S+Za6t%T@7}#@*RF*tfG{9Z5cS9+5G&vs4;(lEWWxo~)bHE3 z526xC0&M}35ThV$xD>K7px}NmIC${jxpU{PUAqP}{MfN$M~@zT@ZiCjGiQJbPM$n@ z{`~nTPo5kmc^F*i&);UTvN+XZo61Go9GpsW-j-`P}|x|0S;ANlbrEw=42$u{_E6z4d$46}^+4 z%bbsV-Q%l$x!G3v#kML_)iZZjePdu?y5Z^K7*cWT?VZfvTLB`+3Y%F3T<+w?Mn`YG zdhOlseK%R(xCKwQQ|DsZRP+D4?wOK4Gqb8nYdYZOZ#7m#s`)iuyiL_nLJbg@4+jaylX6oT9 zTP(rYcVuo~!$duq$rg4~%GkGtZJoX~i~Z8O4-&!?MV%eo19@Xs+$v;n78IR#f9K*d z=5U}>!}p2zPIPj0`NmX!OL!tz&_t1w5>iS+JEnA)2za|Cssz~W)SDA2pQ^IRpeW)HYmZC(Rw`Yx*dR%x^NLLJ6&J4#*Tf@&U0Y<5x41YRS!}=%`_OM~ zVFQoR358}fqG$gLqdwOst4ohb=5%@_%r$IrvNu@w(BsMM(qmT)yp(Pqlgxh>C^GSY zS#qKv>&9~)dTSR5tU9Fj_?qtmjs01YX%*s+ZmjHn@yqPQj*3#T6W+U{5~dlJ@~!wI z5PMfla{96MkKg9TaZT>|oW7pf^`dv;q{7Es6YBNfu4)WD_WHNO&*ppnYLe34vv2%b z@qKdOu~-FptwS1*vJU+)L-f z3eM4XA33(4xFEiY{g+efq>s;Ezio7E+qPhK?=;u8yuW|$=d0d!liVfv|DMV2-~yrCpfZ6reGyLo|pKhuJpJ4^U6zX%UW;FznfM+>0XhDThXxtG0u;J z)!v@}(^FY%*l7BzhJzXUW__co>8=YzT^wD{9Lv?lg-cO=B=vDyV}2a r`q95vW0WipNF?_d9zzf@uhrS-gg<(w@ShWyYZyFT{an^LB{Ts5|6Y(! literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverTextNodeBkg.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverTextNodeBkg.imageset/Contents.json new file mode 100644 index 0000000..ff19de7 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverTextNodeBkg.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ReceiverTextNodeBkg@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "ReceiverTextNodeBkg@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverTextNodeBkg.imageset/ReceiverTextNodeBkg@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverTextNodeBkg.imageset/ReceiverTextNodeBkg@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..56ccc552119e3076adb018c9c7ee5cbfb8325574 GIT binary patch literal 595 zcmeAS@N?(olHy`uVBq!ia0vp^EkK;Z!2%>1qb?n0U|^E+ba4!+V0?RLf0js~%+Zgn zFTA`|d&NF-2K|r;yBN#6=0@g2?}&V_{|){E0-yO_uI*Fk$}u#4(_%Vd!)w1DYfj_% z!wp*-XDXFHn-hHJU+_P@IdR5?GRFhs{kJUl*vYYI=Duuy=dV|P*H`b#+HTr8b8@hd z8&}ww&WkSnvzj6VN(ew$Q+EG|c@;krieOU-gHcZa1-6`)H%=dHuVq%uks1L>rtC zU7Yy0bKBi1lO{}FbT`fI_dU0imYF>qd$Uuvtbdj4D1kxOK)7>yACCoU^YSn@8LgIv%Z<1-4rf?k`IHYtDnm{r-UW|k(2=k literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverTextNodeBkg.imageset/ReceiverTextNodeBkg@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ReceiverTextNodeBkg.imageset/ReceiverTextNodeBkg@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4479222e763f4e14aab58f8dbddc7c83855914e GIT binary patch literal 1025 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 Rqy|jN44$rjF6*2UngES0PD=m) literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanBook.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanBook.imageset/Contents.json new file mode 100644 index 0000000..1d96809 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanBook.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanBook@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "ScanBook@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanBook.imageset/ScanBook@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanBook.imageset/ScanBook@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..923c9b0c7d02e6dfb871e21ffefcfa3270dd98f3 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^ZXnFT0wiy%Yw-iApPnv`AsP4H-t^^a3J_sUU_X1< zcZ<;Vfa(I_wTpW1e3p^i!S~#;@648Z-OEi1UIvf9cAc|4{Ci6Nf`W&UVuuZ+nkTvh zdEGQwpPp~_sZG}~yerJ7vohLerTpbTWl0^1Z4y9YnYG%Bm7TL#_Ua$dkp7p-{Bdfo z#A9B8dt!?&NJ|{iVE=fxPE7l_fLqKH{?|!*>m+-w2|4o^9uYtx+ze;DTAc7r>DaHf zKa$7ZC*OIFVdQ&MBb@0NLPqDgXcg literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanBook.imageset/ScanBook@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanBook.imageset/ScanBook@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..95815982e5e5576aa2fb7ba458d1f8eb1827df08 GIT binary patch literal 405 zcmeAS@N?(olHy`uVBq!ia0vp^nIO!;0wgDQAKl2nz!>A{;uunK>+KywuOkj3$3Aul zbc;+=s$j`Jcq+MqSz9`PZuX+nPas0flX(W3(#>XdTtEl|>e~#MI#cwi9>a#ch*prf^C+{%nRQjY4 zXOCy5Clwrsy0mvO|K;We&s43+@1tKYw&s~~W!{2$cBefXmb~M9RT<1}%iFW1rl~5RH-^Ra z(?*2xaC@*ZqW1cKoah!fu|#dLQS9U?M+7}4Te02N!Q#vA@Q-A$2{5;4{@ogDe<^U~b%d-BINZZ4CU6YO=e+{^NI<=?CR kj$4=%j~%f}aLFnxe=s{(L%eH?DbS@1p00i_>zopr0Fc>};s5{u literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanBook_HL.imageset/ScanBook_HL@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanBook_HL.imageset/ScanBook_HL@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..affc36772d6fe72e6a2b5788359f408c562b8fb2 GIT binary patch literal 461 zcmeAS@N?(olHy`uVBq!ia0vp^nIO!;3?%tt{&E1RiU6MwSMI&++?W@}27sbKiK*ND1gV7##pv^$G>)fRRK$dz*kY8}0xY_=k z!tkfeD;RYyzn5XR=YQNGIqipK+RUHFp1ow_elhjm-#@<@7M{{e2Wq+N>Eakt5%>1i zPQJqm0mNTHr^VZZQaZRzD=TyC>Xap{D=@eSptH07q-C93r2J`LB>@VXO4*Yo)~STzuW-yD1)b~pUXO@geCxj#IBP7 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanBtombarBG.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanBtombarBG.imageset/Contents.json new file mode 100644 index 0000000..7a95d8b --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanBtombarBG.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanBtombarBG@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanBtombarBG.imageset/ScanBtombarBG@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanBtombarBG.imageset/ScanBtombarBG@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9f9d809b2b6ad51ae1f722162e5ec2be2f3fec7a GIT binary patch literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^GC;hHg9S(?hpO`csUS}m$B+ufx2LVS8Vn@ZHe3^b z^tb=%+!Aq_HK)(JZ(6?H(f*OCM1Qcz;m3Mi_d6ejsdX*d(WUQF=-I!>V!3)EGY~*B65MVjz%#uOrk2+9QoZ@BfCeyly85}Sb4q9e0O(XNssI20 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetaiPictureSquare.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetaiPictureSquare.imageset/Contents.json new file mode 100644 index 0000000..17d04bd --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetaiPictureSquare.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanDetaiPictureSquare@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetaiPictureSquare.imageset/ScanDetaiPictureSquare@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetaiPictureSquare.imageset/ScanDetaiPictureSquare@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9000ce3456056bfb4af0c244fefe5d0bae152a5c GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^S3sDN8A#p}m>&(K*aCb)T>t<7|K`n`b-ph+fg+40 zL4Lsu4$p3+0Xb%#E{-7;jBihFqbBfPd h!ieeX(=P6O!oKL5S+{VW?qr||44$rjF6*2UngIMdH97zQ literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBg.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBg.imageset/Contents.json new file mode 100644 index 0000000..f9bcc41 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBg.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanDetailCellBg@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBg.imageset/ScanDetailCellBg@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBg.imageset/ScanDetailCellBg@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5282979e9122e2ef2df86d1dfdca5bae6b075d4a GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^6+j%p#0(^zm)$N0Qk(%kA+BG)e*OIU^PM|)K74iP z0}85mx;TbZ#JxSakdeWFgJFT_>3^R+*PGm2W42;XFav|Y&RPGqX1!Jr{gwaFJP)Xz N!PC{xWt~$(696vXDQ5rx literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBgWithArrow.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBgWithArrow.imageset/Contents.json new file mode 100644 index 0000000..6c599c3 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBgWithArrow.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanDetailCellBgWithArrow@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBgWithArrow.imageset/ScanDetailCellBgWithArrow@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBgWithArrow.imageset/ScanDetailCellBgWithArrow@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..de0b5c5c0b5b13daae69ced14d67f3538b5b05a8 GIT binary patch literal 415 zcmV;Q0bu@#P)U6=^z_is(aOrp+uPjI($n7F-@d-T$;ry+=jYGQ&)3)2 z&CSls%ge^b#^2xH-{0WG#Kg&M5($;rv->FVg{>Few4z@EnF z0002KNklA~)+FH5N>#3Y3H(b-^rrv-000000QS=% zX_y%^(kNfe*Gi$hHf*C%o*0%#B<|4T@=2k5o^yHZlelHV<%L4ojk#QuB+hfV+*K%t zJ1!6UB(8jLxgC-?&tBD*qy;H=olLyz*ls|=GTS|hcfE?csra($N@vma#dgJS_#Nx~ zj+^b?#k+1x=}U8%yYiliDSXoK${Xwg00000002ad`4R3k<^yQq5ow}0T5bRU002ov JPDHLkV1jP_^XC8n literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBgWithArrowHL.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBgWithArrowHL.imageset/Contents.json new file mode 100644 index 0000000..26955a0 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBgWithArrowHL.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanDetailCellBgWithArrowHL@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBgWithArrowHL.imageset/ScanDetailCellBgWithArrowHL@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailCellBgWithArrowHL.imageset/ScanDetailCellBgWithArrowHL@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8844590b4cf8168aaa4b55245f63487597875f56 GIT binary patch literal 367 zcmV-#0g(QQP)lqP zyuHD}!s6oM;Nall;o-o*!QbEC!^6bI#m2(I!@s}4zP`W6$jIH@-Q(lq)z#JHd#$*~P`h%*@Qn%FEQ$)XK`r+uPgE&(PA+)5pih)z#L*!ouL-;ojcg z!^6Yg-rnKi;@#ce$;rvY#Khd(+*)~~>;M1&sYygZRCodH)x{CRU<^cItr`D-!_3rw zfsx%oF49b9zXsk#AVfq&L_|bHe`>sP>H=$Vuz}i6#M~aemqYo0Uh7akp*I_exkU#x zcPQ@~sM4VvGN@%N=JE(?>QGJ#s3H|}aS2s9l=BYiDAtlQRFs%^BloVuHdPn%Zss%5 z*P(ke@7{-Q@epIr8tNU3u~0i*=}^0LRcKs3vHG;Xbcu+Fh=_=Y=nEGZ1%3^Rm74$n N002ovPDHLkV1n0z$%y~} literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMediaPlayIcon.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMediaPlayIcon.imageset/Contents.json new file mode 100644 index 0000000..38922c5 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMediaPlayIcon.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanDetailMediaPlayIcon@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMediaPlayIcon.imageset/ScanDetailMediaPlayIcon@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMediaPlayIcon.imageset/ScanDetailMediaPlayIcon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..03b2e54ac8e3226e2881d04396524742be124034 GIT binary patch literal 1738 zcmV;*1~vJKP)j4){R?xmEt`95ag*{7LM>CqNtAoAL@j~UnVxevWx9YO! zlI}&P8OX*onPrA)LX08$LSF!DToWyrfXI?sn-tDNIW3$M?D_cOm-`N!(DwA)*L~f0 z(a-k}==tQF-rU#qdr)pbfDla_=S{}=kOiV707wvJfe#tuO}c3!L;$5f3Z2QPk$%Rx zO14~OoPHX~_oGw^&oWAaTuCs>vy}KnD#$_3vWgCpoFz=qTd88&Szt5bOfk$!j_?&e zPdUXX3aB7N9lL4fB*RP*XEPRPr`Q{*Qu>II$z=v<M<^`o>hj}i_(xi46(|3F0kKyscj6C#)f5HV;f3i zw(%Ov*pOzJ2i%nU8cWy^rJo9v3#p)w2sSM7gga7syiOX6G;dLfaxs;>#SJXdyiT5O zsRx_j@izW8yk~&Hfi)m_6hEvN77D6|k^rCW#FhiqJtsaCJ zMPy3x9fU=S9Y_hkpvvF@auK0DQ!2;;!b>Q}QV`=?#-5)qAS@8vD0L8Fg-Q)l!e7{B zM5>Y%gz!eG5rnr<+N9tHKc(D&*3S_})=QO;MA)lQO1MI+>#xOo5R#PGQnVnTvtkd!dO zXSGVzAS@G5Y)6Qrj7mX5b5SUU5K=TDOc|CE{>ol$Qd0wMxLumF)N|@x!C`V~V7*m`>sP|Y3)_8+5RL0i(Js9KFMuQ-RW%X6v!==V2X0{^;>GpVEEwIPB>m@o(%yY04zRVQ-J~-*x3UU%f>yUKHa9tp=~i z!fsxXnZL|jrH}jEyv#Iz?fiRcP_E<>!U2&gFjOG;7e~w$2o$3TFS}UE`H7iQj=7@S zpItAy%_6jHRvz7>U22i%OqNGY6taItg;#}aMc9RwgO8{;-*Vt)b4Z+T8yj=^KElVD z%^`|*ghh%ROZ}26gN>()2p#Safo4OfbO$E|TI^!TVXE~AO@G%APumWMoVV%!4l zrjM|O@V#3#2G1i*+*OUi|D+(h7VZw;OSNP1WcJPWwRcIg{jakbi-;mjbH9(rBBl|d zd}iwnupIdx9yQvcLt%;#5uc9l9VCSi&3b&#PNV+^EuD_U`s3RQI~$3WwE1dy`RUBz zWgTPYJ)SD{totOLP8R~S`EDUVn~v2D&yd980y{hy{hG!i$uqi^Y&=E;i&Z)a8WRfA z!73IJ_Ul}S@(>f)Fk$HXdL-jt-R|z<8oQ0nwUlw1HFp=+NSs?HUn~O8@`>07*qoM6N<$f|eFD0{{R3 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMediaPlayIconHL.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMediaPlayIconHL.imageset/Contents.json new file mode 100644 index 0000000..481d63b --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMediaPlayIconHL.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanDetailMediaPlayIconHL@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMediaPlayIconHL.imageset/ScanDetailMediaPlayIconHL@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMediaPlayIconHL.imageset/ScanDetailMediaPlayIconHL@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..994d14ff98df3c6f747e4ddd2974dc848d0ea13b GIT binary patch literal 1627 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 N002ovPDHLkV1l1fsgD2v literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMovieIcon_Hl.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMovieIcon_Hl.imageset/Contents.json new file mode 100644 index 0000000..607d5d3 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMovieIcon_Hl.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanDetailMovieIcon_Hl@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMovieIcon_Hl.imageset/ScanDetailMovieIcon_Hl@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMovieIcon_Hl.imageset/ScanDetailMovieIcon_Hl@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9e3d03f4d79f0ac5968f8cf49c27f4e32562ca03 GIT binary patch literal 1365 zcmV-b1*-aqP)3c4qeAETr>wdRsD;4@EFQsW0%4c=4t^0n-(NdrzJQdH2qbi^{Tk`Nn ziiHkwUpINpX;g)Dn%A1)KB3~EC*<+_4pl*&lSgv080hot>yw9371prk*ysGeLB}MT zQm86WN}jCPVbBhD^l2IDssg%BTyh@g{*QL$d(nPI7H_EO2r4V$pOr!=-B`L=imvAg%56GmfIUia^XP%VYz05i|ZVlRz z+08^gbR%!|7rm%bp+)cb!P@;kt9y7$BW`GZ(*ItRFbymjf83ejU(uf^q zpha1}H45D!smmJF!N*k`Q_!M)exu3U!zlT!Z_v<5$u}sI(4sYSGfc_9B+<|d`a_>_ zXpu3a@6%UXKq*3E-%(r8#*98Hb{j7nrf&(7=j60fKG;niDe3Jwt!4@tGQJfuJmd?n zB_p-mKuSiqX02r88oScV4QfBl;v7+oyW~WV=ruTzdgMw`#>^L-4Y~@>mKgLHDzzk7 zauu8n8ZS5#H85tSv~P^h>=sc*ndBWgM65DLKhYxF_A|$-dk+Ycwu>l5G!-aU&5|Zb zf=*h9Na%!#&_X8(lBCJzwOC<!aOpt~qz*2Wj zA=P11YkF+%WI)aQxg9&-cJd|n{O&#XTuJ)Ku|O|o3e((HXdCRWx@%LoivZj7{#YW8Hu4x3m;{SM?Otj;>`To zrii3aq|F%Rj8c;H6@8RzYKSE@u2BZmSfMj5SLsQ%Q-%=Olk^+*E0+%SQKcx=iDK&)b)Qn@}L3)hRMk46 Hg2 zdKGTfRE(&ae}6JJ=49((pPXcu@NIrbRp+@W+>nQ`F< zD0k5VTA&@ETv4@FR=G+XB@NH+hu+mx;p+X+`#gO-_sp+DnykkP*J(1e9nS+CPEbP^ zH+V?!XiD&qaOt9k6P!6edEzTCBoRK&dff7J$}K&c$JuZ6MX#IV^KgRz0000x{dQMbn)&sgNf)q(daG+Knh?ve5dy zTH%5jTAjI{(?C62IdJdq&iBXU{qShhWxzdimMocb&wws%JWMu*ECMc=BN@!OAlOgp zGh&S(#6)!Psp8>L#iv6=j3BHT;p?PjLRJU~Aq`9h4MGxx6%l2Zw9cLVYo8j%L5)5u zggfea(sxV|CNwchnoJO8w6dfv5`-Hn81z)QK}cxrlGd3beBl7ICkI?1OsW4ZE!(@i zri3X#iEDeeI@ zjSwK#(d5xRyU!bi1KNOFVgAPfy-gj2258Qdwt*f2w=X{FBKY6vsK62a3- zoxyns%YTvnI2qCvgQ4{C_e+3QJt;=uK!x(K0K`jyx2$FKiPZ7{0O zw5=^DHW*bwdE{_Y`g*xi8;pY9rt}#CB&SFxoGUwQl?0)Ql^Sj{E0qlfeLJ~Ld(@j3 zXncWn_%GR_kGEU2;phd1iSHck9(%4R6;OWOIrdmuJRuA@-t*uCgs1HRE!EBtCItF; z9HXS=U~NYXdkGF|`x002ovPDHLkV1l>2Bs%~A literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMusicStopIcon.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMusicStopIcon.imageset/Contents.json new file mode 100644 index 0000000..8158d9b --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMusicStopIcon.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanDetailMusicStopIcon@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMusicStopIcon.imageset/ScanDetailMusicStopIcon@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanDetailMusicStopIcon.imageset/ScanDetailMusicStopIcon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..742a60b803e5386ef7f9a6dca2d63a4a70a7a495 GIT binary patch literal 585 zcmV-P0=E5$P)HcKQ_B*U1AUGj2a{Rl7EbRq!cNg8}ssBudJ-NeA*b zBn)XwuE{hv^X)&lckVgoKlau~fkSGXbH_9NAa`I8F)qxUVw5wX~-1= zglH3UM94OUA=`u;5z|J90oR1{NsC0Jh=c~an1fv!B#4xl;w)*279!<@0GmO;2`QpQ z=`HDJo)C{zusNyli0D#vNvkA?OWtES*yIwCP@N_%@r3xsDwdN~&Ja(O{*@MKAud?K z$j=HFh!(}ar4izuP3%9}r~o z&zp1)(J{J+z?(Ecbd5fu;7wXU^p_%C%JG-9OaG z74j>;PK`Yys=OkaY~(!nIpTF%K+CjU!~^?tEBASDN6Cy2WTAI!rf`ca^nRQj&tpNy1r69MCkhRyMLw~_XFiO)ok?jF$eUs(Psq6 z$&jv-AX-_RJR>3}aq^sJ)E5WA7i=BA%ZR?*jcDV-L7Di)#mBYhfiuc0zwg$bj5hCx z5tk(oK196l7PMSDN6ZLH{GP%pnR886dg}+=%dGTXe_qccQpA$}-g@3=SzOPH771;M w33nEWkQi+lIs-XB!ssI2007*qoM6N<$f)k4O!vFvP literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR1.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR1.imageset/Contents.json new file mode 100644 index 0000000..553f10a --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR1.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanQR1@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "ScanQR1@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR1.imageset/ScanQR1@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR1.imageset/ScanQR1@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2b71ba48033feea45e9352d767cb62acff107f38 GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)Tse2M1DO>oUhW1`OeH~n z!T%YaZa44(@&r9y978G?lMk@{`2YXEy$1(_US(+D?1{e5fszcKu6{1-oD!M<25ubw literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR1.imageset/ScanQR1@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR1.imageset/ScanQR1@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..149a20c28559952f2be76f18b9a877a08d9ad339 GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDH3?y^UWFG-iYymzYuAIBsfy{~(FLwherjj7P z;QtIyw;Ol?c|x8pjv*C{$qI4?|JfP$T+v`oUhW1`OeH~n z!T%YaZa44(@&r9y978G?lMk@{`~Uxc;sgN(;e_0`?cw%6fRYTJu6{1-oD!M<6!smf literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR2.imageset/ScanQR2@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR2.imageset/ScanQR2@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..3c89e9a49810d70ff41240dcca63dc1dfb7cdbe3 GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDH3?y^UWFG-iYymzYuAIBsfy{~(FLwherjj7P z;QtIyw;Ol?c|x8pjv*C{$qI6R*c+KERt9o0gsXp8|N2+8F;JGl)78&qol`;+0PjZ| AoUhW1`OeH~n y!T%YaZa44(@&r9y978G?lOOyCf&|443=B7gLj%=3wzB~x89ZJ6T-G@yGywn-3LMb@ literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR3.imageset/ScanQR3@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR3.imageset/ScanQR3@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f4bffa66f248d73eb6dcb0fc85e66daff73cc67a GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDH3?y^UWFG-iYymzYuAIBsfy{~(FLwherjj7P z;QtIyw;Ol?c|x8pjv*C{$qE1XnSQJc?8;zZ$oqD2ZBPBJ_dr<&Pgg&ebxsLQ03J#m A{Qv*} literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR4.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR4.imageset/Contents.json new file mode 100644 index 0000000..81a53f6 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR4.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanQR4@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "ScanQR4@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR4.imageset/ScanQR4@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR4.imageset/ScanQR4@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ba0a96302b77a12d55b1be5f9b548ba822f7681 GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)T!A#_Zg%6x2@`-U#*!ev zUgTe~DWM4fbtf2f literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR4.imageset/ScanQR4@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQR4.imageset/ScanQR4@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a7ed6758524263629eae658c05aedef6ce24423f GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDH3?y^UWFG-iYymzYu0Wb|H@orUgb6?vV@Z%- zFoVOh8)-m}u&0Y-NCjgu19SDCD;i(rc{&y_RL#^g4m`j90#KU4)78&qol`;+0KMoN ARsaA1 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode.imageset/Contents.json new file mode 100644 index 0000000..6c378a2 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanQRCode@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "ScanQRCode@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode.imageset/ScanQRCode@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode.imageset/ScanQRCode@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2804b610f625c38b6f30671f629a473995e3d3a7 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^ZXnFa3?#iD6dVUqYymzYu0VRzrcDzRd$oZq#*!ev zUA z5!O!&@|IbO3v%=PZ#=g^ak|q7c}6~g2SK7Iu6#6<`+xY)4`)XCnRf!;X-uzUV5r=A VLw|AGp$?!O44$rjF6*2Ung9d&J~;pY literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode_HL.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode_HL.imageset/Contents.json new file mode 100644 index 0000000..31dc870 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode_HL.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanQRCode_HL@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "ScanQRCode_HL@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode_HL.imageset/ScanQRCode_HL@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode_HL.imageset/ScanQRCode_HL@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4db159efc459123a65521ea18f85deb21aa2d95f GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^ZXnFa3?#iD6dVUqYymzYu0Wb|H@orUgb6?vV@Z%- zFoVOh8)-m}kEe@cNCji^0=|TQ|NqPX|IcpEv5C*%gkl7b>8F-R_WueSf6SJjaOT%} z2DAPQF=yK|XI(aMFns%;@PWV6mBHYgu}A%fJ;xJ{Z1iAfFxz_W_JSCt3qW%jJYD@< J);T3K0RRAkH`4$B literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode_HL.imageset/ScanQRCode_HL@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanQRCode_HL.imageset/ScanQRCode_HL@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a5a3922b1b9dcd5be9e27defec68d74e8f3b474e GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^nIO!_3?!L-=2rqKwg8_HS0K%~o89_Fs2?mFFn@&-|15 z2dCM%t1-W_tH=bLdINj-kJR_gLgCNlpS3Vlb{XhKYhcl!6%sYYaG^W=vFjVfm Vp})B8PzTTs22WQ%mvv4FO#rA7J&OPU literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanStreet.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanStreet.imageset/Contents.json new file mode 100644 index 0000000..cd95480 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanStreet.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanStreet@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "ScanStreet@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanStreet.imageset/ScanStreet@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanStreet.imageset/ScanStreet@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d89969bebd55a43fc0fd95994c0f05d4eefb72b6 GIT binary patch literal 601 zcmV-f0;c_mP)BFajem0wXi9z{t}iFajemvNj2ftW5$VFc%-@klt~(YM3Z5I1I*A zbzb)Lyu;x6x!GXEi*vKviLJ@9R4fjF5VH^BK!ITR=@ClEZsFr*=8*3&m_t)KD<@D= zH~}AFa6k|L#Q|kqC;wn}xaDLV#Ij&wzQN#rIzpt9A0Xo3;TH^EAL}1s-^GW0fx&^g zp43_;7}a%bD1W`?r_%_!VKy1q8ue} z)osTI^$+*EX^c?5YFmK5JBoJcm)mU1_0Ae2n09@~Bs>RPJ@uwys@qH!Uk|gEk5By! nh@bSE*6|WI|ab`5|fx@50aU3R@cEKCNYUg zOkxs~n8YOBwlaxHOkxsG;!I)^lbFOLCNYUgOyZq5lbFOLKGpKN#3Uv$iAhXi(kde1 z2YS#-`?d1nf*c@W3N7AJk*>%*33q(OBAt=pA5j0qDUt5TC@HKS6C$TbxFkeQk?>4k z8(p)zik#%9AO*=!PIuKRBq{ZgTK)NOQFv*mgv+8olw^!F77e1oxStuc1eK{yr`AR4 zglommxmE=UPtmk&424&o6D=51Y376!M@)^*gk_wzCSeM-accA@EakT`2_ss0+!})k z%LQ#q!sl3!a)@qX$e^TcNntcBtp_LQg;Ytqc0A?k63#}b(ye>fo}^FOx=0P$4!kw< zw^VJf4N15bwF+&(JCo(7)oPoO@XNh9Dt~_x8D6EdG4fO>jmkwl#@{3ff8eENrO{ob zl?)ePt9leCqejv3B*)?n3pPgmmFPmq^itY3uqjbiyiW3q`i??NcIBS!^uWY4?J{~K zf&(dZ-!qn-pOniKCLIB~r<_*m`*-<@hYLIvsHG0{MOqO7?VxckbfrM*weXy)9Z~D_ zym;>nlu-wLBpn~HTP72{DUhCwkKaG=b%jT{n*nuS1< z(H;W7l?y@$fpcj*5nq=X$h|Vl8ye&`Me120(ls%VPGeG&6~-kAYHP>J((A zg=QsBOqjEJk~O=@mCQS-?vp(ieY3+4pbSAh54XrKiX*mVglGXXcu7vw2o4So4vyT6 Yf8wabFPDgzMgRZ+07*qoM6N<$f*04XK>z>% literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanStreet_HL.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanStreet_HL.imageset/Contents.json new file mode 100644 index 0000000..2f063c4 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanStreet_HL.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanStreet_HL@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "ScanStreet_HL@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanStreet_HL.imageset/ScanStreet_HL@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanStreet_HL.imageset/ScanStreet_HL@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6c1dd153512e7022fe53cc429c34308f790dd00 GIT binary patch literal 797 zcmV+&1LFLNP)Fy9^}n~Qc6CGl6cTw zXU5k>yokIh4vd`-m$df00v+H24DaNU;qYSaKHl?fB_gJUsNT40T_S*7=Qs7fWZL| zU;qYSa92WA0vLb+7=Y<6Fu$#*3r=X8E!$&<(x%__x4r`7Vtc63Cl)%a33$Autk3!Y4BZYr6_b&Y zgp!1#eR>m&n4c_W-+2D$mT5L#`}7_dF`t~!s)_v3e9~+V?bCB$La|$uK7=FTEEd|! zo~~=3z5~OaPK~p5_Sc?$Z*3lPwP(O+UU3ySr*5}YElsyV=Tgq~&3W416JXezOO1A& zw+E)YEz5RG$H0UVF65Z@SfPZ`BU zfBhT4#kA9Uy7AAsFYI|;D>ig&8^JsbrYiQdtJdym$g|LEEssuUN3vhBQk+q(R;M+c zFXqKu;idnzUTIW;P^3bpf|l^Tfdb1iWb?^U{)xWskJ&hrjbyRr0gX!E4gj%EPqFDFP11OZj<2C+Fo2&fXGo}GI)JJ33=-9VL4#XtoRGoj>e zkogcpz;{owL7-lU0x$!KjbsZ{3rIcC4Pa+rVMFW%ngH?$%!T;byV)bOTy6v7 ztiL44FPMRmiJ6U^lZ%^&mycgaSVUY>N?Jx%UO`b=MO{NvOIz2#$kfcj(#p=>(aF`# z-Pb=LBs?l6E+H{FB`Z58H@~2;xU9Ucv8lPGwWG7EySIPBu`&CsC_s{SwF>mI;$xV{H zKSHFu+u3FsN_<#qaz!P~ZKmog=a-ezEfY@aq@8#@N${9Zuh^{POJBO_cwbU_nVY#o zO43TV#NT_q(ZXi)c^8gPy4kelvA*VyZ|`FpH@sxbz4LLym%_af8kwzUR(#&S#Jv6Nx1yb&sz&$E5qNxj#_iHIE4E!x z%`Npj`@Z|UCmB9hGDaUPs7Z>Gzxb;7PtDG<%GY=HAH4E7`gX(I_!;MQazskc8=Tz} z&enN%!NRY)M*6awHo1KBWSUnZg3k|6+&Q%S_gv`-VRII6b9(H` zysFrD%kEU_=GxGt4c&PyPgmPIYwwl0@ww+_P&-3N%`)z)r6FA2&Tlh}GrqpIDVUZQ z)2yOrU#!cfnts7w{8-ZjACKT-?kT!g`Y-R?X?5b++s@5+5nQ;cSC~6+0^YE3Juz?q&)@+tF|IHgY|Bh5ap-G7 z-(v+W@CEu)D`Ql{skBThM_bt)Q@Ps+Lzw0*2t$~GU@*@k%xh!X_XyJi3=LqyP@1}8 z=qJQWV760+Q~$v*)-#NwHG1g=gR$@%7{+`7!Vtza2KcoX@E%|wzh58nXD}rSW+5># z@_g2Yfx|w!_uEHs2#XPVPY@w7=WL?)%qHnM7zUExeIW^l;q?=lXY(4v17WmKC+Zp5 z1CEP{wUHu6k3Has7!_*R-1awZ0msCM=FK&n@QpFNmd0!IiO~jZA&(W01CEE`kIpa$ z90{XBZRO;cEY$e9|Jf7({EP58iQGqp;R#GJlowtypG zRH(C0W6p|dYz{aEMur-`EZ^p}IpB!XLC2*EVF>e{7>vKssQO(OSYJFYYctZ=00000 LNkvXXu0mjftW~y+ literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanWord.imageset/ScanWord@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanWord.imageset/ScanWord@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b9949f66f97aca94d1fce238c13bc50c8fbd44cc GIT binary patch literal 756 zcmVCR8o``RpD#ds+6sy zVkc2n6Q{9JHg=M>4E@bi{3KuZ1`?!fkU#`V+zD7KdK*HPuNFae^B8l$k`|o)t$%vLjcg3$x(h)7m`{p?R8R_$otE4DL zwb&Ph)F>Ca)+JifXBp+Rt#!%iBGt5!YMMw1FFA!ks1(j3Cj6T+i6QUz5vm@n|;bAaL>@wm9Do1MM9cO_EFe zK9(L@kRJFwu3R#hL>GY^WxD$^b{x7emgH>&_B(Bp&r`mqw_zxWo@jy{PP6pdCQGk! zmSt&zp3EfW1B3H!hrxa~aOmaDB&7qLyy|e3aTVA*ZP7Hp;r|{15=bC{G;E}Vml(!E mN_HV=9Fg#HT?7I#VEh5~{6B?VL7Bb)0000e02PY8i<>cPat$kIS zb2mHp9uBVE>|A?+BnL=#A19E(zlVc+H>b!E5ugH~`iB1vKm|Y%&OPir2YI-6bBF#9 z<=z9*3sf+*wptWuv`k5mUogY-C1w(AKchd?pEzmWpcKXX32sQ0(A^?Gm}_%O!hKbIjO2rwJ){rq~3R zdanB3^UU~lU!d}_-wRS)kBdaAB+toxG{dOeC(g|<>42+5^Q|i;EzkDxWN|k>OYC_i z@BP0aM4_+mz=z~W;)pHc#< zHwgx*w)LgK0{1z^dd;^&_|LrTdFI2mRlg%R{^FeD3%;FADmO_t?D;#-ljrl| c+=bN)^~KLVs=55Q2@C`VPgg&ebxsLQ03U3*k^lez literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanWord_HL.imageset/ScanWord_HL@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanWord_HL.imageset/ScanWord_HL@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..d41332b548383fcb6b0447878524a1b43674165f GIT binary patch literal 830 zcmeAS@N?(olHy`uVBq!ia0vp^nIO!;3?%tt{&E1R8v#Bcu0Wb|4?EXx4$j>i+E=wf z3?O$82iG1hAe(D17x#W{<1@ybyV<$+0@Z+|gbs3Y?P2HK!wFQ$cZ?6Hk!KHw!+r-K zrv4=2zxupt}`{~LgYa|10p0rQap!vfNFU6@B(e*+QZ4c z8>9?m;BNM$ph@jOzqywL`2{m{K5J)t`sqx-bRz@Sul0YQ$X?0+C$!X&gbHEJn3oA3oa<{jd;V}|4Zv5m*@uJ$SF~C=dGVv7|6iDc+S(s zF{C2y?TzsKLk1G9iR|i)8@|uGTm63T-~ayuFK%q%@D)A!V|CP5>+ly-m#UjPqQrr%^w!yUBv8Ahjgz)-DPei35jN?xSF7QYLPfu#rQ7Fx(feYzNVWUF{%WWEsZp!W@r86Q zz2&p&qF3`VpDZ4arO)m(s;#`zG_n24qA6Cf66+`Il66|iue7{q!LO1_1uTjIj7u&~ z@R`LB@p0;YrYtA5wT@Bq+e$sMLoOXtTe3FuM$?v^jw+%TH*-V=xJs=IalG$-qdi1( zq6hnlcDtr}j#mvXrxfJ1_a=Kta=l#AJBM$t-xhxk70pFzZ@s^M_ISA`FLsx}#oZh9 zV(XM+Z%tdbPO!LGv%RP`HFDR*!fL(T*Col3yPQwIKezO*&8@kynf}{-j)X_PiJV%s z%eM8=hVhwv mA>OnK>nwxA()aC6?x{z_SjKXyEA0R#76wmOKbLh*2~7Zw^iMYc literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/Scantv.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/Scantv.imageset/Contents.json new file mode 100644 index 0000000..4cb44d4 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/Scantv.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Scantv@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/Scantv.imageset/Scantv@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/Scantv.imageset/Scantv@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ffdf87b20550afe4e8dd628b27506d6f233c5a05 GIT binary patch literal 1335 zcmV-71<3k|P)YVjNi-CZSgfdxu_l(Zc-Q8pPzq97Tl6M3g2f6J zTVfIKi>0w`A}5eY8bYiwNU@DMplwK0)Ya`Ko1NL++1Z)5UW5df-I$HbtcT`vwR1H; zW}o+Y-g$@rXUmpJfQ$#knI?(jlh{Vd??|iRQaIyX!?jAcWN*ojCsd$HugZDLx6}*xUfJuVr zIL}WNfaJlapb7v8atD2ORXJjI75PB`fHHq;9i8Nr`#5TIIiLdovcfzSe-ek4kz|g{ zJcR&G3!r2UBctLp6**&=!c#ynPf!Tr*?BV0?BA5d*3Z!}c@mYt;4wJ*P0vkIcz^z+ ztconAf_uLtj6u;oP8fuRF8>nOOh$!!hPO9P1w^hJ0v)d!2)WQc$}eH%TI6easoVNQ5Nr+Wo@W zsa?6#7eEj_-It01Kq_{+mngy)sN4zQSj~W3(Z20aCyDzHZeLlu4dC|3{Rbp)wQrLv zgtMC~L3J}8Od`WQ0C1&;2qvEDX5swisi|Wh3AF6P>?Wzy4E#FXx*a|9o?g7NUdv% zYYP+x*PAUAks$QZ2|^?&dUWk7R2Wt@;=^V}4>5zlw`vanINN7txnDV0b8>(LNn|`9 zZ*W(O!o9=^>Ra$2VI$$$)GSyWg~jtz0{B^k6}veB7`R#a=y(3Z3=IH)!IP<#L)Vy< zM3DEINw9c=#J}Oie>seeiPKE%%mti6+rEP;{5V4=h(-!ThNW$yGtL84oMECdMGqD8++JZd3xj$C$HY_E0h>HVLK)a*wcrL6{_A zyr{^ze=ExUP%@2;Nt`GehJr-`6KzRfZ%Y8k^-wbF*INa!pQ88bX;%@Z@_#4|5-t=} zTu5Y7f?uR>zp@cnn53`}WFajO)7y2lxJ~l0AcJ{s79wKNvrR{clgd4ehw_UPmP#JU z@i*2JCXxFVLZ)cqd)pvyY-92~MaWC38JlF=DSn_77ZOiPU@^^IlGsZLlOoC;BDuH1 t1)5uwD5<4{v4~?5$;Wd^TTRPy_79~Q_B6JvCC~r>002ovPDHLkV1g{^a7_RJ literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/Scantv_HL.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/Scantv_HL.imageset/Contents.json new file mode 100644 index 0000000..7eee029 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/Scantv_HL.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Scantv_HL@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/Scantv_HL.imageset/Scantv_HL@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/Scantv_HL.imageset/Scantv_HL@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..82c830ffff9dcb19b48d46daf12fa444cfa91dd5 GIT binary patch literal 2098 zcmZWq2~d;Q7LEZSf-DLMf&oDi$R-Jp03nYp3CL0iS=bUufR@!tH6WC*DdGkKRf5PS z-~$z_h!zO4gjGReU2tWq;kQ1 zFqoG24h9?iJy$=3%Bp?4u>}T$FSGo(OyK_iL1^iG394zVR`_yMRM&o`Fs+RShNkAg zHL*bH7#M!xX4W_}4Bi4qM53&XwptjQTbfu}nd5B$P&T#}1fn_4#sX(UaB=}Iu-3K| zfGt)SAVU+$mNvFutR=w~#J^e+;Ao=#KL8pMz;>!Du;w@dnnVE|O|5aJ7`z#d07?Ol zv30~!s3;-{??3~&p!@0s)F>5AY9nM3cxsW`VZ> zN+1K`)ycoQAo9OK3p^35W=U8b46FcFLlFV&Q6vhQWDiP#;?}l~*7mE7zyPZqom{bG zCoGu?=EOSCu#T=cuVCDc5In^h?*Krkqgx$-+ z9!S)&BVyX00>FKia@-sDcmm9A(x5}=!D{kL?GB*G2-TU_o z3k!=MM?*(H!CxXlzDKMjay%RGJF>2Z?k<#EV|3 z^V1J)Ts^(yn8?WWvq=#jRQv>OBf027I9!DeAJUbJuFwZE_bcwQs56qe%q@nEb{&tG zUioUS)4WsvYN$ zbWI7Y^vObIORtrVOber){rvM$m6Pe$p0a+^X3X8Y(a%XY6G{YGPvy>^b8eR5`)ca; z->BJ^QCmUPq{pW^vAtaGFVE+VR0Yf=wu~A2!AUxYV7l8{9~mlwB2}{i+?H+MAW_;V zeHiMK$9w^{-yWtl(daN4h?EeKE7h|3o-0+~%wwS@HAPtF&OK|Me7gFUlP+v|mKw}? zt88%`n#-DOjyZQHBIvK0B8ltlu!iAQ1VUF=@Azd4zavJS#FQGr#GDDbyy4~V0fiaecbCt;honhL36=Q!=(=ACC=cxEX^JF?O?+MP*dx~1e^ z**D!-GNO!X5O7XcdZ^wC(A09%tVWM@X_>42>@=C*VHMxjH$BXY$#H1V_tKe;hrd1M z`A4?HZ2Z{ne51j(<~@qkw5i9}?lgKC$TKgur6{&$^-6-9q7~;hEcIVYd*vBfx#-&X zN7DUG`?0g3nFq7$rIllu;;zw^ph|gL#`ZCdVxgr`?SHhTHa9v;8;0Y(PFN%K>ZWol zz5m?%&=+P?l0=QlE5H~r!=l8$zxHs^-dZILAy3~3Lk?W7J7FA#g)AN*;=?YjyO?xo z7dD&s?p9fBGX>wwwKX1a6YniKm1ms2a&a)msvLe#IKSx7d$q z&x_b_gaB(vB^NEuE2MjWyw0s%uuHy~h^fopqW@-G(ZaXdUL|Y(9vzc%d#dOW{qPgFO728 zKJc}6%(T?(Tp#q8$WbpoYkyH zPi4mrRvDfQk7`g>dOt8-;yv5YUg{=;b3fDul)~L*wVmX}A=SBQgKc#QsgvUu_3rUi z?s_m1D2e0aXqSNXuoop8Um6R;X#GC(YefBJowEK@0r$iKSKSX>e?R={yXak`QY2EN zHEm=KaUof@Uz~D5B>sLn(MW-i5ISw&z>MnWdcy_Bign9Q?qjaUFXX}#ACSlIei~u) zyQ>l(lavI6@vqA6-ICZSVV$ zr=FdLDb4B68@h(2o$no*uljb_8QBrEJ88x1xn2~l9d{pgKez6fMsCCn-NMZqg3go_ m)Uu4O7)9aPoP^%9I0&})R<7`N0Bd6PJ@;n%GcJ3G4*U&swr^tq literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanwithoutCommodityIcon.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/ScanwithoutCommodityIcon.imageset/Contents.json new file mode 100644 index 0000000..46247ea --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/ScanwithoutCommodityIcon.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ScanwithoutCommodityIcon@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/ScanwithoutCommodityIcon.imageset/ScanwithoutCommodityIcon@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/ScanwithoutCommodityIcon.imageset/ScanwithoutCommodityIcon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9ea62e283c455d9bbb63984ef96b5e6847419aee GIT binary patch literal 980 zcmeAS@N?(olHy`uVBq!ia0vp^CqS43NHBC5e{^DCV4m&i;uuoF`1a1lq9zNG_K&sy zk9P;&TG_=Bnh>z^s@U3sZ%ww61#|SW+JvqCzuzamKT}0O=wD#HiUR{9ivTWS!hUWf z*(0;t3wPaoy4zQ({qji##asUTs#|x<1jX}nEjnE5x_$Mxg>qae^QM1^PJPGEU=&q% z`G2^J@^Qt7ox4i8V%vQ7uc(d>4p*#l{=W61pVK|AUGM(v^u2b`D8lV^O7)+Gue;3I z72k_)-Ic<<_ExX>&DN;U_v;)>{MK%3+!ecFY1qy(E+fmJ#YVFK)B2*5-&hoKJQ6)? zD4PAX+A6Pa!=YlfN2coid#^v$|8`dMXfcbC=7|utRnd-~%aR_kxX7RU@^jIyZ=XDu zEiPl6G+8t3yU661hZ#@I@_GN=&o(8h+j&{&<&PVd%;I$Z(z(OqZoJDK&(lt3N7i0Z zUfXfI!)aM;{d3v6kHMZNrq5)%x_IWwkI@1`vnnqH_dlCC(@>a2Ko!G1|j+~zg0+fUt7lsn&c%Fjl8JVxVow|1oia4(xt#uBX%^lSHbmNwMk86pBuP3UmTa$mH@71(v3N_rjUQ16h zf4@cNUT*CJ`$zxsS;BRHR=Omm-9K^u&5rAn_WwTmx#Nbg(!85b!vi<0Yn|%$b8GyX zW2g7YAC%T^Ebma?bMZZyN8fp3rC|&WB;5TYv4WeD$_HDwKV- z(8=PCnZBJbPF~3F)M%M~w=`_~zP+0?CtBFn@`Phi@K0X6#0JHQ|DQFp zc0LHVIOS}V>{{Nb(o#LsU3Oo0lJg;fiEq3m9!*l&$S*i)&#m?o9@oAp8cn)l=i(-G ztG&ZR?{T7YM9|r*2NbndcD#7B`k?cb*IK;Cf3VGc%*e!{(7-?{@t;X{-Lb6;E6?u$ OWmivEKbLh*2~7a(hPbl; literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppCardNodeBkg.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppCardNodeBkg.imageset/Contents.json new file mode 100644 index 0000000..5dd5dad --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppCardNodeBkg.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "SenderAppCardNodeBkg@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppCardNodeBkg.imageset/SenderAppCardNodeBkg@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppCardNodeBkg.imageset/SenderAppCardNodeBkg@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d2ad02086942f8c4681a498db23730eec2fc31e7 GIT binary patch literal 709 zcmeAS@N?(olHy`uVBq!ia0vp^EkK;Z!2%>1qb?n0U|{O;ba4!+V0?S$d{(fp%(0J7 zrk9ppI{SK2oTGSL`|7OKPDkhJ?cu!s@{;`nQIR9}oWHM=Td1I~uD0^pu@|?u%-pl~ zZRX_l3F<87K^Be@&wtw9USoG=&g7ZQ=Y6hztgw;0x@A%6-s=u36NR^KS+{#t=CegR zPxR-l*0_<{&+H`h@^bQYCef%_Vn^1zVvTj0^fG9{uC(Qhf%(Tu4Hi7<2^5kHGExw* zSkU?Es^YZn69!6qC0)CibisGPXg7#aX3Vy#>+LqWlGu4*FuqJ(K@%X2y$dkz7EOAJn&7cLr zJR;vz(XN-y$Jls4Y*!)&ll+CnZxs1BYn*dqPfIJU>olucU2oL>!%tyD@3#{D^o||2 zO!1iuu1B4aVCv(v|12o`a^%y@dZ=+Chi^XJ>ndl58k{rSZw+bphnpH2TOzT3OeZ0n4#3s?JdZ{6}F*`jKh z<!1sJtcZ}f!hOy);HZIUQE?5?rRCG z3oE>NZvDpZt5%1+-zT_$6ebJi$rr9)uLwmW!~>T;{AJGxc*z|^hnoc zKHFcMS1rmi7C4nJ3wbONe0i1Gl_1SY9xJDrZHZcV!+1V=SR)0y3zNV({*z8+%3^69 R62Roi;OXk;vd$@?2>_UsI8*=t literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppCardNodeBkg_HL.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppCardNodeBkg_HL.imageset/Contents.json new file mode 100644 index 0000000..e18d9da --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppCardNodeBkg_HL.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "SenderAppCardNodeBkg_HL@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppCardNodeBkg_HL.imageset/SenderAppCardNodeBkg_HL@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppCardNodeBkg_HL.imageset/SenderAppCardNodeBkg_HL@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f8f8809539ad98fe5dd3650c0a077a1bc7634500 GIT binary patch literal 742 zcmeAS@N?(olHy`uVBq!ia0vp^EkK;Z!2%>1qb?n0U|?G7>EaktaqI1!{dt!IBv?Oq zxw33*nvu|8p76jig26OEvxApyUX!WpPvws+t{pB(FTT%Q+2<|rGdSY|Z)QN!Zf@sR z2Zg2!i5r|7mWFI|xc+_4Z#Mh8)w%bx=Pp%kOPnz$Gi=MM*G5zPnY54jEZem%eD+i) z$vvm7zFj=Z=Om%+*1@>z!@}gfAp%bMk+1E3O=I|D`Rl{NulI@=1)}&jRT>;&2|g0m z!y(MGd8eSm>z$G*N6$+nsa)%|So}dz+j6_dO>c46q_-a89dDlAGTZxFH#`0C`^}43 z*FKGu=+)!77jUM(WdtTJ0BVx`SbIm(5Je`EsF&{|9xo6e|^$}_ z|0@Mq%fpAG@nNhPpOmvkpxY5`Xv3An_sMb{L z$a!+fe=qHsz9y>ANpJ15^%>FJoBsQ>%~061ZqZqVhIOLBx61E-y0ovlb;`G;y`@%p z3%eUrP5X3T+}OP-BxRQ9T2JR?Mw^%42$qV{-f?4cqC^`C`WIZsFzxMK{q%DQJAvt! N!PC{xWt~$(69BkxO(_5X literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppNodeBkg.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppNodeBkg.imageset/Contents.json new file mode 100644 index 0000000..a88e7a2 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppNodeBkg.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "SenderAppNodeBkg@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "SenderAppNodeBkg@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppNodeBkg.imageset/SenderAppNodeBkg@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppNodeBkg.imageset/SenderAppNodeBkg@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c0cf6dcdd7237bad4a90311a7ddf6ea5f8fb5e49 GIT binary patch literal 1268 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 W0Sy{Tr|6mB!bz+|m~n%iq5KayhJ0)Q literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppNodeBkg_HL.imageset/SenderAppNodeBkg_HL@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/SenderAppNodeBkg_HL.imageset/SenderAppNodeBkg_HL@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..4822a7062d9a2a2ea214437a01ba9f6fe0b83c81 GIT binary patch literal 2192 zcmZWpX;_n277hZzu?R)&5Xz`jtqMLC2qTQ5ZDo;c-xd+10>dK6B8v$G(h!XyB4}I~ zs0MIchzlYjNJ1nM5<^VF4$4|Ug1am#qYhiexq+Eqljoe9_ug~wx#zy;eZCwN_FKB- z+a)+0ZYi1MLkIs_;Khqg!MNGMYb_3EibHAszR5Buv5Gct)FdOICP|HBTp2m;HhCeG zB%!6$qKEFm%=-wV1_l7wJb;Wq4ud0L%9O*2cd3l|ZHHvgf`L4V5^8ca4P*nM|^6;6y1cNdhHRLmd4cfDs2qXkiU`8PO?-bw#GloFflKE04)YLi@Ou0<~ z#VC7Jav9<+ZyiNwim6L&`)?r3dpx_`F7hW27n-qJC1aM5LA1F1hj1*f& z`rjTbRf(}wbY?9AfbrDAL6EJClq{tkte}D;U=d7>8|DqHfD9?dTQD%jm6M{b`GQ+m zDioB;@BC#xihwBSNJbsRse^bbh$W{TRwH~ZdbA#9*FwM6!6%wfwgNh$gbphqt_l%o zkt1rDA)~SGLtG`CsYQ76gjLJEK9G25-TWKT7;uSvb6B&HjMiKNs&^I>rtkZn$w7;D?mwbniA#KqbHiN zlg-#+C5@}W^4j+*`Y*N{9%R&G8ERD6jOH|B!_NnK51=#!ENnrWhva~H(D9rG1Q5cK zQ3ZOyHYV;$De2~@2Cf~t2W9H8g_@#50FHB zIhiR(0P{eB`X^Oq+Az?^&S5>E7xWbLH~uy`r4~6@K>-Q`@&l>>>IE8zFQ1pp#bqDR8oy?t;2eU+s?LOFJ8Pb?YUO~8o*DX!@JkL+A*8?#%pdgq&oQV_cLCv z`EPb~%t<$G2;NZSJUhPP?Fh6xxx_nf%jZWiKQEdaT~_vw^JULZ{K4UWTH^oRj8kpl z5|h7cp5rI8zjLbW^c5A1k2Q!Is|qhH8(Wrj{OxE+)rC;2tgM2uMv(=6jNU{)-#9Zf zHa!z+K{qus9bGnp`^L?_5r;EVkbQRgr~f`a7{#;?T)`X8FPQ&rZEm)Vo^^M0bK6~V zG%L>??cef{+t7S3-^(bC8ihMDj=Ha+cWf_Q%T;P?GWxAifj?);!*gWsHv{()mIN(jC& zxVD*aGuHlcRkB5vy1fq%**oe8Q4sceEB)Qj=c0&(F)*jeyuCvn{>M{(VccsmFp z0oR=U4GTP;j|JLh3cCZY0+0AQlb|@z*}W#Jvs>#RzG~(uzUm|BXy@g3wEt`wWVgzi zo~2v6;~9dR>T?UAplrFl$SSQky2fJ*)a8(qpA31tLYwP(dj*Q-EOca z)eHa5*=1k2^dkH4qc6k@aI5OiBE^LK@w6sy88KbS>(kl6ub!Qu=nXpqhrSpxrgAy= zBh40FI9ll<;!Y+wyf=KFY-luy=U((2RhimS^@ctCzQ7@~A8Iy|1MsVDbe>05=A7{T z2blP$!D0XIpY5}q^YHH3YMRQS={Pf~{~}JAvjdf(47`YYeQ4trQ~8X)@{Mbb9m{2( zbXQMOG@UqgYCH3G`B1WF-Z_&HZpo!u*Z_8qh#O0tvXr0q^>2+eT-< z#*NOl;Sz~Mltco=gGF_AIsn%=h%0Rz#g(~)yTlddj^3CLfw|(UeQy5NHNsfR`o_=x z1&x2T(XM;QXY3RC7OYdJQ`q(|-d4-1M&C#SN_FW z9p>G&U9fNcht4asY}eOesW$R|UV1ZP*coBT$}WBB(61^KmmX5jCR>zH8R&R@OHi>@ zm|CcrD=oB2rv!G*$7xpRl3giC=8;LEJ literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderImageNodeBorder.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/SenderImageNodeBorder.imageset/Contents.json new file mode 100644 index 0000000..77494e6 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/SenderImageNodeBorder.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "SenderImageNodeBorder@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "SenderImageNodeBorder@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderImageNodeBorder.imageset/SenderImageNodeBorder@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/SenderImageNodeBorder.imageset/SenderImageNodeBorder@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..dd51d889ce2bf4df54336e485dbbba2ed781a7bf GIT binary patch literal 655 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 NvYxJfF6*2UngHYp$Bh60 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkg.imageset/SenderTextNodeBkg@2x~ipad.png b/SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkg.imageset/SenderTextNodeBkg@2x~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..b19087cc1757522a34bd31b9dcff3e599444fb40 GIT binary patch literal 1743 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkgHL.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkgHL.imageset/Contents.json new file mode 100644 index 0000000..8d257af --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkgHL.imageset/Contents.json @@ -0,0 +1,31 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "1x" + }, + { + "idiom" : "iphone", + "filename" : "SenderTextNodeBkgHL@2x.png", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "filename" : "SenderTextNodeBkgHL@3x.png", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "filename" : "SenderTextNodeBkgHL@2x~ipad.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkgHL.imageset/SenderTextNodeBkgHL@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkgHL.imageset/SenderTextNodeBkgHL@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7cda6d484d53ce47dd11cf78a7adcbb126dbf1cf GIT binary patch literal 1100 zcmeAS@N?(olHy`uVBq!ia0vp^EkK;Z!3HE(2TOS{Ft7-Fx;TbZ+#;ne={%MqQb?vsg6A)62UhPs&^Eoa z=BP-SDlg?0JgLMPxg#)8WcifK-)$$Z%icC!cl}*AE zj(4=2F5muqb@8=Iaq&Kx&t5IX^`&noa(91W(!aZG%eRG}^Ew4H`QtbiiW~0|nHALB z6cZp+^6yr2wWL7x7)uh+-qUw(q^mNee;I+ zL*ZNQg^D)sygF8Pih6zEeCZtCnd$z#{mro_TB<)!g#5xpX=4&KM1s@l;Fr2>OySw*~a?l?w_VfLMOi|lcTzVR;=mIn|X5;Fk+>yF= zwd{(QHp)NAOIji~qeiuuN%4SD%=s5uA7z~yB%}FyzWmHsFz4R)Yfd~0N7hvcnr)Jh zc=>5xfkU-xhlCL4V(+jP^-aD{-2T0}vwE(Q3yPwEUY{N;G4+Uj-d z$#Y{_4o0!Nr~J>z_$aYNY!QFUuE?NxKwFXTc-;>>rM(I)2>6Cgu?VOQ8hyYhZ1}%k zAhqSg#287C9(TogQ>8>62w&VL;2Z8_v!`bI{dZqFJzqLk-7NU3mz?!S&3@toVevdx zts`5s6|4NN|5$fPy)7&AFVFuS!irVt`+T~3qs7A`RBIf7X|QgF?T^N9kF%z}xE9)U zcxkj()3*h+Dl+c#BjPNBpVzzYaCyGoR;A{|g}sZbpCqlD7v&+jt^ZrT@bWCpsSjs; zoA5#NZ}H0YPYzuxc_}sh^16GI+<3iidn!3TU-kK_z`Y#1!f?14#gHwPQ*%VvHZ^zEjekW$=AJxz*2(2)78&qol`;+ E03>PS)c^nh literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkgHL.imageset/SenderTextNodeBkgHL@2x~ipad.png b/SDAutoLayoutDemo/Images/Home.xcassets/SenderTextNodeBkgHL.imageset/SenderTextNodeBkgHL@2x~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..7cb81cd39421c2a342fb4aef4ef00dbddaf5b372 GIT binary patch literal 1688 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeBack.imageset/SenderVoiceNodeBack@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeBack.imageset/SenderVoiceNodeBack@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..344d773560ff23dd9f97cf83c42b5e8112f8a6b2 GIT binary patch literal 1761 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeBkgforwardHL.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeBkgforwardHL.imageset/Contents.json new file mode 100644 index 0000000..00ca507 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeBkgforwardHL.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "SenderVoiceNodeBkgforwardHL@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeBkgforwardHL.imageset/SenderVoiceNodeBkgforwardHL@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeBkgforwardHL.imageset/SenderVoiceNodeBkgforwardHL@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4dce68cefa859f9903067d717b24e3b00c534ba3 GIT binary patch literal 1692 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 uOtkpB!CgVroPPkH_+@7R literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeDownloading.imageset/SenderVoiceNodeDownloading@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodeDownloading.imageset/SenderVoiceNodeDownloading@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..93e1b5d43249e0cdc4730a1c286108cd454d131b GIT binary patch literal 1439 zcmZ8gdo)ye93R=4BMH%iI`}S*Ah0%E^154=`~Kfy*#!wXpuy* zh!`ouV8+}Tk0Fd1J01yZ74v2WgVCy{_FI4KAA8Qdzx#cBzTeO1`@Q$x3=BAEVrXHA zLZM82eY}F<`3&xI1ARChtURqzD82qbzff;*d*+(@R4s5ar1#mf%6f4jOIAS_7dA;A z^v*R4)a(xB6Na>yA-T_0R`b=&7TF)Ys+K+#ldGuiRW*0a*0E&e{pwbM8tIy)*UjW{ zl{BWj3<@DzFTUF#xyP1Q(PnZW$W_o9rA2IcWt)Q5p{xTIzKYpBM+f#+`9oj?WY-+M zQ~9(*`4})vSy_Xmh&G)Ayj*2XqqG=!L0*&e0ivjCk(SaWg^0Wgnt&?WbT&}K6wn!9 zU9iH^GqofGjM#;xP+7-1>+aSL8bfy6C(BYHFN|*~=AZ?PC0IY5%7sNmc zSfG%jcmxVr@^a_~Isw_HsD&&T{i@amNg>P*8ekTfTC|9aYdOP9$e#8Eguns^<`JQqGrEk7X*sY`p_)CcL4@)%MApkmQ8xvTS!KGc7DZI0;Oey*`YimY zRz@m+^(MsGCt{G|f{Sb-(pEwePoFZCdOC)+rsU`vzVCND_SV1@vurr+e%AM~OGa{Txr= znvXl?dEZy^HwI1KR2+`nbLh<`w_D3W467#*=OPaz_VJPp!p$~UeqKu$SjVFk~5DV$QpE8Rd+xsa_ zNW}|c$a+!q!^~@%9(NTchb^Q?%|V?wR2%Vu4TMXO}&55hox`2^DXp*=1`e7soU zQX1=EtCiHO8J|q{_>MD{9H)O9y>C~ z2p0E1V8?+&YVHYpp6&9t=SxX3VAPFFT_HSV2yEA)rY`95413*@V(j_bTnIx;B}QA5 z$NxS_`YG9iU(tEySq>v#yfJ;6y2Ez2KWTFU@v>v@D-m%UHNoaU@CDMA&g0}g4$^{< zN9p6#e=>j3CA47^h_Xu3Utgt_8Oy`z>Qrn7aVWUNZMWYsL4UJRX?l(EL5;KlTSY90 zTgJtbtnH?Y2&EeT=q-*hX%Z6?GQlTb^9^O##2AlAF=WE7kE{H&GFan(W(3)uoWJRo z6E75l3c{cuLlqJ&`kXD!Z}r~4;*K*{5;C@V=5D$cYf0YFUV4F)dCk@3? zLpz;4x}D9l3?A^UyqBE#X<^bYZ@@7C)*8iTIJw)$W969xMenory@UDxI7 zZ*E+WN&4bfR872{n;lvt-^HLUq8_i`j&7T@-0)bRV&}!xGQ!qn*+pII+Bp#!6|Bam nd+wdBajenV!B_kLD_4hhy%0sUJtINGuZi;Y4)A*78FT$#JewV< literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying.imageset/Contents.json new file mode 100644 index 0000000..919ba42 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "SenderVoiceNodePlaying@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "SenderVoiceNodePlaying@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying.imageset/SenderVoiceNodePlaying@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying.imageset/SenderVoiceNodePlaying@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8d11bcaaae740b2a139d97c8bc034e8798511450 GIT binary patch literal 640 zcmV-`0)PF9P)&F` zC(0sANg_qc*E@MP+x!ovuKr!OR_;CB2Yc#wbp3YS|Mz~j>v``d^p9(DO|D{nSsE+= zp>gp)AI^g|7=WX$1J~ugG}~!Zrea6HVV3oV&uA263uyp>Q)`t&LlpqQ(t__enVS zlzNr=lx_Wrv(&hzIALO1(+* z(OSUNh%@k=aOz6^D)q_Pe3E<@javrirf^;=^%4bq1QNCaJ`|06hT&SK0E?-<5Om2o zVk_V|YP?l(mV&-;jw#MX>T}Xoz-`p{g2B5joX;Rd_1T~`tbYW{Z3RryA?b@@j%}nr zIKRE2DvT@r-4pVbiO8ALUKc3wX3^yAt}09lbZnANcOal%K#Oi5!8b{wuLW+yd3Nh zHn|KTS53alns6(5C1+}K&xr6QA(KZk-)#v`B?Y|ET`ow^eg^_!3AB*!8?+@{Ag@8n zK9bujWJ-lz{oI!DAyUAG5Qmh0Fj;6{@5y&{gT=OluahETA=Z7J@cCsz``T!8mwu`! zqE~bNO(&OlgTB*D}~G_z69(F ze^V4vFK6g_j0>4A#pkb#h45EJAq|>LP6*)+#pkQWLbzE`NQ)*joe1Z#3~5QPtP7Lr zWS7CEp>LF%)gVzz~=Ng-Jw-VCWN9U*VU9oxd?q>v>c4lL5HyAUJ@hiwY4lh4GI z66t73cq>dqvuz2_B1POXxMlT^@(;BWBnWG5-iO;21+*KCS8GOjJq$pDA~OtfYzp5L zPfncT5CecX=uZ0lRof$;t)y^WApvL%G2)pID#2~A3k0@>GeNha@E$Ntlg-x;5Zs(g zSCPVx8Dt-jUcSm*VSXX#1d|NrTfY?9mu?7iYKe5E;XW{&l>6wqFdOLoHEbJal5%D4 z2y>nYQ^iz+{1$MY3;~@Kj)MUrT~0FN{x=@ygkgD+kHVSYgYYlVMdMqTx2ZlN{n|fa z{m&S(d=zH?Quzr|eHD%=MyzGN|6Y0yI1Vm?LPvLL|A~bCCldCbf81Vtmqy7rxBvhE M07*qoM6N<$g5@%dbN~PV literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying001.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying001.imageset/Contents.json new file mode 100644 index 0000000..2b87f16 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying001.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "SenderVoiceNodePlaying001@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "SenderVoiceNodePlaying001@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying001.imageset/SenderVoiceNodePlaying001@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying001.imageset/SenderVoiceNodePlaying001@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bae4128911b7219334724fe4a5c96d228255e643 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU0wmSG7d!(}-JULvAs)PM4{qdTWRz%os4srK zpp}tl!6JiJuhTLr(*m+}6cbqkgHNhj^)iYqs(AY8ILr6YPxk#&g1qcXW^7(Cg_~W< zz0%gTe~DWM4f2=_|# literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying001.imageset/SenderVoiceNodePlaying001@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying001.imageset/SenderVoiceNodePlaying001@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4858622d8e7010f07b43d1063bbca699631e0db GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw0wgDV75oXL4tTmahD30_J-E=TIgz3D;pgTJ z-VzZ!n-q*^?q%$b70_9&cKBA_fsCNpoANexDcst&#r_6sWNgTDZ6*2p^{nhIpKXF% zfZ&hwml+1nJB2F^ms(8a{~eNFl-SIAb$X1%#jhItQczCZqe``mYt@8cmQ68{^ER4LQ0c(8z(QyduJ9W$@i(MAPxLRzh37E`C7 z2x+F7A)_!{VkYHrfODu2j9|{?QRG)v&0`far3fi%m^)Hx9;Z03bST0E=7V8{;0fnU z9-EkwLXg62$)kevMwdd6!>q}phI6G*eB+emag9?~DDH7~<*|<$QW%bKZsf6qxu8=a zC}DaPp@%QbvO>^D17}4Z+n9BQ;TY$coFe481s>^F7{)Lg^2jhqR^iygX)vyM(9HwR oj^e^7FMLu|e8^K!BJn5u0D@UP!QyiG`~Uy|07*qoM6N<$g7cA;jQ{`u literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying002.imageset/SenderVoiceNodePlaying002@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying002.imageset/SenderVoiceNodePlaying002@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..4eaad525a16813f5c830e018d7a0703c4d9872e9 GIT binary patch literal 461 zcmV;;0W$uHP)y!cBl;6{K9oq1`V%qKN(jU%;0()Q5g*J6}O;(7ISoX!$sxeEN+#S0-j*5DH|_w zQwo^GeN!$*=wX&=G{6v_a2v|SW!$U+E)l&_E}mk#3~PXf72G-pl#5l&k^&}hJx(eY z+t|R&D_{kmn^wRJOqbot#yIYv0={6Dl#dBqTLIrOca@JZTw4KanET4dF5IL7 zRxt0Bk0JhGrWNoU(_>Wm_=uTTzzy6Z<>LWnNdfzbt}7cem@dN#_<;M%9_3;uUCgWk z&Ji6~HWo3ARboR8>_~ReAmaPim&u;gV{T00000NkvXXu0mjf DI)=qR literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying003.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying003.imageset/Contents.json new file mode 100644 index 0000000..1f22dfb --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying003.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "SenderVoiceNodePlaying003@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "SenderVoiceNodePlaying003@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying003.imageset/SenderVoiceNodePlaying003@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/SenderVoiceNodePlaying003.imageset/SenderVoiceNodePlaying003@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..abe498f07c6c2cab48efe9952bde2fb82465dc8b GIT binary patch literal 544 zcmV+*0^j|KP)Xz70s|Iyb=TJ|rptX6!;Qv@z39^_fTnWsVZ zV>3m}gz85#(5*hC3)MggaJMIQ~S9*;1?B;;`lb6nM;12e~ZdF1$o zIiYHC6LVP}3C1u_XjFAbF^f~8T^`3U1zJ@`BS$z&lcI3|Go*mmn7lk5;0!AoS1>2# zu>`9Wb4X<*nZityR207B%qZX~&MeI;V;^Ro?TSJMGopacIM3uU zfaz8=+A)LjNMf$bV+^NATG7a12IP^!^vYuj=Zz}CTFh+)EaLRZV;rZTN|3<}Dc}Rn zU3uKcbf^;iz?oFQL!5W==)#QBqG-ItStKQoZp=EBv4#@nyrOXpvtJ$?Si-p|k6V~a zipD|A4Fx>L`9elzWSIm$u~E@TQN;O5S{}PGSLM;fR#K`AgP5}lxQDaEUR956m;z~e ztmGrk9o2#nOs@iV@skBQRSULI!uick1!QSet?0+RXNBTG3vV%_iU&E0m^Q_Ob2t+u i6b}*{ri(T$`@cW@b#h0t`Gc4M0000KiU~ghWRnwhRAk=jFKNn@=L1XGMyK+| z9;(igC_jA81ZI`;!bgO9l@Gco6M9p5poPB)eW5&%P$cv z!`vfLgmai1B$`CR70d)}N`vFLWs1;++n@jiMycvoI&8%CD?-8`rbMFxyv9LJvV}zH z(8MU_F>@4Q1+Guo;wWyXYVa+l!g6JacH9GAP=pp9Vt!G!IFCE18f;{Os@uvIow%p8 zsRsL~>QUDC5qFVks=+%PV!g6QfpOdp<%a{fGOLsqnz)5~#3JQ|cAnv`DnD!|)U5n4 vfcb}M$`7rKP}QS+F`wOh$x2O`@_hRbFYGsN6ROS900000NkvXXu0mjf1cqNc literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/barbuttonicon_add.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/barbuttonicon_add.imageset/Contents.json new file mode 100755 index 0000000..15c6b7a --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/barbuttonicon_add.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "barbuttonicon_add.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "barbuttonicon_add@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x", + "filename" : "barbuttonicon_add@3x.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/barbuttonicon_add.imageset/barbuttonicon_add.png b/SDAutoLayoutDemo/Images/Home.xcassets/barbuttonicon_add.imageset/barbuttonicon_add.png new file mode 100755 index 0000000000000000000000000000000000000000..9a0425a324c2f55c5fa65d2240e0798d9b6cdfa1 GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX0wgC|rfC8xJx>?M5R22v2@S^rd(More0Yn~Ax@Z;Zlj)wmx Y+%;0^5kGu)0S#sFboFyt=akR{00?L;B>(^b literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/barbuttonicon_add.imageset/barbuttonicon_add@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/barbuttonicon_add.imageset/barbuttonicon_add@3x.png new file mode 100755 index 0000000000000000000000000000000000000000..d59cbe8bf3ad2154acfae3eb285eac2f8dcbb6fd GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^Q6S933?yBTt(*v?cmjMvT!Hj|7_c~Cy#mN*E(!7r zW|%bj0{goiK(3jmi(`n#@#F*vR%eld|3~%C{jU$H36Ys^@w;B-gLtH>(Sm&z=6u!e nk5fbDR1|*O&$BpT1rtNdg@#_C%dP!D6Bs;Q{an^LB{Ts52x&Dd literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/contacts_add_friend.imageset/Contents.json b/SDAutoLayoutDemo/Images/Home.xcassets/contacts_add_friend.imageset/Contents.json new file mode 100644 index 0000000..177aa45 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Home.xcassets/contacts_add_friend.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "contacts_add_friend@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "contacts_add_friend@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/contacts_add_friend.imageset/contacts_add_friend@2x.png b/SDAutoLayoutDemo/Images/Home.xcassets/contacts_add_friend.imageset/contacts_add_friend@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8fe1af16044fd7113c7ca8393eb33e6777750817 GIT binary patch literal 398 zcmV;90df9`P)E>WoTcW9m}x~gojzzp4#f?Tl7jHnr9iC~cqpTzs3Lvf$M98E%!g*3_SBN$L) z$!?a^2+)^gXcsIo!p?}2>x-YI#RvAbw8+{A^Yn4oCvO}4PdfLu!4>JOY=h}p2H!~M s-8R@D#9c_kHYh$m=z~7!gMTpi4YTV$p(>NaoB#j-07*qoM6N<$f{=Qw%K!iX literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Home.xcassets/contacts_add_friend.imageset/contacts_add_friend@3x.png b/SDAutoLayoutDemo/Images/Home.xcassets/contacts_add_friend.imageset/contacts_add_friend@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..7d0a23e8a1e9e3076aac9fb5bba5a59348ab8f3f GIT binary patch literal 584 zcmV-O0=NB%P)a&LcN(89GW2nI0pSp%GiiY!TUp){%K^9a`pyd`DEQLnD^Sw@hRoI>rIn z4j3y!Xv7^7vfTY^dzC&?eV%KEMr<(L#<|@d7jdi`I!T9g9VXB19$SV+tdc6_t9wC= zRLo25&^gl0rSI$in50u8U8!iHGo+g>TId?-J`^joK|;EOMo~h`yd`0{gm*=FGu>m4 zd~NPqhAz-TuEl~y=oIUmaWQACGnH|<8)%1CSfR`R>9Rs)$aT4?8(O2y<+Q1V{sW@Q zCOS5$h6*jQL>E0>mMH0mjfD|DBzcC|wL zgcWOr2B#HzLRcqSp)JB{X@ySnjhHZEzB8>AYCj(8p&sg?9_pbU>Y*O$p&sg?_VXL2 WZc8aAs6c`M0000=u&kR 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/cell_icons/0.jpg b/SDAutoLayoutDemo/Images/cell_icons/0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fba5b4247a88e958cf4ca2f7e428f7563345a092 GIT binary patch literal 9810 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 KtEbT0>Hh(U^$ZUH literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/cell_icons/1.jpg b/SDAutoLayoutDemo/Images/cell_icons/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8af75964c97d8ac19cc00e37984c8cec44b0c13 GIT binary patch literal 10535 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 z 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/cell_icons/13.jpg b/SDAutoLayoutDemo/Images/cell_icons/13.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff1956b23c921850db772cacb9bedb734503cb64 GIT binary patch literal 20075 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

wmHs4lPkZyl!OLEm+Zi$O;x_PG3_k0X|!h(x%yA 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/cell_icons/15.jpg b/SDAutoLayoutDemo/Images/cell_icons/15.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2d5e0c754a4431c5d149f50f2db7d43e1b9a549 GIT binary patch literal 214603 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

Whi*=$XBHf@mB< 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 NBGTxLQOrSitez; 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 O=A3LJwK$~i7XAnAdqdX% literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/cell_icons/17.jpg b/SDAutoLayoutDemo/Images/cell_icons/17.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3d7eec262979f788445a1be25d4bede761de5c3b GIT binary patch literal 9688 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/cell_icons/19.jpg b/SDAutoLayoutDemo/Images/cell_icons/19.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93eb88e6acc8ab2d4d44f2d17a53c892df064fd7 GIT binary patch literal 45048 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/cell_icons/2.jpg b/SDAutoLayoutDemo/Images/cell_icons/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e834fb08026eccd6aeae2be3847baf6c7137cb09 GIT binary patch literal 6862 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 aI!aoH>w4l{J@FvB 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 E0Z?=p`v3p{ literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/cell_icons/21.jpg b/SDAutoLayoutDemo/Images/cell_icons/21.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5307c2fc5249d7ab5d42c986b413b831e4160523 GIT binary patch literal 8543 zcmbW6Wl$VI)1Vg#79?nJT>=3@f`-Kwf5Ay&S03Hqw zF3uA?TwGjyd^`d|3L?U%PYG$r$Vn&|XqgxpXzA&hfxH~dtUPS=^qg;B^1R^_6cl9Q z07;1Oi}MNy^8aTN419ci!l#7PL`2m5Ec7h=|IhN!0U*T#AOHv~3|0UpDFzlP#zQxN z>2aS=F#byb|5Gq9v9O=u;NsyEJbg5PKLcQ5U}0fmV?B9-js0lt_c#u~CVfK2!Y7SG zu3?7D>O#RE7@v#B_OAL5rRLZXP{7>v8$JQmb7~q|_7@zSFS!JTgx`vQL}g^<VbRl~B1{Ri9);6|w_E0x>4^J;|pP=B7(C=a45ebP&$tkHnex~K+7Zes1mz0+M zuBnCB)i*RYb#`_4^!6e82Tzn^@VF0lH z8|$(EZ?OM^i}aBT6B`=~8}~n47?_@qibab3goO`>Oj-li%!QnlKM;@NU3_l!AAB|e z%_B;4*D(Srpx_Go@qf_%i|qdn?A!kr+5ZCj-&}J5LM)8O!^0v4fB{Iw@O@OJoMVGd zm?;ewWiAC)44=+R8lZ-XM#kUOiXOXj*zx@7l@6k!x}T}gdeb;UU2h9F(U8hR>a}1s zE4S-zc1h`0Yu&Hvv`r;)OJ$`l|75N`OM@U8N8%}W6M=8uJy2Ksjm(xX%b)T}e3eoR zjpa`(4E`Cm3CIS%WlD0#tY9Z)b|9*I?HAdWZcdf^Syx*=6O8UySutI=DLE&13rJ7!maV zhWP{f%bS~R&CJ;x2V;mn6&2b9tuI*HF{y;LMBqk6SSr_TV%nof&uw9g!(i}Bm} z=d10?>-Vx2Xr|(r@PSCzLE{^!qW_sqp-zH8Vn-=WkWe)sj$7CeI^m9V(<~A=i5SjQ zbLPtHx7{kP#l>y^ph{WHzy6g%!vIQd?(6vCMvb=qdr@2Hn_t&RL5-mJz+U`aq)M*c zw+BG?P47=%7~dtJSV0u^~b49JD^Q)F%zi z3SS93gU$O{og3>68Y=f=(MA815;4X7cn^R3u5onzNM|oCdd5+UAMXu-9>(rU8nm7n6wcwiFyxM)%HnrCE&!Y8VN6}WU5stZx~=6#!yA^~3FNWAwY=u~&yu`fvJQv>pOlL!~GHsTKbunCN9 zrj7Z*u#=3E*r-h<7@-sW`9@^ztH4!O)+8ag4W3*8?2H#nVbJfOegKS?nw)TikPag> z)w|l>1qNOx_O;sBxE@&B^V2#0+9RL@dk-sG%sc?H4GOvXHV)Yp2{9PE1EOhzdv|sW zQ#57El`lrFk(vtw<-uFry$(fuqdl#1f!zXMVx&fBs??6GM&>>(e93{iVYa}cN=FRN zK7KEZR5@{}PrNO2c*RRGyBJc~1EvwQi0DRj0*Uxo6tO*p=u=MED4Cg@?QM+;)|k4v zMnCd-(r2J(`GJ8qj(7IuaR}`rZtn^icjO!NSiSLbCdV_-Pcw5+-0|5fl3_^+?6QGv=Byu<1!$Y? z$m3fAo---CsdrH}5;2oCY-J^n+uk@PA#%n0Q|SWS-o-&D)|m!=W$Z;;JpEaN$X8SG zy0%~eT2%KcY=gOSO9!gwfNY2E97mNGAMxjUvu)?U+#S(C9{@SiS@sw8!k15MH1SJ{ z#w{{YoZnxQm5RSsvnL1|4?0whu0BB}#woarPD>{+b4gdJUqL@}jvw%f*K-|EnE8S4 z+&2{nyChV7+rRA-We2-m^<&ri+u(w|wr(bLe2CK~>QtB)#u~6nxlu`J&5tWG{tjre z4+C>nLd|04X-Haa=Y@COBqzg58)L>Y{ZCE}M1e()FK{`4LATp&Igw|YWACx^A~*q$ zN_v`{9FyzqBUb{p{py`Qv1Sdzrae34n(tjAj#Qsuwsoo)yZ>TJmY*P@Jw@JEyzL=x zn6B^0qj#I~`UL5`cY{{uM-qv+_HEGyPYu zeUsus$GTBBuMZ-@$_sY}jU?1w4)>)0BCS+=tYWu-TbG#+0D}36LnQoG7*F9~pG;^A zNbd$qO3F)n%%$`*Cp6|%isqj-vw#Pi#ayL@)exUn^Q5>32> zGZ8k(GnPQ;c&)p5*YdKCUl?P57gByJ9Os~EPpm9MZ4*DU6=j*$Gwx1a;uXEw{CZt2 zL%vd5zLA>VU4$BRF7)cO&CIrmE=bjq0giFm#<6W76d+UQYCzE6F-b!|=B>QLKm zQTT0j)H4i!;hXb)!?eyTU%XOBh8Dhj!IMxig!mU^f8R%cuX5i9z%#!Dyp?E!-bEbK zx)AO6(g&`1k>Dea3f6_>dI66QTP{R}8GOKWMi9Pc_rOWwSLms42BX9-oAG#+yV!SG zJ@%T{Z7*KcDfUVp4&f-Qp-tR*%dO)Ye%E{4-}R!GPhA6&C71ObJV$0$qqYv`1*Dd* z(0!XkU<(##-p&M#H*l8Ob)`Bz^%?{fjg;9N~`ynNaXv92o->{(2I$ z28hBPD`%H_gVf=XTJYFS+k4cih$w2#e!1h zH9Io9>eWWtUN$PZJ!NG8ulU2A<5i&&g}=-idb?|?rm<*l9j5+kN4j?m4Oik7xg3gGVs>@teaX49ee>9M@FGf$#q}=JwG$&tO zd|R}zCVUdm6p(EFny(5~J2~Zrz%A)R<)~2VJZ+760z6=2)1mp5WFfAzOldXh{eFb$P&b){m0x=Egod3iO*4N)x?icB&?yC~g=T9>T zS-+JAj%O90RSx%ZbGth@u!qayIsi?HvO~;5scsTNGq8gtw8nEE1LAZMqBL>Xq9d_D z%I`7jaUc@;j37!Ye+8*u5aUh7v~xZbskqGI1W zMJ80^)5`~dV&ji>KD}o_(~^3NH>DLX6&97q-@+PMTKNp&%)wwgv&S3ewUJRFQ--$q{ebHT|u@KZU4V5_~X>HFV`)g*AU?Ykf(y zpeg=a`Cn$Z2-Xo6)){72jTl$&o-#=j$*1!&bJ~O!{_^;01+6#*3&VS+hH>j@o_6>v zlnM=S?l|FHZ(r2$E$B~QF{<$z7pX!6=08Q0COL&>!X=~X$If8Dll`-KPHmUq5QVd1 zI#uD>s7O2em_>aSb+vWwa8$vuWNx9sqTviMzW*6FFxAY{V^}m|6w9DaYA*9f_*;vi zP%~DNDwk{XmRZoNv3cs^8o}3vDFe4pJy>5te3*(g?)@BGk+b`(o*OfkQ}4f;*eyH& z%EJz|ZXW>3a0({`&dHnn2<^*JF0iNO?K(9*83-qLe2uhoKmw|NX_&A3B)kJ=AX}vP z(RrQp7G_e%ZvaaZ)R22aplqNF(2!%NzzA9$47A8yQsW6HpjO5m8KS>ifF#VK9ZUF^ z`d#Z%mQPVKgEwErreQmE`Q2?~Ep-sG0mS=H3c9%5H&Kv?`nf}bZk^dx>X+lz5`J80 zSj7{eL2iNRFQ8KWo)RMQA|o8 z8mS<3RNDDxqPFCsrM~ssL^Z1EzLKreT@$y|aLYnRHiCwK`xE2k=ia7mp{EWQPx0w& z#BH#rlF76B#F@A!Cax0Qvni_*y7)SBlFcR(<6Oq!t|vy`b#e^2X_iYPS$Y-#rebiW z(Xna}`sQrE`HSaAG++PS(e2hLQawQ~Sts7(YsB}3z;6x)cCOsy60`Ul;S$@Q8*H(P z{F7fSd?^RryXOm7xr^M|by!ua@tGbepbEk%=(k>^TgZM^Y$spN$`B6$D@z2~w0VCOX#kx78NL`i$(y^yZ&L4>-Uq$|{oW$8-0G^Gx zyF}Y_S3c-TsNiDzn_z8HEMobnx2-9n@-RV%zR>&J{2q7^GvN5?QjA+qHFMsunkUCf z>7M-oAg|fo>W+E9M~Ny0%42208gyAj9}3l0VyE(cs4hdT zSI0Qme`KstLKK{3OTfW_20Q~8{glI3*1EoTN=gIal3M$Tkcptee8D80N2j9rk7E4s z;yOZ8UFtrsI+-UCV7A0|f?fw1DTJLPML#|>F+uC1NZ#CzypUR4SX*Y;EkClZU}($q z7xLP0Xk>D249@2B_)1|h8gxBIc#Qn(fMh>I>t0y!j%_%r@Nv!FkX~y=Cr%V=)TS+* zf{^>Ditbely1Gf%U>3=*XE0tgq^zMpXpuuRVW}aKh3-b3+irJspNH_f+Fk7LEGSaRE+#V_2#_Abnnd50CND zO$mQ43Y+;*b96JPK5`@fV{_>}$+fi_%?)OIg{zCO|2uB@m2UvQgQi_4iRj$MQ{@6n z-cf&x{b4YvQ5(FlF1b|Iak!(qSIvF@YRYY~;4czbMac?dll3>1a`L9E`uv&jB7zqS z8;e`qp&{q-1`P=J>tj2sSbnn2@0He%dH}ehFOap$lBXGdlafnq=UVzlk2!kiVfG#w zUAp*zroxb9jw{JO8H!BVW$p!#VADii7E@z74oZ(Vu||%cX)KKGn4(x(_}XC?=4-{& z)oK}cM~Z)^NNKcF_ZteeRAGDoaNC^Wp1vrI)lf=z49(<;o&f-uE;|+<0I>xAN98{$ z7q~RiIEQqPGpuD&IqD8CVyze?GbZk-8sWdESsNRZExe}R9RACV1tiX#LQ>_D9aS%y zIa29OuRYcXVA)Q~(*1`$lunU{r#=h8?91Rk}pyyk2HRk5^=Mo4Ox#R98HU zu{KgG#g83BasE?|q*UV7*Bj3V!1*+IMJIE=pg!GpHaU7&g_-TjyW>C<;%?_w_cuCM zdIzxE3p$rP@4TCbWr8U)!}mD;0ok`$C?%~&Ohu<-2L0G4*Qa@A?AYy~3znPB?O{Ic zvua*aj)V}q6uvedah6Bs$O7k}rUU-G}0Z;shIKJ_w z8AG(f&fZ&`3JqL|sgv4&w6b2cWIL{?!ayiQx_gC#Jw+Y>fdS`e*V*ci7Gv9a5d;LB z$j7))O5?;zB@lHq@+FA(+J8@RzN=5T+2RLMC7=%6R0>t7#Hf0+2>)JEC36*~STl|g z4`+()fMh9!<3PTNM(pRbjuWII)aU7f{uDUbrPuS0PiSI=R+L-2`(sY7jSFqX7-4un zkE^r7jw zZ65zDXEqPiUK{p*034CtWEYw=8D?5&_|n<9$AZ!1vDcPa*@uilr?AWLC-5W>-2pPr zXa6Ahv1YxkYoP5P}e8LZhJ2}c|gf|73sX4#{I7L}4=`cqcg(6;={xvc_zj=clu+4E=C9XSv$~bwL1sn@)Tp4T?w-|C;B$X&Ift*v{ zI{e}NbWmPtuynDc;+Jc_#bqnN}21`OrB4F0g@)~mvBQyngM443lT-FIxcT9ToG< zzyzSJV}7z(i8prmyJ}W!%gdDHgp3Yuinr_5tu>vg=Ks13bi0xaUC2q~KPEi@xQ= {6*qGp)s@w+#1CNt3O&8i*p26l?X>PFHUpY^gYXCZaJzA|lO^><$_kL z`K5wSWNG^dZ+14&ii5F*U}4PZv*Wo4ozfShIBj|x(7qm!%%i1iV=d-<){AR`iA=xd zHKRV;a>PMt^&kVXK?qD^cj{M!p4w!&%;UmQs1t>J%=gOc(xW4dddvJ}RHcigxWXu5 zl3+UZK_<3K3 z#NA9GBIARyNT{oHk8sk3Vnb|NlL^urgL+B4Iy%7NFB(R0yrB1FsxB7sdU}7tc?~B# zK9=6=S6NRKMsTYJ;RO-o5CU+e&nk^{0o%}?4agOiksSuVh7azYG8DZ3@*^C5KXwVev+s}k)?=8jxxkUi zXAse<*TXqWPgHj>m~zr@xHwZTdB2SVh}9m$%WZbZT~RN1vgg1FDpLlG1ljl3OK3B1{Z8kYb zILI6yn5D$Ad|JudWl}S4YR6j~qjq6>{llMOw`$z@fWin-sPi3B=q$z7-s%juc3;{) z9(iWRCU;D<5rk3w(M>j{WFdAuwnV7)uUNO}o-VRhL~G;bjvKn_5&YV1#yxD}r=z4& z^+c~4?h!awsN>22YPaeqY`ZCi{YMYk0XXu$f!Npnbp?AUw95$TEldXXQK9Z+#f9w6Cg%en7d%L* z!{sZo;2bMZJ$B{!E~v|gU$0YU;KOxcuXvxteNYZ8m1=dBzg$35ybZ3aD$Oh+u{)5| zm^r&hX_Xsy(TR_@MT1uJHm?io7bs(S%wLVYe=pSpoEH_jHO!A=Sfn9hO zK^emQ0h%I}RVt{W_EvIZva#I7pj~4kd8%rpr^K+B$+&6~mFurA*nuw#*|lSs{#Yn^ugq5x%A%;(vl>7k0T<9w>Z|a z`40D$I0jC_=r2dWs79CrcjSC>U2Uk+CbW~ezcRKvQW&=SRDyr>b7m6r$oqQGjYXnK z_R1aRU{{*YA1AD#E`bjUNS6DcQ3wQn;cPrK`4%LQc9hyRF}^6oV5O;&%#vR}ydHH^ ze;HdZeQ4bMd+oSL$)(ogvDk$y`08B=nt*!Ryf@9SW?!7bnDfzPSQzsEbY9%DapIe( z-<0uBJ+Rkj{j89BM=Lr0dw|Q9G2YErZ>(0xF>yXK>TjLbNYXgY*~0UZJ3B!J`C(N9 zNE0^fm)%eO!Jc=w1r)$-<7^B0;n1)A*4|)?7%>Qr=FF z{sr&KRrXyF2eypec1vQEi zWy?Ai{4>yr$Kx&Z2T2p5E7QvjYqV}kQ_2?MfScJ@M-MXhEbh-LO^BJt5|K>Pv#yA& zfwh5#-Hhp^;nQL=t1wEgHjy&M&&aH=lhN0IDBn^>-6^B=KYu}xJG;}hJ{S8Y6Le|J1HC-oG*a}4F?e90?ThN@*goiiq;zX_;3 z@?Q|=iM9nt1qFmhb=`V_b-tHUYS_Ed{N8v^8ZAdT{=QT0Ne4)x%uv5=#FL`yie899 zcYhn`120J55A3rKLvAR4%&|M!TLs2mHSA~};|@rfdG2%&8l?V}8rhdIP(Z1+Cj-|xQf$K(F%zVG+-cwhfq@9TYC&)4hqe!iZsm*AV=JK&&; zqq8GGL<9g35nccR9bgaGvwOG1Zt*=55)ym&?va#|mzLVMPfAHv?tr|ivbvh8@{uD) zH4RT5J+7~Daeu*VUuG=j+y*F z55Wh3%pO25pm&$Zae%0d$SxTXK_@_6_@Ck;{~3V)9wMT<#Kd@Ra|_GUXRPcmI5=K(a(3~)0tA75eEqK92nxO#0t=0bj)_IZ#V0&? zn4I$H@sreN&tG7$Ik|cHC2!uAzAG!QsI03e5F1F1P0j5con75My`TDqhDT_lW8cOn zre|jVnPdI<`HQ`>y7qg0gS)x)=U-eRfL;FuOL+e;VE+d$86hrFF|l1@693{75k(2- zE*UZLW2bh@p7)dpjF3BSa&M2kUH0qRk9##ty_OZOMGi_TYMM=-Sos&)e~|s(0lWYI zh3tO;``@@G08+a|gwER~1F!}Bj(j;-pWkXw)y}(dsivIcnfoH61GO#LdYbC${pFup zNYI{^k;63 z8Bw_XNomU$!o%U$49?=qAOR0kjckVg2TcIq{)pO?9h+qKD+?%YE1e{ zsj7Dq`Gvo$0PxXCF(+a1^K=%s5;IDC=etd^9R10_6#5qI(4cu$&y2C3WCl{)0yQoz zq`xu^-^y~qP7MC78`b#d571~4K2OPUABMnq^$hG2+bJNuiNe8@pS<2l5VAl_SgU;c~oydf5=6N>@s`R7W>NX0v{5$KmbU^odx@6m+=P%hZhrG zQVeNZSabfGC8NeJMJ*C`G}e|e1G)hZN&R!lT-?RtuRnDxOt0wWPu?`r5$cKx>0rm~4x#xat`la5FcORc|R0@({>nX3hkdFxfacHt% z&8=*sf&Sw2zGH?tfcl%d6oaUt=3vZ`OC*JXdA|8DVJ}vP>wGL|DtqTUejB=z0bOx_ z->j7!5$9ipm?%ivVDX4+Q>1DJ9E^rF(OaY`Ml0ax7%hy=O;qhXigGymF@k|G2rlyY z&LDzOJYX_x1-sxM%xY)6GFTG}2JPebTd-H_eupo5U{AWdQBimJIc5DdrcvHGMxmve zd`YgkW?LfaHvaO}O`YjnwwiJaM2DV}+!k^}0Jtjv9M}?m|950_ksd8cF790{1+kw6 z3eg0G05cbH6jNORpsv5UuENnIv-#Qg*~*(2icXH0#jdV1Ojv_$oZ>xe$B}CSfM~^! zQL{VF^6mMEe#@zwPn3GL#dA=6>wu;VRizsaLALR}C>Q&Gk!to=E&l6 zUVkeJ&D2{1>!D^s43~=Z_EaP1t`kA>2;w*-POk%-yZXEQMi5^I@TQME#gnBd;)DD8#*kqia=fw7t8{Z~rEbrhh03GEmo{=Wx8R zw=ed6sD85vL+nnFl!56(&nAj6ipwBx!{|0a(5u8b=sv!d!<`7l=Xj@z*#3rnkC0eL z{yaK{@>_SkzsY#=Y@m*7erM!rkGCY`qCGcZxWwUHWKw98W^4DTxf|VpyfivU_RC#3 zmHVvEFBNu#m8$Pq`Z9w~lG+{_Jrh8XN!8Vm)1W39UhPM`{uqXvhSv3m#^QpI)uMW!PsoF2f0%f2Z>; zhOekM2T)eJtB+ZY1$=ky9By$dn=-3Rt*fkCWHdqMklWET2OjQ;7A^aCkq$kC?%L4w z*|X8?mGaYLWeBtC<7Z!xZTylZ>~!uaDX46}B3^QYYjlz*<84PqYAg|_=wuBvktC$@ zo`&JaFFcBEj>g?vXUh5a;&YG1rik-ZE18LWF?s=C-2aKKC68#{AAF7GL+XQ_fnRTU zi8#n`kv^dnaXGIx_+)fYOfX2|*o&Rfnvx{dxULqr65OFkQ|JW3SE=oH+O~lJ(1j)t z*X|zydwkD2X!Br35B_Z7y|sQ6x|!J}0EqBtCA7n|jF~&9UP{6vb!wYiLZ?ZhmbVEr zrz@YdU(5_CTP!Ko_HXWxc2m%Z^33+V@IdeC;OjB7#6lY+CK!sT<@zQCg>IEW292T( zToU!ZO`JKnvNH;u4&twl(c-F+U2Xg8SAcgjK|a;qtkjr*0m=f2i>)?kNEs>XTetZ; zoG=7W>})$ca@#Tift;n2Ss7z2FqESQ5}9|aZ!l?llYfLEQhuZ(Y$BbUAL6?BK!)F&ZUr@oxEa4{>bi?4FS#u1;v0Iud-cuRl$bnE(E{ysqG=qAfw1RQ4 zOX=M`>S5NqIoTQ)tky>;2Y4&=!e67cnDjZhpUg*U#{+J5yzkLNzl9vo;i6@07)ag^ zL~L9QU=v!sPda4W)sR-agl?g92-#2on1M6#rM@L#6%;Va_uEXBij#$>*Hi7Xf%AW- z+Ua`fJOt@pkeR7BZ;kR;<`;1%Ud+q8(68KK#q!xTE9P!haI2(8!DIOuLmy>#7}PaW zbPSkd3jR`Lvy!(0s;rUyq?*19(QM2AYk)F^P& z$k|l4By)jA+idP|9sFK9gbxI@W*U#lrC1m26mQCfBR9YZ?a!Y(iBTghdMgjyM=a>` zuBw=B+cBeoOy(b10bsVDPfJkEEGuJ6s(oIa`i>qx2@;YTe6}-Em)5#4x}>J#XQ3X0 zX_%?PxFV!VFV=3DTeRI-zSt#g@7xSQxWfz=G-E(hydv8Tj8H_Juen2LzP~Z5S8&re zFdLXXvR&%;&NJfF3%|)6WWR$|Zk&>>?#L4ZZ7r({(%rNY^NrCI2n23SkSQCX zf0Ta-0MSc5p_NOMjQKfRxlrhY6=QLzuwOI1e=WSd{?0^sE491_l1r|%_-mN#tyXXK zK}`pyh`lQ^`tpF;2Uz>d8zwXYN32TUy|0gs$>HdM+iu&el)x4Bq?W4U_W+}jv%+I1 z0E|<3x?79V&|#uVp%vS@0OqH2JX{IxP-*-!K6||li1E4oVbEXV?q7*&C@FZ{o;w#bg)VDA9U`oSdCv3_LZlW%jK{)$k4+NV%6el{NXI~EI z+H)0UZWmCV4#2vREC-|`UZvu7JB&NUk~i;en>OY7``z)gn~Hx`p&4w zq%Qs=gsZ{ds?O<9u6aZVDQj&^bzax@`14m-u~Dt}w!sbyN!~U?#QMIO=7@C#-S{*1 zcs39z8J`BP{nroi81!#-9=mG3IV;5+Zw2|OktppZ`RbncTsAs6lbIv5=AmT)fVfH% z+q{R%2;j_R2lyz!y~%y!+Zsqdm0MMi@0bre5d<_G=sY^{CJHSn07woV(qlXiydJ9p zpGw+0?-BD33X3G4YKXyDS~?);7&Ie@AvAT3sQntaY+JVNU|cigCKAh{VZb}3LC76( zzveSdC4(5BpLfJlufLlMTCaGNP*%<;O(~3t<;8wfaiV83=-`+jwH`Ci8T7#<4XFRs ztG|>JaiI6)3#&ccxu7iwi?6^SFO6mQ`KF!X_$g;}Oa^?>vtXfukvw+2QXTE>v&_fy zWhxiocP0YOHr^@sj#zqmc?I88*o#(6!Im zGf&LsVfxj7L&%Qm`d$_a5dIc2XD5GvMue>=jy1h3pA9{}GXk9kRtD!LjCv8N*Ja?i zp>4%KIVs^rW5<7G@}l{x)hMIweVb?olmoVWH||;yYV3D%DvyRjN26?)Wv()$un92) zP$;`Z69@!Oegp#1kNCTMUEIQazjqp2J57w_%`|KSZ-m{pkC%aBm{dn-Gq4Srvql%@ zew@w7>~cD(%-6M?c|Isip)`*Mj+n5ttl^p0)@<7FII;}d@b}JR8RwnbcLcin= zos3%Mxvmx6ad+zo-SQ-HecRU1KW(|gV5DlErDWdaw@bQsZe?3maDFTX8Io=rqdw5F znb&p=&B4>8Igg|9iacs-6Vf!8_CziU-OB&6y^lwHSb#h)pQIUL8#WBSa?jE=)S`_! zDY0e(rzVwxqG5u_G)rsK?jWiq;((OHP-WS=kYds;#PU9P$IGby@Bw!D> zayA;*BNx@q*L>8m(Oj^n6i$EKLXJNa{*5lZX2IDIavRf(yMkY2rf|%vcDRUJ?0##? zDc$#Bx{Dip?uu8yrqzwO1-v1a3;e>tA9p`?So+xl9sO9clQL9eR+Vypb;>CSI-Q+R zQ&~I%jd1xye&O}STpvk2U!=4067*zTsJQRfC~`k0nD-*ai4F$*q3TiLsm3-HXBcJe zvZQjWy@gpn^z)`?g|pFpgIU>zZ(4C1OTX5H<;8f_#qQ=SMJK){r*jdq`c+zUZuEwf z03lu2J@Y!fg)n82Y)yf!TED_#Tp=VWkdi_nm}4RoNX$)X#C(xd>(IJFLxVwdUG?1G zWXR5F04=#32F~~H&WVV3(_PvptTBXniWUX+#*O84)-KVGWsbikl7nx6gFsITIF>73 z`U(7|@CtbFCDF6w>{}`!{Ixrr_NFNeJ87S5fAN7|NW`t$i&9^HR7p==TSDdt0BRMH zbtittuQxm>ziP*k)!Q?U$u5BF8BHB7&$-xgja^RBBOuqJgQ~X-l;O;SbpPH_Ns^w; zdJG7NoMCWd8<^V(^*FQ6X8u@R))m9@l|GUSyN3lWUyO5!u`Coe44}M{!3d4)$yTGZGObt zmM5OEuP+ArxltNn2YT__))k-bXFMrc{(X5|k9|nZVL+%dnk|KylR(Q>`BKV!Bm#Byag+irl#KV>^H>D6T@14W;YFNLsX(`hTf8w z*T%oG<-Qn>hb<`{a)4qm!*dn7e?_#%mX5@83FuE{L(XF4fw9Sldv2Rb9>wbQA=)9ie zO^1L!rG`Zg5nea8jf{d%Gqey^$g@Q-P%zoQ-ei%lfW#z)QoE*D`)!uzc^-1-&B@e= zo9GN&oe2TKpBE~zM;!2(Ss!9zL1N;L-RG$(O|$_}ec*ayct5&+bp(u-F|T?&o8dK~ z1!A;%X3q6Ef`Tg(YSK9|cg({K|4zPQjQG`Pe#M&|kcn(X70J68Zj_jUozZH=X9XF35lz2PMJEPNuAKN*6qBf=kKG+3)wh6ys2fp*1RUCL_2`lQ zT%p;PvNgN_l9^`%-|A7yP2 z8qVPfySl1$e@&~x0jsB!i=r`+)3s0cZj`6IMjbJ=BgyJ}Tl~m?NK%)G(&Cv999!O# zzZyp4z19|1I_LGh5R)Cnxx%{h&t8z)!SKtP zCD|cn0K$Zh_19fkY~EDyxxLQKnS@X5?6?2JLd0ErAIA({K5q~GI#PTB$;DKe07+aHQZ;` zfmF9oLwl|;k7SzkqG8%c*nw9ON&H4!V_!KK-Dq?WZkr zz(vA;n7=%kbou=3WR%nHxOYcYP2I{)E&g(QC7SB~Te#Rk9^fgQFJ5>$T~h|~CdWL# zQ>})5Rva)HY*TvMDjQFVRmhdfq+?4~+6onOW*BxuQ|74(G1{rdmAKape4^UmRmQm= zza9?%Qi`3OA{@N_`s~l1R%7pSkr3*MBVR@GO`RQ%r4^%x3X2m$=3OtHZ}fE3ekJ`y zHl*qmTy}i-RO+iY2^9f7>yvti?rN9Ry<_UCOa_OX%-6zHZM%^ty78)$b!N|~vYcQJX$~sv56gqp!!paxy2q;P k{_%8(mUo!Krs_zYA1xF@_VRQ9$P+v-iKc45l@N^o4-9zcGynhq literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/cell_icons/23.jpg b/SDAutoLayoutDemo/Images/cell_icons/23.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aaa152185eb4d079c1971c5a5aba1b6852c9c3af GIT binary patch literal 7165 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/cell_icons/3.jpg b/SDAutoLayoutDemo/Images/cell_icons/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..509b60059d68626c9cbc9bcc4cfd50b6e7861cde GIT binary patch literal 65034 zcmeFYby!u~*D$&^4bqL&rn|daKWr0rlqBkmR4G%Q;|~XMo_wxmJlQa0R`>` zkDhbh_xIfIyWf58U-zAxwbrOP<{V?rG1r)DEv{y+mO)`kzK(VPpso(E0|0;lV1obv z83BPn->y%8!S)Ck=?1>$<$}w$8{?JaLdiZ(bZGa%hS!v6MHP;$a)B!TK@evCtyF9-hi3}RX%ykrXo+rqr8 zWnoL#=uJ`faQ$yIdFX$allQRI(|7f}!=MAb9*I9i9%>8zPjnqP)blr8_61PX{;LL- zH^jyh=AmfiX?1PEO((VNwcx)8?Haz8L|ktMR1ISHN6jw{zs`DysQIn_pLAUt=r6jK zhmEZ9FV6MoA@AP6_<%A^6Jk0d{l4CeEb|Qy_isHiA%BfI&JFE)M$_C#Qv4f7KDxm% zZ_bDl=w_xM;{3W`{T>1U>81zAH&hjX$IcGHfg;X`m_!uNUzCEZ>^~I#8@dVN{98uo zhQjqX(1$pzD{U2FZ|8ICVzQDNF{W}(rWD!x0IR5e*%{6qhlKhID z+t(*F}o@*2U`u{pejBzwh05HG@@FEUj#833*#|sDn5I_WR76hyjQ~|{A&&0k~ z@TdGW*>CXQTK_Pwfqx48X8aw-fU6huI{vTMDKu-Cm#Z!OzeJIZCm(`$v$S1LJt)i- zabx*auBYffad}Ue%U}3)R{$M*hu{2b91RY2w1L14pla6>9rUkuP;Yn$^7RUWeuJng z{zEsqy$8(8?O!A`n1`diqw8PsgRP`{tzGkmhR}gy<>d)ehPXmJtUMvM2m+wz=k|Mr z#QG(CO}XZ%y4Zsem;bNrNA~i7{$puHw0Q0Oe^b=q_WxXd5uLJvdg@u(|4Rzj27;&u z@%2=NtLUk#{a#Kmev|(tjOhUL@Rx%++W+dL>%xN2(jP*ME?s3FrWbFB0~2%_HJ7E75V4@2BHDP z-_se`Adn>Y`TE1cWvIwRt?fw}PbTDkG?ar5#3k}|$-RyNKMPp~xvF~g^QyZkKpY%Z{5>GL{u+8V{?0aHw)8U6U`bzbUl%tQh^H0U*9Gbd7x$H- zzfmrZfUn6s^xzv2PiHCmUwN33x)xXg<^cf)*?-4niRXa5=n7dLhFKjQx~;nG>t26coWW{aMO7la=C$5!#1fK-RsLZs*guDj&BZIi#mldUNWT$zxBxE)uP9>Fe~BXMIokRCC()Zs{a>Pp$!3elbN-jY zwl?B+Fb@|igvE|7R`w7cCpU=wO>^q%;;OE2Pb*g&h^nF#J)*DNj*hnCioBu%@*-k< z@`6hIO8k6$q9VK^io!}_0;0kK!b&2)tU}aPgxPpq55@1gw*L?6{s`dE2Djp$-{Odc;u`$3LP`H#N&e^hKOXoW5B!e@{>KCV%3g1tkO6#TB;VLZ+{auj%lz-GlLINQn{bBs?0#}^? z0S4k3PCqh;06-!DArpYEx`9PRpV5$z|M9#984Vo+6AK9i0HNMOkkPLjMhN{XAS4u2 z1Roi|#6modK|}Ne83ly;O9F(1e8U6?24`~5`S9iV$*>q0$q@}ABoPG#goKKW zir7$I%MuWx(Gj5oeDrd}B-;E87*>p=?xFHJ0?ABd1q!-?%r=DA)sRq7kT6iMtD+*R z5g?<`5dwTfsB+r$Xjbm~p~(gO48-Vl9q;8ymURU153D^H1u;m&3Of~aujT-3WYBe; z>%DXVcAOzUA~o8cZKL%4_<>#q`#I zgONj}W}oYs|JK`KRiz9ax+kI0XI=d>D^E16W%!S}O1+RD7bGp>)q!9x{x@I%0!9 zxiwvY3vB(Uh1_m^0dq)q{XiqjBO&psL5~Y37d(+Q+)y^jl$&^56t&VkX!t)a59;HlFd%^#Oc>) z7{@{$rj4F3?kZcn^hfk=RqqE}L>RpwJy?|kaS6xelwyNs>``JCP`yhfwLlK3yj+e& zR|;7HxJVngJF2TIk*^(ZRuTiZ?tFrc>^&d;#QIpNl2Q~WZVSCnJ z3G&07(e^B3@51MUof|Gj-Ol5yhhop0zCyTPg|9QZ;^nFNk>SeYW0?IwU4048`Cy#5 z9iUeJZmad3`MG*Gb7EH|!Rwdm6OaS%*4t0z+XgmxII~AuCIvDRp6I@7Aq%`vrSgag zm3PH&>17+d^DtuHl5U^cHR#LJmv^~9BzgA+k9HnOsPOyaxdePZcag31*;`o27F3&j zRf-bS&Gi_EGcl0x{Jqh{h#S;D$TZ()`UAX*Xqz@qkrfTOEvAi5So%a#L0_yE4|%jE zmwJnf=$y>xjK+g!q~Yns@;KXOy!7)eCKOu@?H^Qi*h)q@tjkANz#D!i-a4Fgj-m6j zTczCLua9uxB=X4&z+G}mi;q()u1&u5)M&?Pnqgo2fyl0ufnM1x68xHcoCgB(H1-GC zxAm$pqIs&cO+x0*E{VUe=a0qDZ?TxnAC7(1jMhPMCk_cnDrj%VR4~ln+20R%y-Wg8 z+Pebs(Od2->7n%!LZ=FpZXdn;zT=Drqg=3o$8W^-WpmIvYt{ORm7Zu0uDv{-gfAhd}JS-w|mA7 zenAcQB5IYdh;h_*&~0_PC!3E+9vRR|z4m36GhlmQO;KVYO7_`Ye(ABZB0s?$rdZan7M1s2 zW<2jXGOA-;s-G0dbW;7u4R1t#qg5v*V$0j)n&)+^ENaWuF2FaTIRX8(dX>a?xj0Rc zC;F3bi35lqSAMd0aWQO`8H5E7ed0*`aQwmj*=)Q*Wbz)dOmuvlmJYm})-X>X$9(v~ zOX87$Ay#vH;df^gSX>dmI#=s!_&PCd@5K!$z?P9(`3ei zYXsw6rTNkKoN2}9#O7bd^p_Y9-k?6rK+S&jejT+giPnVd`;Ld>BuBuQFY5D(Y77pw zUPbOFowT@_hs0YJ;>J+CH@hL(>}=(uvAXm_RjVnFhuuwGmlRr~WW3kzTmgHYsttGh zaHn2VhZ5xXzS9`Y2utYkDk1cD(Mox1n$Ta!&=Ou>J&EJ5k;ACjxi;M4&P&zusxQbh zeKzj_0rLo24}*np@mxrnVSk>G%3&r_S<%Wv&ZDZ_qvZ3~+vbjivd?CFMd-J^4{|R! zn)NOpaMs^*30Sos5ah<@7`bJCZs+ycBVpuaUHZWiRP1T3B)nL7{6}_P-BzR__StEH zu9u*efOVA96;NTG+t^ugTSlh*`zSN1o^khN{|D%RI#n}Ep9DzO(192Y*%1dber*J4 zLTH#FL4n>f)#&Ru12_ZV4d}?1PEUD&zPAmb`oLM;bhe^c>DHHfQARS0`pjWchAH5_ z%eoMaV=7}^1`KXfZz~;Xl2j;Ws#RhBRqxqU#2fRG>~AfE688N|mlsa3W8}oCQO0I8 z8jQl>Pq#E)Tb(1>e@TaHl=A*ac?2PC=AB?(n_{e=qb1T~UcO^%R&?0wqOoB1!W1LP zMjgCZusO`7YcrgZ-nRP``7k^=%hs*jMVi}jfOaaO8s7I2MRL&MRIg9tGQP-;kM?7= zyY(kM8HL4U`BrYz<~T>5u<^EuhHg)lK6_;=?e4FO;*H8#)%Sb=s{oet z^3jp4@1c$=y!U9!lAr8<&*DjW4YhV2v1e{{#;G<#tyX8%H>yUIyh#Y@K z9)16b!>PPF=R#LW$v6rvN%(=^$+U@qJt@&WDN*yCgX+%OXIoc*?Pgmj16e~;*<{>L zGn>3h=y4wwvo03B5l^wORy;=-$9&7#ZDZd`^ZD7GK13pbf%vN6I)T8&$ZH@MWj_7_ zd<>&03|^Ay$N8jDG@0vvk)xBgrt=m$6WeZBG@D7}`AUBILws@+ze@p$9;O5sPH}Np zai^Yb9G^EzZp|jTL??3*DRQ$Dtc53g{xG)<7uer8;Cz?_T`Wk64}*MFx%C+Io>7}4 zYsx8FI$D;Ng?U{S8L2&tBUHxLXG}#2DPCcyfJ9LZ%d11{r`UyZH#Q3|e7sI%!s?Kh zvfx+*Js;_oeUXj15X6+xXy!W$jI`qkyw~ePev9)fy`FH@@*Qm7r`^`l+dO8VVqXu=AfP^9OSja zF_$%#6?Q19;KaI5Qhu6bE!oP8sVG4RJbs3crwbf40OX1bMBYqm8GinA^v@p4B7Y+)e1iDJXTXC#tC?{Fy z0D5&S6Jbsfx*2e=gkM58s0Dl@Ow1sqyGWs~q{nBiB7ZqRUjcMf*eQCWi^a0g#}vZY zRwzfQjdY$54X&eYNV2VdG%1*SfVc4o!cjG}@~MdYHD&cFO$aI;J}bIpP*D;#y~X{$ zgdEnTlvsMB%syOd5C+ZshcF$EC&)3G*mZq9V%Cpi3s>Xt7grlEokYc)c*wQ4Qrm-0@@K+^^W7-EwO5;AP?g~W24+=h z=2qgxMk-wM?8n254vKePs~9*8bbOq`)}#RfEzy=k+CkgexPVU=fT@N`1o)FjEXO`? zprqZ1GbYm}c-i-EEzSmN(+L0E?{HF0kW|UFJ1Bd%9*>^cNsu5*Wc4%K3uiKNY=TW+ zDQ}u5MCkHalIpXH*mPZ#wW6M`t-!GmeF5v_l)`-)njrpGHVH$Ic4rq#?usPev0)n4 zq7>G>S@wl+FAmmoq({Ay#e5@O-@ru~eQ5+dEez`&$i6Yk{hiE6-e_#yg*qo%G+y1w z`d*e+6q9s})jQU0u3Xqk&hNY3En4J){ERne=b+tPcRcExMS={WTl}fzodzo$o29R! zNX?`dO?ew??-CHb!@$I4L5!yapRbM2DEMnWD`uOT4dRuy2C<1nz44klpFo-_`8L~m zT*ct6EdMs&kT%R2zxa{ZsKbim#X6(A1!wq%W zrKk*SU38i53-Segg3rkzcNH))Bi8w8kBDp)<`}n!3n?`&!iY%>)LXxyY?C6H^*waj z*K>xeeD;sVb`M4W(9d)_)uUAC60LwO@vvN{scrg+YJqVz>PJ+&p~8yw$IypjsKnNe zP5UB2dF`o%(IGxD6vS0}Aby{QOZ5$P2QJ2RZIlgTF@ci08q!4LpZb+`2}Ks6O5qJQ zk0f5*4NNHo3aFSfec#6skz36Z*d>m4aY%DWCStUT=ya^a2fj}aSgsEausmGC13CfM z*52V%do(c1n#{tC2aTL7p;j)6vEF+zd{NpSv5b9Z`jy)qxA*S}fqAzcdQ7K?&?ri2 zGrOZCx-$m9a>kW&_;H_tKW(VlJoaskTK@A@(j@H$rAPc2R7I;}7#RM=T70GbKeTYu z`Jtspx4H&3C2tS2QN{V-Fx;0gyGU{mw5#J?83#-bM{Ydc*qdQ?r+$(c*Cqru&=4Rt7z?8v&V5&)S(i}#C z6ibkQcSu*2Lp&$){Y;6RfnStm8|%3D{ioZHC9b=v|hpmkpn^(*gzwJo^WB8GGA`z}!kKffabL3~NZ6x# zZi@ccGUd0AJs+n+VYt3qR&1)nHRO9b_2ccv$U?MLJ^sAtbkWR#k_D4l4`#K>TOBEJ z9vC}9!?*7$*^yVZj8R~{6m_Q8%_zLXMi&rt!BRc#Z^ye+>3ce*HuG7zLj2JSu-+`u zKsf(E5*25RRsP#!R4ek=ZYzW_M%h7C+*P_(qxhR^Jn;cl>MHPP0>A#%Y+p zFzxl+oJ#TFmLwX2F1}6BGda=W*H=*1T>uOUDQlH%iR7xG8Q&+3SJ$`(Dp%YORYZeb z%ypVPY=@ajM_90X-;ytjJ`nm$+1KY5oXFh^mU_czAb;5jsGOn4q7g?n7%hw)Y)7(B zy);l@FxkeP8@waLvRYB8>(!pfmm|nu2dzqpUuHNQ&hBpRCm5L18)N6%E`3;LDWj|h zM3u6UkgJkESevMD5`V9B8776Idbdz3Hf#J=SNN=g453I@a^l@5*a9nZMjm17ckf%v z8bmuC^3}U@&j|*Tv2utzQi`y~HEs@w-fj2+r!Rg_yt82hb|R=!?AlNY$3=$FnW$d`N;I&me{*DjT+de<&Ym%F*_9o}VIJ~GO z(H+BL`}*Zu8{R#$E^fV#l@A6}?eu$n#1c=`D@SI2UoLE*XlR>YKX5WceoMuuP9xpjk#xYFO${xly(5kC~c294eiwgm7&xC5UO zYfzAL-}qkv_;(yTR9-2W8M1zy&9ayVt)v>?NlRE1TD)tcD(okX+Bt=7v-fIhZg%D1 z+XD_r4a52X-fVqk+S8}O$m?XEy)xnC&n`dklD8e;^8z4$e4ZqXuqR(MWcgaYcDEyU z$68Ur4akRs?8kY%T;v;s<8%eqJnN3RoOeT4oBSIxWF4F)*$W6#V1&pLDa_gN4B{&W z)r~aGgdbs|W@(x@9l|iSB(B7Td&d5VXM4za@~HSb-Lm2YOPGpS1^(a=DsfzG=aG$% z9bGhXdwO;0pKIpM4?4w^`Hk1VoSYWN>E-W;e}h50oxI2r9Gaso-heP7qg5#Q z`P4x~nYOgTF*Z)MG$UddyUav>PHeAjn4*%R6!s{)MRlT@kdQk-Al&YI+q5gz=jhLU z^QcB3W-)+~q@U>^c?y;Sc-^U(NodzfzPeb<K@sJLAF0w zTa(wYO=HR)b@;=5^Z3HCLDLerE%lN`?4RJr9XQ5 z(%7ZBp1XlVc?vuE@rpgYQAcZl*5kNJPK+iOsOfW#(q@-4siBBTRpNn90hz{?fowLO zV~FpA!KnB=8A>45=;#yXormA{C8Hgt@YeIJ%m@r7%Y|75r@B8&NaYT8$`I*Ln;m(p z_0{>H9!WPD+$T(CDWa{1u&wJy=jC z*Bd|q!{2yITeL?XccGhoQONeG!dUgan1eYscQ!qrb|X?IHsrDOLFyeepDLsIS&fns zOG(j?PU}P99P@U>!03ZP-8$y*bR^$vEP{0AmqOAIb*FEUQiBC|`V5#k>#I50W6HG- zc|*MErN~2QzS;ore6J=x{*w7|yLN~_A<1LDO{d)&XxK>l5Obaha==v_BT*UrHfajLp4%Ij%Uqg~F{ zmop!hNS`Dm$jjG}?yd7Jo_Cf}PmmL2vPwrt?a==&bN3~M5siT}xJV<#5U zvEG}h{ga{?yqwWGzp-#;lZmU0Ep=tFNy}e zVC==wdpkmv+>ll}yIWOXm!8pYobY9%Dv_8#9j!b~ZxQR6zEAWIJTgGFrPv#SZ!Sbn zRr1k9yJwk9?4!SUCRB!aYTCxBlQ;8Qf>~SuoGLz+>8D_iv>(Hxht*LLz)sz+Zj4xQ zT=K??H3E@2o2HX`)9$A&E~K+}7Im}l`@iMF!dRwbv8bJ}&TeqJ*G|{o;rSVgT9c@n*)4Mm3tAXQDfs+CixC5hn zW$nwEfyUTLdFJmFcFxa+^-r&WqPpy?GlE!xXOu6ny&hSTbZ{eg#k^bGX@`cPVjYQL zlBw_1ax6(cOF3vm!vx5sv`>-U?b_!j?M8R1+Zk3n|;!iJhF(<2@CA7X6+})ZNLmOb;n!W48rIKP3W_nM^<&hJL zOU`$SAtkub`=gUDJ$!6~Nc3AwgGsCtA$WtEd1I2TW~$32@k%)Ub7ZuRvXf^i!V|2K zeArJN*UL^=-u;*)ccj8tr~qC$xogiGsuFyNZMJh$2b@@&oMR7Xtlg)d4_*Q1WKwVB z?ZwpkYdE+q>2%rchy*1f2JfJ2bt9GBe=U>56WGG11FP1SN$7a+XbaqP?qlrm-PD6x z=f3<_o!4hpd(JNINX4la1V{7{sG?!?S;^lGmra#l5vb}Z;4XbOPX3Vg-N^cfj9~G4 zga{2cauIWi%ak@@iS;eb2AX!6(!}Vy7;#iiNtelOcv|wI1=#YMrgIay0&u&km;F_o z{8%aJ7Npy;K`TgF#2<{P=)F3cZB{;V1}ITbs&|PQhfc=P(CdQtvGj@Da;8>rbhSGY z3b#Xndp9{5;yo5BAdb!taZ2vb@xa4fKlIO#HQGYA=8sg8hBlf*BHVV_w<*30t=)Ps=_Em$ zC^PjKI&H`;%+*WH+L$iDLcG#U98Q^6N0wMLp?eXC1u3?Cb4yst%=Gnuf7D!-G;2&h z6BrLGKqGDw1VNA(Y>`l5Yto|hE&i){Ki#SUVfR)-s2PXYGA;9()6ch6$T|H z3ilSsXUTuuxhN&LqDvmeB&JaR z_%2ur|A26R@$?)6KXfb;3lH$C&GHvPvo>3Y1u|GS&7*yV=66dDG>Fv|PriO*`KnW@ zW|rap8~^2CG9#Didy5I>sT8bNfFlW(rE>yH1hXHDKG!`9p(na0gVw|##dn}hR9XRm zxU2nZhqX7u8ju-{8LgYT!DC%o^alb#tKztc183Mpo_fK$w3dGauZrM#FF zU?~ac)I?RwBv+$(&h{_?Fr)PH=uzg`^|l{Ob>+WoHX@4FTscx^6mGl%SW3vnHR2D; z@+GLVJvPEuoF#?jMsCBZzG0}C5tPkD(SF<&r*j+3DXK^@>0n8%I^@~%B!9{2y@06? zx!d^>c`gDevyh25Ng+?uIx|Kw3K>&5k}c#JUCX@M(`1Lo10)=$johF4i83Yd#l2N) zVgrKSMHP+5aebNF9C6WLZK|iQRIh~=*S8W?z>Yi(Bu<+KXJmg2Ri6bLdv=bpP)Ov~7^DYSnJiPiV zAbX)dLH6`0$rbCVil)FPF6E*IFPE3b8_PLDcH<%&kAiDvp4$rS_SwT9I~6-KTmjOj zbQeQwqCJY(U>X(>E@)6v6g}%MjmE9bpm4mg();1hkwU#0xToB_S?93c$j?c}^f1p5V~>8w@rXPvWDIsjon=huax;rqjknvb30 zAJUm#GJb0|mz?JJJH4=9DIr*jeexZb1)wjiNeO3DLlezJX?N97>zcHDV=iqG%zz&4 zAw^?IZo>b->VbJ@#=Na$DQib?80>Llt4rKr%o8R|r;5984Z)^$cEqJWLw~lJ2vdiK zY^8w+9IpVOmdWzzY+KgQ$_SpMY@Wy8_ZF5n*cVe>g44FZzs48~djPmxvY3Hha57|$|a}&ksS*McWD_{&w z$_DjmBZst$dGkX!=K*s!L(?1|#8Kw(nP)I{dcl}D(K8S}Z%#g+EOI_;Q5WzeARy${ zF(x2(7)t#}@XmEf2rEbl^C2p6*t<)=E!Ous(@}2pz zpgrM(;So|}!}^eqvZluLOXkY036b z!CVJE{*sZ^Ta`c5s1KJ|*TD_yLV859QQ)UZ|3$Lyc`ig%Il9K5 zmxbCoR$_~TGR_uCtmgi4R8_Km^_)UGrS}RzJu%e(^!VP3r{V_kJpl$eDh-6Rtg@&6 zm{GA;Kz#hHO}-DBzF2%_Z3|j>bPJvOJe5quT2Z5f>lec(ottaOhoVa=U*O(PODcpC z*EfpLg2~lzsxV05gXGu{Ko{*rOlg5rGhwUiF0=OO{A>M1N16%P zW%&}jSmGxX6j95a9NTrqI?@(;MIr0%MMxKJFDCboKKt0HLfvINNbOu*1@oBzOlV4( z{GH`%@I`&Y-SO;2f0G>DiZPS5wsmR>%5;|mu2~LC_Vt9&o;_R2LFu1%if{FE37n?8 zxv60Z-`>YXzg#`qQ;IB>hfwZ7?X{i`xbTRH_R!LVi!ISm`WHHDc^xZdIaW=nnJVl& zDSp^ym{%8Mpo_LOBG2t|GS+&(Mk<+Aa3N)~szVfcK zXkKw&N#fikJCE8NCOC0m&GqOL=KCF$G57Nn@Z!4#8)NKL_{^g|lp&sl#%%e!OH7** zAV4J3h3w(U)^x6(&=JR54e5qbDDA+qW)co%iDh8m`z6BeJ;?{pNvJ)~7^mlL)N-sm zS9Y?h@GSAuTVDn9r0r(b4bE9T3if`N(ONolv@73MZ!9BKx!^(5IC+0j*m2$vm%N8P z%%$;JiCX{3EgI3m5va-6{8_lfOwjU^kYp zQe>ad8dt`xK6%^3N;1V(qF`2uy;`@Y=A!dP*2v{0)p+8fzWc;&U7UgPW-K__$J#w; z<4U(XQ4-bLR2mk#6luP!*L6Q5m8pyRKYOTC2u@QxTXtLQ61JrZg`Mt>8J_aJl9&7f z=mQ7u);Z#YdsKXFxylb+I%qtdksSE~4H|pgyz5ihA^6D(8S)->F z_2uN#*s#;P<67ahSdpO16)OBq_)!F7?r%dLO9AVI>sQIC@1N01;(tTxKyz!Nw`xc;%&qrg<`}kRk7&d<9vFag&@T7rYq1I{GXJRHe4rRUVX<>|&fix@(5x%x)0O6A!jIY+?w*iLN> z`Yy^y*%6-gvE6j3&Pn61p>qy}s;I_al78ew43#(D)k{(}FYJ?0ol9=^u9&JE1;exe zWK(Ey=~usPrWo+F_H8iidmUpUkM?D|Z^tg|3XsZqZI+%b=u9n}<%1-0WQ+vdwze)a zkDzD_vEr*h{M)*13JHis$5d9C`XyIj7R>ZxXK?dR?D%3X55Wn7CS~$r=br&owHXamfB%@qO8KHquCzeO*7AiF&P?U#X>N3QOddhSD%5MllQ%#U)|Br4AvK zTX?vyAS;-*O%meXcwj_7TM|nA@V$b47St+Cn4Phf;Pzm1=l106knaFWj-WGJ04z%t}_8 z3;jowkd9(M5wmE(mnmB@{g$a(=1TW1>qsM}FJ1Q9hNk9^BCC|iPt&H-jkOISbA$z{ z<5;rX-EX%hh_}9-o9PT2dCT*-~$}`T)WOlmt!P1tYLI z-qLN?G#igywELv!2D5iFj4JWLva3zDYikCsFMSrg`!pg@us$0(LqlZ6%hiz77PB75 znamBEUIAD;@0}0nWbGZt8j$R}#HL}N33Sf&619)A@Z)ad+WFCtkx|4vr$yUv3=7~e zSG)o|YK>^BgvJi$BD~TF+bb|#uqp_Nk63(Wiq-Z9njU{_M?;fE2>}lP0KMcW>uT+H z-bWRI(>619AbuPja2A>YlOhFhxWsCSC-x&CfTe$@OZe-ibPe9y_*HFuMaP?Y(Gi!>MMvP*zPBsY^ z+~2fEhPYVl4SK*4+a}#?QheeSuI^3d5Cc_PAp>GTQo1k4sP7x~dQ>yDhQUIya<6V@ zPq#tpnrDZr^kNrM@puiI=P02;Y+=Pz@aS(J^o)F5bA(HUQd!i6Yqf`G02G3*iHMZ& zzOW%&&6jy zUZtblNU8i-?c?2tR0%C-?n)y-3mf1uq4{WM3GLx7m1=b2>R^zJMgSpMN*FyuZq&|E zA`it%x2H&e9))94hL83&ivgt zS|1(qc7Bm6>JLB4DO_~28>`F$GE?vPn z2QhhU$yqmV<*j`;a^lv3c!sAz%BpKcPqT?Q&bwLJ`u)E$c

e0^~BSW#t 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�=ubdN^h2o%#H*nI>D5m~4YgFU9>=bl4_RFP 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/cell_icons/4.jpg b/SDAutoLayoutDemo/Images/cell_icons/4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21bfc5d0b6e40bc628b2f58308de2954c1f64103 GIT binary patch literal 99804 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®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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/cell_icons/5.jpg b/SDAutoLayoutDemo/Images/cell_icons/5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4041a487fe71316b1662c2068711522704e7953d GIT binary patch literal 8235 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ℜiYR>_Idu2mVdXgzglhG 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/cell_icons/7.jpg b/SDAutoLayoutDemo/Images/cell_icons/7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53bbb37308f319cb3651a048000cf5957511c19f GIT binary patch literal 15087 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/test/test1.jpg b/SDAutoLayoutDemo/Images/test/test1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0d0fa3e626d9e72dcf946bfb16f4c04364101930 GIT binary patch literal 6394 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 OCO{%*bp{Im{`-Hk6}FiG literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/test/test3.jpg b/SDAutoLayoutDemo/Images/test/test3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..737e7bc2ee1e7d66cc6531075a1c644f3b5008ff GIT binary patch literal 12238 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Others/DemoTableViewControler.m b/SDAutoLayoutDemo/Others/DemoTableViewControler.m index 4577fdd..d469ae3 100644 --- a/SDAutoLayoutDemo/Others/DemoTableViewControler.m +++ b/SDAutoLayoutDemo/Others/DemoTableViewControler.m @@ -37,7 +37,8 @@ NSString * const demo7Content = @"利用“普通版tableview的《多cell》高度自适应”2步设置完成tableview的排布"; NSString * const demo8Content = @"利用“升级版tableview的《多cell》高度自适应”1步完成tableview的排布。\n注意:升级版方法适用于cell的model有多个的情况下,性能比普通版稍微差一些,不建议在数据量大的tableview中使用(cell数量尽量少于100个),如果有大量的cell或者cell界面复杂渲染耗费性能较大则推荐使用普通方法简化版“cellHeightForIndexPath:model:keyPath:cellClass:contentViewWidth:”方法同样是一步设置即可完成"; NSString * const demo9Content = @"利用SDAutoLayout仿制微信朋友圈。高仿微信计划:\n1.高仿朋友圈 \n2.完善细节 \n3.高仿完整微信app \nPS:代码会持续在我的github更新"; -NSString * const demo10Content = @"一个SDAutoLayout使用者贡献的仿网易新闻界面"; +NSString * const demo10Content = @"一个SDAutoLayout使用者“李西亚”同学贡献的仿网易新闻界面"; +NSString * const demo11Content = @"仿微信的聊天界面:\n1.纯文本消息(带可点击链接,表情)\n2.图片消息"; @implementation DemoTableViewControler { @@ -53,14 +54,14 @@ - (void)viewDidLoad [self.navigationController pushViewController:[NSClassFromString(@"DemoVC10") new] animated:YES]; - _contenArray = @[demo0Content, demo1Content, demo2Content, demo3Content, demo4Content, demo5Content, demo6Content, demo7Content, demo8Content, demo9Content, demo10Content]; + _contenArray = @[demo0Content, demo1Content, demo2Content, demo3Content, demo4Content, demo5Content, demo6Content, demo7Content, demo8Content, demo9Content, demo10Content, demo11Content]; } #pragma mark - tableview datasourece and delegate - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 11; + return _contenArray.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h old mode 100644 new mode 100755 index d4e5327..9c22e9a --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h @@ -54,7 +54,7 @@ #import -@class SDAutoLayoutModel; +@class SDAutoLayoutModel, SDUIViewCategoryManager; typedef SDAutoLayoutModel *(^MarginToView)(UIView *toView, CGFloat value); typedef SDAutoLayoutModel *(^Margin)(CGFloat value); @@ -171,19 +171,27 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); /** 设置Cell的高度自适应,也可用于设置普通view内容自适应 */ - (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin; +/** 设置Cell的高度自适应,也可用于设置普通view内容自适应 */ +- (void)setupAutoWidthWithRightView:(UIView *)rightView rightMargin:(CGFloat)rightMargin; + /** 设置Cell的高度自适应,也可用于设置普通view内容自适应(应用于当你不确定哪个view在自动布局之后会排布在最下方最为bottomView的时候可以调用次方法将所有可能在最下方的view都传过去) */ - (void)setupAutoHeightWithBottomViewsArray:(NSArray *)bottomViewsArray bottomMargin:(CGFloat)bottomMargin; /** 主动刷新布局(如果你需要设置完布局代码就获得view的frame请调用此方法) */ - (void)updateLayout; +- (void)clearAutoHeigtSettings; +- (void)clearAutoWidthSettings; + @property (nonatomic) CGFloat autoHeight; +@property (nonatomic, readonly) SDUIViewCategoryManager *sd_categoryManager; + @property (nonatomic, readonly) NSMutableArray *sd_bottomViewsArray; @property (nonatomic) CGFloat sd_bottomViewBottomMargin; -@property (nonatomic) UIView *sd_rightView; -@property (nonatomic) CGFloat sd_rightMargin; +@property (nonatomic) NSArray *sd_rightViewsArray; +@property (nonatomic) CGFloat sd_rightViewRightMargin; @end @@ -279,6 +287,9 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); /** 清空之前的自动布局设置,重新开始自动布局 */ - (SDAutoLayoutModel *)sd_resetLayout; +/** 清空之前的自动布局设置 */ +- (void)sd_clearAutoLayoutSettings; + - (NSMutableArray *)autoLayoutModelsArray; - (void)addAutoLayoutModel:(SDAutoLayoutModel *)model; @@ -313,3 +324,11 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @end + +@interface SDUIViewCategoryManager : NSObject + +@property (nonatomic, strong) NSArray *rightViewsArray; +@property (nonatomic, assign) CGFloat rightViewRightMargin; + +@end + diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m old mode 100644 new mode 100755 index c0611d1..bfa012b --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m @@ -412,20 +412,50 @@ - (SameWidthHeight)heightEqualToWidth @implementation UIView (SDAutoHeightWidth) +- (SDUIViewCategoryManager *)sd_categoryManager +{ + SDUIViewCategoryManager *manager = objc_getAssociatedObject(self, _cmd); + if (!manager) { + objc_setAssociatedObject(self, _cmd, [SDUIViewCategoryManager new], OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + return objc_getAssociatedObject(self, _cmd); +} + - (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin { if (!bottomView) return; - [self.sd_bottomViewsArray addObject:bottomView]; - self.sd_bottomViewBottomMargin = bottomMargin; + + [self setupAutoHeightWithBottomViewsArray:@[bottomView] bottomMargin:bottomMargin]; +} + +- (void)setupAutoWidthWithRightView:(UIView *)rightView rightMargin:(CGFloat)rightMargin +{ + if (!rightView) return; + + self.sd_rightViewsArray = @[rightView]; + self.sd_rightViewRightMargin = rightMargin; } - (void)setupAutoHeightWithBottomViewsArray:(NSArray *)bottomViewsArray bottomMargin:(CGFloat)bottomMargin { if (!bottomViewsArray) return; + + // 清空之前的view + [self.sd_bottomViewsArray removeAllObjects]; [self.sd_bottomViewsArray addObjectsFromArray:bottomViewsArray]; self.sd_bottomViewBottomMargin = bottomMargin; } +- (void)clearAutoHeigtSettings +{ + [self.sd_bottomViewsArray removeAllObjects]; +} + +- (void)clearAutoWidthSettings +{ + self.sd_rightViewsArray = nil; +} + - (void)updateLayout { [self.superview layoutSubviews]; @@ -450,34 +480,34 @@ - (NSMutableArray *)sd_bottomViewsArray return objc_getAssociatedObject(self, _cmd); } -- (CGFloat)sd_bottomViewBottomMargin +- (NSArray *)sd_rightViewsArray { - return [objc_getAssociatedObject(self, _cmd) floatValue]; + return [[self sd_categoryManager] rightViewsArray]; } -- (void)setSd_bottomViewBottomMargin:(CGFloat)sd_bottomViewBottomMargin +- (void)setSd_rightViewsArray:(NSArray *)sd_rightViewsArray { - objc_setAssociatedObject(self, @selector(sd_bottomViewBottomMargin), @(sd_bottomViewBottomMargin), OBJC_ASSOCIATION_RETAIN_NONATOMIC); + [[self sd_categoryManager] setRightViewsArray:sd_rightViewsArray]; } -- (UIView *)sd_rightView +- (CGFloat)sd_bottomViewBottomMargin { - return objc_getAssociatedObject(self, _cmd); + return [objc_getAssociatedObject(self, _cmd) floatValue]; } -- (void)setSd_rightView:(UIView *)sd_rightView +- (void)setSd_bottomViewBottomMargin:(CGFloat)sd_bottomViewBottomMargin { - objc_setAssociatedObject(self, @selector(sd_rightView), sd_rightView, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + objc_setAssociatedObject(self, @selector(sd_bottomViewBottomMargin), @(sd_bottomViewBottomMargin), OBJC_ASSOCIATION_RETAIN_NONATOMIC); } -- (CGFloat)sd_rightMargin +- (void)setSd_rightViewRightMargin:(CGFloat)sd_rightViewRightMargin { - return [objc_getAssociatedObject(self, _cmd) floatValue]; + [[self sd_categoryManager] setRightViewRightMargin:sd_rightViewRightMargin]; } -- (void)setSd_rightMargin:(CGFloat)sd_rightMargin +- (CGFloat)sd_rightViewRightMargin { - objc_setAssociatedObject(self, @selector(sd_rightMargin), @(sd_rightMargin), OBJC_ASSOCIATION_RETAIN_NONATOMIC); + return [[self sd_categoryManager] rightViewRightMargin]; } @end @@ -547,8 +577,10 @@ - (void)setupAutoContentSizeWithBottomView:(UIView *)bottomView bottomMargin:(CG - (void)setupAutoContentSizeWithRightView:(UIView *)rightView rightMargin:(CGFloat)rightMargin { - [self setSd_rightView:rightView]; - [self setSd_rightMargin:rightMargin]; + if (!rightView) return; + + self.sd_rightViewsArray = @[rightView]; + self.sd_rightViewRightMargin = rightMargin; } @end @@ -684,6 +716,12 @@ - (SDAutoLayoutModel *)sd_layout } - (SDAutoLayoutModel *)sd_resetLayout +{ + [self sd_clearAutoLayoutSettings]; + return [self sd_layout]; +} + +- (void)sd_clearAutoLayoutSettings { SDAutoLayoutModel *model = [self ownLayoutModel]; if (model) { @@ -693,7 +731,6 @@ - (SDAutoLayoutModel *)sd_resetLayout if (self.autoHeightRatioValue) { self.autoHeightRatioValue = nil; } - return [self sd_layout]; } - (void)sd_layoutSubviews @@ -727,28 +764,26 @@ - (void)sd_layoutSubviews if ([cell isKindOfClass:[UITableViewCell class]]) { CGFloat height = 0; for (UIView *view in cell.sd_bottomViewsArray) { - if (view.sd_bottomViewsArray.count) { - [view layoutSubviews]; - } height = MAX(height, view.bottom); } cell.autoHeight = height + cell.sd_bottomViewBottomMargin; } - } else if (![self isKindOfClass:[UITableViewCell class]] && (self.sd_bottomViewsArray.count || self.sd_rightView)) { + } else if (![self isKindOfClass:[UITableViewCell class]] && (self.sd_bottomViewsArray.count || self.sd_rightViewsArray.count)) { CGFloat contentHeight = 0; CGFloat contentWidth = 0; if (self.sd_bottomViewsArray) { CGFloat height = 0; for (UIView *view in self.sd_bottomViewsArray) { - if (view.sd_bottomViewsArray.count) { - [view layoutSubviews]; - } height = MAX(height, view.bottom); } contentHeight = height + self.sd_bottomViewBottomMargin; } - if (self.sd_rightView) { - contentWidth = self.sd_rightView.right + self.sd_rightMargin; + if (self.sd_rightViewsArray) { + CGFloat width = 0; + for (UIView *view in self.sd_rightViewsArray) { + width = MAX(width, view.right); + } + contentWidth = width + self.sd_rightViewRightMargin; } if ([self isKindOfClass:[UIScrollView class]]) { UIScrollView *scrollView = (UIScrollView *)self; @@ -762,14 +797,54 @@ - (void)sd_layoutSubviews if (contentSize.width <= 0) { contentSize.width = scrollView.width; } - scrollView.contentSize = contentSize; + if (!CGSizeEqualToSize(contentSize, scrollView.contentSize)) { + scrollView.contentSize = contentSize; + } } else { // 如果这里出现循环调用情况请把demo发送到gsdios@126.com,谢谢配合。 - if (floorf(contentHeight) == floorf(self.height)) { - return; + if (self.sd_bottomViewsArray.count && (floorf(contentHeight) != floorf(self.height))) { + self.height = contentHeight; + self.fixedHeight = @(self.height); + } + + if (self.sd_rightViewsArray.count && (floorf(contentWidth) != floorf(self.width))) { + self.width = contentWidth; + self.fixedWith = @(self.width); } - self.height = contentHeight; } + + if (self.sd_rightViewsArray.count && (self.ownLayoutModel.right || self.ownLayoutModel.equalRight)) { + SDAutoLayoutModel *model = self.ownLayoutModel; + UIView *view = self; + if (model.right) { + if (view.superview == model.right.refView) { + if (!view.fixedWith) { // view.autoLeft && view.autoRight + view.width = model.right.refView.width - view.left - [model.right.value floatValue]; + } + view.right = model.right.refView.width - [model.right.value floatValue]; + } else { + if (!view.fixedWith) { // view.autoLeft && view.autoRight + view.width = model.right.refView.left - view.left - [model.right.value floatValue]; + } + view.right = model.right.refView.left - [model.right.value floatValue]; + } + } else if (model.equalRight) { + if (!view.fixedWith) { + if (model.equalRight.refView == view.superview) { + view.width = model.equalRight.refView.width - view.left; + } else { + view.width = model.equalRight.refView.right - view.left; + } + } + + view.right = model.equalRight.refView.right; + if (view.superview == model.equalRight.refView) { + view.right = model.equalRight.refView.width; + } + + } + } + if (self.didFinishAutoLayoutBlock) { self.didFinishAutoLayoutBlock(self.frame); } @@ -1043,10 +1118,11 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model view.didFinishAutoLayoutBlock(view.frame); } - if (view.sd_bottomViewsArray.count) { + if (view.sd_bottomViewsArray.count || view.sd_rightViewsArray.count) { [view layoutSubviews]; } + CGFloat cornerRadius = view.layer.cornerRadius; CGFloat newCornerRadius = 0; @@ -1189,3 +1265,9 @@ - (void)setSize:(CGSize)size { @end + + +@implementation SDUIViewCategoryManager + +@end + diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmojiLabel.h b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmojiLabel.h new file mode 100755 index 0000000..40bc056 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmojiLabel.h @@ -0,0 +1,50 @@ +// +// MLEmojiLabel.h +// MLEmojiLabel +// +// Created by molon on 5/19/14. +// Copyright (c) 2014 molon. All rights reserved. +// + +#import "TTTAttributedLabel.h" + + +typedef NS_OPTIONS(NSUInteger, MLEmojiLabelLinkType) { + MLEmojiLabelLinkTypeURL = 0, + MLEmojiLabelLinkTypeEmail, + MLEmojiLabelLinkTypePhoneNumber, + MLEmojiLabelLinkTypeAt, + MLEmojiLabelLinkTypePoundSign, +}; + + +@class MLEmojiLabel; +@protocol MLEmojiLabelDelegate + +@optional +- (void)mlEmojiLabel:(MLEmojiLabel*)emojiLabel didSelectLink:(NSString*)link withType:(MLEmojiLabelLinkType)type; + + +@end + +@interface MLEmojiLabel : TTTAttributedLabel + +@property (nonatomic, assign) BOOL disableEmoji; //禁用表情 +@property (nonatomic, assign) BOOL disableThreeCommon; //禁用电话,邮箱,连接三者 + +@property (nonatomic, assign) BOOL isNeedAtAndPoundSign; //是否需要话题和@功能,默认为不需要 + +@property (nonatomic, copy) NSString *customEmojiRegex; //自定义表情正则 +@property (nonatomic, copy) NSString *customEmojiPlistName; //xxxxx.plist 格式 +@property (nonatomic, copy) NSString *customEmojiBundleName; //自定义表情图片所存储的bundleName xxxx.bundle格式 + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wobjc-property-synthesis" +@property (nonatomic, weak) id delegate; //点击连接的代理方法 +#pragma clang diagnostic pop + +@property (nonatomic, copy, readonly) id emojiText; //外部能获取text的原始副本 + +- (CGSize)preferredSizeWithMaxWidth:(CGFloat)maxWidth; + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmojiLabel.m b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmojiLabel.m new file mode 100755 index 0000000..bf03865 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmojiLabel.m @@ -0,0 +1,716 @@ +// +// MLEmojiLabel.m +// MLEmojiLabel +// +// Created by molon on 5/19/14. +// Copyright (c) 2014 molon. All rights reserved. +// + +#import "MLEmojiLabel.h" + +#pragma mark - 正则列表 + +#define REGULAREXPRESSION_OPTION(regularExpression,regex,option) \ +\ +static inline NSRegularExpression * k##regularExpression() { \ +static NSRegularExpression *_##regularExpression = nil; \ +static dispatch_once_t onceToken; \ +dispatch_once(&onceToken, ^{ \ +_##regularExpression = [[NSRegularExpression alloc] initWithPattern:(regex) options:(option) error:nil];\ +});\ +\ +return _##regularExpression;\ +}\ + + +#define REGULAREXPRESSION(regularExpression,regex) REGULAREXPRESSION_OPTION(regularExpression,regex,NSRegularExpressionCaseInsensitive) + + +REGULAREXPRESSION(URLRegularExpression,@"((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)") + +REGULAREXPRESSION(PhoneNumerRegularExpression, @"\\d{3}-\\d{8}|\\d{3}-\\d{7}|\\d{4}-\\d{8}|\\d{4}-\\d{7}|1+[358]+\\d{9}|\\d{8}|\\d{7}") + +REGULAREXPRESSION(EmailRegularExpression, @"[A-Z0-9a-z\\._%+-]+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}") + +REGULAREXPRESSION(AtRegularExpression, @"@[\\u4e00-\\u9fa5\\w\\-]+") + + +//@"#([^\\#|.]+)#" +REGULAREXPRESSION_OPTION(PoundSignRegularExpression, @"#([\\u4e00-\\u9fa5\\w\\-]+)#", NSRegularExpressionCaseInsensitive) + +//微信的表情符其实不是这种格式,这个格式的只是让人看起来更友好。。 +//REGULAREXPRESSION(EmojiRegularExpression, @"\\[[a-zA-Z0-9\\u4e00-\\u9fa5]+\\]") + +//@"/:[\\w:~!@$&*()|+<>',?-]{1,8}" , // @"/:[\\x21-\\x2E\\x30-\\x7E]{1,8}" ,经过检测发现\w会匹配中文,好奇葩。 +REGULAREXPRESSION(SlashEmojiRegularExpression, @"/:[\\x21-\\x2E\\x30-\\x7E]{1,8}") + +const CGFloat kLineSpacing = 4.0; +const CGFloat kAscentDescentScale = 0.25; //在这里的话无意义,高度的结局都是和宽度一样 + +const CGFloat kEmojiWidthRatioWithLineHeight = 1.15;//和字体高度的比例 + +const CGFloat kEmojiOriginYOffsetRatioWithLineHeight = 0.10; //表情绘制的y坐标矫正值,和字体高度的比例,越大越往下 +NSString *const kCustomGlyphAttributeImageName = @"CustomGlyphAttributeImageName"; + +#define kEmojiReplaceCharacter @"\uFFFC" + +#define kURLActionCount 5 +NSString * const kURLActions[] = {@"url->",@"email->",@"phoneNumber->",@"at->",@"poundSign->"}; + +/** + * 搞个管理器,否则自定义plist的话,每个label都会有个副本很操蛋 + */ +@interface MLEmojiLabelRegexPlistManager : NSObject + +- (NSDictionary*)emojiDictForKey:(NSString*)key; + +@property (nonatomic, strong) NSMutableDictionary *emojiDictRecords; +@property (nonatomic, strong) NSMutableDictionary *emojiRegularExpressions; + +@end + +@implementation MLEmojiLabelRegexPlistManager + ++ (instancetype)sharedInstance { + static MLEmojiLabelRegexPlistManager *_sharedInstance = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _sharedInstance = [[[self class] alloc]init]; + }); + return _sharedInstance; +} + +#pragma mark - getter +- (NSMutableDictionary *)emojiDictRecords +{ + if (!_emojiDictRecords) { + _emojiDictRecords = [NSMutableDictionary new]; + } + return _emojiDictRecords; +} + +- (NSMutableDictionary *)emojiRegularExpressions +{ + if (!_emojiRegularExpressions) { + _emojiRegularExpressions = [NSMutableDictionary new]; + } + return _emojiRegularExpressions; +} + +#pragma mark - common +- (NSDictionary*)emojiDictForKey:(NSString*)key +{ + NSAssert(key&&key.length>0, @"emojiDictForKey:参数不得为空"); + + if (self.emojiDictRecords[key]) { + return self.emojiDictRecords[key]; + } + + + NSString *emojiFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:key]; + NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:emojiFilePath]; + NSAssert(dict,@"表情字典%@找不到",key); + self.emojiDictRecords[key] = dict; + + return self.emojiDictRecords[key]; +} + +- (NSRegularExpression *)regularExpressionForRegex:(NSString*)regex +{ + NSAssert(regex&®ex.length>0, @"regularExpressionForKey:参数不得为空"); + + if (self.emojiRegularExpressions[regex]) { + return self.emojiRegularExpressions[regex]; + } + + NSRegularExpression *re = [[NSRegularExpression alloc] initWithPattern:regex options:NSRegularExpressionCaseInsensitive error:nil]; + + NSAssert(re,@"正则%@有误",regex); + self.emojiRegularExpressions[regex] = re; + + return self.emojiRegularExpressions[regex]; +} + +@end + +@interface TTTAttributedLabel(MLEmojiLabel) + +@property (readwrite, nonatomic, strong) TTTAttributedLabelLink *activeLink; + +- (void)commonInit; +- (NSArray *)addLinksWithTextCheckingResults:(NSArray *)results + attributes:(NSDictionary *)attributes; +- (void)drawStrike:(CTFrameRef)frame + inRect:(CGRect)rect + context:(CGContextRef)c; + +@end + +@interface MLEmojiLabel() + +@property (nonatomic, weak) NSRegularExpression *customEmojiRegularExpression; +@property (nonatomic, weak) NSDictionary *customEmojiDictionary; //这玩意如果有也是在MLEmojiLabelPlistManager单例里面存着 + +@property (nonatomic, assign) BOOL ignoreSetText; + +//留个初始副本 +@property (nonatomic, copy) id emojiText; + +@end + +@implementation MLEmojiLabel + +#pragma mark - 表情包字典 ++ (NSDictionary *)emojiDictionary { + static NSDictionary *emojiDictionary = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSString *emojiFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"MLEmoji_ExpressionImage.plist"]; + emojiDictionary = [[NSDictionary alloc] initWithContentsOfFile:emojiFilePath]; + }); + return emojiDictionary; +} + +#pragma mark - 表情 callback +typedef struct CustomGlyphMetrics { + CGFloat ascent; + CGFloat descent; + CGFloat width; +} CustomGlyphMetrics, *CustomGlyphMetricsRef; + +static void deallocCallback(void *refCon) { + free(refCon), refCon = NULL; +} + +static CGFloat ascentCallback(void *refCon) { + CustomGlyphMetricsRef metrics = (CustomGlyphMetricsRef)refCon; + return metrics->ascent; +} + +static CGFloat descentCallback(void *refCon) { + CustomGlyphMetricsRef metrics = (CustomGlyphMetricsRef)refCon; + return metrics->descent; +} + +static CGFloat widthCallback(void *refCon) { + CustomGlyphMetricsRef metrics = (CustomGlyphMetricsRef)refCon; + return metrics->width; +} + +#pragma mark - 初始化和TTT的一些修正 +- (void)commonInit { + [super commonInit]; + + self.numberOfLines = 0; + self.font = [UIFont systemFontOfSize:14.0]; + self.textColor = [UIColor blackColor]; + self.backgroundColor = [UIColor clearColor]; + + self.lineBreakMode = NSLineBreakByCharWrapping; + + self.lineSpacing = kLineSpacing; //默认行间距 + + //链接默认样式重新设置 + NSMutableDictionary *mutableLinkAttributes = [@{(NSString *)kCTUnderlineStyleAttributeName:@(NO)}mutableCopy]; + + NSMutableDictionary *mutableActiveLinkAttributes = [@{(NSString *)kCTUnderlineStyleAttributeName:@(NO)}mutableCopy]; + + UIColor *commonLinkColor = [UIColor colorWithRed:0.112 green:0.000 blue:0.791 alpha:1.000]; + + //点击时候的背景色 + [mutableActiveLinkAttributes setValue:(__bridge id)[[UIColor colorWithWhite:0.631 alpha:1.000] CGColor] forKey:(NSString *)kTTTBackgroundFillColorAttributeName]; + + if ([NSMutableParagraphStyle class]) { + [mutableLinkAttributes setObject:commonLinkColor forKey:(NSString *)kCTForegroundColorAttributeName]; + [mutableActiveLinkAttributes setObject:commonLinkColor forKey:(NSString *)kCTForegroundColorAttributeName]; + } else { + [mutableLinkAttributes setObject:(__bridge id)[commonLinkColor CGColor] forKey:(NSString *)kCTForegroundColorAttributeName]; + [mutableActiveLinkAttributes setObject:(__bridge id)[commonLinkColor CGColor] forKey:(NSString *)kCTForegroundColorAttributeName]; + } + + self.linkAttributes = [NSDictionary dictionaryWithDictionary:mutableLinkAttributes]; + self.activeLinkAttributes = [NSDictionary dictionaryWithDictionary:mutableActiveLinkAttributes]; +} + +/** + * 如果是有attributedText的情况下,有可能会返回少那么点的,这里矫正下 + * + */ +- (CGSize)sizeThatFits:(CGSize)size { + if (!self.attributedText) { + return [super sizeThatFits:size]; + } + + CGSize rSize = [super sizeThatFits:size]; + rSize.height +=1; + return rSize; +} + + +//这里是抄TTT里的,因为他不是放在外面的 +static inline CGFloat TTTFlushFactorForTextAlignment(NSTextAlignment textAlignment) { + switch (textAlignment) { + case NSTextAlignmentCenter: + return 0.5f; + case NSTextAlignmentRight: + return 1.0f; + case NSTextAlignmentLeft: + default: + return 0.0f; + } +} + +#pragma mark - 绘制表情 +- (void)drawStrike:(CTFrameRef)frame + inRect:(CGRect)rect + context:(CGContextRef)c +{ + [super drawStrike:frame inRect:rect context:c]; + + //PS:这个是在TTT里drawFramesetter....方法最后做了修改的基础上。 + CGFloat emojiWith = self.font.lineHeight*kEmojiWidthRatioWithLineHeight; + CGFloat emojiOriginYOffset = self.font.lineHeight*kEmojiOriginYOffsetRatioWithLineHeight; + + //修正绘制offset,根据当前设置的textAlignment + CGFloat flushFactor = TTTFlushFactorForTextAlignment(self.textAlignment); + + CFArrayRef lines = CTFrameGetLines(frame); + NSInteger numberOfLines = self.numberOfLines > 0 ? MIN(self.numberOfLines, CFArrayGetCount(lines)) : CFArrayGetCount(lines); + CGPoint lineOrigins[numberOfLines]; + CTFrameGetLineOrigins(frame, CFRangeMake(0, numberOfLines), lineOrigins); + + BOOL truncateLastLine = (self.lineBreakMode == NSLineBreakByTruncatingHead || self.lineBreakMode == NSLineBreakByTruncatingMiddle || self.lineBreakMode == NSLineBreakByTruncatingTail); + CFRange textRange = CFRangeMake(0, (CFIndex)[self.attributedText length]); + + for (CFIndex lineIndex = 0; lineIndex < numberOfLines; lineIndex++) { + CTLineRef line = CFArrayGetValueAtIndex(lines, lineIndex); + + //这里其实是能获取到当前行的真实origin.x,根据textAlignment,而lineBounds.origin.x其实是默认一直为0的(不会受textAlignment影响) + CGFloat penOffset = (CGFloat)CTLineGetPenOffsetForFlush(line, flushFactor, rect.size.width); + + CFIndex truncationAttributePosition = -1; + //检测如果是最后一行,是否有替换... + if (lineIndex == numberOfLines - 1 && truncateLastLine) { + // Check if the range of text in the last line reaches the end of the full attributed string + CFRange lastLineRange = CTLineGetStringRange(line); + + if (!(lastLineRange.length == 0 && lastLineRange.location == 0) && lastLineRange.location + lastLineRange.length < textRange.location + textRange.length) { + // Get correct truncationType and attribute position + truncationAttributePosition = lastLineRange.location; + NSLineBreakMode lineBreakMode = self.lineBreakMode; + + // Multiple lines, only use UILineBreakModeTailTruncation + if (numberOfLines != 1) { + lineBreakMode = NSLineBreakByTruncatingTail; + } + + switch (lineBreakMode) { + case NSLineBreakByTruncatingHead: + break; + case NSLineBreakByTruncatingMiddle: + truncationAttributePosition += (lastLineRange.length / 2); + break; + case NSLineBreakByTruncatingTail: + default: + truncationAttributePosition += (lastLineRange.length - 1); + break; + } + + //如果要在truncationAttributePosition这个位置画表情需要忽略 + } + } + + //找到当前行的每一个要素,姑且这么叫吧。可以理解为有单独的attr属性的各个range。 + for (id glyphRun in (__bridge NSArray *)CTLineGetGlyphRuns(line)) { + //找到此要素所对应的属性 + NSDictionary *attributes = (__bridge NSDictionary *)CTRunGetAttributes((__bridge CTRunRef) glyphRun); + //判断是否有图像,如果有就绘制上去 + NSString *imageName = attributes[kCustomGlyphAttributeImageName]; + if (imageName) { + CFRange glyphRange = CTRunGetStringRange((__bridge CTRunRef)glyphRun); + if (glyphRange.location == truncationAttributePosition) { + //这里因为glyphRange的length肯定为1,所以只做这一个判断足够 + continue; + } + + CGRect runBounds = CGRectZero; + CGFloat runAscent = 0.0f; + CGFloat runDescent = 0.0f; + + runBounds.size.width = (CGFloat)CTRunGetTypographicBounds((__bridge CTRunRef)glyphRun, CFRangeMake(0, 0), &runAscent, &runDescent, NULL); + + if (runBounds.size.width!=emojiWith) { + //这一句是为了在某些情况下,例如单行省略号模式下,默认行为会将个别表情的runDelegate改变,也就改变了其大小。这时候会引起界面上错乱,这里做下检测(浮点数做等于判断似乎有点操蛋啊。。) + continue; + } + + runBounds.size.height = runAscent + runDescent; + + CGFloat xOffset = 0.0f; + switch (CTRunGetStatus((__bridge CTRunRef)glyphRun)) { + case kCTRunStatusRightToLeft: + xOffset = CTLineGetOffsetForStringIndex(line, glyphRange.location + glyphRange.length, NULL); + break; + default: + xOffset = CTLineGetOffsetForStringIndex(line, glyphRange.location, NULL); + break; + } + runBounds.origin.x = penOffset + xOffset; + runBounds.origin.y = lineOrigins[lineIndex].y; + runBounds.origin.y -= runDescent; + + NSString *imagePath = [self.customEmojiBundleName?:@"MLEmoji_Expression.bundle" stringByAppendingPathComponent:imageName]; + UIImage *image = [UIImage imageNamed:imagePath]; + runBounds.origin.y -= emojiOriginYOffset; //稍微矫正下。 + CGContextDrawImage(c, runBounds, image.CGImage); + } + } + } + +} + + +#pragma mark - main +/** + * 返回经过表情识别处理的Attributed字符串 + */ +- (NSMutableAttributedString*)mutableAttributeStringWithEmojiText:(NSAttributedString *)emojiText +{ + //获取所有表情的位置 + // NSArray *emojis = [kEmojiRegularExpression() matchesInString:emojiText + // options:NSMatchingWithTransparentBounds + // range:NSMakeRange(0, [emojiText length])]; + + NSArray *emojis = nil; + + if (self.customEmojiRegularExpression) { + //自定义表情正则 + emojis = [self.customEmojiRegularExpression matchesInString:emojiText.string + options:NSMatchingWithTransparentBounds + range:NSMakeRange(0, [emojiText length])]; + }else{ + emojis = [kSlashEmojiRegularExpression() matchesInString:emojiText.string + options:NSMatchingWithTransparentBounds + range:NSMakeRange(0, [emojiText length])]; + } + + NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] init]; + NSUInteger location = 0; + + + CGFloat emojiWith = self.font.lineHeight*kEmojiWidthRatioWithLineHeight; + for (NSTextCheckingResult *result in emojis) { + NSRange range = result.range; + NSAttributedString *attSubStr = [emojiText attributedSubstringFromRange:NSMakeRange(location, range.location - location)]; + [attrStr appendAttributedString:attSubStr]; + + location = range.location + range.length; + + NSAttributedString *emojiKey = [emojiText attributedSubstringFromRange:range]; + + NSDictionary *emojiDict = self.customEmojiRegularExpression?self.customEmojiDictionary:[MLEmojiLabel emojiDictionary]; + + //如果当前获得key后面有多余的,这个需要记录下 + NSAttributedString *otherAppendStr = nil; + + NSString *imageName = emojiDict[emojiKey.string]; + if (!self.customEmojiRegularExpression) { + //微信的表情没有结束符号,所以有可能会发现过长的只有头部才是表情的段,需要循环检测一次。微信最大表情特殊字符是8个长度,检测8次即可 + if (!imageName&&emojiKey.length>2) { + NSUInteger maxDetctIndex = emojiKey.length>8+2?8:emojiKey.length-2; + //从头开始检测是否有对应的 + for (NSUInteger i=0; iwidth = emojiWith; + metrics->ascent = 1/(1+kAscentDescentScale)*metrics->width; + metrics->descent = metrics->ascent*kAscentDescentScale; + CTRunDelegateRef delegate = CTRunDelegateCreate(&callbacks, metrics); + [attrStr addAttribute:(NSString *)kCTRunDelegateAttributeName + value:(__bridge id)delegate + range:__range]; + CFRelease(delegate); + + // 设置自定义属性,绘制的时候需要用到 + [attrStr addAttribute:kCustomGlyphAttributeImageName + value:imageName + range:__range]; + } else { + [attrStr appendAttributedString:emojiKey]; + } + } + if (location < [emojiText length]) { + NSRange range = NSMakeRange(location, [emojiText length] - location); + NSAttributedString *attrSubStr = [emojiText attributedSubstringFromRange:range]; + [attrStr appendAttributedString:attrSubStr]; + } + return attrStr; +} + + +- (void)setText:(id)text +{ + NSParameterAssert(!text || [text isKindOfClass:[NSAttributedString class]] || [text isKindOfClass:[NSString class]]); + + if (self.ignoreSetText) { + [super setText:text]; + return; + } + + if (!text) { + self.emojiText = nil; + [super setText:nil]; + return; + } + + //记录下原始的留作备份使用 + self.emojiText = text; + + NSMutableAttributedString *mutableAttributedString = nil; + + if (self.disableEmoji) { + mutableAttributedString = [text isKindOfClass:[NSAttributedString class]]?[text mutableCopy]:[[NSMutableAttributedString alloc]initWithString:text]; + //直接设置text即可,这里text可能为attrString,也可能为String,使用TTT的默认行为 + [super setText:text]; + }else{ + //如果是String,必须通过setText:afterInheritingLabelAttributesAndConfiguringWithBlock:来添加一些默认属性,例如字体颜色。这是TTT的做法,不可避免 + if([text isKindOfClass:[NSString class]]){ + mutableAttributedString = [self mutableAttributeStringWithEmojiText:[[NSAttributedString alloc] initWithString:text]]; + //这里面会调用 self setText:,所以需要做个标记避免下无限循环 + self.ignoreSetText = YES; + [super setText:mutableAttributedString afterInheritingLabelAttributesAndConfiguringWithBlock:nil]; + self.ignoreSetText = NO; + }else{ + mutableAttributedString = [self mutableAttributeStringWithEmojiText:text]; + //这里虽然会调用 + [super setText:mutableAttributedString]; + } + } + + NSRange stringRange = NSMakeRange(0, mutableAttributedString.length); + + NSRegularExpression * const regexps[] = {kURLRegularExpression(),kEmailRegularExpression(),kPhoneNumerRegularExpression(),kAtRegularExpression(),kPoundSignRegularExpression()}; + + NSMutableArray *results = [NSMutableArray array]; + + NSUInteger maxIndex = self.isNeedAtAndPoundSign?kURLActionCount:kURLActionCount-2; + for (NSUInteger i=0; i0){ + return; + } + } + + //添加链接 + NSString *actionString = [NSString stringWithFormat:@"%@%@",urlAction,[self.text substringWithRange:result.range]]; + + //这里暂时用NSTextCheckingTypeCorrection类型的传递消息吧 + //因为有自定义的类型出现,所以这样方便点。 + NSTextCheckingResult *aResult = [NSTextCheckingResult correctionCheckingResultWithRange:result.range replacementString:actionString]; + + [results addObject:aResult]; + }]; + } + + //这里直接调用父类私有方法,好处能内部只会setNeedDisplay一次。一次更新所有添加的链接 + [super addLinksWithTextCheckingResults:results attributes:self.linkAttributes]; +} + +#pragma mark - size fit result +- (CGSize)preferredSizeWithMaxWidth:(CGFloat)maxWidth +{ + maxWidth = maxWidth - self.textInsets.left - self.textInsets.right; + return [self sizeThatFits:CGSizeMake(maxWidth, CGFLOAT_MAX)]; +} + +#pragma mark - setter +- (void)setIsNeedAtAndPoundSign:(BOOL)isNeedAtAndPoundSign +{ + _isNeedAtAndPoundSign = isNeedAtAndPoundSign; + self.text = self.emojiText; //简单重新绘制处理下 +} + +- (void)setLineBreakMode:(NSLineBreakMode)lineBreakMode +{ + [super setLineBreakMode:lineBreakMode]; + self.text = self.emojiText; //简单重新绘制处理下 +} + +- (void)setDisableEmoji:(BOOL)disableEmoji +{ + _disableEmoji = disableEmoji; + self.text = self.emojiText; //简单重新绘制处理下 +} + +- (void)setDisableThreeCommon:(BOOL)disableThreeCommon +{ + _disableThreeCommon = disableThreeCommon; + self.text = self.emojiText; //简单重新绘制处理下 +} + +- (void)setCustomEmojiRegex:(NSString *)customEmojiRegex +{ + _customEmojiRegex = customEmojiRegex; + + if (customEmojiRegex&&customEmojiRegex.length>0) { + self.customEmojiRegularExpression = [[MLEmojiLabelRegexPlistManager sharedInstance]regularExpressionForRegex:customEmojiRegex]; + }else{ + self.customEmojiRegularExpression = nil; + } + + self.text = self.emojiText; //简单重新绘制处理下 +} + +- (void)setCustomEmojiPlistName:(NSString *)customEmojiPlistName +{ + if (customEmojiPlistName&&customEmojiPlistName.length>0&&![[customEmojiPlistName lowercaseString] hasSuffix:@".plist"]) { + customEmojiPlistName = [customEmojiPlistName stringByAppendingString:@".plist"]; + } + + _customEmojiPlistName = customEmojiPlistName; + + if (customEmojiPlistName&&customEmojiPlistName.length>0) { + self.customEmojiDictionary = [[MLEmojiLabelRegexPlistManager sharedInstance]emojiDictForKey:customEmojiPlistName]; + }else{ + self.customEmojiDictionary = nil; + } + + self.text = self.emojiText; //简单重新绘制处理下 +} + +- (void)setCustomEmojiBundleName:(NSString *)customEmojiBundleName +{ + if (customEmojiBundleName&&customEmojiBundleName.length>0&&![[customEmojiBundleName lowercaseString] hasSuffix:@".bundle"]) { + customEmojiBundleName = [customEmojiBundleName stringByAppendingString:@".bundle"]; + } + + _customEmojiBundleName = customEmojiBundleName; + + self.text = self.emojiText; //简单重新绘制处理下 +} + +- (void)setFont:(UIFont *)font +{ + [super setFont:font]; + self.text = self.emojiText; //简单重新绘制处理下 +} + +#pragma mark - select link override + +- (void)touchesEnded:(NSSet *)touches + withEvent:(UIEvent *)event +{ + //如果delegate实现了mlEmojiLabel自身的选择link方法 + if(self.delegate&&[self.delegate respondsToSelector:@selector(mlEmojiLabel:didSelectLink:withType:)]){ + if (self.activeLink&&self.activeLink.result.resultType==NSTextCheckingTypeCorrection) { + NSTextCheckingResult *result = self.activeLink.result; + + //判断消息类型 + for (NSUInteger i=0; i0) { + [[UIPasteboard generalPasteboard] setString:text]; + } +} + +//#pragma mark - other +//为了生成plist方便的一个方法罢了 +//- (void)initPlist +//{ +// NSString *testString = @"/::)/::~/::B/::|/:8-)/::/::,@/:,@f/::-S/:?/:,@x/:,@@/::8/:,@!/:!!!/:xx/:bye/:wipe/:dig/:handclap/:&-(/:B-)/:<@/:@>/::-O/:>-|/:P-(/::'|/:X-)/::*/:@x/:8*/:pd/:/:beer/:basketb/:oo/:coffee/:eat/:pig/:rose/:fade/:showlove/:heart/:break/:cake/:li/:bome/:kn/:footb/:ladybug/:shit/:moon/:sun/:gift/:hug/:strong/:weak/:share/:v/:@)/:jj/:@@/:bad/:lvu/:no/:ok/:love/:/:jump/:shake/:/:circle/:kotow/:turn/:skip/:oY"; +// NSMutableArray *testArray = [NSMutableArray array]; +// NSMutableDictionary *testDict = [NSMutableDictionary dictionary]; +// [kSlashEmojiRegularExpression() enumerateMatchesInString:testString options:0 range:NSMakeRange(0, testString.length) usingBlock:^(NSTextCheckingResult *result, __unused NSMatchingFlags flags, __unused BOOL *stop) { +// [testArray addObject:[testString substringWithRange:result.range]]; +// [testDict setObject:[NSString stringWithFormat:@"Expression_%u",testArray.count] forKey:[testString substringWithRange:result.range]]; +// }]; +// +// NSString *documentDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; +// NSString *doc = [NSString stringWithFormat:@"%@/expression.plist",documentDir]; +// NSLog(@"%@,length:%u",doc,testArray.count); +// if ([testArray writeToFile:doc atomically:YES]) { +// NSLog(@"归档expression.plist成功"); +// } +// doc = [NSString stringWithFormat:@"%@/expressionImage.plist",documentDir]; +// if ([testDict writeToFile:doc atomically:YES]) { +// NSLog(@"归档到expressionImage.plist成功"); +// } +// +// // NSString *testString = @"[微笑][撇嘴][色][发呆][得意][流泪][害羞][闭嘴][睡][大哭][尴尬][发怒][调皮][呲牙][惊讶][难过][酷][冷汗][抓狂][吐][偷笑][愉快][白眼][傲慢][饥饿][困][惊恐][流汗][憨笑][悠闲][奋斗][咒骂][疑问][嘘][晕][疯了][衰][骷髅][敲打][再见][擦汗][抠鼻][鼓掌][糗大了][坏笑][左哼哼][右哼哼][哈欠][鄙视][委屈][快哭了][阴险][亲亲][吓][可怜][菜刀][西瓜][啤酒][篮球][乒乓][咖啡][饭][猪头][玫瑰][凋谢][嘴唇][爱心][心碎][蛋糕][闪电][炸弹][刀][足球][瓢虫][便便][月亮][太阳][礼物][拥抱][强][弱][握手][胜利][抱拳][勾引][拳头][差劲][爱你][NO][OK][爱情][飞吻][跳跳][发抖][怄火][转圈][磕头][回头][跳绳][投降]"; +// // NSMutableArray *testArray = [NSMutableArray array]; +// // NSMutableDictionary *testDict = [NSMutableDictionary dictionary]; +// // [kEmojiRegularExpression() enumerateMatchesInString:testString options:0 range:NSMakeRange(0, testString.length) usingBlock:^(NSTextCheckingResult *result, __unused NSMatchingFlags flags, __unused BOOL *stop) { +// // [testArray addObject:[testString substringWithRange:result.range]]; +// // [testDict setObject:[NSString stringWithFormat:@"Expression_%ld",testArray.count] forKey:[testString substringWithRange:result.range]]; +// // }]; +// // NSString *documentDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; +// // NSString *doc = [NSString stringWithFormat:@"%@/expression.plist",documentDir]; +// // NSLog(@"%@,length:%ld",doc,testArray.count); +// // if ([testArray writeToFile:doc atomically:YES]) { +// // NSLog(@"归档expression.plist成功"); +// // } +// // doc = [NSString stringWithFormat:@"%@/expressionImage.plist",documentDir]; +// // if ([testDict writeToFile:doc atomically:YES]) { +// // NSLog(@"归档到expressionImage.plist成功"); +// // } +// +// +//} + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_100@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_100@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..d111fd7b642d1f52436492691f3f29a010a5d8b5 GIT binary patch literal 2026 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 IM6N<$g38YlY5)KL literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_102@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_102@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..f6fb7a5145ecbb73f4763bd215320ff03ba86e08 GIT binary patch literal 2260 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 B!o~mq literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_104@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_104@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..9ac264460539cad90bb57bab78063111457892d3 GIT binary patch literal 2121 zcmV-P2)6f$P)u@>iS#KhNr|{k=e(Xr0O+L6=%AyxM;Ep~ zPsU{|9SapwEUr^JzM(TlK7Zy)Nyd`1R4gM4{pCuI_zihuH+_T_Nr_@ffoqheHcHCC zT4~2T6J`3)Qw#;m#KMzkB6;Ajv4UkUxG_tN{!QI_mNRp%{f^Z`z z6i^(>q|d=m0pHREfb=SB1E^S-Jb5xEOqlRQ#s`;Gk`#(I=@7c9(8K^%Eh9M#-rnAr zKYzY3^nEm$#-W{3)btd>=;`T+u&^-j&+iK$^k;h0>b38~f}fus{Qdp^%g`s0k!Wf* z3T=*w5!WVhnU$95#I>AU4SaoH?f)60)u)b|n;RA^SO59*;?*c%NiD-l72LulJ=u zfb=Mn_TdjUGvGw_BAZ z00+qic{aNRgqg}vW%Ct2wF|@w_aEVlxj#hY+|jtKl);?MC6qq`C=w+kj_;myL)Eew z(7yZ*bfedTx79dfvkKAnePt=P$f`RS!iOfoL>d9`fQr#g`M5!u(AsW;%I@z-v|oYa zzO&K1@^y5+>yNgT^I@3t4oY3u3)8*Imp;KkyQO&B?q?QV6XYxm1#y#d`vAHq8~m~Y z-shu@lEp5wUfP8UX{*@(v*96?U>k%{l7q!Zs(L60FB*qZN@Rcn2FSrJ`dYkowKG7A zlmLUY82pdYnFY7W)qF?+>70 z$t?{aX9+Vcot?OR{W`92hVwQhp~mK4xKBj_;9jUvnD4xK6PFmYxuZj5zwTly$_)nO zl@udAGXr}Q_6`P+u}qc(n8y-kxFkeo+ZaLA;goYOw2$!Qearj6|U-pCk7}V3imX5-eB-1RXc~R3zKGDll zG$R`m1{tIehE4aK*D)kd9Z~n(xI8*@aV$;MSNkmSza$SAE*nck&Br9G{E!r-p=8wl z)fW127c_1ejW0r6@KHnr8>>fEbF(OqI)-7xqEQ)47_V$>Kv_)<^2y(vL&A zPdOm_)5Z~!mssF+vUWZBRELwPdV?cws=Q$?n+vmcI?Q>$fLZN@(1lLexQSQSiV9&; zUtcGH%DK*Ub+w{d3v@c<6yziGY!*^dkM_^JSb=?BvVkGakpV0)ajMsmx_*-@9+dh4 zwQm76i(oGIV~AhDteMOZp4b!Wh!xA0a8sT^Zc!mFXtmI2i`aC5D3?=gJe9M4An73D zmGQ#(j(_ezz@h*|%UyxoAK>aCXUhQS!$?&gJ_6qs`UB0uK;v?tIsoR<*^i#WcxX2| zB7PC+mQEe1es{4SBBM5951TxqN(FBd#6rc!#dhI?RUbee@EW!Szli4K2{32>RD8#k z#L<=kD1M)0g@3U(=B#)D4ZEh`R`!BEfbR3JAa9)$k{6Te@Dh>{M`|GX91kGHhf_(l z{+FbVm`du%X{7#}4{Z;bLJIABq^jKD3Ukr4o~Kyo%TMwZ1{jN!#iS%lL{;<{pR-Ht zjpvp*qvd39DA#$e4cfHH9Qn>DQ+T)SC4`*{#E3y9s^YX>G-M2 zo(BL~`D#+}YOYoXkvelBsnUN-avF}|c)Ia#-mvy=P-`I700000NkvXXu0mjf)V}rR literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_105@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_105@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..d55bdba6f7c95f10a697f95ebf8acccb47ed6412 GIT binary patch literal 2232 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 Z_yu5ofk6&!2&@1A002ovPDHLkV1hM>IEMfL literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_11@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_11@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..c8e0b61487c40aa94d85d4e34cea3ce491991869 GIT binary patch literal 2698 zcmV;53U&2~P)WH*&XeyzTflvojqrkvpUOvIEvF$&+RvNkk57K;@ARR%x83|(1Be-J2p5DXm6YA z>8$7Rwi!18hBGJY!v)hgSvB0SvQ-zxR_Xj`m(J%h8Vv$MBn~P8&QSo`0W@?NR=cjw znjq^9&zy-cR=(siQJr(w&&G|f9ygBG7)aEQk(hCmSh`4}$(Cz)mO&Y!DA%FbYdGRC z)~m@LP#K_0Yr0IBO|I5=1KT)7sXxwcW+FQ82M>PFw8v`lqZx|Bq*EV}${Z$|bU;M_ z1xP4^2d-;y3}tZ2D946!2{&&uxF^D{+)Q%12IYF_Xk};MT5=ueY5DvHj|ptLg8>9 zet;FgJ|?Kh1k7(VCORYb08RD(M_tq3QArCDsR|@(AdwD{3XMsK8)6BxfmmE#V_D2Q zrw4$xWC@ou?gO@s+n^aO{n`m~W5TJv7z5f|V*jTujRt7}n#M5Hf~C z#0@cn1PFz&VurZMqM2HsWw3iI%@(vdU#G`L+b#PO8f)J` z#grI8NTQ8FAw2U*KTv!eF>VO%iGvj)8j~Om=>jABb^{Qrsb%pGA7sYYu0h%sT2Cp! zq6HoI8S@>{ar5=%v-XCn(Fe>|6$ErxeC)x zvi43oz{1%JT6JM`wH_Oxq3$mzOH0X#O4-o{-;kIzhWv#bfrue$iCGCJEfcR87eeNR zNRLc~HF zBzScILE1<}=Y#{aH%w_a0XibiAhpf=ArcK?p~Zj%5%VXM1P>bzhzKZwx|`-RCg zrK*g}YsWo)fc)V@*awHM1MWL+0P_I?=@!+gOn`Lr5Pez2nm2kV+8%-IkF)%B>jA!X z{iR&C^h;C=US9u4{;>IPpS}iM`}KJ&k#kqD=@|ga@&IHZn}tiD{y%S)Yxe$uc6YSU zdc4goQs_Q_fyGU!4oZbgvUU*LD;x9uVt&yzxAOhx|3T}LJ2*60V@R{^`S;k_z3;f@ zleHO^t^6rhefJT1kJNB@*xd8#hrHk2Tiqu0c~S|Rzdn2~<*^(9JsV$P`x6h~4COH9 z0Xk2(26U;|q3t4xx>4TPF(&5cUGZ&h{LwEN86IWx3%>@Ck{`*Y*zm%i2y1v~v||2_ zCtl;ql|SLdr+z7)FWONK52bnOtvwV=4rmP+w7}xFy%Y|7$ZNNLgO_huBIX-Ld$}-o z0AF7{VF1dd1qR~jB0KwR0G6-%1pxVxql6@;dix5}>%NTnZU8R7=`LF4EC68OV8sBQ zR;GFpcJ3Jj?fGb-KAERu_6{zY@)7N|ds!0O#e8Q!Q_~*4T2EX7$I0k&nM9_*aNZLW zjnmErVA70P9IIkEN?&g!K;`v9({h2*^$mnovMu@sa^SfF+TeKxjfG2NJjdkN2nk&V zS26}_KVbk|$NyqUO{%tmK$Fjz$(;{BSuqq*n!2=2c4&lS6oeLT{qX~Y6^ps_9m#|1 zq71kaM2up<&xA+iT60=WY$uj#db$#zclQT`we*HtShHmhk8aw^bzRpJw>;WrHG^aO zv#9|XKD0l4k9^()q4SR0Xs$2P(wOikYaG`{p&j46K|7&QGqC`!r*XBGs?M9DDCV+k zdG%S2Rb4|JJ2t-rKudEHN_nAWYCQn&zasa9tH(FH?nIT3AopY}lsx3f!;Zo8%_}ns z5R9&(?43ja&()MiqbzDcwBfOP=-a&=UlQuK58N)}!uiulDF;<5Krt`x0e=6RC&Kp# zA8*~v78A^DYRsD+m#QH+GGP*+O!er&NJ#@^ClX+r>p^ii%G@T!qUllvp1SKQp8ucQ z*zov0Jig)*cE0mF8tW4*zkC*y3Q_@OnBEv;$)Z`6d)_rcjB(!l)qnHsz25;~+5CD5 zP1*LJ)I4-qQNhNH0g8gH@wM%QM+w(sJ7{tPQEI0tZk!9rnBv|2S(&{+=S@rVU*BjW zsca~D;R6}hUOtmTzQFst1|)D;R~qw6W+$LrqB8rALd@ENAHv6h!NN%d@I1XqYdCr+ z%G57{7f~#qqggg5PH#R6R*YmSLCd5Xpklu2nfS(~(^)dNft`D^;CaHL)+CJyPs}6O zV%)PqmqMmX2%Z5C`o}5(-sU(`&!y7@x?pC_R-k>(R|=#jxkM76;u*t)p!%hP|Sp0J>ntF@>9#Q7F6c`kr#o|BVwmjXJJ=259f!YtdTg z;h|9|ly(e(DMtb+F>f)D^O)2Ss{~M5SN}5+gm7G>ZAuEypo2cwxu(<9V2``f*z#E|kz5Ou&6^Stv>nKc_nS#@9G6X-ddim~pPl ztl8shL8D>_Sej3A9uIA{$=jMh>A2$FWpQR@6lkPs+N+T_sLOD3B ziSe}nXF5PY26zPM0*FOnMq`ATjf(n|q9WOh6?h0C)6(b0xEv9D<5hpDf1UvXT7lI; z5D623`h=n>9RZ*|jtQvbFyn2D}*FpiUQyQCoP)$fNJ?GAy z9eYyCHU5wp{xiRMX4byD|NnWObLZS$DG}kMZj{?MP!6p%=QlL4hHK-3vy-ryy{Ngx4ADH1@- zm1SDi6&dMGG1{NRbJ+^q3ETn{KFk2Q9Y6W*-h=PI({Wp87k_YzL$a<2$&|qc2yp;v z0{FHAUKJ7v`|nC2fD(zj)V8TYW2?{MeJQ3-(=mg8ydD*X=>0HmqdBUTy-Mp2fc=MG zBUxX9bRA^sBeF45n3{%Uh(kk*&sDcncq3cn`Rr`2H|_2P z)}D6<{Nw$^=@vJk8kX!5k&fTEbPeww?PIb~VPK@hhV@IV5o011bs!Oqkbu^Rng1#( zdL0FbShOE^h-8&gslpR)x(sLyfFmlWg-N>onpJDsCs>kKf}YP?W`w~#_)l@Q*^&@ zi1{kkcp|{=8^h3P%~yX=U^u7%H?B_brA=wB`z;-2Lxg*Qt_62MCQll0i;o8ZXjs%w zvTojN!dq`#O}0J>z?1*{8p9{&LX*byw!hm&_mAH+#8QeUx9_I=r|+=4=Lljpy)|B} zD!Tt?ibtLuqgb})Z`+XM%h!b=O?Ix>AZQVQ9p^hjT@oA%9B+z-<{@wrhU}sY_uai2 zfMT)2wrwx4?a^-j=AnP1SS;HWym0J~p4Y`QUUtU&jkAs%_Ek6o{f1CY%) z+;?-9&tI3ajufU|x=PWUQ$(Bj-UV%9af<+7#Bo@%axB_>j>U1sL_`0`gi9UG3|*4sC8;1|bC;3uDYl{2;B(t7^v)^B`6cZa`~l-$-G!k zu=Cs_G(8!H_^gzQ)a9ma090Im^q+l8uN)Z2+w~IWb3mrW_hKhR={Ov~d7LxY9m|kLy;^q8J@@`TV*T9{x-hhu+vnt(LZ~ z0jM1#@~3A}nP#4Q{9Ang(Z6Eo(7R`Zu#0-K;DHtpKwBiL$=E*~=L~@Ff%XHmsRrNH z*B=hJ-i3wOpLYH_RD8ul?&e87(@ z^(h6AJ9h^JL<{KnEFVxMSFcDqnpzcSrrH1BFA$0RsUZL^yX+Es0TCjhZCBE-pn`hGwN13- zN;paYShi|4*M9nT`d|4eFa7H`0r>4}*MM6@l`S`HSyg+D;ilia+nE31qxYG5%}PZb zp;;_d3jyY}I6uATK2B@tRnX<;6Qmk^lv9n4$qpM=)N%d#EN{MFq*PAQ+C0xce(5*O z$^+c-$@R3iW^D(eC$h_y*K_?<&Ai?>#q?Z;Rclvqs(%lAo_-*_&UE&Ubt*EhB8X6i z88;4JSU>>Y0hpUe(9o*D(I}?^N}&So>deu;ypEUq3gpKJ?fkZ6`BY~c8$Z@!%|jdj z?Qz#lD_L46>^pcGw{XOa8$f%L;tQJ;by}e-ATi2dUi08|JU;yFoB_0!9uX*Bxw6{ek%T#>W!!4SiMb~38UuN|sndmO&@u@2pb3=QYlauoh?x}P@ z$}@&_WLnBG=qLobcK+#E$WdZ293yvLF*}|_%9uB!>OrL(;0BaXA?1=;am&1^yI(!Q z*PiI*k*D9~vF{BqaAYcc-TeQ0DbwDl0|N6&YhKD&!v`P;IqjoeiFg(v=|9*mP&y6xXHfw_0 z>#N4RHLI*yH$=sRp%6G;&_vq4(7RAbcMza3F`8g*%0b%@w!IY%<#KHZUi`%r&%8K6 zv7-50*Gj&9|5e;~=i0EEAcscF{PmCWJkvABMBa;5+Zxs-0+hv#K|H(qgK+?Mp3m1R z1z*cIfX9#aCAq4ziq@d~052dF;QOeA4^EYA0%QEP&P(Fw<}hGOuFeGc+$UD@%=3f1 za%48ZRpi%-!P$3Dx5mZwSit|vd0yQUbA5<=fTD1(7 zNdYka-V}|8C()H?j6zEGPK4Oo=IbLKk#4Eoynj4De_r3r^?JTMD9DcfLkjIVtXL_i zv@vfWAt*;dX*zm}Qn7hLG|21>a(o77StH4hwa}~_%JcEQvYm`_&yOt0J9Ja8>|=HLpQD3!YtZYus+u!Mtxm0EK95x-Zu61HD?y z)xg%O#{-8)HOEfD@+A(fjf&RA3RGkqKr1-&5z)@M8JE!jYdjvA2Z6%H{(++qwRpP; z;&bmvUNe%%sJULTIHO1wHXR%1d$pVOA_s^WH0`!wJ`3C#)~S*Zat`$X z&qt#&$OS0Lg{yGJ9is!t)zn(k1)!G?Q6K%O!AAi;3h-;L{{>NQfL!14Y&ie`002ov JPDHLkV1g>msh&%ADkn`a9WL65MD3p3Dt12sHiF$18BrPtDS@O$0M=x$x|Bwd^F7gPXLdL z$eaQQh=3xLLSRk{_<6N~qrh{(>FYCr@o52v&3q|I0!e*VY!IAq(;`1bCt}-$E2u&2W=_#0!WAJSL5x0VROuhy;>GPBIDgSqS|| zzYV>spn)e;d7=#Q^^Xu>{I0u+6hAcpUjb==Bo@Ggf|kZ(4w|BxL3BV4F2~ms8kIo3 z8R=b7I#&TW2z(BB3}|1^04?CVz#c^L%`UF$!B2s!flMH-GU`6j%xg@+6~qBj03Ov8 zB0zuy970gjB!caWrRofkjN zpsVz|tBA`;>N7NM-CFK`h8YiQ5PL}QC=Qc?h@ws*DkkqCQKTA~y>&qQlG5uA8~3X~ z`&uV(0N5`s;G4^cuY;=-@(S<#^Kq8Xo@c#g?zo$s`=4T>xfwzikqR0d0D_`K3kU&X z1POqG^N5eA_uvznn+9Y9AH?@R#4{m~xd*1lgOJ=^dX*=5= z`W>S5etD$!s7}y&E_^K&;!8y z*a1Q|Fk%dcH3np&jU*AI0#aq+U7ykIgqAs&(Ta&%NxeJg{2%Cm|rcuu+^|Vs736-**X z83eI)qCOGu5&`Ccxp7u#UNyGd!~k&$2pjdygJ0v1e(O==!2JFE`#=2y8iF|FvYU7q|5C;Vof~EJ*a{N#J*31K>YbkI1>s!3~t+#mLPha7s zzj%$TpEHt_MW|PDG(rg6_n`q|4EJdaxJnK>Ol34SH>p-&YEsy!#k22QJ@fKkTb^ty9_C39i&;QkB*pW=?Kj?X?&p;{3D<{y28&fCxP);~T2z>Z&k6hgOrl=y&tL0Ue@*)?I5 zYe}W%(g9@fBjv$i)|1`NnoS5D&@h~uT8IKohXK?Y5=+z| zYFQ&%p0^65nUH5=1&AO*Od~#t;GCI(91CI7fr-Wha}VuW_gv!vXR8A`{5Ce~x=q8X zTCf0&CSaxu7^0)9O1J09bJ`yo0F9?rg^((KB7*w>0YceL5J%aq04_((e1QlcpbEs% z6pYMJ3uNaubU*&Tq?xnshn$n+OyG5Ztfy2a1LB=IMgl|u2NpsUq%Krn>Gv*KhQ5L@aJxUR;272FL zBcxhjzPL;Tpk;Sb!5dgjHhcU%HP-8v`?pb>u9QK7RSTlZ%4%W(LMHz<&ZC6=2UIqI zd@Vwr7nI%50?H1Kgq!tb=W=4Zh74w)SLf{e17mP8!!2f1ucp+NGq{`)+kuTT(|JIH zRR~5=gbSCeUTzztVt>91a7=HA^j zckLv-bdJ~l{sjP8Y0R=<>JU9nvNdzn)zA;5*)6K-e8l?zPFpoj(SOh@Vbvs{2 zFv?K&Z_b>bAWMZ9I8-q97n-(ee6E1yMS(207O1g)rNR)GfS;`6r(5_&lTt*5pjL^N z6$C{$7+0$!Q02XIHP(8LEaNC}daN(?aTN1e;PFA9xo$hsXpQcW8Y2=NxDpWy;Hp(z zt&UWx3?+hE0Kxn_5YeG=LT={C477j{xUy8?y)(8x?T~XQT*H_8HmZ-Ik(IWvwi0Xt zq}lpu7!>%b;QVj}*&e)6Q(?WFw-DGw^MY)>`OM6BdY(6b(jXmJzGtla*AM{Uq^dqy z!17fg?c`{hf{~RqwJ@#%XlDDbX`e|I!>L-wodM1Z&gr^l7$fst$E!b@rq>nnoTFfH zjRB0Ks6HDbT)FJ&tpp39WeALvO4E~Fc$aMPBB8s=tq@od zAaP2H<9t?yhG+WI(@+|x?ELAoH8XFW&oJ}X`Tc-Rq78ba*OS)TnrEh⋙5TIjWn4 ztxs)Z>G&18Z@vL4Bvr*Zp`Rp(hx(m0TAynn2^N|dxwu$m;Y^LyRgawtw)4;aqTUZ2 zQ#gTgM3wzZZO_W8W3mQcpi$9KA( zEQLJdM2u$sd9?;q=1tl=a2};KE_u}#t8~SU@iupj*pTAO1{iS~Z1kk5v^26ONUE*EZKbxh)ijEdNVaIy{*l<(AQ9A(;I);6kQlr+1!Hx=Yl7DwYkOyRy|Xj--gDmG zygC|HtAfYDR#b^c`{>o2nS0LjocBHN(TvuJ2>+iE@Vmta1|sI+p_>g&pcfbb%D@mX z0SfC{h!81#$x1KVgG+q~crpaWP2Y`|~O)imHI=YHUe zUWi|q&ECisKfZ4sw|Vvh598!z0&(U5IQ4 zcKVVW0(vzz2_quScA+xR_xO|dmw#_r*LJ@UCYKTv>r7UrSaeN07y}}JAY!4x6tHRp z=ZL2)^=Zr8l&D#8u7bEtB5p`EIj7_Ev3%p<_s+mSKm9p8FhM{AP{Egi7f#q($K(x| zJd4_{^A%|TQPD8xiRPHZ)@*xLonk z!Wn`#17V5rH>TM4jRQQhbuTac%a60y707jET!hJ$G10<|B?#Nd9Akna#^gCT^cLU$ z+Dq(uY(LNZ<6*}Bt3sg^vZzOh@&eE&un#C-_8FM^`6Kg7NX47L5@zB}RD`IFWBZTu z!q@+U`MB%R&#-FXqu^?Yn*&<~S4FZ&#uvV^FMIY)=A-}N<=lE_2d)-#;S|KNfXJ|j zY@neLZu#u1mz9ByO5+Gh)0ij+VGA?oEkE0}9~JzChj{4UzQrGX<#7t_?fmqc|DL^{ zLaswIKvaUD4HL9*?7#^XUuezqXHR{ENB{Lc{^W_@2jJ)5J5C%!kPGSTw&WsFU%>X? zwuE{`TO5S#6@tiUt&<5k^6Uup*&3@JxR+Ib{%ICmzk(I_4RG5h?*riYFJ8q&Wi2xk zwn5mc#*h5yFaV$Uaz9Y%tt;1n>@vtgUyz3ssgV~8OP8`^c!ZmJR;@FTTO&M@t3@#SJ z$Z0Rm6(f>bs^V8XxD|j?FYaaB?xA$U3T}Dus{l-8LT8SR0O;pDIPv^5~9hBH#H0;xr8%HrjVw2T0b?iu82Vf4A3Y64(sc7SyQMYvGOk;K|Y_g~TgFec88 zq=_S$b!s9PLGRk@@nxjE!qCjVzGquw_gh*5&AzpUi3`6mU@E}SB@H;6BI0(66Xs?F zk_1UpmagfcWnmG3gWuew3tq|6dGVj_2O!D^+;(RdlIr^!OPK*I?+uCl5MFZASj{|-^UeFe5 zErS`G{z6j`af2C|z5pbNnkaP^x&0H%eWqf@Uw@9tw-52#qFQ-})5m_&$mWN#n|I05 zHr;MS7(LNKwW=Lx2QYTI--&mK$Vd{y^f`ezRwGMp?d0~4-%PF$0r1YtdwFj2GVR^X zV&dp9hju^4+0g^K5e@OZZCb8a$LWbYr_bbxV=C4%=-cR}e^wcNdNmC|FTx=V<%MNS z%L0RmA_zlf&ewSL`8S!KsN#VMLJGxBqFgI${;FY!GrxM4@t5`@f#5Rwa>4g|72mli zkElvZWjf;JBPHUxzT9A77?00<`_;=bfH)Zdet>~;In5R{m?%^e1OX@CIM3)W$C;b1 z(=@#BB{wbPraL;dWF$$!TFza_@!GLAs#QapvI)a(1H7AofJJw)eOvb@adk6h3C2X5r150!O}j4J+}Qw2s|YiD-W zi-+A;>bKF|h*Us!Ws{fVdZ5|J6)X}2U<@7IMLHH=3mA-n>2q@=^%Mkhxqwn

eZf z9mI*h=`FRIVRWpGQ(E)jtQUWUf7~5H7z5drB=nt~2x%=^7PQBNIRmCa1Spk4Xb(U{ zi7Io5H-NR;Y)+mo@b<|fb5%o1{5Q}Y7w@9Y_84)<%|>ymX^HJ7z6+Y z5dYWslA;D|3ez(o=O$Y?bv92D8}(*Wc8D+tQ~<7)0S~qTJAf@BWJbdBY&Aq&j=)Gp zMfSHS-w!&MfJa4*WK2^AoaIlgrO(-*&$$3= zql}Y-)zHxZhcZbe{Kth%193rAHFeZ(T!tBO1dnR~R4sv&Z|y2L}EJa%9L# T!ZD9&00000NkvXXu0mjf85=s^ literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_15@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_15@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..7fc3891d3b6ae8f6f1a34941c06297271c98854f GIT binary patch literal 2769 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_16@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_16@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..ceeaf9f1a9732387171874d2353f2d0a2aa8afe1 GIT binary patch literal 2786 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_17@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_17@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..d5d3037fb147508144ad4a70fe43c7090c3db08c GIT binary patch literal 2940 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_1@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_1@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..bd11416481a206a2c3e45cf4c4f093a2ac41d6cc GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_21@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_21@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..cfacf258ad6a5c5124d5a743bd30e45458362b00 GIT binary patch literal 2914 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_24@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_24@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..7faad3660ea2690f806966cbd054ee700514430b GIT binary patch literal 2781 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 TDPZE|00000NkvXXu0mjfX@d5$ literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_27@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_27@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..da90ab587c98824f39f19f2f06e89c25a95433e9 GIT binary patch literal 2584 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 klX3h;b6()Qzz>% literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_2@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_2@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..d3f4420142c4e62ce607bf1e4c978d6753c93b31 GIT binary patch literal 2849 zcmV++3*PjJP)UC+FhRt$U_=8^FhJ3uc8g&7+H|E|pjg{smwxOn?au7%&ewbI9?v`P<-QTBOtB>) z=}CUMH}B4U`}>`9?#G!~MMU@@n}z?&&ImXoz`@&W>bYC+UW|ONUu(ageE&RdGsJxc z0_d_U{J%(Q#W%4doT(%HU%^`VZAv7|i6}fD?>is^pZVq*WEL(2hXPPZ5n#N}#1)kRzYGe+F%*`HBqo0lPuzPjB7YH9T>eqOX@;_z04rq#h}Sg} z*F``jpnMwyWe6xD7SYTimc$~6Bk`qKXzQpTH%=(dn3R=tdan`K%;;CP%j6F*`8Oi+ zYlXaWGC+c1&tmRr0G4>4m^}O$CY}Jn4oO3UqUgY4XdfL*8gaw-7vsSnk6_QPVkqJZ z&1junfm=~ z>VSwg0JxtqfD_m|ZllKsZVU$;X9tt-e`WA6{`jkXGIrso+K|>0(r;PN%j9Qa^1v<` zYhBul6&vFnP!_S5$N28Q;`PTLl1B|~T}ZbrGIN^dG-COcABN*-afB{Wiw2UIE` zMltUrmvca%EQpqZ?d&fP*L4yH*MNSYirr6#p8v%9d4~M*>$l*-Z~Y0YzWQ*`ikSSt zVT|l}7{-*1%2WXd{`{Cc=(%PyF1~$NFo)acWX{a7BHrA6R2Fw@djbv3Hegv1Y&51d zk_kULII*Fw%beDJfSbwpVK)|dp)JMdzSD!bv#W+k=lRzmG9mJj>+Y2Ppv-sA_e8r=8jw@BgcI34-}{D{bMFs-g8y!j04Q15IuPLFl6uy_c|<;JQEgNOTc7M6 zUMURsliPldH(uRq=1m^UOKT?;$e(7+plRL$j>stEO|XgAcmD1-u@eg6yBcSw|EIH( zjt{Nn=;*E^0y-#0n1~m>P=gq=yXVOG=(G1p`y!`7t@SLi#rv&`765*MQABIkVi_BG z=01};wRY}VwzRY6H^uw~(uqkb3cL@`Q+@TM5J=?8OU#|V^V|h8e&DG)G0KD@?;G+< z7FbxYdJW(O*hoK#9a&ycjMowJP5+1t+1wG4YA0%Dlw7HJlMOg#}05!_*r zDMp%RH{h)Pb7a!%k8Q>!s}oqY+`-lBl32(6j^18$t+~LY59t}CniE)h$r>}K-G4#m zT)tN3@H^93)Hg3CtED{w00n~Y)lm* zjCsp@(6#ns;`z|DsRugF?&2K(G)A9)ndcl0=d`4PcQN@6`HXQEY11bi)y0vhLeYU& zmjE3eD!NLr9W956kbwsxi}SS^z1N%%SV@80HkA{R|IdPkLJ<MT%ri|W%p~9j0zB-jCjxS9trUSK&j(o^b5nq=OnO5Rh@q4p z3xFj;jZtkBGzbxCgD7>hZ#;iO5FuZ1q6nygdg_5JX+6Xf`rH|fgyqM?Y>36@gAGvV zeHEXaaZXFCjS$ls@}bwsGlXmVGG3`#m^j7}sHz-*fqF~IyFqGesX$0HxKUwZL`2?= zcPNkr3dj?~n20c9V#Ht z!OLBgj#n`F>q97vmCZH@as`vwJPtg41S2nup>VVSXxEI@FAJ+-b9LLB@d6XxG z9YaJ2B2nV~(Zi|0``}007O#xav4CA_kI0;PP+KdH@j8z6^;{H+FW#=mB8ei4LGu|jA15HV?wm0BPIPKdkXe<{ zQDc3K9gIwC#z%UV1?AY79Mi}h@nq3D4YrU^w>t4677^1J-(SSUze;gEG1tM;)lFz$ zk}&x{J?_G>eKe%}fV_yvO*t5RxrMzinRThES-fBT#h#NA5Pd6vtqf!W5iNkS9l*93 zQolxJpfY7)yok-3GKZ4cd7_=hC~p|DNf7z;S*Z|1fM0Tz*) zv}BiRYN;9lN(3-0Lp}!8ijadTK5@N3i0nK;E2550Br&|N36%S+~lLFu?ovpMg#%UhV0)ifIuO65#hNci*@8s14<H2+Oh=7$K zY$BptrwSIPr>$TC3epTym?N&PNJMCJX)6{jj2%ni$XF7kvIRFh3bv6J&*x6}4;(o_ zLVP!4ldrL1rew?F)09Bc_TktX3KXTjf)LK)v4rY9nHH4A)hCS|h_m z`XA8`9OMNs4M&0W_u00000NkvXXu0mjf@zqEu literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_30@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_30@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..31edb71adbc86699efd03790efb027d169675404 GIT binary patch literal 2653 zcmV-j3ZnIiP)^`i|rfRcTYD za#~w$Wa0phE2~v4tUh8ltqi3}+By~{CNYj3%q|#;?E*_-c@4YFK4SP^2y6kKVFtL&j4ohPJ-ApwB1yUh5Y#F*s#FX(3NA=m!J`A% z3Oo#~2X_5mP9Rqcz7D`xg9L)ciiiMIy8s9XLKIly(4rR5ez{0ZDH=psitu82Fp-vMSu8W(f zO(A!!1geQ`2|l&rUK-L3e6#19eB^@U4hQpW4#Ln4FTZr>B9_{hnOyEm9QMs z-FJv=D$VNUAHk#znHw^=4eo>sIcvNmJfOjZo5)rme`SFr{7bd9mnQ%f#gBYW75kVj zHd2D>*@o{QdxL?oAs+bIyZF$Gg*X`pQK3$glOb(f1}~IQU&o8(fpxW9xhn}g48R2g z1%n+H0IXW3gMU0=?3hpFU%bh^Mr4fsGHs8KK^T}UKE zC*N6XQlfJC1mfC66#$wtX?}gx3V!cnKS6Ukg(_^^xrfJJ+LIh_mW5f0HY&IZuo>7e zl>k5ouGoRhV?1{=O6R?AqN8+`%NszkT6$ zrsCG+xnqv8`PP;ql1@P?sqY;cVfE*G7)K)0?(msUujCi+{&5fk3SdD))CORE9@+dV zyIwxUrL;7-9C~^MEomSO(J;bm`+3C8acIx$&j9Nu71;MzYnY0brgK{b*5#UqaA!G4 zRlq|$kH6bl;PX$t!{A6nozL8VJCA+tXFxne8~{`k0jv+UOmS$K`@irqySvX*XVLW; zp8eu&EL)U;FoGx%C=N7p-EH@vmhHgWNd?M1k1`df4*p9Quq~4gX=(|QDR^GB#B;%M z*u8%c#AVS9xk|Nxq(EFq1ZoqAz=ohfGKosx|IPq|!vR?3uBAjpKf8SlllCB06L4K{9WW*dYusvh5f`duNKnuitrQy8WTHgO zT8Lw`QbaMl+rtQrLIw*l`(6|BOFzt#6-!aoJ0|-a>8dL4g{s}6F`Gt4T$;QXi5)O8 zYQ{Zi3}6++qT(b%j2E!ANyJH^N%$#C>HSY3@P&q!mR&$6kh`iK+58W$*^JuWu~CP} z2jZA|X|>l5s`aH3)Yp5he9$2IdyPOZ20e0glkQZIibUUH)M?Bb*52LB z+K)DJvS@O zj&g~PVnNBxi4p2&)H`iDXm&&{$l z-^B5=W9&OJ#6NWx0G0#X`w$(#E`Vv?g)Zm#-hcR?Z=+rcX3sMi&jH6&YiJ$owo#Z7G^tQ`9fy-+%lx zJ#UvWBGu(IZ*~KVug{Rn3g6w|&$4Ap_`}~_jVc>}&65l4f0V1C_w{GL1U!s_<53A_ zDk2U@O+;kMi#Q4_ea9^C9FEz#yTG~O5CLXoT-us4ES{HTZi~b6JAaCg{p2mElDx=W zLxDu%wXb&on}AN$Bzr1j@KQoLYsO!@sD+^cOR--WC@5hd1OW_=#?Soq4^9KD1Mpl! zb3=;OMvtdA|2C>R<%=AE_y-z&r}U>ws`={XxiY=t(URpfABl2yFYpN()B?13)wMG^TpraKN9 zj3O$*rF*JCkA3H4t~QA^HL(pqk@rAW-InA3GY0rT-~)jlWr6<&{j1ad`=_@I00000 LNkvXXu0mjf%LnUl literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_31@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_31@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..c629263c1c2c880fdfb0f68b49a5b65712b33c5e GIT binary patch literal 2991 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 Z{ujC~2ZBTV)+PV|002ovPDHLkV1lY-Z9)J5 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_33@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_33@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..028dc1cec95d908f030aed3e0369f94c7f77c060 GIT binary patch literal 2847 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_34@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_34@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..8d94d12c1496802ebc03b018de276a402db6057a GIT binary patch literal 2928 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_37@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_37@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..425c0ee0950628f476eb7f54ea4abcff53aa5c25 GIT binary patch literal 1227 zcmV;+1T_1JP)C6a8^v$G7^Yx5K$%)wXz4ITC?6vYg%&YGMWOgn2u3G>aW;mPp;2QYL@7p$3y}qA z{KuO#|E{{5)vRXGu!0?o9A(LUw^|?tm zw6KL%IZ89mtf1_30lBcex&nG=EDFOmdO1kSd|1_f66{ozlNFyX!DCtwB`?+9B4P%J z3pm6uBb+pka9sZ%QOI7pOCiyDU9%ax{HSv4U*vgtT7v`;9GlrE*a=RNW{kHvqcNuX zlzKx79-x;F+pw)9u#L&q^&Ip~3r{Ri9DFn|#PQPO_UgI$A^U zSe*}=%L&gAU-KKj7Y~ zp0X!GgsNf_yYYm8RUr(;Q62#+G88yk>V8L1UI8sAV7dAo#1?k(BRPT!WDI|oXTYLu z)Kl(SM1}=|=0X6~0@4=1bv&z>SQ9i)!SKSAqMxag*G$j~o~z+4o2nYnMmOVl9#N?$ zcv(>uD&RRB0@76jTIr&n+j!yrsugDWpFFFoGWZ5jnra559Gi*L%dovD7FZ+bvA~`w zZsJvy!`E1_C%Kad4Hi)SNuZe>bhDS!{Dhaa(;9;FJ71FJQ@&E=nWG?d9$)e&A)Jit7PPlxx_~b`MESRg}3-CVT0zY2i$kGvV+&?=Kx0;CCxjG z^F9+?;G)Ka>T&hbjB0*RJ#X*S+hP5a)dN!6B-+?X4+#c^7~w6(1U$<*#x>5W9#e0` z@IyRgmNg#XahUsD4b3~Ev=g_8{T$&KqxR7}ZBDBmRZm}K&3}RCDX@sAqxJ@cTeXo^ zVv6Wy4+9L6vd{i;PG}6PPN}y~b3NQ52c>{r;TEl_oVH03?R3z^Zu%9nU&w5gt%Q}@( z1WiO}rA;9n!gca0T^gOLJJf5_T!dzUJ%%spSJH+e8U%CVUvKH%@Nft>NViXUfw7^T#H;lG|(7aMhD;5kuR*Y?rf?!rz8Hh`n1NS p=g|tD)XYDsbg*{(rC#b^)1OwGU=d~FL9+k=002ovPDHLkV1h+ONPqwU literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_38@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_38@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..4decac7d696d5cb62ca930a495d477589a996be3 GIT binary patch literal 2171 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 FV1hRUfEEA% literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_3@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_3@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..b040da2f7b23b5f92f3d990f96da730fb5d26cf3 GIT binary patch literal 2693 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_40@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_40@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..0e62551b684840acec89d527b3ed607d15e7ad1c GIT binary patch literal 2723 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 A6#xJL literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_42@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_42@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..6f7e4045040cb275379880c1062293d4067c6f37 GIT binary patch literal 3078 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_44@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_44@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..bcf02bea3fcad5d1b1132f88842e62a125d0fa62 GIT binary patch literal 2922 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 UL}p#6u>b%707*qoM6N<$g2g_HhX4Qo literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_45@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_45@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..17cc68fe140f6c1280e45d579daa8f856eee72e3 GIT binary patch literal 2793 zcmVxGmen}#iuvXdsMFQtpvPLsx#-SkJ30+w17C|cC9Q1pWS zk%9t+(H4*#v_Mg$wG+2!;X1Vfv<={uOy{IwC1kq`187ZFbK2I{2_l zf>I%FW$8x%y~K+l2FscEIo~(u9L&;)2tUvA_(Zx5a2p`TRVw`Vr@2A(0KGsr&;c~- zITgcI=YRp=Aka@8a!yzjWF9|yEx?USgYE*J(a_iXoLaRL*sCxK!Z#JJe%%y+=4y!N zs40w}RYy03E>>s}PXMVpg_5JPCMU zOf|TGSVTfSVnRsykc>mtK@dWr961D$USOzNjeWNWKm+dwb}a^PgG3{k1b8vP2ZI72 z4kW}#1tb7hL8Joe5Ryi#B&iA}A3(`ct?HA&BS7vZ0%-U*fF3*#+S)Oh7VuNxHAGHg zOdO1l3T+uggO?QmQ^GhOaR#NNg7U@%Ndta>DOzy!Xf+gq{(1oF51&Y2Rfdm5b&s41TC ziN*aFfgY2H!#>LEdi+r^F~Dh?XmDEuTfi6}!K0=i zA29fX^9&yur(CGewlU52UtY)B&PF5=K-q!wnt>OWYo}}WLX)rE3yT2H8Q72S5$o81 ziNgQnjYP;`>Rj$&>uVtxN7)3L>4;-b{@ic#OXQy?T=n%a%7sT^_4yMu&$#4 zDVK3Y1I{3DuoBp(sH*L$!Ma!Cj!MPujf}Ut72_uvJ2j=@lj#O_KL0Gg|N1}i)PcVw znaMEl>c2BLF$G=Y#>i+uY384?M>2zWgN~`1+jy^nLd% z+ES6dSV$$bgcZ9J*je{hqEx7;!_e)u71!*wWbx9C;Kib{p9bK8-+6-dJ=-a^kHS zOw0$=I%1ulyGuh~c>6RL-Wmj8{f-?9(Y9?HOJuwyPNW-k0PgJVqFitc9i3+A{TaYS zRoJ8uZJRP+48~Ik5^-Cr!Z%9A%JQ>NxftTdyq(5Cih{h=Qki@{c$1#Gl>= zK?Ml{Fh(7ZgL5{r=>a0szg!FT+R!z}n^O8PQSp&;jhMq}V&98V`p%?=uW7XZB$MZc zxkge!TmTX(1Zn{!3O=jhYZ^P9r{V2x8u~s%;_zpQ9lIAZ(g{IIA(GW9M7esGYa#tm zWD-qDBp1j1U@Z)0F_SR>l8FRYYfU)5IMO(9Ww1p(qH98A1+fT@WaHApCzJ7|otIBz z#@E5|`;nP85-}ml6j`3E1Hg7i0K^*;*tgn|$`VEec>KZ7(UeW=jlcMn`|&1*BA;5E z?`>q82UkSb1kp+?KxEsZYy3tx$yA)C6^-;hw1aD9z{Zf_yGSN#0JdY~rpE6=gi~Av2ti(Oto4MzXPAK|F$%i8U zr^LoEfbThi3LW*dklOPN-nJR8D?udLMX;8HP z1GPj(tq{y{nV%i~klg4ciiKGK+E;F)bM@zGOteCx1RKs_vLi@Yb46x(0PBZ+%b0#~PdI z`r3Y4@BS+3b-zgGm;W5SmMwGUy$`@SwKxT!P;`i`1Hd^Mj!ZBgAXYEJ#~)mbASxPu z$Fr{yPqzb*$ga{5zx3Bb3UcZF0p9tmzvbxPe4F9_ImF11-i-Vc&b;bSu}94hDcN zhlsN%z`UzPI8@JWv|ohb!fZe=SB5ZL00;{?>XGr2Y>lc_^XmJ5O~cnOwD++VfT=51 z0U{r);~CJr--*oVhtmqs+PM;dE2sOo#nRabAl(!L>oj~AE`-l52cYDU4>%{e%NO&M zXG^qhYyx29^%uC+nm&C91<1qz7#$07nn_-8b<9FF<;3wqWX=y=jaXs*){Of zD{Q?hL+6fmS~g@k`_@_Bd;SsK%dCHJ7v;eWYh>-lH0_%*dgCh>=gH?v2&9{nG_@u0%O)^>oy^p#>(!jjOLZOZ5QH2<)7hu^o}ALpcKnf$w{s9&cDNKDqj<-Xl&r vK!JL$Q@wuUnSO4PZvU&nZGhVVKj->ihWo2(mF+Kt00000NkvXXu0mjffZR~n literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_46@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_46@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..503c4a24a68dfd2df4dae49cb6a7da9feec5b3c4 GIT binary patch literal 2552 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_48@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_48@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..e9a869ccc2c1a2cfa01478be47baf2d7800e103e GIT binary patch literal 2807 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

YWLDhd zJm|>B1<>?dHh?jDyBJMa6HKJs#T1L%A9$37x^2OBVcpF{p>_smM^DF#SUnCAP#l|z z13*(Y4?ySU9$MOxu5e@f8L?M+tQ|}(W^!+#a z^b`B}^Or_gcWW}E%um0M(FTBYix0YDsUa>zKw)h=u?Q+90Gh4g2fs7mj$`4E|M5re zvsehY8Hj=uT01{We3VcMtwVGOb7RAF?Ih8v%{`9AIy>+z$o4&Bkr(-0ni)OeOyLaO z$g-|B#LYl8z830qZCypKBbx-U`*1l;zWIs^U_o1SwB&WbuIbfll|;IN$ABywK8u%yN~IUM+oW> z`AnH8#6popTKtDC&ON_tKq=K*SQ}9KStq}I`z=BpB1Rnf8@G^dX>%qPpT(UIeS+?t zA5PW)kq8_Cn9$YHU%k(-o;yV>nsRy8-*Go>tJmTAiu&w0Qzr&6K?TqANT;EvXO`j7 zJVArOyPke)*Y6JS!#no_kF}+m@Q!b!VFFG~oMz}d< zjtQ9^3u*6)5D6(>nB(~22`0y8h=u2S_$lAwstdEMCC|1Mo6+4r=hR564Zz{ge&emr zU*;k<#{dEol1XW@WVvnQt!!JjjSIyKgeF3z1yVv&&Zl$Ta@w|Li1OlECXtvVgi5tD z^7?BO?%xa&QCQu??)yH)B0>8)mazHq#Ja0t)R2L6RCMn_rX>Z8FUn(wRTl?4s&TdO&CBFslm$z07k`_ zp)gQAx}!|$lP8eb<(P5-Rc(Wm2h9evyn=48Vr&rbP{xY`5C;H>15{>908}o`lkaSD zp&HB1(;TkBtLH)CL{b&fIsy3;G$>Ij=ZQi!iel)p0gR3SopE3 z^1-*Dk|#{WfhYxHNhBZ=R|9}A(0qeF){Q>M>SoG&S=CGDn`AaK|*5;~G#&QPQoJ37wTuP2CQXQIN$ zkqIP9e%7&gfA@W@xj38V-1H~(SKQJUBk6S3tc+}?N5Q~V7B-Ba)i#2nh z>Q+`_!;%C^wq5vQDaDDCx!62?z|aSM!O@RMpM~PAN2REdAV|OwF03@SwXj(2Hx|H1 zJafrDNRV8#OiVX%^fzr(Dk?Tl|J8a!(=RrJh+%HdV`dsmJ%C1lEP^1Ud*@o(*A<9G zZbgo5_icq}LC`QjTn&jr;jL3Sjt}Pu>Mn~jf3@Ea^dpRd9IDq<_vB=X)|@7n4cv1K zo&u#1fVmlVKlK@=PE99g-`OH^*KuCFprnE+;=aDmK5EI{74K{Fw^1M&o z-P_$6C(`umh=U6s6RvT9gi)YRYaSOH!q)qYQN2d{7?VP4NQfLn$?~BFwdO?~aTvwu zReei&g)?#>hA>n;#!!etdKZQ;n!zZfs1!q7MP2__gX;mV2lxZm{{cDRYy(d`A!z^r N002ovPDHLkV1lP3w^#rG literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_50@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_50@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..18dafe4c7f66b15aa3ebc369fb54213a3f6f9cd7 GIT binary patch literal 2701 zcmV;83Uc*{P)Y^G7eH@7 zs26E(dIM5|TB!8%OEDAyr4n%p0@9IBC+>r^Ms2J*U0b`q;CywB^BZ?V5mu z$Sb}2*48Y~e&6r=)>?aJtVD$WWO)2jxMtv*fq*5L|J@#10lu$T0}8+a;3i-g*y`v& z2^a&;0mp$+J6;7^3t>INf$qCcu3%vOI0)SB#J3`o1_X@5`&Stl298-1=`?CX zFSK`o%7B*!6@c;pNyH-|%7h>d#5ABuBJhBW0?$M04b(yiTHO2dAaLYr8#w5)RG_mH z)wdD6Ht^d~&FE!7rK|yjM7)?fs2apkVJn149SlGOL4ZOKB~S@b4GONUuqLjKfuvWV zX9FtV1Aa%$PE^czY|SWZLV*~>X1$KmRWNBpS6p=z%7A!)5%2&%fIuKC2u%};2548ZH{M&-J#SSvp0f|$zB+iR==41IA#TAm9s1e8l*W z(ij~==sOdf14h?upnSQC1F4KpD(xRtQ1FX6$aPtfwr!e%gFGtehE&m-z)N8v8cfxS zSISF-D-0qUya**4Q94=dcpl34k(esbm@q^)JOqvcLqKUg6?haOya1dDEZb0ihZVdW3cM_+jAPnXNU44E;BY``3Ynfx{I-m{S>Q|rPKXn;B0QAmBUY@9&_WOJ+``93 zkrjh++1HB@EiiZHIiCCOS2^?K z!$>p_dcnT-#?Kz(`5%0T`sFEWLacf1Xg~yzRv*%Gf#-o3TZQ2@R6t0a`3jIF+1Kv* zrh!s5P@c=aX6l7wMAgMu=mhApYqJLB@i&QTH6~8{nJsth1&JJ;0a{JiaY7OVzR(CM ztgQl$7$+VlUj8xrwgODO^e3iYJ^?_cD~Ci2h>mF%Del+-zS z*$e=ufBqC_fBPq9&sFf`(DjHQ2*C3=`^@V!<{N-VRF9}k z&*6|{e*2fdfS-y$M@iMvxqw|?xsx}KK0|$Of$39cEdknla|CH0ka%8(ZJ*p?MPriW zC9zTwjF!^s28;lV0sE?@D!FWm`H6XEPEV4cMR*4Tdv?+LksbKiHbgH1BrO3^EVP4< zeC;z#ym*@F*UnQfR{*F?&$ARg+Y01*vY@RA(7G9Ih(cp^t!h9-08RqTPgm%SZ=M_I zQ}-8&qbi5V;#@?L_HV#0*Pu_SN?gx43b!c`Z`6(TN9eCN6;pXl;cO zH5nn=-N!|(p;Xd{Py$9)HK3E~@n}pY&(1*@wwe&l?tRy>6uWNe1uM9LxQJ;o1PR%_ ze-lfw`?diq+6uPfU33&zg{i5?7RDGxv}W~PXnHEbfmBLy`BIs8&ezCq$nv3E`e-X= zQGUS9pX>*O+36bBZOwDzt^IC)S0q3Z-g$6416w+%Er#5jJn87{w9 zrMeK3>k8;DC#bG0RgGPWVT5hlsHs8FH;V*p_5FBFh(;R>7Nr2H}(ch25 zryibJ)xa@e-yPq+kM?5MvR1fs_5zp2FW^9>RHiap2B17KLs+W=uxoF>?d!0v0obs$ z-K4pCI{1;eq|vxHfPxi82s=6H{H2o_RQ$a0GY|*e7s5!hyLt&C4$=vJ~CjKIM5s6behB6o|m&nM>q*GFK4aJR=qX#y+Tl zUjhd%o|M?)l^d~K8wx-ve$PVS!{7}$ z^2IbDlrJ}U{g3bB@YD6Q(1XC?lh3?Olgr_L23jv#?{nzfso6qImV-xt(e?bucLeyN z%O+0js53TXU%xsy0t`7LBTg(X-s=pmivRZimAGc$nt{IqYt7k!9xM-N00000NkvXX Hu0mjf&wTPE literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_51@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_51@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..96746645f74fd9006d105e87d25b900d6ba11638 GIT binary patch literal 2849 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_54@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_54@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..164392fdf704ff6daa06417055cf640614c69cec GIT binary patch literal 2835 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_55@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_55@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..504b74106f0fc48ce383ee3ade39b1fe8df6a59d GIT binary patch literal 3035 zcmV<13ncW3P)&sVo8}bg;PywI-{m#)|gg|ubAjzWvPrBq^TfI zDVj(^Ci3ti%2i|Xrl6>)3Sh^Az)J* z=ME6kBhgU$BpObPL&M4Of(e9NKZk}No`v)HQz9l>6I1#KoJT~+;gN726ft`vWR3o= zLg-DmpNhDfZYdC!rNP)38;sgRLcHt+H2iZq8p{8y;}yAnN$yV-F%xw$Ptz;9M;?YH zsSh$2^nl~QZ{gS@9?5BOUQ9m)d24g1oZdMSFZQ_&6Z|_MbIEWto}P`ys#r9hiPKQ^ zS2R}6L&NDeC`c1{@=uyaj*X!R&LwmaL*dvfB63@t57Uh&Ul4(YV^3kpxUP7)Pe)7% zz6F&BUPoii$7npa3{B?~2>HHLyI1|52$_$Dir457dP9k***6L?5qDr(&yIMp_b*V9 z8xF@mhQMKwkjx9aaU$xs_jR*pg;^at!eGk_M`1!QtQz+lB#il`fs`p;up~c;`ZLLB zx|k-|jHbHvX!*8*!MxuYh35FFnQhGTaa962V) zo`g;I_q%2Rwv0aUb(toVr352oqMNbd!iVm_yCZJrr*SWJW+?1GZpWp@UAW}TMpJz{ znr!RDBZ*2x_QC^Y&R{i-L(;apm;xT_X$CN;!b zy)gv&@A`0YMZk3=&z|T?!Vpoi<1Jl8Auc(xP?Kkt=%9@C*c;~rhww5zVRi??n6z^03~3@yWO}b z51B#ObyLFCdb?IWtEEwUrqqOuD9)T_c#&bp!LZZk86KI{x1&~9Cf%jggFS`-T-bCU zgcD(IQ^3I`K4t+fSRzC~6l(T9V8r(9fwvk05~fERBzRw?!RI_sdup|$&n;5SQdJ6V zs{IrjW^`B26UPVATP*|-GkSM44)DRXAr#QU1NCXXASa?t0S7+vHVd?F@yJNkK^|Oh z6d@KLh661|;w_3<@z*a&@%mhdr${AUtrfAFC8#QTRVuh!b3))e&L@n6OYC^Z7f!1* zcl*Ox3t9*$UFHq)YEwYb2cBjDoZk;)+sn>TwZf(8Ly3o@2~&t}A(Zmn2bLw$n`95x5B6x1qDLr3BYIqc*Cfqn{0)E0IY!KrJmda+K{&o$>W{oPy^uHG z6UB*sxUeo2$)!iAXF;c7(uOS30Q$(_eDOiIg5HGaOyx z&uex6`_&;NMUWtg8sIfyJlCwwVkI#@92J>i24U;p?vu_l7-!OgkUOudCSs;L%0Kgj z@E~aYs~efGxJPQ_J#c>K0J@u%Ssm!=>;Xuh?x8lSwG1UOf+Sthe4iFKh%+fLyJgMR zh?cCmU(T4^FL_Xdbr|wuz16dAGu)9A<3U7UwE$TlURh^VFtY~JrcsD^fN6b2K$YPl?>Nf zggyOHveMrOK^}Y-L{@WExlc_|A~I)n(a(ds+w}f9b%L#j-o>sJ5p$V_CF7~z5Rum@;0gY9 z$R1yNRdi(08!E^1dG6dU{0BjZ^-&envCD+>nITscaOt~n*mnfOx>$?xQ<;PKhp;k8 zQ{6_2U=Jm0k98Gbx*h=%D#PhkhK^V$N!sLi)!$U)3|AZMitWOxNn$KOgldBiFZMFX zAC+)ISrnS~_EX(u@e(gBgw}+zwcvWq|EV%OSwoBvBA06wFjIh{gg_P|_C1VMwhG*U zbwD=YA@jhoL~mS3>jrzKzo3VzqRyNU)D;ZG#lmn!{@+K2!Or5e*@wLi=L*StSlB3n zp(Gf`wOJ^et#7>^0e%7y)qFoLVQPF>WsT~*LA>9bDGcnK(;3!}y5Pj8UMOGXjq)TP zRBrG`<$8aVuk?iV!+TIL-ve8xcfyxb^ct`tkQs}$Lakj_G>qA)d3{y9u17>%b0IsL z9Dwr8p|F0^-6&-Ak`Rd$BnxZ;v=f}0F0ct;`M^ik4#COwLCA_xp+mIMd0u5bxB@Qg z3^z``%Osd6h$B)b-DTDh&ujfzq|4fo%_3UCEVwLvUT-+XxxnuRuI)xox~v`D;pVtG dZjS$-@gKKFv}ndfj;sIx002ovPDHLkV1nJK&~pF) literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_56@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_56@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..90eab332c415c53f7e16cbb9dd158ebff8c8e66b GIT binary patch literal 1628 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_60@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_60@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..00701bb7563838c4e703df12e243ae2d7b22faea GIT binary patch literal 2302 zcmV2#;)yy><)KiwJRtFa$U9Qn$4ZEX z7e1aG5L6W}%}aqIRY{R3NEFG1R!OTSHBEvYf6nfDKWFYeI6EU>S(cDj7%5d_>92Ei zXIK9J?m1`g?AW5Je3*X>@KFZ118@f*%!1dA8QIPQ0dq@aQ2_CmL43dqdE#y)FqqI_ zThMY5h)^myqS26zB|%kKf4j1JgA>5Agp6m;|PBo%Cy60W9PKcnvtY zaicM93PKPXN+Su4T0(uj$;wKBMx9;e_Z=WN`y?=f2_{iX`sy0d^cc=5reGKvP$Uv0 z3@0TpljC;_h)f?iR;G4yfclL(>sKnQeo#dfn(c^2D?rtG^ZO6LEbycR;WR-AK?Gs| zC0uQyFWrF8meG3#(9{wR7cqqZ31mwKjDW(>;fTSpA;#}1vi44$)pu8@H;R}@&RXlu z?p@)`lr82-_IW>TDlB?7D^EHA=m5Z``2)v8ATqM03mB7RaA2Vg`ht| zJC=_>6qW}E+?-o&o%&w^rUWhslmYDH&k=p;NkkwB3`PW1#fqXpG(5(}?5`R7**6HQ zi@vS;Mj%RXZ`W{_s|24L+tN4`1a$z4x*R4DaLV|xXl7-#H4B{U9l-DW1rf?3;KuJJ z`1<$hD~2SA?N%T(f>Q+?&Iy4CX0S|r;(HwY-49U!1W*VH=)eK!G)VutM*8xdsjdJM94G1uh&2EWgs&I zxm1H0PPH2o>u|*(0MHyla}WhV0fAB(9X^OQ1^4B~#Fo9*2@c{n<`CAPHZ7MccT zw)ZwqoO7&I8jKG0qq$jyZl0NUbP~IzG&i1I&nvN=1HNiu0Y(lXtxYtp()r^uI#DEg zXoT=^5r8O?sXfntbr1+=L~`GG1Snp8ot3!WH91f!V8qwQIi;PX)EaGU>L}j4lpD{6 z91&1J6jbs^1||Z1Lr8H;^$O|DD(yckBU=EasS(md_XywzcN%uJHhu5^1zG(U6^_wK zEq#R$V+^WFl3E(Agd|B3b&S06D{t8EJRZUi44RXOAs8A(`v-BAbvlbJ;>Bg`NW`82 z6sEVw&Ho-W3mkgkJ1jo^Tk5tZKd-(j zn4mym{0KBQ=~UN9zCi7`J*Q|^xdD*ckrk;koWxMS6(1}`8hr{ zZ1`A7=?}AO>L)pq`dI*96%{`%VQGj?ZG)zBJso6a1-t-YJqcK82W%!nZQ&A^PJadN z{UXDk`~poitlnH=>CzjNs@J)9P&il+`U5y(6eIpD*kKs)?UR}Juqvd@8fsG-j-CKe zFC1WiP}Dys5*QCHoA3RZ)yuEba0VxaqoFX`4~Gj7W+$|7Lo%b@pq~#^{51dsRoiW! zwsK4Jy#eS>^9l?Gjv> z@vrG@#;9{tEC3gK1Muc?xdLD!N*M?Y8s*D_achsYpUR!rCnLW0V@_1E($%gP%Q_@P3O_eD3Iqx(Y)%QxGbsxj|B+qFz>72 z=S{a`ySk2Zj%5pN1reUrUY<@@Eb}hUoq|P|Tiu?s|Z7|aFeHZ|baP_lcdc5Q<+P1$g;XhC5? z;VB1r?QMw9Z&>2tfO1j5>CP^|r%0xqs{*S26}#Wz+eHOjYH2s?UGq0BtU3^gfm37= zpr?}<;Mornp1&)Cz8pe41e(hLCcCy9Mg(-{Ecjj*|7p`|(NX1t6lx0j1fBAO+Y5l# zSqqPCK};VBVaR}0&>Uj-K?kA`_zCys5fuEb0)llZX{XcO^>u|C7Lv?-tnifhzV97C z{WhMmaN%0Y)S!VQ0Yu<;Ucl(ik6F>RJyo#`}hn?@~J8=v= z3e44%nQEFADnb9^-*DMzg9V?s@_=$gB3i}J-b^ewVW`M_l>5ekl z2G$*ZCM1i_=im=O1m*=UD!e9eeqaAe*$W7OLK&DMfBO7iDmd>W?6*GZ|0{6^;10ll Y05M(TlU^rE7XSbN07*qoM6N<$f^onW6aWAK literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_61@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_61@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..9d5ccbed48ed7f307c782afbf877f460acf0497c GIT binary patch literal 2536 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_65@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_65@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..9edeb47d7431c7d7000321449b79948a484f7eca GIT binary patch literal 1483 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_67@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_67@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..a0c07a61b9ecdd80d391ca79509361d2508fa956 GIT binary patch literal 1517 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_6@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_6@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..215159d3a527f6d77d398b0e716ddd525de71f93 GIT binary patch literal 2289 zcmVL+t8IKha;s4nj{BP|pfQMV`dygn&wSz~Ww*UmAHOR1Z1j8#? z#lMq*tRf@&=wca%esu=7Se{izioJ4yW}Sf@viY5}Hr8>`tTT|VF4jKQZq@--Hzr%r z>dE-~MC-GWJ;Ul{l_my9_Rc5Yv41`R+LH7N#1_^bR=@q+sersBS1AAr$^o35fnyB9 zF$ItXg6fn#1O|s$g^94T@BaDDK)1bE536W_dJgP;6JL4uGgz~31)K!|+*}CdX;uV) z05T##%c^}sSY=fR$KM*rzx}6+JCIn3wH3VX+O=MK1{p^Dq;p{S}defAQmW!b?r(ONA{h?`)89red>#=@MLjinaJ#c zG5d)q6<|%*nOQfnG}-zM4;A<9{}#4v--yPAbpr6$KmQ9q-|{-%Jo+9+YYl*x2i#`X zA}F^B%4qI1XWu%Mk#IuQ}Hy&P(Hp z^EIxBnmEIPa+|qaJPdqr72p!-`1&S^$94YNx?(9{#z1-$&>j>VT)i@aFFp4-U;-rdPJl(D2jkEg7G;+bq&nr76|A8nQwq7JAlzqk{;LF2cU5D&5czvnZh=8QleFjQJzD9aHYYxOBLQ zB}0HhR=a0e9TqRPfh0LI+A?QAhdyldd!Q8ia05Twy#eRXRiznU``lh!Ze2GC;JJVF zV%3e0v2^7MwBC2Gj7&HI%SU7LV!Zf=pW@O#KfvXdhw)m+p2_2}TEdUcZwCbd;QOGO zk3~%(Mk-#Ozz{@RZ>I-3$>=s!7s06y0M&r@CsqR9Vji6fFqPf^=o+js%WqBtq=Zk@LVhB4B}teF6eDHx;S zE($X?F&X`YM8MT{69U0N zK~L)diPJYMXvFdXT>}|j&CL)RsYX+0+;bQ}15u;ilcAB^jlm8 zKr}4CHXGLY8ekzv0+0egmViXOB*}M`Vdo_S$dCaefrqi1DI*uPPNkNRl#Ct`K(g6_ z39RBw%#Z<^ERZZ(E9fXo6DJSd$pj${5`ZARhRrB5j(~JUvN8DglQ?&{2ZN<|LDCDh zsVPeH-UiJiE6H!NL=h{@HiZO2`*uS}`Ph;O0ZIYTHC82-KQxHpix*KFx;CMVQUSzg zGZDfF1R|}(`6$X(LMH$eO=uvULrwyLX-Y`$KC7`e1D8f|>YXvDwi;H+NDZx`^cIj& zV?ZpJL}Rs_0I>SAWT2mga15YGZgmp?iqe}{B0MUBW>JV_yh;W@)AWEXbO~AvVlz+~ zbrDJiP|A{lKCt;!pfRrjE%zlcYHAOVFOCB$oT@vTM&U@!?o+2fdFNw z3;?Y043t721zpo{9ee-cc>)pI@G2gDkwB1|YPh!-}-R`Thn3z8qjL z%;u4@n}|w&4X6$oNFfF+lL9~{nIIya{HASLgpt(vlx9fgq+G`sTwv#ihh_To0_dB? zL%nD#K&OYx3Q8F?GzV!V6h{tf^1ThkhZ8G`QUgF?B=7_OuE)T~^#}r#nSbkC{;X0W zc@{-a`MQcDJe5i9hGE*hO_G`VXu5Min)ba5jqrVO{wV}o&iLqPnNDL0Vq!L ze@w%S1#ld~&7Dj{3B)udR9U&E1aRb2Ec5$;ZJ5!HPX+MJH@dLu^55V(MxLN@o{^}M z^gUs?;>n5n;j+)-__iKQVSQNuev^`cIcp@hq|f)!X0+R;jT?`D9f=TGjoq`LA3z&s zYjXf7ic&8A*3&Qd<7u4u!OM?zhXIN)fQ|vm$9{RX6Tkzku9O!j-I58`odVd6bQ7n3 z{gboZT`xYC=D=yBTU)&U9Rlc=jb~{b{j84lBfH`5KYPqkcLDwjX7Q^TAOCT600000 LNkvXXu0mjf(3BUd literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_70@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_70@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..2e64191d07fba1a4e31c0db8bde32ac4610ce80a GIT binary patch literal 1044 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 Sz_ca+0000hr)K(d8Jpzcjs4aoRVx8(e zU@x`R59oE>0}{0~47|=d)^0%8>4S5?5Nj-xRcc^hAkiFCLzl+SCf_~&Ccl4aYIk)h zMI*-U2k*Kvv1RMd)O79>!@%HL^@8aeU^V*GCHc`4vn{E4HqgDJ9V@eW&+lG5vxf>j z+PjsVTjNaI9Z4YBeRX&TTE{!G`wr|wNHX zHpv$9n)aB*YbUZ@a-IEh9jk`%6tD+^+zq4~>4E#?N5eur zS!Fy?x$BPn@dWqYa&a)qN8ZWur`Ix6>)F37a7VXh$2K@Ro#W}3&Q>;lYM^uDebpm; z*^YAp$t2KIt11kivX&+!_tY}KR_cgEtcNbSxVsW!OV`XW&<9)rSm(0}?Gv*p83o?> z{`V$k3x#B)DTWa>2&6SAg|cnzIg9sZW*KC?s?M=*T z9fWqhvS~k;K)hTI_v{QhUjTF|Bx(LH*R)$!zrAa+6F++McP0(fq^T_)npQ4SHp@#$ z-dp)R_dh+(A=d>U{lrfh>;F2fjuS#G=J0&;l)!@i(P7phNN3*U-nSD^(V$HK%hZ#) z!Ra$&CWhyV;Y#za7%%t3cb|WmL(``~bma6IzWvM}_|@HC4$3ANc`=Vx0ucgejb#0B zqnoLzwXP4~*uBwcb66f?TuWwIRzaS&EUNYV@xP;P@4@@$d{|COfgf6xA%f4eLV6)Z zgEFZPP`Y3W*9mL?KTKBvD31*>lWJYNc~h`#de#D3eiLRTFrjf>E~n(G0iL}!+Ydba zh~vl#vJ_nSXRo}@!DH`m{Uw`tEO`yv+nPfYQc90qdld)YeV}a~$xYvP$vUSd5{zHrixHUb&($G1uxH`mkm;eWSJRo`yG=ZD}P-9(I&FemlmY zlcxcKeBj929Dd*)wztMXAii*Mf)n@O$-|>Bhvx6Plbc#vai-r7N>59}zm(1Li}`aP zI_x-nBa`9j))vqj(<34K!Bo97S!4y{Lvjup>D~0jo)SPYv&b8#&x-l7tfI|Vw#Q9A7m0*%*_N=*JvVG#fp{^yNVSdya2kLcrsIQRd{{i~Z3N(YASplGbztV8 zr5y)5n`dqz!-`TKxS?^}5JLNbNINCt62Ycd%8GWwU`1(-$hzl9>n>owc)G2TePEC( zDciP;NF>qS5hu|U!?GPJb(>!@II^BWK%WAbG8PHydN4@{yo2tX$5E}sFJ1yxZ- zJ0lUE>Fnf}i;F=M_e7(7%`}&pUz43!JI=T^jFb<-R>L5D`z^FIN6Mq^xnY)#X(8jX zU{#cmTW!7!vBNOf-_jDyo?bq4lWPayx?^aDdc4*zBSc))m3A@`94Yv7!(|b!lInPf)_c{$gHdg zAjZYK><8XT<|o&*gv7)kTKfP7+5iY%5Q6eyOv~}0)(j{m05#1c$7og!@Z5E|q}-7u z;3%IiYzo2<0MO-CPXNLhkX#8+v4P>$EE}daJG{BYo*1jK2f&TdXnLl@8>Flu@v!lHODG}c zCo9bK+;!^Igylm3^tHC~qm3KIjF!`-1R~EZkG?8{X8ri)(h|p%LPoiVBUlxWR0aiL z?H(Kc=WD`=bRA zh$+bL;%NII(5JQTm79?+M9OthOT{TEl|%BNVCq}381?jAZGeWK%xS63NiK|1(!>UJ z6k+`);=9mSovX8wco@*af7ya7v4Zr1)vLiAR9+1vcNXmq=~;b))oudlU0N a4e&2Iw~j(qJ&~yZ0000N#@$s?t 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 Y0W|DSq+rogTmS$707*qoM6N<$f@jf1Q2+n{ literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_78@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_78@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..2d9634f12c50cd75c1bc07fcb87d26579074e24f GIT binary patch literal 1590 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

c%W0XW2-7$J_ zRD4uo^!TXcsLbfuQKiwFqqj#jM(>U4jv9;_kD85Ij>e4^kG75WjSh~EjE;}KA6q%L zYHaNo>lkGW9ixtMjcp&>H6}bJGA24EHgs+}O1-qcN8;=2+R-tFei(4`V;a zS;ooZtH;-kW8)m-+~d6Co5%UbX}iY{jZ2OzjcbovjC+nJj311Bi|;yZGPKLd)xPR z@a@Rk?~`jMStluz=p=QLYx3meg~>~k3X@8c%9E;-+LH#8#*=1~mXr3Aj*~8v?vsxu z^Cuf8Cno17-%oy;{5rLIierjslqJ#}j8?9}OOU)b}acujv)j>!;bLk!gIIb9%$Hz_iHp(do<6iqqGo zRikcV4$U2zJ259UN0Xg9Gk0a~#@zim?YReYx^q@@wsZD#j&m+^ z?sE}y@pCD2>2q0gxpU=n)pNCTujZQOTIV|Ey5>ga-pzfT`!&B}9-3b_&o&RwWAj_* z_spM|SDe?Icb|VW?>+A~??0b5|75;+zIJ|k{`36T`5z0Ug_R3j3p@*(7Pc%1E^MbQ zh%87f9AA)JkXbmraBktkg37|ph1&}n3kD0u3uX(J3oZ-p3y&6j7Qz>z7MKfh3)u^K z3;7F$3k?h13%v^i3quRv7Je?07FRApi|mWYBEHDE$hUZI@#3Q8qQhe1V%lQMV$Wj# g;?Uyg;-|&$?^i7UVeN|LZ;XV$SQh;Gd{6%W0ER6k2mk;8 diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h index 9c22e9a..e78a451 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h @@ -168,10 +168,10 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @interface UIView (SDAutoHeightWidth) -/** 设置Cell的高度自适应,也可用于设置普通view内容自适应 */ +/** 设置Cell的高度自适应,也可用于设置普通view内容高度自适应 */ - (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin; -/** 设置Cell的高度自适应,也可用于设置普通view内容自适应 */ +/** 用于设置普通view内容宽度自适应 */ - (void)setupAutoWidthWithRightView:(UIView *)rightView rightMargin:(CGFloat)rightMargin; /** 设置Cell的高度自适应,也可用于设置普通view内容自适应(应用于当你不确定哪个view在自动布局之后会排布在最下方最为bottomView的时候可以调用次方法将所有可能在最下方的view都传过去) */ From 450c129c53276a1ac3742f379f53872ba18a6595 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 29 Feb 2016 16:24:22 +0800 Subject: [PATCH 084/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 58c8af3..69154fd 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# SDAutoLayout(一行代码搞定自动布局!) +# SDAutoLayout(One line of code to implement automatic layout)(一行代码搞定自动布局!) ### QQ交流群:519489682(已满)497140713 From 70e3214f51d896328eb28339de44b859afeb2088 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 29 Feb 2016 16:25:17 +0800 Subject: [PATCH 085/276] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 69154fd..8bdea05 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -# SDAutoLayout(One line of code to implement automatic layout)(一行代码搞定自动布局!) +# SDAutoLayout +## One line of code to implement automatic layout(一行代码搞定自动布局!) ### QQ交流群:519489682(已满)497140713 From c22aa419b89da93aa5960d993f1a3405c8a257dc Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 29 Feb 2016 16:28:44 +0800 Subject: [PATCH 086/276] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8bdea05..e16fbae 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# SDAutoLayout -## One line of code to implement automatic layout(一行代码搞定自动布局!) +# SDAutoLayout(一行代码搞定自动布局!) +## One line of code to implement automatic layout ### QQ交流群:519489682(已满)497140713 @@ -7,7 +7,8 @@ ☆☆ SDAutoLayout 进阶版视频教程:http://www.letv.com/ptv/vplay/24381390.html ☆☆ - +## 部分SDAutoLayout的DEMO +![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) 一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. @@ -38,7 +39,6 @@ # ☆新增:cell高度自适应 + label文字自适应☆ -![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) ## >> 普通(简化)版【推荐使用】:tableview 高度自适应设置只需要2步 From 3a1a2d81dc0d0b1ecd99edb1ccc95a790f9bca5f Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 29 Feb 2016 16:29:27 +0800 Subject: [PATCH 087/276] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index e16fbae..30199f4 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ # SDAutoLayout(一行代码搞定自动布局!) -## One line of code to implement automatic layout ### QQ交流群:519489682(已满)497140713 From 69e34d03e27cbea194db16d9742321f2fbe6540c Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 29 Feb 2016 16:43:24 +0800 Subject: [PATCH 088/276] Update README.md --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 30199f4..73f37fa 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # SDAutoLayout(一行代码搞定自动布局!) +一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. + +支持pod: pod 'SDAutoLayout', '~> 1.31' ### QQ交流群:519489682(已满)497140713 @@ -10,10 +13,6 @@ ![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) -一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. - -支持pod: pod 'SDAutoLayout', '~> 1.31' - ## 更新记录: 2016.01.23 -- 增加label对attributedString的内容自适应 From e235f95f475a1979b74902c085d6cddb2dfeeeb0 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 29 Feb 2016 19:44:52 +0800 Subject: [PATCH 089/276] =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 73351 -> 75859 bytes .../SDAutoLayout/UIView+SDAutoLayout.m | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index b97935a05d58c6cc5825b4f9f509157a71dd1e82..ab27b1242799f3f75cc0217256a49f48da6d8683 100644 GIT binary patch literal 75859 zcmdR12Ygh;)}Og$``&xEgsMmv0wLM-rH2#R4iCgP_TdnyV$UIv3_Uf?k2lo!S}uw!h8PS?}csu`#)#SoHldk7FCw{tE!Wd zUPBmhh(`hvkuGjx+@uMe=lFtE{y@cq&ViztzT)btiJiT{;u(H;drar*K&2hw_oW!<+F|yba%jci{W+19%U92tSG+!%yO;@N;-SK8Rn$FXLD6QT#eS zhTq2T;}7u1_!E2re}TWj-{K$fPxvJM4gZDz=6Fuv44jd(auR3f99&DT6?YzYKG%Wk z$aUo||qFfE&o=aJgJQHt zu8b?^W^+Mq4mX!u$SvYjj&PT8%ekw#tGVmA>$w}b)!fb8I_`FEJ-3Og0Pa@)Ck zxcj*Kx!v3zZZG#Jw~u?0dzO2SJHQ>}4s$PaN4TThTih}3J??$(IQKF4Id_8ln)`

E%=svTmC%0J>P-v!guB4`5t^CpTwu~X}p{7 z&G+XA@Y#G0KZMWchw~%&(R?94o}a)^;ivLmzKAd7r}MM;GQN_Z&DZdA_yznzekrf= z%lOOqEBUMVYx(Q=Rs4`yKLspsf=6k(d+6?{UeFjJT%1cXYVTBs4`3k!rL!cyUC;TmCuaIJ8iaJ_JYuu@nh z+$3xg>V(b09l{pjPGPI?ps-8WE$k5<5*`*F5%voEh3ADAgag7s;YHyk;gE1lcw2Z! zcvmd?S1-d?)-V{3ZM?A`y$6$cuugh&ItKIz*=!C$@LQO>0*YMDZ0g6F;5&U4iWRkq2e&HK%5{>6eo$3#VO)c@nX><&JxSSa&f-6 zKwKy;5*Le0#HFGtUL&p$uNAKouNQ9+SBk5|_2LF`qgX56BkmA)iua25iT8^Sh!2YU z#3#k4#HYn)#An6l#QoxH;t}zv_`3L!cwGEg{6zdz{7n2@JR$xp{v!S=p45ptoldVa z=$yJZT?<`HT`OH{T^n6j-G#bty6(C(UAitqm#NFqZ< zZntia?jha7x<_=+>GtcM*S(;7L-(fc9o+}I4|N~uj_bbFeW&|g_k-?lJPAKd9fO->u)He@OqZ{t^9i z`u+On^)Kj;>R;Etp?_2VvHlbNr}`iCKk9$d|7_q4yg@LC2Ajcda2TA1_J$6Ij)qQ# zL_?CnW$0(@hNXt9 z4c8b}7;ZMKGu&d>Vz|?=)v(R5%dp$9$MCG-dBY2a1BQc!HwuX>4!oVC-n@WlS_C8T%Uh8T%WD8iyGRj1!C#jgyR}#_7fx zM!&JfILA2GIM2Auc$smz@p9uT*tZ>&7>XZyMh+9y7jee8>2%@r3aUl*YH4a^ zYHey`>T0^s)Xmi0lx9jdWtg%}Ii_4wo@unH&@{$0&Ez!|nTkyTQ>AIPX|ZXEX{qUI z(>10QrfW^>Ot+YBHQi>~YT9PH%XGJCyXhX&4%1H4Uelwd$4rl#4ww#_UNpUAddqao z^tS08)90oWrY}rintnB%H2r4!-K;ko%to`x+``<_+{)bA+{WD2e4hDyb9ZyRxraH! zoN0EObIp0?!RA8q81q>3IP-Y(1oK4mBy*{Gx_O4#Z>}-VG0!z$YF=i(%zT4+rFoV4 zM)L;qMsuxslX-`Er}G%wL+nGM_a6 zX8zrxw-_u&i^3zNwcI|23fK#IhI_@MV8T)LdzJ-G>g|# zWGS`;ER~komY}7|Qf;ZR%&}Zzxzw`Ea+&1@%Sy{C%Z-)|mW`HL%O=YX%TCL^misJ^ zSsu4MVcBPS(ejezkmZ==ZOc2B&n+h`Us!&z{AxLA`OT`c>a7N=(HduMVQpz`W$kS3 zV(n_Z(3)aRwWe9Ktb?rC)*S07>qXYl){Ctk>olv^T5hed2CS9VMb^dECDx_ZtF6~q zS6HvLuCv}^z14b~b*pu|^&abe*88oyt$VC{t&dvwS)Z{!Z++2v%=)SIGwbKp6V{)t zzgT~@o|HsMC+Q`FASnNcv3rTKY!%LHboXDg7oR zS&)sgNjA$iIZkdPx0TP6JImeV?s9_MOYSZAk^9R16CM#2vN@cbZRH~F}rAC>f%vI(o z^OXh4LS>P%Sh-xeLb+18N?EDgs@$gBuB=x!C>xbp;3p+xpo0+WOi0+XmRi+a}m1+9ug1+oss2+Ag+vY}0IBTaj&s&2Ou) z&9Tk3&9lw7EwEi;yVSPIcB5^zZH?_F+gjVrwym~pw!3V1+qT>8vF)%uXxnAmYkSo8 zjO|(5VcW~LS8VUwKCpdg`^a|O_NDDB+fTNiZNJ$5wDWeOUAD*BTiDODx3_27-S*!0 zKK8!$e)j(M0rr9REc+n)5PQCTxV_Lm&OXiVwHMio?dA3gd%#|8pKD)iC-y7tSJ_wC zSK8OwZ?&(t*V^msTkVh7_u3z|KW2a2{)By>{Ym>X_9OPA_Sfxi*x$6jW&h0nx&4Iw z3;UP$uk2sjf3W{(|H*#R!8-(p*9d<_xM;rShM_b1Qj`ohujxLU_j(A58M^8tB zBioVV$aUm720Mm0@*P7R!yE;U;f_&`LdQ7AM8_0Ikz~!4gxX*FF;}OR*jsuQ^j#nM8JB~TtbA04D z?)c2{x#KIx_l}<(zd8PL3Qo~!c3PY*oGqQLoUNVbI}@ErPM0&;nc_@!ra9A{8P05H zjx*Pp=PYm*I>$RFJ3Y=~XNhx$)9;+=tZ)XMRnGa&1y0p@mGf%nHO>{z8=RY*bft?cRTkuA96nKe8Tyh^MLc9^RV+}=Mm>o=UdKW&i9<}J3nxK=={Wa z!uf^s7w50elg{6qzsKq03~|OdQ=B=@7S|%KUEBq6?c=(|b&rdWONw*FrN#A$>l>F9 zmmfDYZdhDl+?cqrV>?&Wl$E`TjL3w{$bw{KA3vh7*DT-ss!8xSRI!ZfTwLa@s;Wg+ zB&nRr*CGYkRDlS85+UGGocTGq;{(B2Rh8aiUrwO7rrcLi?NK^srKY7MXQXB&Bn?VV zN=VI3&rNU-%E(Gcb7yDfWaVb(=B8zaFWmxlKs~pimZ%kKjoP5L=sa{jYKJaB?Nw3L zse09*8dZ~ORxPSkmA0Xds1xdpx}dJ;Levd)NAW0Ll~siZ!-%kl2#*lqc_MsCgs%u5 z#r`)Mcn%8syt66;{)+0Vtm10_9B;L+#G|yy@s)aO%Bpiq{MCVAVKuy4l@|z(9bHi6 zQCjBsifX1$_g73G@2@Bc%pK&L;hp0T1g9_nUt#eKU%3yUwU?u7Dsp^P)&2@^HB@{a zC8@w$Rh=CuuPpPyrAE<0u&NrAqy21W%uKzNjDSj|QND zC<_fj*(e9)sy5ZGI#j0`r?yaAs;$)4Y8$n!dfwe=FdBmL(NHuD6`vM7y$S<0 z!D3%Fd;#=!rZ0~3`{rtr`hsC~c$D-r{iFe#4u&`AuL@LXm-i?cQ9sPDsP+X*!Hx&j z_{&Os!Bbd*iOeqwc!OX#soF2YTw=&H*jqE*H{4eaziD84Vbld1X<-y?BZR5722EX5 z<1e075D3iD-VE`nr_HcZMg;@3wNO}7NsXv6=cw;^l+5Blc`t7z*krGg>R!YBRmDsK z#^19g{1{huVx9yPY%H+}x$awB}zbHRC>=89)jRzYBT_&QM6*#4RiSEBgXW;QXdar67NCV_ z5n7CvpruGf1YLqIMa$4-XgRtZU4gDdSD~xXHE0F87F~y~M>n9AXcf8o%K@Xva(IaRtdK5i|9!F20edtN_6nYvxgPujtq5bH2^a4774x$&)OXv_fj9x~s zpjXjr=mt= z(KqN@^d0&h{eXT%KcS!1c4`N;liEeSQ0=bvP!rTd)upDWX=;Y*R{N;^)B$Rinyu!l zgVlU>m^xe?sa~WOs$O^(2I#uSA@N zO4Li$%hb!&E7hyj73y{B4eBa&wR)3!vwDkqo4Q`zsBTg>t6S8q>Rsw~b%%PddcXRh zx?6oneMEg!eO%qAKBYdRKBqpf9#CIY52-J!uc}AX*VQ-GW9mEVd+G=3N9xDwr|ReG z7wT8)H|lrl59&|qFX~D4clA&8Z-OzwJi#KtdV-Avn+diOEE8-a*gkR+ z&nNf-f;$l0iQp~-Ur2Cwf_o60KyV_#E`n1CP9r#jU^l^i2<}Jl0D`j!&L%jQ;K9`N zenltIZ|HaQ2l^BJh5p6}W6WV53s}TDtj7jy#3pRU7Hq{5ma&3u*p408iQ{k!+!D9K zt#KRN7N3XD$L;V1xIONGJK|2bGwy=B;tO#%+#Sc`9=In?z`bxHPQosnj8kwbPQ&Rq z17~74?v4B4zPKOmj|bp^I13NL**FL1;ygSU55f6(C?19j@Nhf=kHn+!MR+tW#AEPS zJPwb?6YxYl2~WmT@Kk&;_TXvQi;HkEF2O!ril^fl*pFx8S-1?B;|d(Wm3TG|;woH? zYw#RA7th1<@dCUMFT#uQ61)_vp#DqnrFa>>3@^u*<16r$_$qugzJ}m@f(r?rL~s$o zGYPIBcn-l!2wqO`wFIvucpbsD1aBsIJHZbU{1CzW2!5X67YRN>@S6m`L-28eKO^`{ zg1;sBM}mJP_z%MIgwqpFCR|IxwIy6f!gVEFJmGo~E}3xYgzHVXEW+gyE}wA22{(#x zV+c2aa2~=H6K*=;W)iM~a6!V&A>0DOEhZd+J|*Fydx>zb5bg-!-Xz?Ig!_bWUlZg{IBYaoF#}mF6;gboUPWax0?@#zV!sipdfbb&; zKc4WD34bx+y@dA>-cR^4!dDW$n(*@ozliWl34bZ!mlOUf!e2}Hm4shI_;rM@CHx(P z-$wX*2!9{pcM<*}!tW*gCH$L&e~0iN5dLGre-1JIReT*X zX6An(C+*IS@^<$sE)rH?vDtUKe*7ym_iPZYGv{IHW-!L?ow8j8kWi zQqc^Y#y}QJ^_U#Z;ZDY(t4Aqr8V;w*pA;I_r05H8XBX~v7B8F`x^QOnh3{h*j`t{K zO(XHYU}CvlHYWpjuNje+x0f;K^NTq)Cl0Avga3&aCmYAp=tei={_+}lD-i5e8TusR z%Y`|^PW@h0$*jb}`OxJnPlUM@^akfA<^>`5q&U>6BYhF0yj5ET2wM;r972r5VYN$t<*)*hBNElf?gX(}yhH$tK z1y5+eMJB3dz7_d?KJl+tf>kn`YVddYD#>Guy$CS z$eJtJuq;;XFZV@{rJJ#x=20FyS8Puort<KNRl6{f+460_SCfD$mWRMcGd&V-oZz7d4G)Sl}x6`YWPGU>3U!Y;X84Z6QYK zq>_=H(`1%>MssP@?>w~tkD^w?sLeZzeen7~676ReunR9}o+c3Z;v8R@Z#wM6iDt2s zu~_6$_JpnVf5B}x^o66PS;nMU;!&;*OY@(3%rn|qlv{E`#y{TYpWv@xJz!c8z?Ag` zSw$3;JY2~*svc!V({N<|A&N^{$W^ArC_k=cSHGk=E8FN5FK!iMu&g;5q(ocETE<}c z|Cr4~n=4e$MN4xVlje$Z8j7PlYAqvll}9N(TLvDrq#JeZE$rIYc$BNc*KTfi7Fn>B zd#h(e57ym`-?biPPMF_WcTjGvBYLVMx|eaezR9?p>WKbzr?`u8S?N*shV|0i<97P$ z;U7xZ+mO1e2UdZZs=65Z%g7X9ZEjV%0!W;uL;cFE6ddrvS%YyRt&8loofGmPZg z=JRHaOP$93@fR4ObsohN9>@P|#yeaDdYBR|`e*FI zcQoJ3YuIoWBGjn2^%Wy@r$@P@X{_*!lOUoI6T>4!xv1|MuWcS>cbM0IPpmq9rz^i4 zHqfvnAWE2Dm@s#rgHcZpje2^t8UDct-P3%8{$aRz%n0o~2Oa3>RpZEE<8_SGegEH8 z+hT8VQc0S-DCLw@+w|n*l+4r=x6759mY$ZBo}6^*s%^2?>nq80xl$#VZQ`c}#q)@LK?kSGORz_{#f&X^m$H;(Vj7(8|sW3DS^h~vAn3qNrd zFWk_4jBG;jz1W4HY@XN}y)P0PWs%z?qp}}9h4Fg2d3c>U=11u(lks}?EDlt?vyTdg zd_Q*K{mnT!Qll9RVhmnrP6lbwMlqN%IM{qCL49U=nn5XGgkJI}5B>LLfd9~~(DtQ9 z>-Qoi&f)*Dgtk8BMGG^I3G<3a+4tW!HmA?d>xDT@Y0OV%V!h^3)Ua6pSsUVC2-u;J zb%xahei~zSw8_@>SZ<@G3*mry$_6W1!-V%&HK>iq!ike|_QCof-3bk(V!Rve)|N1CA2wMPamM-oFD_;Bmoiev&w(LFjoTHB z#wY({du8)ri8y+US1>s~YtBr|9X&HwG6p9+%8I6$0sm-aMXW8w*3Pwm<^<+ez~)uh z!aox39?&)nMh*5&jN+HjW@rYAS}01RTeHp(YHnqezHaXONTZzjM#kaW=Gjf6sYTmx z9W^+2Fc#l8*V1p)weMor{?Vh%Z5qR1-uwS~#|*!dk@?x9R5cBmGft#4EUEAhG9tg8 z6CzQ=^Drawn@8Cd*2w=t*L<)qQ0}V^&X0D~k26{RXtH3;Ozr>C(u?u{Pcu?~HD~ll zj#kU_lmWr$zj9;EKh(vey%p1=x5n`=Y2tAIi<=ViD@uIxMm64k!oRACBs8ayM6c@c zZ)g;BO;(tl(KTw3DpX6>_d+8&(NR9?9gUlz$tr*|ayz9m3EfBDuu>OA?n8~7shMsb zkGl4!+O;jsb{kjJ)xXrPE;X6IJ=3t9dXo~hp;K=j=D*WeDgR@4#nQWFqvFQTnjH4# z^a;^xzWnbR1!r?o$cWN{04J2u*wvzW66nZ{Kar*`h#HMn=lYh#NDC268mTsCam#Xj zqn(yo(Hn*ZS-bps=b-;zA2FiJWWlL1YWKgG=!}8e27}SI-&zx={aNe;riMar^xBfp zPP=l)CR?FDlV@iXVw?jdbkbOK{;y2*PQPYwhO$rSris+GSwbdj-<;;whbTvqpt0)q zzj%jg9-Ou|+*<*gs2a_lWKF2}h&|_LacQQ$Au-+;>Ya_vX9;7E;c(!tA5PhYP3O_x zDnldK^Bk-l)w}gm??e&$YP5QJlm-8OM_^1KP*ywx?yw1+J`y@`xYxYm>hLFQH*^^s z#seoU!$~|Dy^?w*)!#~8RbAo@Mjy^3WNCzw&IzG1f4LuSfsdLlc^aYQ|F+wiqDT(Y zNTxRPAv#eUMrj<*!s@;@K2|KE{VkvIFC ze)tw^M29q4ODm=lV=P~vW>LF5bga0b3YVdtb@0T4ON2{>Wdsi;co@M21P`whmJ64o zc;QNdM-V)cJ!{}1cG`WbQ9*w>oc|R*qMX(;aOzZfB|I9T(MRL_Rem_<5)RP_dW+!z zde+~aI>cY%%PK3&ud1r?!E*q*H2P5?+#(HME{XnCr>wmrA6WAFlIar`CiQHep5|U` z7)Sq=w3wZUE8Hlo_9%`Kg~MyA=~-Jjes~Zo zop6hAE5Tz39!u~zg2&ehw+rhv@h1>G@xMX*>~)X+c>Su0RA^UHQrhCM5ZiU2=BQa!}weN+_dA(DGOc6N$DVm%ayix z;zCzus*8?fSfWRTC#gh_36Bd;2yiZTF~KDS`v@+r6P^;D28o^}csju|m_+__D^bnt zU$1z2!Q_R>sVN{tMtTYel;TRyj1=gwaOAYp?5OZM2m~j7&my>t2~-XOQFGrhp`+{d zDGO8JX(M#VGhBe2nw;W}M1D^=PLbaiJ`g?>J|Z|ka3#UB2@ci?9}AxVG8`dZMQ}Ak zt~s}=>ObhCqIT0JEp%n1^=zM+;$A#qVOlDfLBq&@FTi6C>VzMJABCTUp9!8z@H~R& z6TF~K_*FOw;`~nVLV_1DaTcFjaR#h8w9YgrG$CD?i$Snt7@SO3O4yP`Q8a-(qE6I{ z2GL0HQi4^237i{WCz?eIiWen-sLma-8LF5+3iXNOLn`Ny(L9j zve-&Ip9<7kY$LW6&m;J9g0CPLg2YvIVmt8y5U2yeR}*>$J_xkp+zK?{&rf>K>@;Oz zT6zYIi^~O0bK*j{wBGd{;sC0sK4M?7pV*(^RRrHi@M?nB)QJPdEP#b4E8IlzS_XUb zxm8s4iYqM_SF*_Jax;&dL0wLIy&Vr1M^kA=h$F>OBBTMg5Dek+HiB=j6AQ&LAPoe~ z^#pHV(ri4p()3=FeedQk!H!)SFgh8j)NdxINBK>0n&_jW9?Q{)rQ&pOG+@)42(DuS z(ZmNveZZQr@s8_56FxPyUON?H71d5atQ2R9L4xlfcniUI61=retQKoPJK)E*5quW| zyZhW~XVk7imPwzmu}))C93o3(ND+y+oJw6g5WJV*N9)9`;x<5qQGSfz#~JDq=T=Ag z?MFQH+)LD1(abqD4a7-Fg85w^cEw%dBUGH-;vVrK5oCFi;HLe_N$@H)Eh%L2cj%tom-hZTMswBmm5vnXI`E2pA2@dP97ND(g-0E%BK6Ho-3ue2Cz~1ixG- zzAL^5z#k9{*sn6+*Uqi7@JB-@{*)QcQD{VWQ8lGy);q5+#BZrMF;kT9#P30z9|=B6 z@as&RH#9xvE&b$|Vaq^IH0OoDnnaVI6gNfAs7L-y{F@@j3V}ML!zfx(>RIpqlR{}0xkmlUWC=_+`9g!RrvtjKmZ*?@K*$X%|O4=KqvRlyz6+^sS90D57DWbmXX4; zWM(N1su-dhep>7ix{-hlL--xR-!tqV!q^>pyf}X{m>oqGlmy1rA2H+aq0;+~Ny1BY}I;eU6B=|3a|0W!&(=F63Vph#z z!f_1v99#8}n>SX@Sj)7OkyP(ZbeHR{Iqguc&|M44xt?$W;Y2C}rwb3|q046PgW{H! z9ce5+rAMiJjqVnTdXsLg?q(f4o60~qBjHShGuP>E)!hcD>j`He9Jm5Ng_7!A&i6@< zwhwpNqG=|b&Ceu=yUF$GqHe419xBZ?-Cer7b?|5{g>W{)*$L;U)9ujh1ZnOgoRe^I zOqv$wR+@qrdt~=(J!N5LGIRAwsnj34Q{0jHgKn>GA4n9lD%3rxdkQ3ahH$M2*P2Px zMjQ13e+}Q)wjHGD85s~nGLvX8nx`QxH+Ce_n5h~rR zdqwvupdZm4CEWRhyMW=hCma-^qbJg5ZsrBbN~&H#X5Cx5W4gB|!V|oz*fT*02m400 zFEq7>|BBo9qkr0WW3SjhL;t6J9)70`zSnW!l#W4PO_eXd1Rk*f2Lt(nQ#y9+6ZOj= z{T}oJsM~<>)#%eI_|(<#gT?Hp-L*HgUxKxyBqe2pe@K6j)W@XtId$*q-h+p!*7rHJ zJ4rXe+wZeyerc~Ej@Hcn(kFle!z;}^OwL9Or@w@!qE zFa(pTi#BLA#V>Du`R7nRk(AE7In3IKo`>#7-O1A$!*9CZ0ryYBT}ZfY47Yp882)@= z%tdQM8FzX*H3ixva@V&~^t|3cVPoYfdZXTi;`QJFdJwKBgH6z2^DduOynX$og{dwG zmu_ZaE;zy>!t3ho`j)3tgT9r%HQ>Ty_7Vw~#Bg0m#B9Y>Rtq!bsZH;rn# z-ka+?=)0bl?}hqqfE!P^6vCx4+_VtiO zs!!Kv0I-{I8HCGZ!0wQK*E#lnGE58a?o1lq-BF+e^f>^kAE?jL57K87t`Fh*60RTN z`q$}m^?6$C89=y!6cnH1*rTfD#a-^7w2+qctc4tE9P2OAk2|f-$LlA6Y9h(k`#_kp}@&B$Te6=Kwk~OF*8|xjeZUQ&m-JW!VP1<1sd?=VGs8Fy<<43r=#gk zjr7O*CHhMNHMWT?(_f~I<_N-#tRGF<-MDGojuve~sE|&Dm3oc-1_~Cd#jIbcUj-Cb z6Ye6yjb;=JHH!U5kDT~J7C84zFtcRv>a0LW0@*W?>ydBKZ=lGrmS6N6^|gRpN4T+s z8^@5xYslH_?jM)yfwp)G8~&tpn)s!pxgt|3{Wd*a6VczLzgxdue-Gg%5)MXwGU2Aw z>38bsn#h%en@YHg>lJVg3k0>i`iE=#K>7o|#0_2ku;TaXX;h8bnbbe2hp4KDs5*^s zUZ$QRO+E3~n9|knpfXFMlOs8qm3*1W5K|hA?tuO<0LQFg^)KsR0pQmNS3)=+11{Bo z@!O)|*P@VlWH8U4M7?UNyPoh{`u6}gW@4j%U;lxo^%;co*J~Zju3-OxHsW1cx(#zL zEc|EsuPDb@jb{DV`fq^acZ8coxH87ET;n)k&v(D4$AvgTgN{}NQ9)1ti~bL)(^wUO z{!jg1DBgew7a&|EgPpCx)|AXj==%*#-oeORu1sylMfy*J&S0jvvAW0xi@^%G@W|FG z!c{Zen$TF)`VQYd4$7kpIPHnX5m)MBxJo88D`C>q>(vlvXhU@otNUtbYd8#e}h+0dO*jJXI~Ua+qqlMQ&!&nL)E0`L_8OCc$SWdXhBb6}V`orD6B3g#u;3y3j8;VbhRbub~QF!_;_#J4U zLPB+QNC!9N<}a-Rv6%)^*}S6RBGXmxfeqz`AOIUG3;{!>VK(7b5bj#ST}Qa<>kL(f zY5;~u`QAXdl?-?l0G~r|He6bN{R4|aa}cyM0j5o4PH#{Rbk9L-Q(11%_8f2!Qr1MN zeD?<*_sl#sQTuZo{Bhjj_+kaHpsc}pOs|%ajt%i+s1Y?Cd zL#<&GD0(yDZXw*QOwrIdrW37y%8#u^+&CFVkj-J36m(fLYO393*hz6?TG_pZ`!teJ z!fuEpIbhA6$LAWflr5<~4>mkxcw8%q2yEH71U7BZl4vN~v;j%N@XdxN4EuoSQ--Gr zS4+4}j4H&@&A>KP2pRUX@~2iSZ~m?Fr(5>mJh(Hwx_hIlMyp&>lIh%q_0LA1{%bW) zG9;#Tz~X@c2@p<;8l|&}(GHK}r%-2MxaLMZ+u93St!phF1-*fj*!>+(I~5 zlYyzXRU5dx%S-nLe}LqH`iE4OYA3s+VBa=;aN2SE(D0EqZg&yx?x=CQ>C+C6&kRj~ zhKOc3VfcoE#S9VO8omRLKM)Rbl^u-ZPK{&yOI0`iIaLFL=eI#bV|93XgL^z__=}1j z)ARmqL>fnEDBK^#anHbf?rzP4Wz?(Ds5e?pC$G_Jlr*dd3AZZ>YxO1V=CwLSUSph* zMy;6How2PEq881;_7Lu&NU-cx?=K&`O*8t8dN*zCWb8(Tj5W)R-Hq`Y)+2=58;MoD z;P&jJMX=W-oi<=xsS$WCWBO_FGK`rT-eZJ=Wsio~2Y5Rk-lhqfn$kdSfRWZtF$1YF z*BGjupmp(NB-qFYE*Z7e&jf`h^MyT-ak!B#w8pH%jD<#6Xr)Snnf**8mO6h~`8U6T z2g;yHUpkb}A%|w1Y@9~rjJ1|$^css$ys?CE&k+umbYNaQui0FW4P(6PkB0^n`c{oI z2jfg*fC?PTof#{QvjG({odbkB$WUL@PzS6TX6jxXLWSInE*L-x6%pr*^NmXYH)fm9 zxYVcuE`<3*ggeY|U)FFZ*|MH{sRSyGBsYw5rkkx7WJIk68Lu#|plXO|KGzzr)3o|3 z;b5^QVz^h-ET48i>>fy>i)FA=seaBG*BEI(GUik^-fDz?q!FAsc%0W6(a@Sn{4xEB zoxg{=oGG*coJ#xl4NEb`&BnW!Yd3B&-f7%w+(unH_ZH!f5$B@Y<1_X!8eZ`JcnV!AmG0p9=S#(I*rlhQ z(y)WzHTcQ%wv5i9!HWgPiNLS%f@$hN!1O2my%8DYDd@ma!sM7ZN@yg$~= ze&mj4*0oQEIqyz|Iq!B+vro-TjtpPMgGT6{))`+kzGOUPJWRMx3HKS{J}2CXI^!!w zXq+045bg`YeaV2oI?cJT-6Bj(QqdSy8u1wGl-BSbATXf6P_@0sNc8e84jUO9f zx0?~<`-X7eGJ(F+G!=i@zN_xt6n1BHb%Cj@A?kf?{DIEqSZxU7kH((>^%ufHY=(7E zm~TI6sM+hr?z-uT$*{KwRPIWKf*3+`GTm^}0Q{$k1K^nTu!%PbDBh$a9AN*-fKO_` z1qXY0w~v_$Escz1Km*Kls9eCcyTA*j)aR-ui^)d8W37Rj>?Q|*#}V##!u`R(VJ(T~ zs*`)S+LvdBG@7Mptlom9GXPGmuQp6=O>|*0HtP;1SeP_*CfwhIM--UHA=dkQ&s_aG zG+HSzJaiV^d%Bw@R$%d=U}TCn(RIm~nTjdN1nZIz+jySv0tF5ioCE&G-@jZI8a>!# z7Y55T^`l_1wk(+Xn+5>OEW+yuuV*X`8p~zA_coMF2W`R%9N1V2?GU7-r$)ApOoL4Y z035SJU>a^3p|La(-Ww`f z8p-(Uk3T!RE9_`sQ3on0m=nxnxH21bSz_`7a?CuzG}AOoV`(G2J(8tbxn@M?y%5nd zshvV9U0=VOf~L8rWjfC^U&C_}J}we3{_QXRy7(Yv3RGdZ>*ZEWY+HG(E{kco2}(Q@ zjC4!Fw_ zYpA_fU9;p{Jq&qL3ahHApG?V&sz^<@n>GQkX}xKKX``u@@D~uiJ>feLzGI!K&a@eT zw-CM);X5udbO=ZAV$HB1Paox!B5_d2F~O}jvv*zM-!V)J9MgKM@&Zn_YJ})55` zQo&!Dz6ao#?NiearXKJ} z-OQPJ6mJ#@--qyh8E!ufx5tL8!RE=~SwnjdZmN=cb1<9D3ZR-TW~*5;%Y+|5_<@86 z=Qya&Y%|*d6{dAI;d2;jE}))6;~qWkzFTj3jygQr5Y2?r6bvRgYBRmLow*ZLQ>6zfHBHHZco@N)|#WZYlvN=V=8%lV#1QW&^ zaMSt0i(Z+uko9dLIESZ+xwo0_`;Cn@&a z4>8l7G3I>pQ1dWz0pY=~T}1fNgfFZ!k1)f|7&E*aL-?_5@L-+f91h+i@6UV1VY~z8 z3(WN-NC74;OrslIps5}5A?C?uT8_rdS&7+yi3}@~?Lh?BNmudfQCFMS0cvb3yTyDfpx#dSQo>JXs53Ow0luI9DEkxUfIE$* z7O*k`LzJ9BSLhn-x6Zs3kYgrk=56M?G}&hoepaOH1D?9>$K!u6zF@-jEblY#rYvK* zcJm(dL%{M8!j}`ig0T!}EaQ*Oc=nfz8CE(ZXpjZa47-8gKJ&8x8Z+}TKWE+#pf3=9 zHsON|v`Pb2Yi`>ZgcY1rH(ldR2Tg);rYA>9e%MTJ(ur-HN6m1Pj`>Z(*ARXV1D>k^ zPwwA-$EAm8kBO!fbpILkSeaD84V2$A)3PPz#xC>6W++?CpAmjO;TJIEg&OjZn_s(n zca~;Pu)zxS5DogZnN}^ajr2z|R4vrv7ZZL71r58cg8j#qZ|$WS7HrxK8|fbw8hK)x zlZCTDF#pH&&+$^mv?Eoug(6wA(X%7@T68>_+U%@C|sZqpVc61kY(1MAg#Ek_f0S!e34JYZ&SZ4Yj8Du=J&% zvFdqCKTCfAg#Zk*{(1&_g9bWsY0iMOsSx>6=;EInRuN!s!v4-k;5^GPs)JZvZcBk> zH~^0%{3^oV$beUCzI1hpETdFDKo6%@W#2q}$}(Y?&cBGio2AWv*or9obkpuw}7j z2?zv}WE0`*n4UIkdKxhKiW=7op(q0uP3;B3e1n>nTWE-gZ7b*#nz}BI>46I78)sHCY6?3ED$Ly5Gn2={M`(EyGFUk zhJt73K&z4hL!6+L=?ZNFb7uxXrn z3|9uYjEM^~Acc=azTdKk@{P5eVR^{%Fd*+G{QZP~fFVB^Qt_XkF8Ov5cwxBZ2ar=> zd4$d$TEWz(2$m-;&rvnUYV%n3Tb|dv(Qd-;p~zu}nZ53TT@Sv-<~qGIDs0(@Ei6{V z$`C9^E%b&?@N7_K!A&6zSOo`cAO8$9k=-c<&F}g^X?fQ|OO=?u+;ZFkr3!_6l<<#5 z!?hc?MbrifRygXpeQEjbv>N>0@&jn_C&E8L_^ctKlvyUE5*u*C2B;May7?T3Rw~ zWz`e5nyfOFKGyDDt75eQu!HdX2@lH?kpIFh8;{W zXk}SjTWQdUIbW?8SRrUwA!r;V{EH0vrI0F0w*4`F%A|$t{sXvM0#pGvI7Frj)^1i7 zHe&e!YcDH=4LV+j3I8(14V%({HCKKy{IQT9Xvj9L>DE4{CE3^74@g4E_A23DVYg;844~JW@uDdZOyd~rK1%qR#=Bw3p9$a6aI}zig}lh`mDb~vl%w{84ay0 zYoT=l9i&(mZ=GnJ1S}!Dev9zzW)A*sjb*{3hc4=~e(J)s40i_gC8@B60xi=_xFHh) zMSYTNEwWChWMh?d))`hmfX^cQyM$*e9{l?nc=fEJ*UtNuMobEw3^f>aQ($EcmNnZt zhpIMKc(=~A&I8;9g#VE6A2HP)*KliQ@W&3jL*oQ-4Nz(1Y(Q15w7V5ErME7(LU+pw zqyGuvKV_(&X{e)(M`rxtrK-qeD;nw0;i9U5{VAY|`lTi7bynKsicNX76`EXDXmXt( z{1*%yI`?!k)RbI$$9NQ?3{#U}E1k{M9cv#uuXT=n?gu7pw;wz4MY4T3MUX zJ?K94C8|Q-sk>EJKu%G!2=2Gpdc=Cv`nvTED^wA`6aH@^@I=rP0s6@Gmwnqx_Z!44 zL98EIVZVX(W5WMIcBn^tnJ$iX$ zdxm{y{T`5iBmyD=rpN*pM!wtko)1z-xG96)nL(pMdTLZkWc|(h_vwHoB*9Hy5{L=8 zjmUsQH+)oAK5w3Jh(%S{DML|VS9Zh{lZ+C*!7C0}+f2)uhp_uDtxp zSM=b$=uR@I@|d%M9gwum2J2&?v6Wg$^cMD*RjJfYf?L?74n(jJ!OE~D4Lkm|s+>3G z0(NFP4PNPx6hW}efSzL{?F*&usOLth8xfR^Qall$`yM%wq(pWOj9_b?6PX5it9-r6 zDuaQUiNoQLHn{U45S(8W@CHl5sz{bH!C<8nDOF07(xnU{IEdgRLL3oV5TWH}$u0Gk z`bd4HeneKION8@?Z~@5WQCf#jY8mb;FY*N&?udXxU0UbDny#-z`ve}RRO+8z zqdiE%qu8|H!HVywU|hdi|Bu0fUy!SrlfJw zcxi$(kqGUH00z~O2%YMr$Qs&p|CIuoG_5xNqgJHStx6bO{(!3jBm;N)z$t;81` z74TP3u9_Cd1S$)Bb9`kXJ?DUaJC7`y38&=b=Zp!|Gt*QvDp18%(}#O2I}Om7A!wM< zyW~<}udb%6=~7;;G(++e;X)#Sxwf8^UphZw*xZEq`L0Q&BfSaZ3lm1C2Erm$NYGu2 zbbeA$s-{}1B0`UiQVkIjK#YixAuZ4>9gaKf9S#}rB$3jDayZ60I3Ger&{r7IVFDD+iTfjNx!mG;Xh^(DKLi_%LV=L%nbu>|`pA7Y%9S6w{T*|K~4Zt(t{Z-XrX4gp9qn?|j71FiRbwo%eLJAR5H^H=7 zDXn5tCXEPvfSX5Ym!FgC8C8&9IL4EklRswUXis5oL2mY#{E;I(!*VCa`a%Y+c6ohg4h53UDaz_IU#n6WKX6e>iX`OTn5z>i}Nrc|o+qX;WVRmF_vty%FdvX0O zL~N35k~Y$5qJ6hcTE9`+OawRl045#Gqsq!LL2pGB9kN1SaZS))JzqoGDs6+4l|qLu z75b_-Nn546@Vc=h3gLxEiCd_h(bTg&UDpR+nU?8VTvf72;gM~ z5Fv{Q*>%zb(u2}2X*Usai7=c9g+!RpXpHx2V+=>hO>4?ArcY?DO00$>t=Ru1^_p2Z zJ<_!HX_tjl;+o^BBJ5Prs>Dh^?2>8B$j%MQ{fojSxp9`1VmE3;~Dtn)Igh zmUIl6QD^BL>0Jr#s%rrg?4lZf@vMSCVAd!wgAp|}u1%~CA8<$34K*;l|Z#aI*Z|xMMO}yjM#~$UpNXCtY-Xwh@eTvup!?)njw48Bc z8vi!z-#(YVpn5(*gb^F1FNrYnU()lpRL|cL0itJ=o_~^lmfmBE8%>0ZnBvaG90Fa& zzo;&CO$|%=yYy#+HT^||F(4(g7#V{kGDn25(UQnISs#*QJQ2p7brWE7kea~CK8rGU zhG@$c8It7C;K(u&VAU){+fHdah%l)U?Ur(@5bY^Mn9OK5{~TuOU-E9dqhUGDmtn(E zt=vw&fC!KpO{5((QN`{oB~-j z%?)Yp7zp;N3e*IPeFc!T^s0i~rJC049;IiDuZ{}(=J*3ORb${#W?$&%*=61;NH=4B zJ)HeF_8su`t})O(+Ix}UVOa;rSzyTWKqAc8C=VinpGji_zf?#W(_}xt+E=c5aXC*~ zUn>um!HLf#LM5aqVVGg^2xPC73uMR_W)Y#RRvsyX3o0i<1rY*M0j{A$@hA$srpUv+ z(<}VdH6=ce(xE|DQ5SCbS*L-%fh^f)PFPqYkFTYNONJRtl&3UeFjWSNo=t=xFc{To z;N@4aUwah$soKyyP6?g5FwBrsw|-5Yp~WcKFVB=`$z>C(*x8tnDidKI5#|zM4iOeN z*`d#8I=4T8?&FOiqh z@OS2~oiYB&M7|`t@{li+ucGsExqP{Ng?uFuR3Z>q>4Teb>g22CYvdL3wFGX;5mpcZ z{z2E^{&(l)YWXHQFV_&^vW@auA}l}Syu6jp%iHAJiEud)u8x?O8|6AWD{AFUM7V+o zSJuj#>AbwE3Fl?l67QCGG`iGO`Cc{wuYn2JY2b=(|1|%0(fJ2u2b6OW^Y3B#5qYm% zMue3_xPb`Qvsu@KrDgQ&QpyZKG?{j56Q4ge4~7r2sdq%Um*fr-i?fSuWJ!+tw-q-Rm#(%E5RT5_iB0hE%{iZ z>%S}0#V`3i`F;5V`9mT=<$4CcXW!r(K{x^+~^%if&CpD6-Yhr z+^E=yuq}FQlos09Z1pJpqsFGfS3Nfnob_)TkJ4Ic(}=?P3e6prb_(Q1 zkqA49u)7hNQ0}uLwp=qcj zDzNErqmo2~dp9b{M7R&wMs!pg2Qw}8QPROVDH#L~bQW44fr9oerMGlU>7(?;HwZT< z7b?({P<-<$y%i;_T~i$NS5{B-SA?EINCa3`F%V%p5gvF|8Kh(*vy!9aDsXnsbQJFx5hiTFW&?CI%KJ8eX z)4N4ws#1#VcPbadgXE?uUZqGWR!S5|!}b#4Q6fA>gvW{S1c3vHgeQsc)Sb$71UEt` zGnH9NnNp6x;+|GzwqEcIfy1eV=ZLT$-Vg#4t64H#m@{mWzbd!PKiv<9lY_|G+c}VM z7yI(7#`}Yi*wIAW8Tmn2Q{dyZx3hx9GoY=`dgJwPY9M*ua(~%;=(t4!um`@-V~|d{ zB6QV@gT89`!0xY{5vcH0`O9m{=yTBBy<9L~OXgIUFmefvKJJ~Hm7SHEImn%mmze`r zJ}5UMAu}U459~eDJt!$J*`1!5J8oWPx+gt#oPQLBo~ZrF=$Rb0{v`^eRhyKhimE{J z^a2qM5aHk^)>VbUMQ!W?9 z6%Hf}&`zpH>2c;S4)PYyD)d!)*>mbWO7}B=Te}9Ev7H7QSiXabQTr|&YJY|auu0hx zOR77St;#kc93{f*M1Z{lqdN`M5Ya{L#}2CTmxb4ol%2{0u>c-ab}5ify+wp$L}1$j z1}YlD=-y}I^Qf{f2Animc}jVjEuXwg1lSHRIwaXE%6{->&nqv$s!y*HZ?$)%jq?_< zUVT#1YnbB&QP-#MgwAt(LAuf~p>u$(pHxlk?4@%G-X7DrI#6jxc=?9ydV{RAX?tGh zE)zZ8&@AN8oO}$yCfn7Bf+N_GISK&#iEqc-CIQt6cS3#XTHlKnG zf|Ji)>3U(e?vpgC74X9e+CP01h<>NGTRdQEOG&TxOfdCIOacz$sgD847?;9IZ?SJs z5>j~81aQeIVUo4U@$fn=J?g;i z+KjfKt!O9OgZ82Q=wuJ>S9o8Ga|e|dr`9in)hF z02%P->>r;n$I|i49$?J;N^tD|@Fm~{U%K$jNc2mE)$?h{`iF1Q<5bx13uCt^4*&1ruPOI1ixdGOEL8{bRox1lQKNA#%jv+|4bt8!BLP5E8<12$m@U#sBI zza_%=M1b86KNI0sBK$^#Kd5tWC<1I)OIu;POL-G6EJYS%iDUC=>nZwKM3IlSvFS7p zuyf|3Cge~~w*f>x>eOb|uJc2aJ))2;ls1xej2Dug2!ZQg)5mxX@%g9Eh<;d}P0?7v zE}qB2(*O57r~V(FVV-xIM-|-s{Yw*(FS&bcIDsC;$v&; zuYBtB4du`x@%14OZ0l<4g?etWU1;lO>u!s;^|1A{B@p2+BK%E6L_|zPj)*)Fg)O#3 zTawL%BwII{>Jt&p#n%y?o4T66wOk*Mz8Jjcc&M)ebMt}_ULkL$Z$N2VMWZH|dBoMnwpiJke;1I^XAm-gsfDWK_}&OxjS<>r^jR<8Y1!Q8-Cps2+gZZ$*hCR7S%ceu0d5Z=`ebj<2 z?q?<~rmOp@^wB4<&9i=W-!{-T4E5Y*%d!o!W!rLWxwbspVA~K|zHKNG^+Yrf(MUuS z5zR!j5YbBDQ7EEJL}eT5j5^vz*hbn$*)Fn;M)9^Wwz05k2uc@iM6?rl?ufXBh)^<* zBI1KYgwtps*=~^qdr06pR289>iz@9AZxA^^y22TOxg)%D{L^WLGa251u_^Et`N}*> z0u?^ykd3YO!|KEQtf0?ZzZ{^!)kD$G8VyL)sOLakHN7GVVG4DGIsez(TYyEig@2^(Ce7Gfu&qGBRq7ZRdk(@J;4rh8xj=@`0UXb_}36jY=e>F(0I_KcvO_NYb)s6stlpbLAeB*y*;eV+vA$t`N#gYTzUuw}&c%=k((3byb zg|^7c;cilr%kBSnmGpO_Elqeg#e-elyLB1 z$)|^9pfe+o2F&Uu>;~*g5S=EcD04*-lj&e`FlMwous<5%my%Xem0B)AuM&$`5Wajz zSpB8ChT3x4&)Sy89fyktNDhvQLI)|h1Qa?1_6WUyG^=%EZ!Oi_z zrFj&(09I+K`tL9}EAn$qU?5a4f=Yj;!K-0LkcI(0{S+7o0>0nU*1_NcG77E)Og9Av zA^}8BFPGa0!ypaDp%6cX-dAjI|Bw6-W`#E`_Yr1CA%S0ggtx-raLDfnBD@1W1SA&B z3Gak=!Mou-@LqTyydORQA4H+6D0B^luA|Tm6uOB*w@~Od3f)1WyC`%o0zS;J3+4j< zbHm4g^aAn=1`7S5?liR)G%6+0_HIm zB>S%gBvh5;<(I-f>G04$tHoH^GF0)?Ag2Rj%X#l$EbljKZ#m%~eG^jBx`DyP*y|fH z2Jp|E0IQP+D$qY$#CXwicC1r$V|DBAkC)rS(lMp(ZymiMqX;<5Wf0yB0%8BPAb>99 zUn;9fNnTS`(oj}g+IpAaD_}do0w{E!0)rJ5`kxpJd=mx=41I&ZcNx~h_h3QzJ}k71 z0sR5~ppXa(NuZGE&kM0&QE(xasG=J1F)Xz%28%Pmf$&545&RehFU*3(Q0QSG`~-dq zKSQBMCK9D=Y|5KN;1R%JhZ#iQ53|AC`orU};zemWAcu*YF!y9-!|u z#0Eo%{y=X4GI1Gz5TGYm(o*dx^c01}H!`9S=**J`bm#~)DFJXHu%Sexv;o@yVALmA z8I}U=slckREGSGvhiHHhsDWnB!y2&WQmp~71_+0MwLt-$6;7}otPfx>pw58cZe=yl z!%F}HSHyr?V+Is@zHv3Z0z=pc1UoMSD1VMQ5H^I3F+agSX5%w#0-M5Spe=LQ0=9&$ z!1Vmjc-e-HDD)DAUI85HpNJW~FSfAV&sh$DZ9zorinlA=U_%C*lWe_zpH6m)(5_iLNZ`uF6~MR*p-6SunTY=wZnlZBuB3+7!IL1fqn+^ zE>#)`hr(glxPX7?Z%My3y|lk0;CNtL!I5wj91X|7v2Yv=MEDyN0t%)A3MrzH5(+7! zkV+`S0bo;se_5U~^TKIBO)+M{{-rtUfszT1?gRFSQMNEm#aiYEm>Q4CG5})$9QU3g z=J3GGn}5l69lV(VgLZ$i&40wvZX%;%o4Lj{!o%=pcR})56)hi$U?XR=zVYzTnv}Mr8sZ69EE`Tt${+CD0r0| zrT}UKZ4dqcB+UW18vaC6_dw*$E!r0s6r#tSU`!R8GHif1uww-vs2S*P*bD*+#EwD; zT%jqcG;g6Cct(>opr5P){MVLe{bznUBgVWdOLYoqC@O;b_~n%(-he{1Bz54cz+5z- zEevRi^Z0=J@&E(+R_{b$mNvtXQBG9BHVQExR_W# zysD&nS4vCpC3vF;5Q;QNlpEx`{!&xw1_%q2dnqrkvsBMzK~cKhhRvZYaDAvsfyJkl z*|t>olJure9#D~K`u4M<+TdIRxbH_wnp^VpQTn0}gFt)&FPlDp4EV^ut(1Tg)()-b z2*i9f2w_ClAZrl-0$8GuEebiH5b(Nf`h;vim>AY0%m@pz@$s*wMQNQvAuANJMj;yz zRdt->usGcs-uL???dMRFd=B=6lsX*&pbIGkLGbiYXu6XDGhgVNhE}iOOF7j5gn;on z%tZOmJWIV}Mc5D^OYBg{9(3lRh%C0HIJlRRw=nF&l1Vh(5A^jP3%itY2R$Q*DFUh@ z$hhmABnAy|sL{!X1DH@8zYh-E6c-SqAM}4{%p2K@>;tm_di}>5{2Bt##jxoBY!joM z0AxQl%Kz>Be_8?9c{iFBun}yo|FWHz&Fi0pj~qe3IkRwt3pt8#Bgc^A$O(i8Iff*p;EvtwiH>Ss8&z2~iZiZvUFeahKuR~W-G0yT2 z0{>ZbxjHN>c!ptWbldswy#bm4NL$WN*HHhQW!g2q;2mM~(^|+~W^ezcgFMLn-+zew zJk^68Z$QL;PkBuLv9tnDk>{9U1aF+xbLUAZWU2c9EIiokP{AUf82#D7VK&%kJGys&47=Q^Fnqa}U z%y!!P{!Kn&#xLC`3f6J+a*m&1$#1Dj8y_%mF^B>`q!fcH_~c@c0iTlKFBYt-#_)y~ z%&N@5^_)S`5j_2`5ZC`s`5E;3Kb93`xWVv%K@PO2#c=RH+c?6o1QH@-#0QwUh%@4X zxFT;6H^d$BKs*sI1Q1{f3Z3;lq4y|w|0k3kf%qbRVETZ8iv%J; zNH9W!oN`d88q?iw(RkP-%D5S2u1s%+!DHA|=DoTRm zsMsdJrkS1uNZ|q9OHcnTtno?#*np3JE4UG(#NU4Z%nu@lz;glmNl%)nremfYKOYHV z)dCN>qWYgK5hG!`WS3I?9qGmTwDcUS=`)guBq7Ow)KXSBA!$fDAZ5%=O_wv+5bx5A zRaO}(ML7*MdIxFRleRiNg-uyi4vSg&M-mEEVzMe*7J>A|1Rk1GX2Q1D!t74>0-VD6Z4hG2jnACg+hfWRD?ps zC{*%G%)>ZL%mYY=F4cdEMI7h?_LQ407Jok7Xij?yP&=BiToR$J^t>R7h%Q3^DQmG~ zUd;7K7xHa|6AA%ky26;@|7GW{0$o)1A^raz))s&aU{d+t&SL$sACMuiBl4KrS2!`Z zqtFLz9X}c~&}VxbLfV7KQ2p@i4-O z<1|^b|Br@gioY;$DJja(z6!{JC^aR;mw?6qJ0bj;_oo^7_vhE7loX`YRdr~~hi3=N zhu@4sAWmx2Qt!6m!As;q@!Rnn_#Jpo{7(EXJTU$mQK$)pno+0)g<4Ul4Tai6@q6+6 z@cZ!xU>yDs{xAx4pin0Y^`OuQjkti7F$RYI1XFgfh!l)xh|@dy(}ZFBFTR0U|1{Ux zPiqDPk$`@)WE}iU+UBLSE82kBVrJkkHC}uv4V<9_wJ2-6l9!YC85ae@untQcrXRvt znt{{!^9=C6-#Uc9fCqXZ{t^mxp%4g+5kw&nC!<7*H}Mu5mH5wBME}O}@YnFymss8~ z3iU3tJo=j40SpX(7k>{gh`*0Q09Eftp#c;c{6ERS@Gs~LZ0P?k1A`9(Lx(P2fsE9o zL-zEeS4+++`U)>i`4M5-SuiXh^tX5yq>JXFhsxHQSG78@Mym}MZu)jP2;3hCk z`3IK`Egj&-tK-4_IutwrCZ;HOEfkstTMQW5e{BB$6@}{I!DX9E6l#bbxWC^R34w*bTm%s>#ga|>m}JdyzP{-e$R^Tg?Z%?b&H7Jnm7G9Fy5 z7K(SqyWm~%Z}Dz;cRa9VzN63&l#u~tT!AvKL>X71jH@x?^v3((eer&He>|{YI#5Ok zW&8_eB%+K=C?hM%$oBs`;#^vTNPHYdfd6(k6P}8X2LzaiGJ?p6H5dUhg79*T0M(Vt zgiYVmu42J1ZRO#`?y&!L70d4gn2vvkFyJ$R&cTRB8P{V3$hZ!y?EgcZ1D}JDY%V?z zpN}s<88@Je%qZhVlo9?#vUoq5&H-lrCz9|VJ|sF2fv=#ECnHV6g>3%t_x)5s@YVDz zxc{c$pLKnuXGH!xBVAX)H_~(!M&OtK|3Fs(YVE(VmXpgmAm&Z~Pu7B=e?SbX0ho?< z0`)gmgKwm<8b$)0)pTP-)q^sE(1X9R8d@~T$=_Mc03N&54nK$=!Vlv|P{u7N<5rY$ z8_Kvn2tS4&hd<$g<-vh60`cgIGGf<}JiIL>O*=aZxERnnmKFPD!{9MphrmpcM?zQ- z8fMxpZTkfRP(Fh2i}>&O9|S}Ht2RLN2<-@mk}6Osh<{|E z)s6}ApZz6lAYg~V=>|T51!dd=x?i<5Kf_t+!O*Y%6N=k0|-c2 zUS1mDN+0=oY~&XR7g5IJDC5cBM$S(Fe!$=3TL@PP*HFe2C?gLx0e03pT?xJa~)qpHa^Qal#W( zn(U$lK5qiH_CW?75CeO0L&}EC4W%2ZH#C9!AbU6TZy4M#wqat!^oBVm9MfrV+23QP zCrrt>4d!a*&&)Nm4%%JoZM&G2@YHvv81w$ZQQ?6c%u?HFVKl&!#%(m!E{o4_4O|P?17AQh+zPkDo$xof2kwIh;30sCkHHi06g&eU?FINd zP|sE(s{vZP7Fh?_C^NDVfe}1H1PClUvIW_Oa3Gw>E@Tg~4>^Dw0$Afw05P5b@ZxCz zAf5x@As@nz2q0IH>&Q*yHgXpcM1&9#3IYBoA2AB}h3ieyfo$NG;NUG$Ud+p_ec~7$%GnCJ8fydBS(%3gT+w8sa)46LBLEArgt3h+Bx;iJZjU#C^nr#3Mv* z;tAp@;u+$3A|LTG@hb5K@iy@uQHUr?d`J{0J|n&)N)ly=uZapoWuh8Ulc+<~CmIn= zh~`8qqAk&Z=tOiOx)D8zK16?FATfj(PK+YP661+U#8l!t;(KBaF`rmOEG1SDKN3F? zYlwBkMq&%Go!CX}A@&o8h@->_;xy}O)(xy|tn92?Shuk{v3jxwv&OI{vZk@-vVLH# zV*SMWh3x^G1e+9_44WKVJzFoor*h$cFyly-1%eIie1XP40ajqLU)<&8r$___ln)Cc0;?< zcNgt0*|KWhcK}R@`a2?@3 za{LI-k*FhSN8TODJd(wQaB*;Pa_!>U!w>^-!YzJr@&=kXOER1t2@?ktm#K z8;&;}Z#i-Ig!qZ4C!U{p$+LxLKhHs)!#rF((LCuq89eWKvQO>@@54KN^32I|CreJ& zoUA=rf3oqE=&4tyBu`17l0DUSYUtF+sj*WNrxQ+RpUyplhrE5f z)4a31^Sp~^^v+nFu{mRR#^KD!nZ+|d&aODS>a5aP{j-K=jnA5#?LIqkcIxcR*|~Fa z=QPi0pVK|3f3E-B%(=O93+KL{mprd>UhTZbd9Cx47gkbT(8*gqX+)%oqa`WKL(>KrD zJa_ZLt(CV}ZsBerw+Oe~Zw229y%l~d^7irDe7E^;3*5eXyYhC!?WWr;x7+TB-g$LL z@{aT!**leY8tydRX}QyOSNg8nU5&e1cXjTqyvK46cMrKoxaW2+=w8UZuzL}L+XN2^ z9v0*h@GRidgzXjfW-=%^q4jw0?B`k?13_ zM~@yoc~thO_EG(##z!rWWge?P)_kn}SWkSlI8Gc9Cy29&8;jeElf<3GUBtgXS^tFT z3Ck1siOUnplfWmzPr{x)c`Enx%~OS^%1>LK4m=%tI`VY<*{f$t&s3hNJ=1*F`)umj z%(J;?i_Z<8+dj8{PI^v$zW8F@iw!TBU*KMlUUTxm$)KPB=K3IMxs`tLDE|?TryHJS~5=Rywpvp z+fsL>?n`}^YLn`a>XPb_mXcPLR+rY4){&l)StSF>tdUtK<0TU&6Co2N6Dzx2_K@rm z*`u<@Wg}!$WYc8d$-b96EO$okoZJPuOLB2?nQ~cjIdb{01zz8OE&N*a^~2Y#uLoZb zzaD)(@kZ~B)f<~Pc5g^;CgoSkua;+&|4ZIU-dEmVK0rQL;f%sHg&PXD6z(c~Rp?Y0 zR2WehSC~?mRa~hEDXvvqugI*3Q#_<7toTyVT9K^irRc2~s2HV~t5~8~qu8N1pg62J zrZ}lMqqIV4wbB};bxKT18EFIaj$?d0J(=%0877 zDi>64sfehEsXSJBs`5fbPDNftNkvsfLq%H!RdG;pR|!^$QK70Ns-&o-tK_K^s+6dd zt9($YRvA>qt8%K|R25czrYfVVu4QB|p)XD1U>UruP)$7%})koCF)u+^F)fY4%jkOx$=u0t-D(HwM4YUv{bb`v_iE$Xw_=9Y4vN( zXs^&-t-VHjoi>v;QG1j27VYiYoZ7p!`Lt!UHMD)SL$u?x)3gh+tDZ*14*4Lq}4_R>wmpN2gTh zi%zpnzs`itw9cH)qAr8(U%DG~S#)7tf-alxaoxwdvbv7C9=f5r@w!>M#kys>mAX~B zpLLsbTXj2hzv=es4(LwmtYdZOsK>8&Mel{4rJk!^ zre2}mN4C-{WSdy{Ve@l{Q~`B{SJe525bg=1~&|Z z44xav8oV)3G*B^6H!v_THZV1?Ft9eTGjKHsFo-fpGsrb4Feo-CGpIE9YEW;`WYB8R zVerjh*kHzRg(0&ct0BALRznWMorZ@DxeSjP@)({rJZmUmC}jB5@U@|up{AjZp}wJ! zp_QSnp@X55p^KrLp}%32VX|SKVY%T4!)n7XhP8%mhMk7phJA*Eh9icvMk|fh8?hPf zFxq9b*XV%JVWX2qyhi7YE*kM0T`{_A^w>z!NX1Ck$iT?h$kfQfh-5@Iay4={@-p%@ zN;7IT8ZsstZ#Uj&%wv4P_>!@J@ipU{#=^!Aj2{_4F@A3R%J_}3hOwcst+9)-o3W>{ zkFmdTxN($mtZ}??l5wi>C*wJEEqWB?MfuU&=p*zMDuv3TZ%{>43)MvpP-D~-wLmFo zF4DU&lM=S}!bZkXIQxo09|B5Lx`9FaT z>7?m*vlV8m&DNN$Gh;F%nsJyNG&^l}$xOiPn%PaWJ7y2e9+^Ecdv5m1Ov+5rOxw)F zjAZ6+=4Iw?%(KjM%?r#c&A*zrnh%;!na`RpnE$X?X|djd*#c*Qw_vqkx8SjOV)5F7Y~f`Q zVv%5xVUcB#Yf)fPY*A(L+2X53y+xBnt3|KHq{R=*4VDB;Hp|VH+bnlj9R_s<=t@c>$w>o6SWp&Jo$LfOBO)F8WS5|MV z6s=UO)UC9vjIB(qEUc`p?5s#u?pDE8u~r#Y1y;pYWmc6|RaW&@O;)W|9ai70daYMm zAGGGRerf&MTHPA8wz0OicC>c3erxS#9bg@79cCSA9b=thoo8KPU2olC{mr`9dcbl&g3Tox0h?lW6narr73-O|wm#O{Yz_O`pxU&6Lfo&4SGj+m*KK zZCPzOY!BO>wB@xuXM53>-}aX6UEBM%BDP|-k8LGvRcsAxZET%w-`aZEdfWQhhS^5i z#@JGA6Kzv$vu#UlKiRh0_Sz2E4%?2|PTGFATVc1_ZjIeKJ0?4#9f#dvyOVajcIWIa z+VR`nvb$?{-%i9%%sJkwi#hq{pPEq!%PPk~~R?q)O5tX_HWr z4atoZKnf;>ks?VkBq}L`lts!V6_AQaWu!{dS5m#Bk)xHPtD~P|lw*=(s^dGy_l`M^ zrH&PjA00nA);QKVwmS|uPC2b|+Tg_E1UnI&*qnAa?Q+`dbinDb(@`g0r^`-)PLG_P zI6ZfItx_$;pFJ#=@jY|=ak@-?3Ct|;Z)#M>{RAd=~U(P*{R9t zo71?{g3}N3N-{)VOU9A$WL7dec`KQNyq|oW%tyXKzD>SI79xw1pOIgZCCM`6*JK5< zCfSH=M|LHgEmUY%}Hgrav&73WrZJeE*-#U9Z zdpr9%2RKJMr#R<3S2%xk{^VTaT<6^G+~wTk-0wW(JnB5>vf72oh23SR%O02gE{9yW zTu!^3b-Cbj$wk2Bnv0;zV;3nGRTn)MLl@M=%*E2h(Z$*2t&4|?w~L=km`kF|dzUho z&n{nG>Rp;#T3vcw23&?+##|;{W?WaeGP`be-Q~L1^?>VP*Q2hyuIF4Yy7IeTalP(( z-&NdI%2n0Xz}48*)YZb(+SSh0&DGP@$JO68&^5$0+%?~|+I9Brj<*Ni9(FtDcEwG| z?TMS5o2r|Jo3@*to1vSfn~j^jo1>ev+gmq3w@9}nw_LX}w@SAvx6f{0-CEr`+`hT> zx(&DuyRUQScE9K@>lP$bx(9paZh*8bkBA#asTAr=-%r- z=052@<38{H-D8c%Iu9m~jUI>x(PO*EK@T1eevexocRlWVhgr~HplBcSthNrfto~NOwrKgjpuV<)dglDv8 zoM(b(hG&*%u4jQ~v1gg*XU|s8KF?_{2Cr3Kj9!0vZSW#^v3YIw+UB*xYnRtyuajPv zy>5Hm^AhqB^?K;_(o51y#_P40f|s(Fj+dF2qnD3Yh*!8*lvk`*yw^Lg_g*<(`Cdg{ zrCy)BTD=Cnro3jo7QB9Vuk>E;&Fqcy#(T4RvwQFKKH`1WTfqC8_f79R-h$qbyq|bK z_kQIqFwj~?;YqJ;vMT9@15kG>iy39y?2rKC+{ZjKJRhwDeqbD z1@9j|Ykk)HF#F(q@II_Q$9x|7$oPUg?0^7Hiz z^`rWw`xW_p^!wyj<5%a`=-1`fcNe_)q)K`7cr!DSuHmP*^B1g+SRx*-tr1xk%xs zT%la2+@gq3#3+v`Pbn`b5)^rg7R8KWPjRF;Q{GZMC;^mUN*E=Q5<{U<$|>UkD+2Zh z91A!Xa5X?U;7P#qfL8%h0kQ!q0qOx-0lEPO0mcE=0j>f50nq`;0ciml0a*dL0c8P| z0aXE?1HJ~-2Xq7s2FwMn3SX36_gZ|8uTvceNawNeo#eFT~J5RNYHH1LeP)kmBCOjb1*I# zAIuue9=tVpPw?^J^T9WRg@YdiKMH;l{5)7T_)V~4uu8CcuvV~fuyrsw*e^INI5IdU zm>QfIoEe-QoEKaeToPO!{3WlL+*!&gouT_2$2Yp4v`Cy4^axy4nad4Lfk?;LwrK~LjpshLSjSWLy|&LL*9kt zhg61q4e1OS3>gU-519&?4P6-ug{}={i&_u=`;mVPat~!X(0^!{ox`!<52o!l+?c zVclUPVGH4m;Yj$F@a^H8;k(24g>#3W2tO5mCj5LjU-*r1;qWKna^b4s8sXaEdf|rQ zmf<$x_Ti4<&f#yv{lcTe)4~hGKZI9@e+jP*ZwT)U?+)(^9}FJ}9}i!MV2ogi*b=cj zVqe6;h$9i)5oaRKNAN{lj<_0eBSI+Rd4ybqW`t3MNrZWXRfKJXON3j5XM|6Le?(wJ zR76@tUc|?Ux`@VzmWcL4>?A#Yo0TmdGuUyCe5S9*jH^$sKtn@_Zy; zs)B6hn@2jd72m#6-s=$K=J7 z$9#yXj`&NN#u~+%#G1!i#oETY#Ja_L#`?ti#|Fkm#U{sQ#g@l@iLH%oh;5E-i|vaY zj2(#`kDZF0jbn^k8@DcwDehR@#kfmxm*cL+y@}I~(~Z-QGl~m}qsAq~CB>!2HO2MC z^~Vjw4aY6SEyjJPuAnkgS*RPS2$h4ngUU(WO+7|EPrXRJL=~W3rQV>5P{pW^sZXgd zs1j6Zsv1?FYD6`mnp3T)PE;4F8`YEQL-nVIQ8|JQR)PB znmQN1DxM{NQ~aKIuJ~i|Jn^UF&&CVHUyHvPemynlRPd`NtFe0+RXd|7;Ld|P~He0O|b{9yc4{A~O}{Evi{2~Yxa!sdiM3C9yo zCh#VlOSqW8pKveXeu8kqgM^xdj)b9v(S(VF>4dq2#l*FV>l2w1af$du)1lf#lDlT(w^lQWXDQdm=Vr5sE- zlER&GBIRt#g_KJv0x8#0WK*nDqEeDl(o-^1vQzR>%2O&*KBm;A^rQ@@%%sexd{14G z%AUG2^=Rs;)bpvLsjpJsq$;MWq^hTCr5dN2rdp(0r`n~GQoU1sQ~gr|(-_l`G(s9{ z8he^!nopWv8YL|#eN8$(otVy+zB!$g?w#(J9*`cK9+n=NUX=bZ{Zo2PdR=8d0H+paKp7h@7 zz4QCGSx^?7h0h{pZOT%~GR(5fvdOZ~a?Enh^3L+h3djo13d@Sjs>z13Ph>yMex0q5 zt(>ivt(mQpZJ+%%+bi2Qo01)rP0dcuPRq{7&dJWtF3K*=uFdYxVaZ|3*^#p+=XlQP zoU=I>axUjw&AE|tJLgW$gPb=x>N#3Dx;X|p4ms{QUOB!wl$@YkeD2oV1G!we$8vdc z&*YxZ<;%UCdo%Zbu5_+bu4is~Zcc7n?sVSjJSdMb@2@;!-u67syxn>G@($*m$UBvH zChvS6U*6?B#XO(9^1R9XmHANq+WhtT%=x(d-T6oIkLRDv=gmKte$?wmf$e+%i%U>*DF2EJw3s?)-3sejA z3akq33mgla3)~C53VaJF1<3^^1vLd<3u+4*3VI6q3x*0t3nmJt3s)C17OpK^UwEVN zL7`aT!$R>w*+P{<^+K&e-9m#xi$d!{yFyYSxzM#RpfIQ~q%gd&qj02ftZ<@mx`?~z zLJ?mPf6!A z#nmNiO7JDb61I}fC4wbSOJ0;nlt`DzmB^P^l{l5Sl(?06mc*9imXw!#D5)x`F8NYY zThdiBTe_i?xpZSGQo5ydU+Lje-ctTj@zPhNdZkXKzNLPp{-uGXais~R$)#zf8KqgJ z6{W4EgQefgR+OzSTT`~KjHzs68B#_p+go;^>`)n3*|9R7veRW}%g&eamE9~8EmJHr zFY_#mEh{Q(Et@PqS$@7;p!{yRc=@YxsdCx!H|4738s*yMdgX@Y)bjH3uJWPs+46<* z9~CPrpo+B>>nqqQwpVag?5@~X!Bugrf~Vqi#n}qU3UbB!ilU0jinfZOiph$ZiusD~ zl~Co{%Jr4ZmAFdw$}N?gm0Xo4D|su=RbH&TT6v@LcICZFp-S<}XO$|IhLz@(R+YAu z4wbHz?v-AZzLk{9uu5uWTGh6y9aRUaPFG#5x>_Y%^`c6mO1es}O1?^|O0~+U%B0G? z%Bsq?%Av}s%B3o;s=0b?^|9)+)t9SpSKq6CSpB?Ovf8}bvf8scusWnVtU9tfvAU$X zth%!LWA&%%n(Dgh#_E>p_Uf+cp6bc!>FU|)g-`OIbUx{QGWcZt>GP+yPaU7SKJ|Ql z{aNd?&S$;PhF>mzx&7tt7r`&WU*3Hw{!;p-{L6xAl_*QwT_b)>q`y2QGay7aoty6n2Vy03MubzOBmb^Ucib@TNM^{eU` z>(|#a*W>E(^_=xQ^(X5u*59tbUoTQGR{x~_dHt(;sd~kFy?U#9+j@t3r+Sxqw|dX| z(E5n_==!+&g!<(AwEB$tmWGuLoDG*6L>n|3Od3cHwpO$kk@P4AlCH{~>aY-(z1Z|Z95X&P)A zX&P^uYFcPUnmL+xHt%WP-+ZW#b*BIE6vxNZ#6$`7H@vm{IXfHS*BUNS*uyM z*`V3D*|gcQ*}3^`vq!UcvtM&cbAEGCb7^x$^T*~-&8^LC&F#%y&0{TVTGq8NwQOub zT8J&1TDG)oZ{cj&-EyYod<$R8<(8{0H(GAD+-nhP5or-?dE8>#LTzbknQG-|z1J$; zYSHS~TG;xjwWhVMwXwCOwY_zsZAIJ4wpDG6ZAjaew*75~+PK<|wViFd&?eA!zwKe0 zc-ynKmu<3bZ`u^wRNB(uPj>Gbc+?d<8= z(6ztoPS=Yrxvtk;3SGKgmR&Yo_Fax$&RuW2Ji0=lnV!PtIlDbm6-gPx}O@3qf zcHrBUZ$jUmetYpv;+yn0xo`5{w7%(nGx%oo4gF^J&GH-dTgkW4?%my2yG6U7bxU+h zcguClcN=xPb^CV*c87F_cfaqh>Tc~G?_ue|_27G0d)Rxn_T2Az+#}H=-6Pi{-=ox{ z+GEsX)8p9V-1D}_qbI+oqGzCIw0C3g)?SX@oxOW{xq8p_UhL)Xz0&)zSE^UG_f4;2 zuWPSwZ)k6I@7KPSeVh6=_g(0_)%UFLWuIi9OyBE1g+ApzwLZ;0oj$uhQXjd`wa>lJ ztIxNO(ihYh+85DR(D%8or*ENuegDq>Q~kpIvi(N=R{hrfcKxpXZ~Hy^1NsB|L;7R; zOhKlXp>uj#MrZ|v{tALt+MAM2m&pBaD#)(tQXY#bmAunlY;*fzjD zaAx4z!0my1140901CIxu4!jsp9MBpt8?YX*8z2q147d$=4)_ej4Wtbe4wMa44pa@) z4Ac(P4>S$@7~DEoK3F$6G&njqF*rRqH@G;&FtlojapKB z5YN!*p|e95hAs`=9+DbT8?qU49f}^x8~QdhH_SA=ZTR@`onhJGH^U0U%EM~IcEhg2 z-os(TWy4>G>xLVLTZY?*r-$c;7e^RIR*f)@oF2I}a&zR)h~S9u$b*qbBhn*sBl06k zBl;soBPJu}Bjgd+5%&?Vk+6}-k(d$cNd8FG$mfx-BXy%UMukRYM-@g*N4-b=Mk%8~ zqamZQqw%9jqp71gqy3{JW9(x)$8L<>9aA4e$IQko$85&z#~jB}#|p-Z$I8Yk$EwCY zkJXKR8yg%O85BQe&Ye- z!Q)}$DdXwmnd8~xdENSMf&D4qB+(Kj(TF)}eeF*PwexpH#-B=aP05G;SI{y<__5^zrGF)4bE?rY}zOPhXi9nHHOVJpFX~#k9n<^t9Zx{It%r z`LzFZ;`GPqq3OAqH8UG$kQw64rkO1>yJz;z9Gp2a!##6i=KRdfnFlj(W)x>sX4Gf2 zW^`wwW|C&!&*aSH&lJs+&Q#3Q&os@n&UDPo&#s+aKg&Feo82~haQ4V7_w0$;YqKJ= zVzZBDpUx`J8q6Bcn$DWfPR^~HyF4d2Cp0HACpPzDPGU}aPHqmJbC`3R^PKaU^PdZx zi<*m_i=RuHOPzZ+mp|7y*F85n_kDiN{JMFj`Hl0){FeFc^PKa$=l9MZn7=+RHE%Uf znU9&L&L_^N%%{(1&KJ&?%~#G>&3~S6oBuZ7J3lZ#IzKT#JwLawYGK2|riE<_I~H~= z>|Z#vz_oB};oQQN1)&Aeg@+5`3(po_E@&*6ESN5sEm$tNEVwOrF8D0?F9a^6EMzYf zEEF%4EmSTvEVM3kEPPw&Ul>{#U6@$-zPM%)zqn~}%i{LMU5k4c4=f&DytsIM@&2O7 eqS)f&MfpXQMJ;;3>&lh%zl5jsze}HsI{z2H13Lr& literal 73351 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 z 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%0D_bjjD`zWLD|ahT>xtHjtrD%*TW_|?w%%#I*Q(I^ zuvNR&sMWO9qSd<9vDKy3y_MKXY7K9tv}UyCwLWVtZY^zn(fYEruC>0kskO6psCB;e zW9ygJ?`8NHrcj2ZTH#~+LYRK+w|J> z+l<;g+Jf3b+alVc+bC`EZP{(PZ3S&bZ6$5xZExF#+D6+Z+NRs)+7{bBwtZ>)-pS_9`mW$z z(Yva5@80#jd*8v(!PLRp!QH{r!Pl|BL#X3;he(G+hg8R{4!I8b4y6v24)u=59XcH* z9c~?@j@XWjj^d729Zemr9q&3iJ9;|$JH|S`b*}Hkb>cf&JGXT1?A+Ta(0Qs;yi>aK zR;OI&-A?6B>rThcz|Mruw9dTF=bbM)Uv}1Y)^`qf&UAk0{Mxm;i>qr-*ZD5FE{!gu zF6%DaF8eNzu7Ix4uDGtWuFS5dUBz9cU1eQwx*EEgyV|-sy1Kh&yS{h*==#~cvU^ka zw(cF>ySn#u@9jR&eX#p*_qpy1-QwMsyCu4>ci-%m>Au}<(;d}a)ji&`wr5|DNRN2W zr5=eMxgM1s^`6H)Iz9S5Mm?rIjy*0t?mfgFQqPl~fS%xAt zeZND$bH8^#ssBlTSbunbRDWWBQa`mnr$4v9puf7mw*Phi+y2J>mj0gp;r_Ay$^M!C z`Tm~+s|VH&Y#7)y01prbHV^C@I5HqQaB<-Bz}11912O}*2ks8259klr3^)up54a6@ z4fqWB4FnD(4P*_J3{(!h7=4G9lj8&VxI8uAzl7)l+g7#bP+I=p5W z8D<^cGR!f&eR${amEqgNcZcr}KO9ybRvmskY&L8=Y(MNY>^kf{>^tl~95fs{Ts_<~ z{BeX~WYx%;k@X|2BfCdUxxRE`Xc%#5xdWgXoIQnQ*ZB%pAa@1xN z9d#Ua86}N|kCI1YM-xV=qv@krqdB85M|(#X##W9I#tw}g89O#6Ja&5Q?3lrr<(SPF zI_5a$GZr>R9*Z4I7)u^29;+T39-A27Fpi9KjdPFljPs5k8W$hGI<7SScsyV{bi8W3 zeFB-_nAkqCb7J?z>4_^7*Cr$YK$6{mHk z^{0)dO{d+b1E)i#!>6OBv!+X?%crZRU(6hzxi;fG^JK<2yznNKrcXMW7CoyE;^%pRE)oxL)9ZB}wtdRBH;VOD8YWmbJw zb5?uSV>V&--0b4)$JsBl-{%>sIgvThIk7qMIhnaT zbNA*H<{r(d&1ueQ&za2G&Uw!H%=yg)&V|iI&XMP0=hEi#<|^l^=Bnpv=UV69&2`Q7 z&JD~B&&|v&&V8KwGWUIc!~CXsc%CrNKF>MNHP1bNVE*X*`T0xp67$#RrRQbm@66wu z*O@n+cbyNP&z*0WZ=P?Re>dMX|6%^;!kPtmL1;mA;rznIh06<97ZevBEvPMME@&_4 zEtoG@E!ZyDFL*EbF8D75EhH~wFO)7+EL1PlEc7o7EsQLTFHA1HU--1}b>YY2+QmbQ tM;9M1YAkv$`YjeLmM>N<)-1kS>|PvL9HV>vu3Sm~i!Y}CUHV*{_ Date: Mon, 29 Feb 2016 20:05:39 +0800 Subject: [PATCH 090/276] =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 75859 -> 88302 bytes SDAutoLayoutDemo/DemoVC/DemoVC3/TestCell2.m | 8 ++------ .../DemoVC/DemoVC5/DemoVC5CellTableViewCell.m | 6 +----- SDAutoLayoutDemo/DemoVC/DemoVC6/DemoVC6.m | 10 +--------- SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m | 4 +--- SDAutoLayoutDemo/Others/ViewController.m | 12 +++--------- .../SDAutoLayout/UIView+SDAutoLayout.h | 3 +++ .../SDAutoLayout/UIView+SDAutoLayout.m | 9 +++++++++ 8 files changed, 20 insertions(+), 32 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index ab27b1242799f3f75cc0217256a49f48da6d8683..625a8990eea9e08f8663f8871cd2c5169ce8caaa 100644 GIT binary patch literal 88302 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 literal 75859 zcmdR12Ygh;)}Og$``&xEgsMmv0wLM-rH2#R4iCgP_TdnyV$UIv3_Uf?k2lo!S}uw!h8PS?}csu`#)#SoHldk7FCw{tE!Wd zUPBmhh(`hvkuGjx+@uMe=lFtE{y@cq&ViztzT)btiJiT{;u(H;drar*K&2hw_oW!<+F|yba%jci{W+19%U92tSG+!%yO;@N;-SK8Rn$FXLD6QT#eS zhTq2T;}7u1_!E2re}TWj-{K$fPxvJM4gZDz=6Fuv44jd(auR3f99&DT6?YzYKG%Wk z$aUo||qFfE&o=aJgJQHt zu8b?^W^+Mq4mX!u$SvYjj&PT8%ekw#tGVmA>$w}b)!fb8I_`FEJ-3Og0Pa@)Ck zxcj*Kx!v3zZZG#Jw~u?0dzO2SJHQ>}4s$PaN4TThTih}3J??$(IQKF4Id_8ln)`

E%=svTmC%0J>P-v!guB4`5t^CpTwu~X}p{7 z&G+XA@Y#G0KZMWchw~%&(R?94o}a)^;ivLmzKAd7r}MM;GQN_Z&DZdA_yznzekrf= z%lOOqEBUMVYx(Q=Rs4`yKLspsf=6k(d+6?{UeFjJT%1cXYVTBs4`3k!rL!cyUC;TmCuaIJ8iaJ_JYuu@nh z+$3xg>V(b09l{pjPGPI?ps-8WE$k5<5*`*F5%voEh3ADAgag7s;YHyk;gE1lcw2Z! zcvmd?S1-d?)-V{3ZM?A`y$6$cuugh&ItKIz*=!C$@LQO>0*YMDZ0g6F;5&U4iWRkq2e&HK%5{>6eo$3#VO)c@nX><&JxSSa&f-6 zKwKy;5*Le0#HFGtUL&p$uNAKouNQ9+SBk5|_2LF`qgX56BkmA)iua25iT8^Sh!2YU z#3#k4#HYn)#An6l#QoxH;t}zv_`3L!cwGEg{6zdz{7n2@JR$xp{v!S=p45ptoldVa z=$yJZT?<`HT`OH{T^n6j-G#bty6(C(UAitqm#NFqZ< zZntia?jha7x<_=+>GtcM*S(;7L-(fc9o+}I4|N~uj_bbFeW&|g_k-?lJPAKd9fO->u)He@OqZ{t^9i z`u+On^)Kj;>R;Etp?_2VvHlbNr}`iCKk9$d|7_q4yg@LC2Ajcda2TA1_J$6Ij)qQ# zL_?CnW$0(@hNXt9 z4c8b}7;ZMKGu&d>Vz|?=)v(R5%dp$9$MCG-dBY2a1BQc!HwuX>4!oVC-n@WlS_C8T%Uh8T%WD8iyGRj1!C#jgyR}#_7fx zM!&JfILA2GIM2Auc$smz@p9uT*tZ>&7>XZyMh+9y7jee8>2%@r3aUl*YH4a^ zYHey`>T0^s)Xmi0lx9jdWtg%}Ii_4wo@unH&@{$0&Ez!|nTkyTQ>AIPX|ZXEX{qUI z(>10QrfW^>Ot+YBHQi>~YT9PH%XGJCyXhX&4%1H4Uelwd$4rl#4ww#_UNpUAddqao z^tS08)90oWrY}rintnB%H2r4!-K;ko%to`x+``<_+{)bA+{WD2e4hDyb9ZyRxraH! zoN0EObIp0?!RA8q81q>3IP-Y(1oK4mBy*{Gx_O4#Z>}-VG0!z$YF=i(%zT4+rFoV4 zM)L;qMsuxslX-`Er}G%wL+nGM_a6 zX8zrxw-_u&i^3zNwcI|23fK#IhI_@MV8T)LdzJ-G>g|# zWGS`;ER~komY}7|Qf;ZR%&}Zzxzw`Ea+&1@%Sy{C%Z-)|mW`HL%O=YX%TCL^misJ^ zSsu4MVcBPS(ejezkmZ==ZOc2B&n+h`Us!&z{AxLA`OT`c>a7N=(HduMVQpz`W$kS3 zV(n_Z(3)aRwWe9Ktb?rC)*S07>qXYl){Ctk>olv^T5hed2CS9VMb^dECDx_ZtF6~q zS6HvLuCv}^z14b~b*pu|^&abe*88oyt$VC{t&dvwS)Z{!Z++2v%=)SIGwbKp6V{)t zzgT~@o|HsMC+Q`FASnNcv3rTKY!%LHboXDg7oR zS&)sgNjA$iIZkdPx0TP6JImeV?s9_MOYSZAk^9R16CM#2vN@cbZRH~F}rAC>f%vI(o z^OXh4LS>P%Sh-xeLb+18N?EDgs@$gBuB=x!C>xbp;3p+xpo0+WOi0+XmRi+a}m1+9ug1+oss2+Ag+vY}0IBTaj&s&2Ou) z&9Tk3&9lw7EwEi;yVSPIcB5^zZH?_F+gjVrwym~pw!3V1+qT>8vF)%uXxnAmYkSo8 zjO|(5VcW~LS8VUwKCpdg`^a|O_NDDB+fTNiZNJ$5wDWeOUAD*BTiDODx3_27-S*!0 zKK8!$e)j(M0rr9REc+n)5PQCTxV_Lm&OXiVwHMio?dA3gd%#|8pKD)iC-y7tSJ_wC zSK8OwZ?&(t*V^msTkVh7_u3z|KW2a2{)By>{Ym>X_9OPA_Sfxi*x$6jW&h0nx&4Iw z3;UP$uk2sjf3W{(|H*#R!8-(p*9d<_xM;rShM_b1Qj`ohujxLU_j(A58M^8tB zBioVV$aUm720Mm0@*P7R!yE;U;f_&`LdQ7AM8_0Ikz~!4gxX*FF;}OR*jsuQ^j#nM8JB~TtbA04D z?)c2{x#KIx_l}<(zd8PL3Qo~!c3PY*oGqQLoUNVbI}@ErPM0&;nc_@!ra9A{8P05H zjx*Pp=PYm*I>$RFJ3Y=~XNhx$)9;+=tZ)XMRnGa&1y0p@mGf%nHO>{z8=RY*bft?cRTkuA96nKe8Tyh^MLc9^RV+}=Mm>o=UdKW&i9<}J3nxK=={Wa z!uf^s7w50elg{6qzsKq03~|OdQ=B=@7S|%KUEBq6?c=(|b&rdWONw*FrN#A$>l>F9 zmmfDYZdhDl+?cqrV>?&Wl$E`TjL3w{$bw{KA3vh7*DT-ss!8xSRI!ZfTwLa@s;Wg+ zB&nRr*CGYkRDlS85+UGGocTGq;{(B2Rh8aiUrwO7rrcLi?NK^srKY7MXQXB&Bn?VV zN=VI3&rNU-%E(Gcb7yDfWaVb(=B8zaFWmxlKs~pimZ%kKjoP5L=sa{jYKJaB?Nw3L zse09*8dZ~ORxPSkmA0Xds1xdpx}dJ;Levd)NAW0Ll~siZ!-%kl2#*lqc_MsCgs%u5 z#r`)Mcn%8syt66;{)+0Vtm10_9B;L+#G|yy@s)aO%Bpiq{MCVAVKuy4l@|z(9bHi6 zQCjBsifX1$_g73G@2@Bc%pK&L;hp0T1g9_nUt#eKU%3yUwU?u7Dsp^P)&2@^HB@{a zC8@w$Rh=CuuPpPyrAE<0u&NrAqy21W%uKzNjDSj|QND zC<_fj*(e9)sy5ZGI#j0`r?yaAs;$)4Y8$n!dfwe=FdBmL(NHuD6`vM7y$S<0 z!D3%Fd;#=!rZ0~3`{rtr`hsC~c$D-r{iFe#4u&`AuL@LXm-i?cQ9sPDsP+X*!Hx&j z_{&Os!Bbd*iOeqwc!OX#soF2YTw=&H*jqE*H{4eaziD84Vbld1X<-y?BZR5722EX5 z<1e075D3iD-VE`nr_HcZMg;@3wNO}7NsXv6=cw;^l+5Blc`t7z*krGg>R!YBRmDsK z#^19g{1{huVx9yPY%H+}x$awB}zbHRC>=89)jRzYBT_&QM6*#4RiSEBgXW;QXdar67NCV_ z5n7CvpruGf1YLqIMa$4-XgRtZU4gDdSD~xXHE0F87F~y~M>n9AXcf8o%K@Xva(IaRtdK5i|9!F20edtN_6nYvxgPujtq5bH2^a4774x$&)OXv_fj9x~s zpjXjr=mt= z(KqN@^d0&h{eXT%KcS!1c4`N;liEeSQ0=bvP!rTd)upDWX=;Y*R{N;^)B$Rinyu!l zgVlU>m^xe?sa~WOs$O^(2I#uSA@N zO4Li$%hb!&E7hyj73y{B4eBa&wR)3!vwDkqo4Q`zsBTg>t6S8q>Rsw~b%%PddcXRh zx?6oneMEg!eO%qAKBYdRKBqpf9#CIY52-J!uc}AX*VQ-GW9mEVd+G=3N9xDwr|ReG z7wT8)H|lrl59&|qFX~D4clA&8Z-OzwJi#KtdV-Avn+diOEE8-a*gkR+ z&nNf-f;$l0iQp~-Ur2Cwf_o60KyV_#E`n1CP9r#jU^l^i2<}Jl0D`j!&L%jQ;K9`N zenltIZ|HaQ2l^BJh5p6}W6WV53s}TDtj7jy#3pRU7Hq{5ma&3u*p408iQ{k!+!D9K zt#KRN7N3XD$L;V1xIONGJK|2bGwy=B;tO#%+#Sc`9=In?z`bxHPQosnj8kwbPQ&Rq z17~74?v4B4zPKOmj|bp^I13NL**FL1;ygSU55f6(C?19j@Nhf=kHn+!MR+tW#AEPS zJPwb?6YxYl2~WmT@Kk&;_TXvQi;HkEF2O!ril^fl*pFx8S-1?B;|d(Wm3TG|;woH? zYw#RA7th1<@dCUMFT#uQ61)_vp#DqnrFa>>3@^u*<16r$_$qugzJ}m@f(r?rL~s$o zGYPIBcn-l!2wqO`wFIvucpbsD1aBsIJHZbU{1CzW2!5X67YRN>@S6m`L-28eKO^`{ zg1;sBM}mJP_z%MIgwqpFCR|IxwIy6f!gVEFJmGo~E}3xYgzHVXEW+gyE}wA22{(#x zV+c2aa2~=H6K*=;W)iM~a6!V&A>0DOEhZd+J|*Fydx>zb5bg-!-Xz?Ig!_bWUlZg{IBYaoF#}mF6;gboUPWax0?@#zV!sipdfbb&; zKc4WD34bx+y@dA>-cR^4!dDW$n(*@ozliWl34bZ!mlOUf!e2}Hm4shI_;rM@CHx(P z-$wX*2!9{pcM<*}!tW*gCH$L&e~0iN5dLGre-1JIReT*X zX6An(C+*IS@^<$sE)rH?vDtUKe*7ym_iPZYGv{IHW-!L?ow8j8kWi zQqc^Y#y}QJ^_U#Z;ZDY(t4Aqr8V;w*pA;I_r05H8XBX~v7B8F`x^QOnh3{h*j`t{K zO(XHYU}CvlHYWpjuNje+x0f;K^NTq)Cl0Avga3&aCmYAp=tei={_+}lD-i5e8TusR z%Y`|^PW@h0$*jb}`OxJnPlUM@^akfA<^>`5q&U>6BYhF0yj5ET2wM;r972r5VYN$t<*)*hBNElf?gX(}yhH$tK z1y5+eMJB3dz7_d?KJl+tf>kn`YVddYD#>Guy$CS z$eJtJuq;;XFZV@{rJJ#x=20FyS8Puort<KNRl6{f+460_SCfD$mWRMcGd&V-oZz7d4G)Sl}x6`YWPGU>3U!Y;X84Z6QYK zq>_=H(`1%>MssP@?>w~tkD^w?sLeZzeen7~676ReunR9}o+c3Z;v8R@Z#wM6iDt2s zu~_6$_JpnVf5B}x^o66PS;nMU;!&;*OY@(3%rn|qlv{E`#y{TYpWv@xJz!c8z?Ag` zSw$3;JY2~*svc!V({N<|A&N^{$W^ArC_k=cSHGk=E8FN5FK!iMu&g;5q(ocETE<}c z|Cr4~n=4e$MN4xVlje$Z8j7PlYAqvll}9N(TLvDrq#JeZE$rIYc$BNc*KTfi7Fn>B zd#h(e57ym`-?biPPMF_WcTjGvBYLVMx|eaezR9?p>WKbzr?`u8S?N*shV|0i<97P$ z;U7xZ+mO1e2UdZZs=65Z%g7X9ZEjV%0!W;uL;cFE6ddrvS%YyRt&8loofGmPZg z=JRHaOP$93@fR4ObsohN9>@P|#yeaDdYBR|`e*FI zcQoJ3YuIoWBGjn2^%Wy@r$@P@X{_*!lOUoI6T>4!xv1|MuWcS>cbM0IPpmq9rz^i4 zHqfvnAWE2Dm@s#rgHcZpje2^t8UDct-P3%8{$aRz%n0o~2Oa3>RpZEE<8_SGegEH8 z+hT8VQc0S-DCLw@+w|n*l+4r=x6759mY$ZBo}6^*s%^2?>nq80xl$#VZQ`c}#q)@LK?kSGORz_{#f&X^m$H;(Vj7(8|sW3DS^h~vAn3qNrd zFWk_4jBG;jz1W4HY@XN}y)P0PWs%z?qp}}9h4Fg2d3c>U=11u(lks}?EDlt?vyTdg zd_Q*K{mnT!Qll9RVhmnrP6lbwMlqN%IM{qCL49U=nn5XGgkJI}5B>LLfd9~~(DtQ9 z>-Qoi&f)*Dgtk8BMGG^I3G<3a+4tW!HmA?d>xDT@Y0OV%V!h^3)Ua6pSsUVC2-u;J zb%xahei~zSw8_@>SZ<@G3*mry$_6W1!-V%&HK>iq!ike|_QCof-3bk(V!Rve)|N1CA2wMPamM-oFD_;Bmoiev&w(LFjoTHB z#wY({du8)ri8y+US1>s~YtBr|9X&HwG6p9+%8I6$0sm-aMXW8w*3Pwm<^<+ez~)uh z!aox39?&)nMh*5&jN+HjW@rYAS}01RTeHp(YHnqezHaXONTZzjM#kaW=Gjf6sYTmx z9W^+2Fc#l8*V1p)weMor{?Vh%Z5qR1-uwS~#|*!dk@?x9R5cBmGft#4EUEAhG9tg8 z6CzQ=^Drawn@8Cd*2w=t*L<)qQ0}V^&X0D~k26{RXtH3;Ozr>C(u?u{Pcu?~HD~ll zj#kU_lmWr$zj9;EKh(vey%p1=x5n`=Y2tAIi<=ViD@uIxMm64k!oRACBs8ayM6c@c zZ)g;BO;(tl(KTw3DpX6>_d+8&(NR9?9gUlz$tr*|ayz9m3EfBDuu>OA?n8~7shMsb zkGl4!+O;jsb{kjJ)xXrPE;X6IJ=3t9dXo~hp;K=j=D*WeDgR@4#nQWFqvFQTnjH4# z^a;^xzWnbR1!r?o$cWN{04J2u*wvzW66nZ{Kar*`h#HMn=lYh#NDC268mTsCam#Xj zqn(yo(Hn*ZS-bps=b-;zA2FiJWWlL1YWKgG=!}8e27}SI-&zx={aNe;riMar^xBfp zPP=l)CR?FDlV@iXVw?jdbkbOK{;y2*PQPYwhO$rSris+GSwbdj-<;;whbTvqpt0)q zzj%jg9-Ou|+*<*gs2a_lWKF2}h&|_LacQQ$Au-+;>Ya_vX9;7E;c(!tA5PhYP3O_x zDnldK^Bk-l)w}gm??e&$YP5QJlm-8OM_^1KP*ywx?yw1+J`y@`xYxYm>hLFQH*^^s z#seoU!$~|Dy^?w*)!#~8RbAo@Mjy^3WNCzw&IzG1f4LuSfsdLlc^aYQ|F+wiqDT(Y zNTxRPAv#eUMrj<*!s@;@K2|KE{VkvIFC ze)tw^M29q4ODm=lV=P~vW>LF5bga0b3YVdtb@0T4ON2{>Wdsi;co@M21P`whmJ64o zc;QNdM-V)cJ!{}1cG`WbQ9*w>oc|R*qMX(;aOzZfB|I9T(MRL_Rem_<5)RP_dW+!z zde+~aI>cY%%PK3&ud1r?!E*q*H2P5?+#(HME{XnCr>wmrA6WAFlIar`CiQHep5|U` z7)Sq=w3wZUE8Hlo_9%`Kg~MyA=~-Jjes~Zo zop6hAE5Tz39!u~zg2&ehw+rhv@h1>G@xMX*>~)X+c>Su0RA^UHQrhCM5ZiU2=BQa!}weN+_dA(DGOc6N$DVm%ayix z;zCzus*8?fSfWRTC#gh_36Bd;2yiZTF~KDS`v@+r6P^;D28o^}csju|m_+__D^bnt zU$1z2!Q_R>sVN{tMtTYel;TRyj1=gwaOAYp?5OZM2m~j7&my>t2~-XOQFGrhp`+{d zDGO8JX(M#VGhBe2nw;W}M1D^=PLbaiJ`g?>J|Z|ka3#UB2@ci?9}AxVG8`dZMQ}Ak zt~s}=>ObhCqIT0JEp%n1^=zM+;$A#qVOlDfLBq&@FTi6C>VzMJABCTUp9!8z@H~R& z6TF~K_*FOw;`~nVLV_1DaTcFjaR#h8w9YgrG$CD?i$Snt7@SO3O4yP`Q8a-(qE6I{ z2GL0HQi4^237i{WCz?eIiWen-sLma-8LF5+3iXNOLn`Ny(L9j zve-&Ip9<7kY$LW6&m;J9g0CPLg2YvIVmt8y5U2yeR}*>$J_xkp+zK?{&rf>K>@;Oz zT6zYIi^~O0bK*j{wBGd{;sC0sK4M?7pV*(^RRrHi@M?nB)QJPdEP#b4E8IlzS_XUb zxm8s4iYqM_SF*_Jax;&dL0wLIy&Vr1M^kA=h$F>OBBTMg5Dek+HiB=j6AQ&LAPoe~ z^#pHV(ri4p()3=FeedQk!H!)SFgh8j)NdxINBK>0n&_jW9?Q{)rQ&pOG+@)42(DuS z(ZmNveZZQr@s8_56FxPyUON?H71d5atQ2R9L4xlfcniUI61=retQKoPJK)E*5quW| zyZhW~XVk7imPwzmu}))C93o3(ND+y+oJw6g5WJV*N9)9`;x<5qQGSfz#~JDq=T=Ag z?MFQH+)LD1(abqD4a7-Fg85w^cEw%dBUGH-;vVrK5oCFi;HLe_N$@H)Eh%L2cj%tom-hZTMswBmm5vnXI`E2pA2@dP97ND(g-0E%BK6Ho-3ue2Cz~1ixG- zzAL^5z#k9{*sn6+*Uqi7@JB-@{*)QcQD{VWQ8lGy);q5+#BZrMF;kT9#P30z9|=B6 z@as&RH#9xvE&b$|Vaq^IH0OoDnnaVI6gNfAs7L-y{F@@j3V}ML!zfx(>RIpqlR{}0xkmlUWC=_+`9g!RrvtjKmZ*?@K*$X%|O4=KqvRlyz6+^sS90D57DWbmXX4; zWM(N1su-dhep>7ix{-hlL--xR-!tqV!q^>pyf}X{m>oqGlmy1rA2H+aq0;+~Ny1BY}I;eU6B=|3a|0W!&(=F63Vph#z z!f_1v99#8}n>SX@Sj)7OkyP(ZbeHR{Iqguc&|M44xt?$W;Y2C}rwb3|q046PgW{H! z9ce5+rAMiJjqVnTdXsLg?q(f4o60~qBjHShGuP>E)!hcD>j`He9Jm5Ng_7!A&i6@< zwhwpNqG=|b&Ceu=yUF$GqHe419xBZ?-Cer7b?|5{g>W{)*$L;U)9ujh1ZnOgoRe^I zOqv$wR+@qrdt~=(J!N5LGIRAwsnj34Q{0jHgKn>GA4n9lD%3rxdkQ3ahH$M2*P2Px zMjQ13e+}Q)wjHGD85s~nGLvX8nx`QxH+Ce_n5h~rR zdqwvupdZm4CEWRhyMW=hCma-^qbJg5ZsrBbN~&H#X5Cx5W4gB|!V|oz*fT*02m400 zFEq7>|BBo9qkr0WW3SjhL;t6J9)70`zSnW!l#W4PO_eXd1Rk*f2Lt(nQ#y9+6ZOj= z{T}oJsM~<>)#%eI_|(<#gT?Hp-L*HgUxKxyBqe2pe@K6j)W@XtId$*q-h+p!*7rHJ zJ4rXe+wZeyerc~Ej@Hcn(kFle!z;}^OwL9Or@w@!qE zFa(pTi#BLA#V>Du`R7nRk(AE7In3IKo`>#7-O1A$!*9CZ0ryYBT}ZfY47Yp882)@= z%tdQM8FzX*H3ixva@V&~^t|3cVPoYfdZXTi;`QJFdJwKBgH6z2^DduOynX$og{dwG zmu_ZaE;zy>!t3ho`j)3tgT9r%HQ>Ty_7Vw~#Bg0m#B9Y>Rtq!bsZH;rn# z-ka+?=)0bl?}hqqfE!P^6vCx4+_VtiO zs!!Kv0I-{I8HCGZ!0wQK*E#lnGE58a?o1lq-BF+e^f>^kAE?jL57K87t`Fh*60RTN z`q$}m^?6$C89=y!6cnH1*rTfD#a-^7w2+qctc4tE9P2OAk2|f-$LlA6Y9h(k`#_kp}@&B$Te6=Kwk~OF*8|xjeZUQ&m-JW!VP1<1sd?=VGs8Fy<<43r=#gk zjr7O*CHhMNHMWT?(_f~I<_N-#tRGF<-MDGojuve~sE|&Dm3oc-1_~Cd#jIbcUj-Cb z6Ye6yjb;=JHH!U5kDT~J7C84zFtcRv>a0LW0@*W?>ydBKZ=lGrmS6N6^|gRpN4T+s z8^@5xYslH_?jM)yfwp)G8~&tpn)s!pxgt|3{Wd*a6VczLzgxdue-Gg%5)MXwGU2Aw z>38bsn#h%en@YHg>lJVg3k0>i`iE=#K>7o|#0_2ku;TaXX;h8bnbbe2hp4KDs5*^s zUZ$QRO+E3~n9|knpfXFMlOs8qm3*1W5K|hA?tuO<0LQFg^)KsR0pQmNS3)=+11{Bo z@!O)|*P@VlWH8U4M7?UNyPoh{`u6}gW@4j%U;lxo^%;co*J~Zju3-OxHsW1cx(#zL zEc|EsuPDb@jb{DV`fq^acZ8coxH87ET;n)k&v(D4$AvgTgN{}NQ9)1ti~bL)(^wUO z{!jg1DBgew7a&|EgPpCx)|AXj==%*#-oeORu1sylMfy*J&S0jvvAW0xi@^%G@W|FG z!c{Zen$TF)`VQYd4$7kpIPHnX5m)MBxJo88D`C>q>(vlvXhU@otNUtbYd8#e}h+0dO*jJXI~Ua+qqlMQ&!&nL)E0`L_8OCc$SWdXhBb6}V`orD6B3g#u;3y3j8;VbhRbub~QF!_;_#J4U zLPB+QNC!9N<}a-Rv6%)^*}S6RBGXmxfeqz`AOIUG3;{!>VK(7b5bj#ST}Qa<>kL(f zY5;~u`QAXdl?-?l0G~r|He6bN{R4|aa}cyM0j5o4PH#{Rbk9L-Q(11%_8f2!Qr1MN zeD?<*_sl#sQTuZo{Bhjj_+kaHpsc}pOs|%ajt%i+s1Y?Cd zL#<&GD0(yDZXw*QOwrIdrW37y%8#u^+&CFVkj-J36m(fLYO393*hz6?TG_pZ`!teJ z!fuEpIbhA6$LAWflr5<~4>mkxcw8%q2yEH71U7BZl4vN~v;j%N@XdxN4EuoSQ--Gr zS4+4}j4H&@&A>KP2pRUX@~2iSZ~m?Fr(5>mJh(Hwx_hIlMyp&>lIh%q_0LA1{%bW) zG9;#Tz~X@c2@p<;8l|&}(GHK}r%-2MxaLMZ+u93St!phF1-*fj*!>+(I~5 zlYyzXRU5dx%S-nLe}LqH`iE4OYA3s+VBa=;aN2SE(D0EqZg&yx?x=CQ>C+C6&kRj~ zhKOc3VfcoE#S9VO8omRLKM)Rbl^u-ZPK{&yOI0`iIaLFL=eI#bV|93XgL^z__=}1j z)ARmqL>fnEDBK^#anHbf?rzP4Wz?(Ds5e?pC$G_Jlr*dd3AZZ>YxO1V=CwLSUSph* zMy;6How2PEq881;_7Lu&NU-cx?=K&`O*8t8dN*zCWb8(Tj5W)R-Hq`Y)+2=58;MoD z;P&jJMX=W-oi<=xsS$WCWBO_FGK`rT-eZJ=Wsio~2Y5Rk-lhqfn$kdSfRWZtF$1YF z*BGjupmp(NB-qFYE*Z7e&jf`h^MyT-ak!B#w8pH%jD<#6Xr)Snnf**8mO6h~`8U6T z2g;yHUpkb}A%|w1Y@9~rjJ1|$^css$ys?CE&k+umbYNaQui0FW4P(6PkB0^n`c{oI z2jfg*fC?PTof#{QvjG({odbkB$WUL@PzS6TX6jxXLWSInE*L-x6%pr*^NmXYH)fm9 zxYVcuE`<3*ggeY|U)FFZ*|MH{sRSyGBsYw5rkkx7WJIk68Lu#|plXO|KGzzr)3o|3 z;b5^QVz^h-ET48i>>fy>i)FA=seaBG*BEI(GUik^-fDz?q!FAsc%0W6(a@Sn{4xEB zoxg{=oGG*coJ#xl4NEb`&BnW!Yd3B&-f7%w+(unH_ZH!f5$B@Y<1_X!8eZ`JcnV!AmG0p9=S#(I*rlhQ z(y)WzHTcQ%wv5i9!HWgPiNLS%f@$hN!1O2my%8DYDd@ma!sM7ZN@yg$~= ze&mj4*0oQEIqyz|Iq!B+vro-TjtpPMgGT6{))`+kzGOUPJWRMx3HKS{J}2CXI^!!w zXq+045bg`YeaV2oI?cJT-6Bj(QqdSy8u1wGl-BSbATXf6P_@0sNc8e84jUO9f zx0?~<`-X7eGJ(F+G!=i@zN_xt6n1BHb%Cj@A?kf?{DIEqSZxU7kH((>^%ufHY=(7E zm~TI6sM+hr?z-uT$*{KwRPIWKf*3+`GTm^}0Q{$k1K^nTu!%PbDBh$a9AN*-fKO_` z1qXY0w~v_$Escz1Km*Kls9eCcyTA*j)aR-ui^)d8W37Rj>?Q|*#}V##!u`R(VJ(T~ zs*`)S+LvdBG@7Mptlom9GXPGmuQp6=O>|*0HtP;1SeP_*CfwhIM--UHA=dkQ&s_aG zG+HSzJaiV^d%Bw@R$%d=U}TCn(RIm~nTjdN1nZIz+jySv0tF5ioCE&G-@jZI8a>!# z7Y55T^`l_1wk(+Xn+5>OEW+yuuV*X`8p~zA_coMF2W`R%9N1V2?GU7-r$)ApOoL4Y z035SJU>a^3p|La(-Ww`f z8p-(Uk3T!RE9_`sQ3on0m=nxnxH21bSz_`7a?CuzG}AOoV`(G2J(8tbxn@M?y%5nd zshvV9U0=VOf~L8rWjfC^U&C_}J}we3{_QXRy7(Yv3RGdZ>*ZEWY+HG(E{kco2}(Q@ zjC4!Fw_ zYpA_fU9;p{Jq&qL3ahHApG?V&sz^<@n>GQkX}xKKX``u@@D~uiJ>feLzGI!K&a@eT zw-CM);X5udbO=ZAV$HB1Paox!B5_d2F~O}jvv*zM-!V)J9MgKM@&Zn_YJ})55` zQo&!Dz6ao#?NiearXKJ} z-OQPJ6mJ#@--qyh8E!ufx5tL8!RE=~SwnjdZmN=cb1<9D3ZR-TW~*5;%Y+|5_<@86 z=Qya&Y%|*d6{dAI;d2;jE}))6;~qWkzFTj3jygQr5Y2?r6bvRgYBRmLow*ZLQ>6zfHBHHZco@N)|#WZYlvN=V=8%lV#1QW&^ zaMSt0i(Z+uko9dLIESZ+xwo0_`;Cn@&a z4>8l7G3I>pQ1dWz0pY=~T}1fNgfFZ!k1)f|7&E*aL-?_5@L-+f91h+i@6UV1VY~z8 z3(WN-NC74;OrslIps5}5A?C?uT8_rdS&7+yi3}@~?Lh?BNmudfQCFMS0cvb3yTyDfpx#dSQo>JXs53Ow0luI9DEkxUfIE$* z7O*k`LzJ9BSLhn-x6Zs3kYgrk=56M?G}&hoepaOH1D?9>$K!u6zF@-jEblY#rYvK* zcJm(dL%{M8!j}`ig0T!}EaQ*Oc=nfz8CE(ZXpjZa47-8gKJ&8x8Z+}TKWE+#pf3=9 zHsON|v`Pb2Yi`>ZgcY1rH(ldR2Tg);rYA>9e%MTJ(ur-HN6m1Pj`>Z(*ARXV1D>k^ zPwwA-$EAm8kBO!fbpILkSeaD84V2$A)3PPz#xC>6W++?CpAmjO;TJIEg&OjZn_s(n zca~;Pu)zxS5DogZnN}^ajr2z|R4vrv7ZZL71r58cg8j#qZ|$WS7HrxK8|fbw8hK)x zlZCTDF#pH&&+$^mv?Eoug(6wA(X%7@T68>_+U%@C|sZqpVc61kY(1MAg#Ek_f0S!e34JYZ&SZ4Yj8Du=J&% zvFdqCKTCfAg#Zk*{(1&_g9bWsY0iMOsSx>6=;EInRuN!s!v4-k;5^GPs)JZvZcBk> zH~^0%{3^oV$beUCzI1hpETdFDKo6%@W#2q}$}(Y?&cBGio2AWv*or9obkpuw}7j z2?zv}WE0`*n4UIkdKxhKiW=7op(q0uP3;B3e1n>nTWE-gZ7b*#nz}BI>46I78)sHCY6?3ED$Ly5Gn2={M`(EyGFUk zhJt73K&z4hL!6+L=?ZNFb7uxXrn z3|9uYjEM^~Acc=azTdKk@{P5eVR^{%Fd*+G{QZP~fFVB^Qt_XkF8Ov5cwxBZ2ar=> zd4$d$TEWz(2$m-;&rvnUYV%n3Tb|dv(Qd-;p~zu}nZ53TT@Sv-<~qGIDs0(@Ei6{V z$`C9^E%b&?@N7_K!A&6zSOo`cAO8$9k=-c<&F}g^X?fQ|OO=?u+;ZFkr3!_6l<<#5 z!?hc?MbrifRygXpeQEjbv>N>0@&jn_C&E8L_^ctKlvyUE5*u*C2B;May7?T3Rw~ zWz`e5nyfOFKGyDDt75eQu!HdX2@lH?kpIFh8;{W zXk}SjTWQdUIbW?8SRrUwA!r;V{EH0vrI0F0w*4`F%A|$t{sXvM0#pGvI7Frj)^1i7 zHe&e!YcDH=4LV+j3I8(14V%({HCKKy{IQT9Xvj9L>DE4{CE3^74@g4E_A23DVYg;844~JW@uDdZOyd~rK1%qR#=Bw3p9$a6aI}zig}lh`mDb~vl%w{84ay0 zYoT=l9i&(mZ=GnJ1S}!Dev9zzW)A*sjb*{3hc4=~e(J)s40i_gC8@B60xi=_xFHh) zMSYTNEwWChWMh?d))`hmfX^cQyM$*e9{l?nc=fEJ*UtNuMobEw3^f>aQ($EcmNnZt zhpIMKc(=~A&I8;9g#VE6A2HP)*KliQ@W&3jL*oQ-4Nz(1Y(Q15w7V5ErME7(LU+pw zqyGuvKV_(&X{e)(M`rxtrK-qeD;nw0;i9U5{VAY|`lTi7bynKsicNX76`EXDXmXt( z{1*%yI`?!k)RbI$$9NQ?3{#U}E1k{M9cv#uuXT=n?gu7pw;wz4MY4T3MUX zJ?K94C8|Q-sk>EJKu%G!2=2Gpdc=Cv`nvTED^wA`6aH@^@I=rP0s6@Gmwnqx_Z!44 zL98EIVZVX(W5WMIcBn^tnJ$iX$ zdxm{y{T`5iBmyD=rpN*pM!wtko)1z-xG96)nL(pMdTLZkWc|(h_vwHoB*9Hy5{L=8 zjmUsQH+)oAK5w3Jh(%S{DML|VS9Zh{lZ+C*!7C0}+f2)uhp_uDtxp zSM=b$=uR@I@|d%M9gwum2J2&?v6Wg$^cMD*RjJfYf?L?74n(jJ!OE~D4Lkm|s+>3G z0(NFP4PNPx6hW}efSzL{?F*&usOLth8xfR^Qall$`yM%wq(pWOj9_b?6PX5it9-r6 zDuaQUiNoQLHn{U45S(8W@CHl5sz{bH!C<8nDOF07(xnU{IEdgRLL3oV5TWH}$u0Gk z`bd4HeneKION8@?Z~@5WQCf#jY8mb;FY*N&?udXxU0UbDny#-z`ve}RRO+8z zqdiE%qu8|H!HVywU|hdi|Bu0fUy!SrlfJw zcxi$(kqGUH00z~O2%YMr$Qs&p|CIuoG_5xNqgJHStx6bO{(!3jBm;N)z$t;81` z74TP3u9_Cd1S$)Bb9`kXJ?DUaJC7`y38&=b=Zp!|Gt*QvDp18%(}#O2I}Om7A!wM< zyW~<}udb%6=~7;;G(++e;X)#Sxwf8^UphZw*xZEq`L0Q&BfSaZ3lm1C2Erm$NYGu2 zbbeA$s-{}1B0`UiQVkIjK#YixAuZ4>9gaKf9S#}rB$3jDayZ60I3Ger&{r7IVFDD+iTfjNx!mG;Xh^(DKLi_%LV=L%nbu>|`pA7Y%9S6w{T*|K~4Zt(t{Z-XrX4gp9qn?|j71FiRbwo%eLJAR5H^H=7 zDXn5tCXEPvfSX5Ym!FgC8C8&9IL4EklRswUXis5oL2mY#{E;I(!*VCa`a%Y+c6ohg4h53UDaz_IU#n6WKX6e>iX`OTn5z>i}Nrc|o+qX;WVRmF_vty%FdvX0O zL~N35k~Y$5qJ6hcTE9`+OawRl045#Gqsq!LL2pGB9kN1SaZS))JzqoGDs6+4l|qLu z75b_-Nn546@Vc=h3gLxEiCd_h(bTg&UDpR+nU?8VTvf72;gM~ z5Fv{Q*>%zb(u2}2X*Usai7=c9g+!RpXpHx2V+=>hO>4?ArcY?DO00$>t=Ru1^_p2Z zJ<_!HX_tjl;+o^BBJ5Prs>Dh^?2>8B$j%MQ{fojSxp9`1VmE3;~Dtn)Igh zmUIl6QD^BL>0Jr#s%rrg?4lZf@vMSCVAd!wgAp|}u1%~CA8<$34K*;l|Z#aI*Z|xMMO}yjM#~$UpNXCtY-Xwh@eTvup!?)njw48Bc z8vi!z-#(YVpn5(*gb^F1FNrYnU()lpRL|cL0itJ=o_~^lmfmBE8%>0ZnBvaG90Fa& zzo;&CO$|%=yYy#+HT^||F(4(g7#V{kGDn25(UQnISs#*QJQ2p7brWE7kea~CK8rGU zhG@$c8It7C;K(u&VAU){+fHdah%l)U?Ur(@5bY^Mn9OK5{~TuOU-E9dqhUGDmtn(E zt=vw&fC!KpO{5((QN`{oB~-j z%?)Yp7zp;N3e*IPeFc!T^s0i~rJC049;IiDuZ{}(=J*3ORb${#W?$&%*=61;NH=4B zJ)HeF_8su`t})O(+Ix}UVOa;rSzyTWKqAc8C=VinpGji_zf?#W(_}xt+E=c5aXC*~ zUn>um!HLf#LM5aqVVGg^2xPC73uMR_W)Y#RRvsyX3o0i<1rY*M0j{A$@hA$srpUv+ z(<}VdH6=ce(xE|DQ5SCbS*L-%fh^f)PFPqYkFTYNONJRtl&3UeFjWSNo=t=xFc{To z;N@4aUwah$soKyyP6?g5FwBrsw|-5Yp~WcKFVB=`$z>C(*x8tnDidKI5#|zM4iOeN z*`d#8I=4T8?&FOiqh z@OS2~oiYB&M7|`t@{li+ucGsExqP{Ng?uFuR3Z>q>4Teb>g22CYvdL3wFGX;5mpcZ z{z2E^{&(l)YWXHQFV_&^vW@auA}l}Syu6jp%iHAJiEud)u8x?O8|6AWD{AFUM7V+o zSJuj#>AbwE3Fl?l67QCGG`iGO`Cc{wuYn2JY2b=(|1|%0(fJ2u2b6OW^Y3B#5qYm% zMue3_xPb`Qvsu@KrDgQ&QpyZKG?{j56Q4ge4~7r2sdq%Um*fr-i?fSuWJ!+tw-q-Rm#(%E5RT5_iB0hE%{iZ z>%S}0#V`3i`F;5V`9mT=<$4CcXW!r(K{x^+~^%if&CpD6-Yhr z+^E=yuq}FQlos09Z1pJpqsFGfS3Nfnob_)TkJ4Ic(}=?P3e6prb_(Q1 zkqA49u)7hNQ0}uLwp=qcj zDzNErqmo2~dp9b{M7R&wMs!pg2Qw}8QPROVDH#L~bQW44fr9oerMGlU>7(?;HwZT< z7b?({P<-<$y%i;_T~i$NS5{B-SA?EINCa3`F%V%p5gvF|8Kh(*vy!9aDsXnsbQJFx5hiTFW&?CI%KJ8eX z)4N4ws#1#VcPbadgXE?uUZqGWR!S5|!}b#4Q6fA>gvW{S1c3vHgeQsc)Sb$71UEt` zGnH9NnNp6x;+|GzwqEcIfy1eV=ZLT$-Vg#4t64H#m@{mWzbd!PKiv<9lY_|G+c}VM z7yI(7#`}Yi*wIAW8Tmn2Q{dyZx3hx9GoY=`dgJwPY9M*ua(~%;=(t4!um`@-V~|d{ zB6QV@gT89`!0xY{5vcH0`O9m{=yTBBy<9L~OXgIUFmefvKJJ~Hm7SHEImn%mmze`r zJ}5UMAu}U459~eDJt!$J*`1!5J8oWPx+gt#oPQLBo~ZrF=$Rb0{v`^eRhyKhimE{J z^a2qM5aHk^)>VbUMQ!W?9 z6%Hf}&`zpH>2c;S4)PYyD)d!)*>mbWO7}B=Te}9Ev7H7QSiXabQTr|&YJY|auu0hx zOR77St;#kc93{f*M1Z{lqdN`M5Ya{L#}2CTmxb4ol%2{0u>c-ab}5ify+wp$L}1$j z1}YlD=-y}I^Qf{f2Animc}jVjEuXwg1lSHRIwaXE%6{->&nqv$s!y*HZ?$)%jq?_< zUVT#1YnbB&QP-#MgwAt(LAuf~p>u$(pHxlk?4@%G-X7DrI#6jxc=?9ydV{RAX?tGh zE)zZ8&@AN8oO}$yCfn7Bf+N_GISK&#iEqc-CIQt6cS3#XTHlKnG zf|Ji)>3U(e?vpgC74X9e+CP01h<>NGTRdQEOG&TxOfdCIOacz$sgD847?;9IZ?SJs z5>j~81aQeIVUo4U@$fn=J?g;i z+KjfKt!O9OgZ82Q=wuJ>S9o8Ga|e|dr`9in)hF z02%P->>r;n$I|i49$?J;N^tD|@Fm~{U%K$jNc2mE)$?h{`iF1Q<5bx13uCt^4*&1ruPOI1ixdGOEL8{bRox1lQKNA#%jv+|4bt8!BLP5E8<12$m@U#sBI zza_%=M1b86KNI0sBK$^#Kd5tWC<1I)OIu;POL-G6EJYS%iDUC=>nZwKM3IlSvFS7p zuyf|3Cge~~w*f>x>eOb|uJc2aJ))2;ls1xej2Dug2!ZQg)5mxX@%g9Eh<;d}P0?7v zE}qB2(*O57r~V(FVV-xIM-|-s{Yw*(FS&bcIDsC;$v&; zuYBtB4du`x@%14OZ0l<4g?etWU1;lO>u!s;^|1A{B@p2+BK%E6L_|zPj)*)Fg)O#3 zTawL%BwII{>Jt&p#n%y?o4T66wOk*Mz8Jjcc&M)ebMt}_ULkL$Z$N2VMWZH|dBoMnwpiJke;1I^XAm-gsfDWK_}&OxjS<>r^jR<8Y1!Q8-Cps2+gZZ$*hCR7S%ceu0d5Z=`ebj<2 z?q?<~rmOp@^wB4<&9i=W-!{-T4E5Y*%d!o!W!rLWxwbspVA~K|zHKNG^+Yrf(MUuS z5zR!j5YbBDQ7EEJL}eT5j5^vz*hbn$*)Fn;M)9^Wwz05k2uc@iM6?rl?ufXBh)^<* zBI1KYgwtps*=~^qdr06pR289>iz@9AZxA^^y22TOxg)%D{L^WLGa251u_^Et`N}*> z0u?^ykd3YO!|KEQtf0?ZzZ{^!)kD$G8VyL)sOLakHN7GVVG4DGIsez(TYyEig@2^(Ce7Gfu&qGBRq7ZRdk(@J;4rh8xj=@`0UXb_}36jY=e>F(0I_KcvO_NYb)s6stlpbLAeB*y*;eV+vA$t`N#gYTzUuw}&c%=k((3byb zg|^7c;cilr%kBSnmGpO_Elqeg#e-elyLB1 z$)|^9pfe+o2F&Uu>;~*g5S=EcD04*-lj&e`FlMwous<5%my%Xem0B)AuM&$`5Wajz zSpB8ChT3x4&)Sy89fyktNDhvQLI)|h1Qa?1_6WUyG^=%EZ!Oi_z zrFj&(09I+K`tL9}EAn$qU?5a4f=Yj;!K-0LkcI(0{S+7o0>0nU*1_NcG77E)Og9Av zA^}8BFPGa0!ypaDp%6cX-dAjI|Bw6-W`#E`_Yr1CA%S0ggtx-raLDfnBD@1W1SA&B z3Gak=!Mou-@LqTyydORQA4H+6D0B^luA|Tm6uOB*w@~Od3f)1WyC`%o0zS;J3+4j< zbHm4g^aAn=1`7S5?liR)G%6+0_HIm zB>S%gBvh5;<(I-f>G04$tHoH^GF0)?Ag2Rj%X#l$EbljKZ#m%~eG^jBx`DyP*y|fH z2Jp|E0IQP+D$qY$#CXwicC1r$V|DBAkC)rS(lMp(ZymiMqX;<5Wf0yB0%8BPAb>99 zUn;9fNnTS`(oj}g+IpAaD_}do0w{E!0)rJ5`kxpJd=mx=41I&ZcNx~h_h3QzJ}k71 z0sR5~ppXa(NuZGE&kM0&QE(xasG=J1F)Xz%28%Pmf$&545&RehFU*3(Q0QSG`~-dq zKSQBMCK9D=Y|5KN;1R%JhZ#iQ53|AC`orU};zemWAcu*YF!y9-!|u z#0Eo%{y=X4GI1Gz5TGYm(o*dx^c01}H!`9S=**J`bm#~)DFJXHu%Sexv;o@yVALmA z8I}U=slckREGSGvhiHHhsDWnB!y2&WQmp~71_+0MwLt-$6;7}otPfx>pw58cZe=yl z!%F}HSHyr?V+Is@zHv3Z0z=pc1UoMSD1VMQ5H^I3F+agSX5%w#0-M5Spe=LQ0=9&$ z!1Vmjc-e-HDD)DAUI85HpNJW~FSfAV&sh$DZ9zorinlA=U_%C*lWe_zpH6m)(5_iLNZ`uF6~MR*p-6SunTY=wZnlZBuB3+7!IL1fqn+^ zE>#)`hr(glxPX7?Z%My3y|lk0;CNtL!I5wj91X|7v2Yv=MEDyN0t%)A3MrzH5(+7! zkV+`S0bo;se_5U~^TKIBO)+M{{-rtUfszT1?gRFSQMNEm#aiYEm>Q4CG5})$9QU3g z=J3GGn}5l69lV(VgLZ$i&40wvZX%;%o4Lj{!o%=pcR})56)hi$U?XR=zVYzTnv}Mr8sZ69EE`Tt${+CD0r0| zrT}UKZ4dqcB+UW18vaC6_dw*$E!r0s6r#tSU`!R8GHif1uww-vs2S*P*bD*+#EwD; zT%jqcG;g6Cct(>opr5P){MVLe{bznUBgVWdOLYoqC@O;b_~n%(-he{1Bz54cz+5z- zEevRi^Z0=J@&E(+R_{b$mNvtXQBG9BHVQExR_W# zysD&nS4vCpC3vF;5Q;QNlpEx`{!&xw1_%q2dnqrkvsBMzK~cKhhRvZYaDAvsfyJkl z*|t>olJure9#D~K`u4M<+TdIRxbH_wnp^VpQTn0}gFt)&FPlDp4EV^ut(1Tg)()-b z2*i9f2w_ClAZrl-0$8GuEebiH5b(Nf`h;vim>AY0%m@pz@$s*wMQNQvAuANJMj;yz zRdt->usGcs-uL???dMRFd=B=6lsX*&pbIGkLGbiYXu6XDGhgVNhE}iOOF7j5gn;on z%tZOmJWIV}Mc5D^OYBg{9(3lRh%C0HIJlRRw=nF&l1Vh(5A^jP3%itY2R$Q*DFUh@ z$hhmABnAy|sL{!X1DH@8zYh-E6c-SqAM}4{%p2K@>;tm_di}>5{2Bt##jxoBY!joM z0AxQl%Kz>Be_8?9c{iFBun}yo|FWHz&Fi0pj~qe3IkRwt3pt8#Bgc^A$O(i8Iff*p;EvtwiH>Ss8&z2~iZiZvUFeahKuR~W-G0yT2 z0{>ZbxjHN>c!ptWbldswy#bm4NL$WN*HHhQW!g2q;2mM~(^|+~W^ezcgFMLn-+zew zJk^68Z$QL;PkBuLv9tnDk>{9U1aF+xbLUAZWU2c9EIiokP{AUf82#D7VK&%kJGys&47=Q^Fnqa}U z%y!!P{!Kn&#xLC`3f6J+a*m&1$#1Dj8y_%mF^B>`q!fcH_~c@c0iTlKFBYt-#_)y~ z%&N@5^_)S`5j_2`5ZC`s`5E;3Kb93`xWVv%K@PO2#c=RH+c?6o1QH@-#0QwUh%@4X zxFT;6H^d$BKs*sI1Q1{f3Z3;lq4y|w|0k3kf%qbRVETZ8iv%J; zNH9W!oN`d88q?iw(RkP-%D5S2u1s%+!DHA|=DoTRm zsMsdJrkS1uNZ|q9OHcnTtno?#*np3JE4UG(#NU4Z%nu@lz;glmNl%)nremfYKOYHV z)dCN>qWYgK5hG!`WS3I?9qGmTwDcUS=`)guBq7Ow)KXSBA!$fDAZ5%=O_wv+5bx5A zRaO}(ML7*MdIxFRleRiNg-uyi4vSg&M-mEEVzMe*7J>A|1Rk1GX2Q1D!t74>0-VD6Z4hG2jnACg+hfWRD?ps zC{*%G%)>ZL%mYY=F4cdEMI7h?_LQ407Jok7Xij?yP&=BiToR$J^t>R7h%Q3^DQmG~ zUd;7K7xHa|6AA%ky26;@|7GW{0$o)1A^raz))s&aU{d+t&SL$sACMuiBl4KrS2!`Z zqtFLz9X}c~&}VxbLfV7KQ2p@i4-O z<1|^b|Br@gioY;$DJja(z6!{JC^aR;mw?6qJ0bj;_oo^7_vhE7loX`YRdr~~hi3=N zhu@4sAWmx2Qt!6m!As;q@!Rnn_#Jpo{7(EXJTU$mQK$)pno+0)g<4Ul4Tai6@q6+6 z@cZ!xU>yDs{xAx4pin0Y^`OuQjkti7F$RYI1XFgfh!l)xh|@dy(}ZFBFTR0U|1{Ux zPiqDPk$`@)WE}iU+UBLSE82kBVrJkkHC}uv4V<9_wJ2-6l9!YC85ae@untQcrXRvt znt{{!^9=C6-#Uc9fCqXZ{t^mxp%4g+5kw&nC!<7*H}Mu5mH5wBME}O}@YnFymss8~ z3iU3tJo=j40SpX(7k>{gh`*0Q09Eftp#c;c{6ERS@Gs~LZ0P?k1A`9(Lx(P2fsE9o zL-zEeS4+++`U)>i`4M5-SuiXh^tX5yq>JXFhsxHQSG78@Mym}MZu)jP2;3hCk z`3IK`Egj&-tK-4_IutwrCZ;HOEfkstTMQW5e{BB$6@}{I!DX9E6l#bbxWC^R34w*bTm%s>#ga|>m}JdyzP{-e$R^Tg?Z%?b&H7Jnm7G9Fy5 z7K(SqyWm~%Z}Dz;cRa9VzN63&l#u~tT!AvKL>X71jH@x?^v3((eer&He>|{YI#5Ok zW&8_eB%+K=C?hM%$oBs`;#^vTNPHYdfd6(k6P}8X2LzaiGJ?p6H5dUhg79*T0M(Vt zgiYVmu42J1ZRO#`?y&!L70d4gn2vvkFyJ$R&cTRB8P{V3$hZ!y?EgcZ1D}JDY%V?z zpN}s<88@Je%qZhVlo9?#vUoq5&H-lrCz9|VJ|sF2fv=#ECnHV6g>3%t_x)5s@YVDz zxc{c$pLKnuXGH!xBVAX)H_~(!M&OtK|3Fs(YVE(VmXpgmAm&Z~Pu7B=e?SbX0ho?< z0`)gmgKwm<8b$)0)pTP-)q^sE(1X9R8d@~T$=_Mc03N&54nK$=!Vlv|P{u7N<5rY$ z8_Kvn2tS4&hd<$g<-vh60`cgIGGf<}JiIL>O*=aZxERnnmKFPD!{9MphrmpcM?zQ- z8fMxpZTkfRP(Fh2i}>&O9|S}Ht2RLN2<-@mk}6Osh<{|E z)s6}ApZz6lAYg~V=>|T51!dd=x?i<5Kf_t+!O*Y%6N=k0|-c2 zUS1mDN+0=oY~&XR7g5IJDC5cBM$S(Fe!$=3TL@PP*HFe2C?gLx0e03pT?xJa~)qpHa^Qal#W( zn(U$lK5qiH_CW?75CeO0L&}EC4W%2ZH#C9!AbU6TZy4M#wqat!^oBVm9MfrV+23QP zCrrt>4d!a*&&)Nm4%%JoZM&G2@YHvv81w$ZQQ?6c%u?HFVKl&!#%(m!E{o4_4O|P?17AQh+zPkDo$xof2kwIh;30sCkHHi06g&eU?FINd zP|sE(s{vZP7Fh?_C^NDVfe}1H1PClUvIW_Oa3Gw>E@Tg~4>^Dw0$Afw05P5b@ZxCz zAf5x@As@nz2q0IH>&Q*yHgXpcM1&9#3IYBoA2AB}h3ieyfo$NG;NUG$Ud+p_ec~7$%GnCJ8fydBS(%3gT+w8sa)46LBLEArgt3h+Bx;iJZjU#C^nr#3Mv* z;tAp@;u+$3A|LTG@hb5K@iy@uQHUr?d`J{0J|n&)N)ly=uZapoWuh8Ulc+<~CmIn= zh~`8qqAk&Z=tOiOx)D8zK16?FATfj(PK+YP661+U#8l!t;(KBaF`rmOEG1SDKN3F? zYlwBkMq&%Go!CX}A@&o8h@->_;xy}O)(xy|tn92?Shuk{v3jxwv&OI{vZk@-vVLH# zV*SMWh3x^G1e+9_44WKVJzFoor*h$cFyly-1%eIie1XP40ajqLU)<&8r$___ln)Cc0;?< zcNgt0*|KWhcK}R@`a2?@3 za{LI-k*FhSN8TODJd(wQaB*;Pa_!>U!w>^-!YzJr@&=kXOER1t2@?ktm#K z8;&;}Z#i-Ig!qZ4C!U{p$+LxLKhHs)!#rF((LCuq89eWKvQO>@@54KN^32I|CreJ& zoUA=rf3oqE=&4tyBu`17l0DUSYUtF+sj*WNrxQ+RpUyplhrE5f z)4a31^Sp~^^v+nFu{mRR#^KD!nZ+|d&aODS>a5aP{j-K=jnA5#?LIqkcIxcR*|~Fa z=QPi0pVK|3f3E-B%(=O93+KL{mprd>UhTZbd9Cx47gkbT(8*gqX+)%oqa`WKL(>KrD zJa_ZLt(CV}ZsBerw+Oe~Zw229y%l~d^7irDe7E^;3*5eXyYhC!?WWr;x7+TB-g$LL z@{aT!**leY8tydRX}QyOSNg8nU5&e1cXjTqyvK46cMrKoxaW2+=w8UZuzL}L+XN2^ z9v0*h@GRidgzXjfW-=%^q4jw0?B`k?13_ zM~@yoc~thO_EG(##z!rWWge?P)_kn}SWkSlI8Gc9Cy29&8;jeElf<3GUBtgXS^tFT z3Ck1siOUnplfWmzPr{x)c`Enx%~OS^%1>LK4m=%tI`VY<*{f$t&s3hNJ=1*F`)umj z%(J;?i_Z<8+dj8{PI^v$zW8F@iw!TBU*KMlUUTxm$)KPB=K3IMxs`tLDE|?TryHJS~5=Rywpvp z+fsL>?n`}^YLn`a>XPb_mXcPLR+rY4){&l)StSF>tdUtK<0TU&6Co2N6Dzx2_K@rm z*`u<@Wg}!$WYc8d$-b96EO$okoZJPuOLB2?nQ~cjIdb{01zz8OE&N*a^~2Y#uLoZb zzaD)(@kZ~B)f<~Pc5g^;CgoSkua;+&|4ZIU-dEmVK0rQL;f%sHg&PXD6z(c~Rp?Y0 zR2WehSC~?mRa~hEDXvvqugI*3Q#_<7toTyVT9K^irRc2~s2HV~t5~8~qu8N1pg62J zrZ}lMqqIV4wbB};bxKT18EFIaj$?d0J(=%0877 zDi>64sfehEsXSJBs`5fbPDNftNkvsfLq%H!RdG;pR|!^$QK70Ns-&o-tK_K^s+6dd zt9($YRvA>qt8%K|R25czrYfVVu4QB|p)XD1U>UruP)$7%})koCF)u+^F)fY4%jkOx$=u0t-D(HwM4YUv{bb`v_iE$Xw_=9Y4vN( zXs^&-t-VHjoi>v;QG1j27VYiYoZ7p!`Lt!UHMD)SL$u?x)3gh+tDZ*14*4Lq}4_R>wmpN2gTh zi%zpnzs`itw9cH)qAr8(U%DG~S#)7tf-alxaoxwdvbv7C9=f5r@w!>M#kys>mAX~B zpLLsbTXj2hzv=es4(LwmtYdZOsK>8&Mel{4rJk!^ zre2}mN4C-{WSdy{Ve@l{Q~`B{SJe525bg=1~&|Z z44xav8oV)3G*B^6H!v_THZV1?Ft9eTGjKHsFo-fpGsrb4Feo-CGpIE9YEW;`WYB8R zVerjh*kHzRg(0&ct0BALRznWMorZ@DxeSjP@)({rJZmUmC}jB5@U@|up{AjZp}wJ! zp_QSnp@X55p^KrLp}%32VX|SKVY%T4!)n7XhP8%mhMk7phJA*Eh9icvMk|fh8?hPf zFxq9b*XV%JVWX2qyhi7YE*kM0T`{_A^w>z!NX1Ck$iT?h$kfQfh-5@Iay4={@-p%@ zN;7IT8ZsstZ#Uj&%wv4P_>!@J@ipU{#=^!Aj2{_4F@A3R%J_}3hOwcst+9)-o3W>{ zkFmdTxN($mtZ}??l5wi>C*wJEEqWB?MfuU&=p*zMDuv3TZ%{>43)MvpP-D~-wLmFo zF4DU&lM=S}!bZkXIQxo09|B5Lx`9FaT z>7?m*vlV8m&DNN$Gh;F%nsJyNG&^l}$xOiPn%PaWJ7y2e9+^Ecdv5m1Ov+5rOxw)F zjAZ6+=4Iw?%(KjM%?r#c&A*zrnh%;!na`RpnE$X?X|djd*#c*Qw_vqkx8SjOV)5F7Y~f`Q zVv%5xVUcB#Yf)fPY*A(L+2X53y+xBnt3|KHq{R=*4VDB;Hp|VH+bnlj9R_s<=t@c>$w>o6SWp&Jo$LfOBO)F8WS5|MV z6s=UO)UC9vjIB(qEUc`p?5s#u?pDE8u~r#Y1y;pYWmc6|RaW&@O;)W|9ai70daYMm zAGGGRerf&MTHPA8wz0OicC>c3erxS#9bg@79cCSA9b=thoo8KPU2olC{mr`9dcbl&g3Tox0h?lW6narr73-O|wm#O{Yz_O`pxU&6Lfo&4SGj+m*KK zZCPzOY!BO>wB@xuXM53>-}aX6UEBM%BDP|-k8LGvRcsAxZET%w-`aZEdfWQhhS^5i z#@JGA6Kzv$vu#UlKiRh0_Sz2E4%?2|PTGFATVc1_ZjIeKJ0?4#9f#dvyOVajcIWIa z+VR`nvb$?{-%i9%%sJkwi#hq{pPEq!%PPk~~R?q)O5tX_HWr z4atoZKnf;>ks?VkBq}L`lts!V6_AQaWu!{dS5m#Bk)xHPtD~P|lw*=(s^dGy_l`M^ zrH&PjA00nA);QKVwmS|uPC2b|+Tg_E1UnI&*qnAa?Q+`dbinDb(@`g0r^`-)PLG_P zI6ZfItx_$;pFJ#=@jY|=ak@-?3Ct|;Z)#M>{RAd=~U(P*{R9t zo71?{g3}N3N-{)VOU9A$WL7dec`KQNyq|oW%tyXKzD>SI79xw1pOIgZCCM`6*JK5< zCfSH=M|LHgEmUY%}Hgrav&73WrZJeE*-#U9Z zdpr9%2RKJMr#R<3S2%xk{^VTaT<6^G+~wTk-0wW(JnB5>vf72oh23SR%O02gE{9yW zTu!^3b-Cbj$wk2Bnv0;zV;3nGRTn)MLl@M=%*E2h(Z$*2t&4|?w~L=km`kF|dzUho z&n{nG>Rp;#T3vcw23&?+##|;{W?WaeGP`be-Q~L1^?>VP*Q2hyuIF4Yy7IeTalP(( z-&NdI%2n0Xz}48*)YZb(+SSh0&DGP@$JO68&^5$0+%?~|+I9Brj<*Ni9(FtDcEwG| z?TMS5o2r|Jo3@*to1vSfn~j^jo1>ev+gmq3w@9}nw_LX}w@SAvx6f{0-CEr`+`hT> zx(&DuyRUQScE9K@>lP$bx(9paZh*8bkBA#asTAr=-%r- z=052@<38{H-D8c%Iu9m~jUI>x(PO*EK@T1eevexocRlWVhgr~HplBcSthNrfto~NOwrKgjpuV<)dglDv8 zoM(b(hG&*%u4jQ~v1gg*XU|s8KF?_{2Cr3Kj9!0vZSW#^v3YIw+UB*xYnRtyuajPv zy>5Hm^AhqB^?K;_(o51y#_P40f|s(Fj+dF2qnD3Yh*!8*lvk`*yw^Lg_g*<(`Cdg{ zrCy)BTD=Cnro3jo7QB9Vuk>E;&Fqcy#(T4RvwQFKKH`1WTfqC8_f79R-h$qbyq|bK z_kQIqFwj~?;YqJ;vMT9@15kG>iy39y?2rKC+{ZjKJRhwDeqbD z1@9j|Ykk)HF#F(q@II_Q$9x|7$oPUg?0^7Hiz z^`rWw`xW_p^!wyj<5%a`=-1`fcNe_)q)K`7cr!DSuHmP*^B1g+SRx*-tr1xk%xs zT%la2+@gq3#3+v`Pbn`b5)^rg7R8KWPjRF;Q{GZMC;^mUN*E=Q5<{U<$|>UkD+2Zh z91A!Xa5X?U;7P#qfL8%h0kQ!q0qOx-0lEPO0mcE=0j>f50nq`;0ciml0a*dL0c8P| z0aXE?1HJ~-2Xq7s2FwMn3SX36_gZ|8uTvceNawNeo#eFT~J5RNYHH1LeP)kmBCOjb1*I# zAIuue9=tVpPw?^J^T9WRg@YdiKMH;l{5)7T_)V~4uu8CcuvV~fuyrsw*e^INI5IdU zm>QfIoEe-QoEKaeToPO!{3WlL+*!&gouT_2$2Yp4v`Cy4^axy4nad4Lfk?;LwrK~LjpshLSjSWLy|&LL*9kt zhg61q4e1OS3>gU-519&?4P6-ug{}={i&_u=`;mVPat~!X(0^!{ox`!<52o!l+?c zVclUPVGH4m;Yj$F@a^H8;k(24g>#3W2tO5mCj5LjU-*r1;qWKna^b4s8sXaEdf|rQ zmf<$x_Ti4<&f#yv{lcTe)4~hGKZI9@e+jP*ZwT)U?+)(^9}FJ}9}i!MV2ogi*b=cj zVqe6;h$9i)5oaRKNAN{lj<_0eBSI+Rd4ybqW`t3MNrZWXRfKJXON3j5XM|6Le?(wJ zR76@tUc|?Ux`@VzmWcL4>?A#Yo0TmdGuUyCe5S9*jH^$sKtn@_Zy; zs)B6hn@2jd72m#6-s=$K=J7 z$9#yXj`&NN#u~+%#G1!i#oETY#Ja_L#`?ti#|Fkm#U{sQ#g@l@iLH%oh;5E-i|vaY zj2(#`kDZF0jbn^k8@DcwDehR@#kfmxm*cL+y@}I~(~Z-QGl~m}qsAq~CB>!2HO2MC z^~Vjw4aY6SEyjJPuAnkgS*RPS2$h4ngUU(WO+7|EPrXRJL=~W3rQV>5P{pW^sZXgd zs1j6Zsv1?FYD6`mnp3T)PE;4F8`YEQL-nVIQ8|JQR)PB znmQN1DxM{NQ~aKIuJ~i|Jn^UF&&CVHUyHvPemynlRPd`NtFe0+RXd|7;Ld|P~He0O|b{9yc4{A~O}{Evi{2~Yxa!sdiM3C9yo zCh#VlOSqW8pKveXeu8kqgM^xdj)b9v(S(VF>4dq2#l*FV>l2w1af$du)1lf#lDlT(w^lQWXDQdm=Vr5sE- zlER&GBIRt#g_KJv0x8#0WK*nDqEeDl(o-^1vQzR>%2O&*KBm;A^rQ@@%%sexd{14G z%AUG2^=Rs;)bpvLsjpJsq$;MWq^hTCr5dN2rdp(0r`n~GQoU1sQ~gr|(-_l`G(s9{ z8he^!nopWv8YL|#eN8$(otVy+zB!$g?w#(J9*`cK9+n=NUX=bZ{Zo2PdR=8d0H+paKp7h@7 zz4QCGSx^?7h0h{pZOT%~GR(5fvdOZ~a?Enh^3L+h3djo13d@Sjs>z13Ph>yMex0q5 zt(>ivt(mQpZJ+%%+bi2Qo01)rP0dcuPRq{7&dJWtF3K*=uFdYxVaZ|3*^#p+=XlQP zoU=I>axUjw&AE|tJLgW$gPb=x>N#3Dx;X|p4ms{QUOB!wl$@YkeD2oV1G!we$8vdc z&*YxZ<;%UCdo%Zbu5_+bu4is~Zcc7n?sVSjJSdMb@2@;!-u67syxn>G@($*m$UBvH zChvS6U*6?B#XO(9^1R9XmHANq+WhtT%=x(d-T6oIkLRDv=gmKte$?wmf$e+%i%U>*DF2EJw3s?)-3sejA z3akq33mgla3)~C53VaJF1<3^^1vLd<3u+4*3VI6q3x*0t3nmJt3s)C17OpK^UwEVN zL7`aT!$R>w*+P{<^+K&e-9m#xi$d!{yFyYSxzM#RpfIQ~q%gd&qj02ftZ<@mx`?~z zLJ?mPf6!A z#nmNiO7JDb61I}fC4wbSOJ0;nlt`DzmB^P^l{l5Sl(?06mc*9imXw!#D5)x`F8NYY zThdiBTe_i?xpZSGQo5ydU+Lje-ctTj@zPhNdZkXKzNLPp{-uGXais~R$)#zf8KqgJ z6{W4EgQefgR+OzSTT`~KjHzs68B#_p+go;^>`)n3*|9R7veRW}%g&eamE9~8EmJHr zFY_#mEh{Q(Et@PqS$@7;p!{yRc=@YxsdCx!H|4738s*yMdgX@Y)bjH3uJWPs+46<* z9~CPrpo+B>>nqqQwpVag?5@~X!Bugrf~Vqi#n}qU3UbB!ilU0jinfZOiph$ZiusD~ zl~Co{%Jr4ZmAFdw$}N?gm0Xo4D|su=RbH&TT6v@LcICZFp-S<}XO$|IhLz@(R+YAu z4wbHz?v-AZzLk{9uu5uWTGh6y9aRUaPFG#5x>_Y%^`c6mO1es}O1?^|O0~+U%B0G? z%Bsq?%Av}s%B3o;s=0b?^|9)+)t9SpSKq6CSpB?Ovf8}bvf8scusWnVtU9tfvAU$X zth%!LWA&%%n(Dgh#_E>p_Uf+cp6bc!>FU|)g-`OIbUx{QGWcZt>GP+yPaU7SKJ|Ql z{aNd?&S$;PhF>mzx&7tt7r`&WU*3Hw{!;p-{L6xAl_*QwT_b)>q`y2QGay7aoty6n2Vy03MubzOBmb^Ucib@TNM^{eU` z>(|#a*W>E(^_=xQ^(X5u*59tbUoTQGR{x~_dHt(;sd~kFy?U#9+j@t3r+Sxqw|dX| z(E5n_==!+&g!<(AwEB$tmWGuLoDG*6L>n|3Od3cHwpO$kk@P4AlCH{~>aY-(z1Z|Z95X&P)A zX&P^uYFcPUnmL+xHt%WP-+ZW#b*BIE6vxNZ#6$`7H@vm{IXfHS*BUNS*uyM z*`V3D*|gcQ*}3^`vq!UcvtM&cbAEGCb7^x$^T*~-&8^LC&F#%y&0{TVTGq8NwQOub zT8J&1TDG)oZ{cj&-EyYod<$R8<(8{0H(GAD+-nhP5or-?dE8>#LTzbknQG-|z1J$; zYSHS~TG;xjwWhVMwXwCOwY_zsZAIJ4wpDG6ZAjaew*75~+PK<|wViFd&?eA!zwKe0 zc-ynKmu<3bZ`u^wRNB(uPj>Gbc+?d<8= z(6ztoPS=Yrxvtk;3SGKgmR&Yo_Fax$&RuW2Ji0=lnV!PtIlDbm6-gPx}O@3qf zcHrBUZ$jUmetYpv;+yn0xo`5{w7%(nGx%oo4gF^J&GH-dTgkW4?%my2yG6U7bxU+h zcguClcN=xPb^CV*c87F_cfaqh>Tc~G?_ue|_27G0d)Rxn_T2Az+#}H=-6Pi{-=ox{ z+GEsX)8p9V-1D}_qbI+oqGzCIw0C3g)?SX@oxOW{xq8p_UhL)Xz0&)zSE^UG_f4;2 zuWPSwZ)k6I@7KPSeVh6=_g(0_)%UFLWuIi9OyBE1g+ApzwLZ;0oj$uhQXjd`wa>lJ ztIxNO(ihYh+85DR(D%8or*ENuegDq>Q~kpIvi(N=R{hrfcKxpXZ~Hy^1NsB|L;7R; zOhKlXp>uj#MrZ|v{tALt+MAM2m&pBaD#)(tQXY#bmAunlY;*fzjD zaAx4z!0my1140901CIxu4!jsp9MBpt8?YX*8z2q147d$=4)_ej4Wtbe4wMa44pa@) z4Ac(P4>S$@7~DEoK3F$6G&njqF*rRqH@G;&FtlojapKB z5YN!*p|e95hAs`=9+DbT8?qU49f}^x8~QdhH_SA=ZTR@`onhJGH^U0U%EM~IcEhg2 z-os(TWy4>G>xLVLTZY?*r-$c;7e^RIR*f)@oF2I}a&zR)h~S9u$b*qbBhn*sBl06k zBl;soBPJu}Bjgd+5%&?Vk+6}-k(d$cNd8FG$mfx-BXy%UMukRYM-@g*N4-b=Mk%8~ zqamZQqw%9jqp71gqy3{JW9(x)$8L<>9aA4e$IQko$85&z#~jB}#|p-Z$I8Yk$EwCY zkJXKR8yg%O85BQe&Ye- z!Q)}$DdXwmnd8~xdENSMf&D4qB+(Kj(TF)}eeF*PwexpH#-B=aP05G;SI{y<__5^zrGF)4bE?rY}zOPhXi9nHHOVJpFX~#k9n<^t9Zx{It%r z`LzFZ;`GPqq3OAqH8UG$kQw64rkO1>yJz;z9Gp2a!##6i=KRdfnFlj(W)x>sX4Gf2 zW^`wwW|C&!&*aSH&lJs+&Q#3Q&os@n&UDPo&#s+aKg&Feo82~haQ4V7_w0$;YqKJ= zVzZBDpUx`J8q6Bcn$DWfPR^~HyF4d2Cp0HACpPzDPGU}aPHqmJbC`3R^PKaU^PdZx zi<*m_i=RuHOPzZ+mp|7y*F85n_kDiN{JMFj`Hl0){FeFc^PKa$=l9MZn7=+RHE%Uf znU9&L&L_^N%%{(1&KJ&?%~#G>&3~S6oBuZ7J3lZ#IzKT#JwLawYGK2|riE<_I~H~= z>|Z#vz_oB};oQQN1)&Aeg@+5`3(po_E@&*6ESN5sEm$tNEVwOrF8D0?F9a^6EMzYf zEEF%4EmSTvEVM3kEPPw&Ul>{#U6@$-zPM%)zqn~}%i{LMU5k4c4=f&DytsIM@&2O7 eqS)f&MfpXQMJ;;3>&lh%zl5jsze}HsI{z2H13Lr& diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC3/TestCell2.m b/SDAutoLayoutDemo/DemoVC/DemoVC3/TestCell2.m index 5db71aa..7035f92 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC3/TestCell2.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC3/TestCell2.m @@ -66,13 +66,9 @@ - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSStr UIView *view5 = [UIView new]; view5.backgroundColor = [UIColor yellowColor]; _view5 = view5; + - [self.contentView addSubview:view0]; - [self.contentView addSubview:view1]; - [self.contentView addSubview:view2]; - [self.contentView addSubview:view3]; - [self.contentView addSubview:view4]; - [self.contentView addSubview:view5]; + [self.contentView sd_addSubviews:@[view0, view1, view2, view3, view4, view5]]; diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m b/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m index 7874683..2c08aa6 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m @@ -71,11 +71,7 @@ - (void)setup view4.font = [UIFont systemFontOfSize:13]; _view4 = view4; - [self.contentView addSubview:view0]; - [self.contentView addSubview:view1]; - [self.contentView addSubview:view2]; - [self.contentView addSubview:view3]; - [self.contentView addSubview:view4]; + [self.contentView sd_addSubviews:@[view0, view1, view2, view3, view4]]; _view0.sd_layout diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC6/DemoVC6.m b/SDAutoLayoutDemo/DemoVC/DemoVC6/DemoVC6.m index 3946ce4..9795839 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC6/DemoVC6.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC6/DemoVC6.m @@ -22,15 +22,7 @@ - (void)viewDidLoad { UIScrollView *scrollView = [UIScrollView new]; [self.view addSubview:scrollView]; - [scrollView addSubview:self.view0]; - [scrollView addSubview:self.view1]; - [scrollView addSubview:self.view2]; - [scrollView addSubview:self.view3]; - [scrollView addSubview:self.view4]; - [scrollView addSubview:self.view5]; - [scrollView addSubview:self.view6]; - [scrollView addSubview:self.view7]; - [scrollView addSubview:self.view8]; + [scrollView sd_addSubviews:@[self.view0, self.view1, self.view2, self.view3, self.view4, self.view5, self.view6, self.view7, self.view8]]; scrollView.sd_layout.spaceToSuperView(UIEdgeInsetsZero); diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m index e8ded78..ed3be3a 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m @@ -81,9 +81,7 @@ - (void)setup NSArray *views = @[_iconView, _nameLable, _contentLabel, _moreButton, _picContainerView, _timeLabel]; - [views enumerateObjectsUsingBlock:^(UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - [self.contentView addSubview:obj]; - }]; + [self.contentView sd_addSubviews:views]; UIView *contentView = self.contentView; CGFloat margin = 10; diff --git a/SDAutoLayoutDemo/Others/ViewController.m b/SDAutoLayoutDemo/Others/ViewController.m index b3a3a59..c3b506f 100644 --- a/SDAutoLayoutDemo/Others/ViewController.m +++ b/SDAutoLayoutDemo/Others/ViewController.m @@ -23,6 +23,8 @@ #import "ViewController.h" +#import "UIView+SDAutoLayout.h" + @interface ViewController () @@ -78,15 +80,7 @@ - (void)setupDemoViews view8.backgroundColor = [UIColor blackColor]; self.view8 = view8; - [self.view addSubview:view0]; - [self.view addSubview:view1]; - [self.view addSubview:view2]; - [self.view addSubview:view3]; - [self.view addSubview:view4]; - [self.view addSubview:view5]; - [self.view addSubview:view6]; - [self.view addSubview:view7]; - [self.view addSubview:view8]; + [self.view sd_addSubviews:@[view0, view1, view2, view3, view4, view5, view6, view7, view8]]; } diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h index e78a451..5a442b5 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h @@ -200,6 +200,9 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); /** 自动布局完成后的回调block,可以在这里获取到view的真实frame */ @property (nonatomic) void (^didFinishAutoLayoutBlock)(CGRect frame); +/** 添加一组子view */ +- (void)sd_addSubviews:(NSArray *)subviews; + /* 设置圆角 */ /** 设置圆角半径值 */ diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m index 2d0a8c3..bc1f720 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m @@ -566,6 +566,15 @@ - (void)setSd_equalWidthSubviews:(NSArray *)sd_equalWidthSubviews objc_setAssociatedObject(self, @selector(sd_equalWidthSubviews), sd_equalWidthSubviews, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } +- (void)sd_addSubviews:(NSArray *)subviews +{ + [subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) { + if ([view isKindOfClass:[UIView class]]) { + [self addSubview:view]; + } + }]; +} + @end @implementation UIScrollView (SDAutoContentSize) From 882078b03a35e12ca0e5e94761e1d6d4c9d290c9 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 6 Mar 2016 20:25:10 +0800 Subject: [PATCH 091/276] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=9C=8B=E5=8F=8B?= =?UTF-8?q?=E5=9C=88demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDAutoLayoutDemo.xcodeproj/project.pbxproj | 314 +++++++- .../UserInterfaceState.xcuserstate | Bin 19093 -> 24390 bytes .../DemoVC11/GloabalDefines/GlobalDefines.h | 35 - SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.h | 38 - SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m | 64 -- SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.h | 4 +- SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m | 126 +++- SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.h | 36 - .../DemoVC/DemoVC9/DemoVC9HeaderView.h | 29 - .../DemoVC9/SDWeiXinPhotoContainerView.h | 31 - .../BaseRefreshView/SDBaseRefreshView.h | 48 ++ .../BaseRefreshView/SDBaseRefreshView.m | 60 ++ .../BaseClasses/SDBaseNavigationController.h | 33 + .../BaseClasses/SDBaseNavigationController.m | 49 ++ .../BaseClasses/SDBaseTableViewController.h | 36 + .../BaseClasses/SDBaseTableViewController.m | 50 ++ .../TimeLine/GloabalDefines/GlobalDefines.h | 40 + .../TimeLine/Model/SDTimeLineCellModel.h | 69 ++ .../TimeLine/Model/SDTimeLineCellModel.m | 79 ++ .../SDTimeLineTableViewController.h | 33 + .../SDTimeLineTableViewController.m | 244 ++++++ .../TimeLine/Views/Cell/SDTimeLineCell.h | 41 + .../Views/Cell/SDTimeLineCell.m} | 112 ++- .../CommentView/SDTimeLineCellCommentView.h | 37 + .../CommentView/SDTimeLineCellCommentView.m | 182 +++++ .../HeaderView/SDTimeLineTableHeaderView.h | 33 + .../HeaderView/SDTimeLineTableHeaderView.m} | 38 +- .../SDWeiXinPhotoContainerView.h | 36 + .../SDWeiXinPhotoContainerView.m | 25 +- .../SDTimeLineRefreshHeader.h | 38 + .../SDTimeLineRefreshHeader.m | 121 +++ .../Action_JD_mainMenu@2x.png | Bin 0 -> 140 bytes .../Action_JD_mainMenu.imageset/Contents.json | 21 + .../Images/Discover.xcassets/Contents.json | 6 + .../Contents.json | 21 + .../CreditCard_ShoppingBag@2x.png | Bin 0 -> 1985 bytes .../FootStep.imageset/Contents.json | 21 + .../FootStep.imageset/FootStep@2x.png | Bin 0 -> 299 bytes .../MoreGame.imageset/Contents.json | 23 + .../MoreGame.imageset/MoreGame.png | Bin 0 -> 1302 bytes .../MoreGame.imageset/MoreGame@2x.png | Bin 0 -> 661 bytes .../MoreGame.imageset/MoreGame@3x.png | Bin 0 -> 772 bytes .../ShakeHideImg_women.imageset/Contents.json | 21 + .../ShakeHideImg_women@2x.png | Bin 0 -> 7458 bytes .../Shake_Line_Down.imageset/Contents.json | 21 + .../Shake_Line_Down@2x.png | Bin 0 -> 138 bytes .../Shake_Line_Up.imageset/Contents.json | 21 + .../Shake_Line_Up@2x.png | Bin 0 -> 139 bytes .../Shake_Logo_Down.imageset/Contents.json | 21 + .../Shake_Logo_Down@2x.png | Bin 0 -> 7033 bytes .../Shake_Logo_Up.imageset/Contents.json | 21 + .../Shake_Logo_Up@2x.png | Bin 0 -> 6847 bytes .../Shake_icon_music.imageset/Contents.json | 21 + .../Shake_icon_music@2x.png | Bin 0 -> 471 bytes .../Shake_icon_musicHL.imageset/Contents.json | 21 + .../Shake_icon_musicHL@2x.png | Bin 0 -> 547 bytes .../Shake_icon_people.imageset/Contents.json | 21 + .../Shake_icon_people@2x.png | Bin 0 -> 585 bytes .../Contents.json | 21 + .../Shake_icon_peopleHL@2x.png | Bin 0 -> 633 bytes .../Shake_icon_tv.imageset/Contents.json | 21 + .../Shake_icon_tv@2x.png | Bin 0 -> 519 bytes .../Shake_icon_tvHL.imageset/Contents.json | 21 + .../Shake_icon_tvHL@2x.png | Bin 0 -> 581 bytes .../AlbumAddBtn.imageset/AlbumAddBtn@2x.png | Bin 0 -> 136 bytes .../AlbumAddBtn.imageset/Contents.json | 21 + .../AlbumComment.imageset/AlbumComment@2x.png | Bin 0 -> 1222 bytes .../AlbumComment.imageset/AlbumComment@3x.png | Bin 0 -> 290 bytes .../AlbumComment.imageset/Contents.json | 22 + .../AlbumLike.imageset/AlbumLike@2x.png | Bin 0 -> 1511 bytes .../AlbumLike.imageset/AlbumLike@3x.png | Bin 0 -> 791 bytes .../TimeLine/AlbumLike.imageset/Contents.json | 22 + .../AlbumOperateMore@2x.png | Bin 0 -> 223 bytes .../AlbumOperateMore@3x.png | Bin 0 -> 284 bytes .../AlbumOperateMore.imageset/Contents.json | 22 + .../AlbumOperateMoreHL@2x.png | Bin 0 -> 229 bytes .../AlbumOperateMoreHL@3x.png | Bin 0 -> 283 bytes .../AlbumOperateMoreHL.imageset/Contents.json | 22 + .../AlbumOperateMoreViewBkg@2x.png | Bin 0 -> 680 bytes .../Contents.json | 21 + .../AlbumReflashIcon@2x.png | Bin 0 -> 1867 bytes .../AlbumReflashIcon.imageset/Contents.json | 21 + .../TimeLine/Camera.imageset/Camera@2x.png | Bin 0 -> 402 bytes .../TimeLine/Camera.imageset/Camera@3x.png | Bin 0 -> 579 bytes .../TimeLine/Camera.imageset/Contents.json | 22 + .../Discover.xcassets/TimeLine/Contents.json | 6 + .../TimeLine/Like.imageset/Contents.json | 22 + .../TimeLine/Like.imageset/Like@2x.png | Bin 0 -> 1010 bytes .../TimeLine/Like.imageset/Like@3x.png | Bin 0 -> 956 bytes .../TimeLine/LikeCmtBg.imageset/Contents.json | 22 + .../LikeCmtBg.imageset/LikeCmtBg@2x.png | Bin 0 -> 3188 bytes .../LikeCmtBg.imageset/LikeCmtBg@3x.png | Bin 0 -> 3156 bytes .../bottleBkg.imageset/Contents.json | 21 + .../bottleBkg.imageset/bottleBkg@2x.jpg | Bin 0 -> 55379 bytes .../bottleBkgSpotLight.imageset/Contents.json | 21 + .../bottleBkgSpotLight@2x.png | Bin 0 -> 37117 bytes .../bottleBoard.imageset/Contents.json | 22 + .../bottleBoard.imageset/bottleBoard.png | Bin 0 -> 7524 bytes .../bottleBoard.imageset/bottleBoard@2x.png | Bin 0 -> 33557 bytes .../bottleButtonFish.imageset/Contents.json | 22 + .../bottleButtonFish.png | Bin 0 -> 3035 bytes .../bottleButtonFish@2x.png | Bin 0 -> 5809 bytes .../bottleButtonMine.imageset/Contents.json | 22 + .../bottleButtonMine.png | Bin 0 -> 3149 bytes .../bottleButtonMine@2x.png | Bin 0 -> 6777 bytes .../bottleButtonThrow.imageset/Contents.json | 22 + .../bottleButtonThrow.png | Bin 0 -> 2120 bytes .../bottleButtonThrow@2x.png | Bin 0 -> 3765 bytes .../bottleNightBkg.imageset/Contents.json | 21 + .../bottleNightBkg@2x.jpg | Bin 0 -> 13723 bytes .../bottleRecord.imageset/Contents.json | 21 + .../bottleRecord.imageset/bottleRecord@2x.png | Bin 0 -> 6951 bytes .../ff_IconBottle.imageset/Contents.json | 23 + .../ff_IconBottle.imageset/ff_IconBottle.png | Bin 0 -> 1092 bytes .../ff_IconBottle@2x.png | Bin 0 -> 973 bytes .../ff_IconBottle@3x.png | Bin 0 -> 1394 bytes .../Contents.json | 23 + .../ff_IconLocationService.png | Bin 0 -> 1347 bytes .../ff_IconLocationService@2x.png | Bin 0 -> 708 bytes .../ff_IconLocationService@3x.png | Bin 0 -> 1026 bytes .../ff_IconQRCode.imageset/Contents.json | 23 + .../ff_IconQRCode.imageset/ff_IconQRCode.png | Bin 0 -> 1080 bytes .../ff_IconQRCode@2x.png | Bin 0 -> 536 bytes .../ff_IconQRCode@3x.png | Bin 0 -> 769 bytes .../ff_IconShake.imageset/Contents.json | 23 + .../ff_IconShake.imageset/ff_IconShake.png | Bin 0 -> 1356 bytes .../ff_IconShake.imageset/ff_IconShake@2x.png | Bin 0 -> 1305 bytes .../ff_IconShake.imageset/ff_IconShake@3x.png | Bin 0 -> 2017 bytes .../ff_IconShowAlbum.imageset/Contents.json | 23 + .../ff_IconShowAlbum.png | Bin 0 -> 1335 bytes .../ff_IconShowAlbum@2x.png | Bin 0 -> 1462 bytes .../ff_IconShowAlbum@3x.png | Bin 0 -> 2115 bytes .../game_tag_icon.imageset/1.png | Bin 0 -> 435044 bytes .../game_tag_icon.imageset/Contents.json | 21 + .../Category/NSAttributedString+MLLabel.h | 16 + .../Category/NSAttributedString+MLLabel.m | 39 + .../NSMutableAttributedString+MLLabel.h | 17 + .../NSMutableAttributedString+MLLabel.m | 29 + .../Classes/Category/NSString+MLLabel.h | 24 + .../Classes/Category/NSString+MLLabel.m | 76 ++ .../Classes/Expression/MLExpressionManager.h | 32 + .../Classes/Expression/MLExpressionManager.m | 273 +++++++ .../Classes/Expression/MLTextAttachment.h | 32 + .../Classes/Expression/MLTextAttachment.m | 101 +++ .../NSAttributedString+MLExpression.h | 15 + .../NSAttributedString+MLExpression.m | 19 + .../Expression/NSString+MLExpression.h | 16 + .../Expression/NSString+MLExpression.m | 18 + .../MLLabel/Classes/Helper/MLLabel+Override.h | 33 + .../Classes/Helper/MLLabelLayoutManager.h | 13 + .../Classes/Helper/MLLabelLayoutManager.m | 103 +++ .../MLEmojiLabel/MLLabel/Classes/MLLabel.h | 31 + .../MLEmojiLabel/MLLabel/Classes/MLLabel.m | 703 ++++++++++++++++++ .../MLLabel/Classes/MLLinkLabel.h | 135 ++++ .../MLLabel/Classes/MLLinkLabel.m | 529 +++++++++++++ .../Vender/MLEmojiLabel/MLLabel/LICENSE | 21 + .../Vender/MLEmojiLabel/MLLabel/README.md | 10 + 157 files changed, 4861 insertions(+), 359 deletions(-) delete mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC11/GloabalDefines/GlobalDefines.h delete mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.h delete mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m delete mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.h delete mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9HeaderView.h delete mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/BaseRefreshView/SDBaseRefreshView.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/BaseRefreshView/SDBaseRefreshView.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/SDBaseNavigationController.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/SDBaseNavigationController.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/SDBaseTableViewController.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/SDBaseTableViewController.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/GloabalDefines/GlobalDefines.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Model/SDTimeLineCellModel.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Model/SDTimeLineCellModel.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/TimeLineController/SDTimeLineTableViewController.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/TimeLineController/SDTimeLineTableViewController.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.h rename SDAutoLayoutDemo/DemoVC/DemoVC9/{DemoVC9Cell.m => TimeLine/Views/Cell/SDTimeLineCell.m} (51%) create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/CommentView/SDTimeLineCellCommentView.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/CommentView/SDTimeLineCellCommentView.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/HeaderView/SDTimeLineTableHeaderView.h rename SDAutoLayoutDemo/DemoVC/DemoVC9/{DemoVC9HeaderView.m => TimeLine/Views/HeaderView/SDTimeLineTableHeaderView.m} (61%) create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/PhotoContainer/SDWeiXinPhotoContainerView.h rename SDAutoLayoutDemo/DemoVC/DemoVC9/{ => TimeLine/Views/PhotoContainer}/SDWeiXinPhotoContainerView.m (84%) create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/TimeLineRefreshHeader/SDTimeLineRefreshHeader.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/TimeLineRefreshHeader/SDTimeLineRefreshHeader.m create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Action_JD_mainMenu.imageset/Action_JD_mainMenu@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Action_JD_mainMenu.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/CreditCard_ShoppingBag.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/CreditCard_ShoppingBag.imageset/CreditCard_ShoppingBag@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/FootStep.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/FootStep.imageset/FootStep@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/MoreGame.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/MoreGame.imageset/MoreGame.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/MoreGame.imageset/MoreGame@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/MoreGame.imageset/MoreGame@3x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ShakeHideImg_women.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ShakeHideImg_women.imageset/ShakeHideImg_women@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Line_Down.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Line_Down.imageset/Shake_Line_Down@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Line_Up.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Line_Up.imageset/Shake_Line_Up@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Logo_Down.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Logo_Down.imageset/Shake_Logo_Down@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Logo_Up.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Logo_Up.imageset/Shake_Logo_Up@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_music.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_music.imageset/Shake_icon_music@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_musicHL.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_musicHL.imageset/Shake_icon_musicHL@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_people.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_people.imageset/Shake_icon_people@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_peopleHL.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_peopleHL.imageset/Shake_icon_peopleHL@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_tv.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_tv.imageset/Shake_icon_tv@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_tvHL.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_tvHL.imageset/Shake_icon_tvHL@2x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumAddBtn.imageset/AlbumAddBtn@2x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumAddBtn.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumComment.imageset/AlbumComment@2x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumComment.imageset/AlbumComment@3x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumComment.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumLike.imageset/AlbumLike@2x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumLike.imageset/AlbumLike@3x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumLike.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumOperateMore.imageset/AlbumOperateMore@2x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumOperateMore.imageset/AlbumOperateMore@3x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumOperateMore.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumOperateMoreHL.imageset/AlbumOperateMoreHL@2x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumOperateMoreHL.imageset/AlbumOperateMoreHL@3x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumOperateMoreHL.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumOperateMoreViewBkg.imageset/AlbumOperateMoreViewBkg@2x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumOperateMoreViewBkg.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumReflashIcon.imageset/AlbumReflashIcon@2x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumReflashIcon.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Camera.imageset/Camera@2x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Camera.imageset/Camera@3x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Camera.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Like.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Like.imageset/Like@2x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Like.imageset/Like@3x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/LikeCmtBg.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/LikeCmtBg.imageset/LikeCmtBg@2x.png create mode 100644 SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/LikeCmtBg.imageset/LikeCmtBg@3x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleBkg.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleBkg.imageset/bottleBkg@2x.jpg create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleBkgSpotLight.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleBkgSpotLight.imageset/bottleBkgSpotLight@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleBoard.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleBoard.imageset/bottleBoard.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleBoard.imageset/bottleBoard@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleButtonFish.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleButtonFish.imageset/bottleButtonFish.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleButtonFish.imageset/bottleButtonFish@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleButtonMine.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleButtonMine.imageset/bottleButtonMine.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleButtonMine.imageset/bottleButtonMine@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleButtonThrow.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleButtonThrow.imageset/bottleButtonThrow.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleButtonThrow.imageset/bottleButtonThrow@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleNightBkg.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleNightBkg.imageset/bottleNightBkg@2x.jpg create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleRecord.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/bottleRecord.imageset/bottleRecord@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconBottle.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconBottle.imageset/ff_IconBottle.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconBottle.imageset/ff_IconBottle@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconBottle.imageset/ff_IconBottle@3x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconLocationService.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconLocationService.imageset/ff_IconLocationService.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconLocationService.imageset/ff_IconLocationService@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconLocationService.imageset/ff_IconLocationService@3x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconQRCode.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconQRCode.imageset/ff_IconQRCode.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconQRCode.imageset/ff_IconQRCode@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconQRCode.imageset/ff_IconQRCode@3x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconShake.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconShake.imageset/ff_IconShake.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconShake.imageset/ff_IconShake@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconShake.imageset/ff_IconShake@3x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconShowAlbum.imageset/Contents.json create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconShowAlbum.imageset/ff_IconShowAlbum.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconShowAlbum.imageset/ff_IconShowAlbum@2x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconShowAlbum.imageset/ff_IconShowAlbum@3x.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/game_tag_icon.imageset/1.png create mode 100755 SDAutoLayoutDemo/Images/Discover.xcassets/game_tag_icon.imageset/Contents.json create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSAttributedString+MLLabel.h create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSAttributedString+MLLabel.m create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSMutableAttributedString+MLLabel.h create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSMutableAttributedString+MLLabel.m create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSString+MLLabel.h create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSString+MLLabel.m create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/MLExpressionManager.h create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/MLExpressionManager.m create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/MLTextAttachment.h create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/MLTextAttachment.m create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/NSAttributedString+MLExpression.h create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/NSAttributedString+MLExpression.m create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/NSString+MLExpression.h create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/NSString+MLExpression.m create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Helper/MLLabel+Override.h create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Helper/MLLabelLayoutManager.h create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Helper/MLLabelLayoutManager.m create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/MLLabel.h create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/MLLabel.m create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/MLLinkLabel.h create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/MLLinkLabel.m create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/LICENSE create mode 100644 SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/README.md diff --git a/SDAutoLayoutDemo.xcodeproj/project.pbxproj b/SDAutoLayoutDemo.xcodeproj/project.pbxproj index 108e181..0f6ea43 100644 --- a/SDAutoLayoutDemo.xcodeproj/project.pbxproj +++ b/SDAutoLayoutDemo.xcodeproj/project.pbxproj @@ -59,11 +59,7 @@ 485303411C3F977A004361A7 /* DemoVC7Cell2.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303241C3F977A004361A7 /* DemoVC7Cell2.m */; }; 485303421C3F977A004361A7 /* DemoVC7Model.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303261C3F977A004361A7 /* DemoVC7Model.m */; }; 485303431C3F977A004361A7 /* DemoVC8.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303291C3F977A004361A7 /* DemoVC8.m */; }; - 485303441C3F977A004361A7 /* Demo9Model.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853032C1C3F977A004361A7 /* Demo9Model.m */; }; 485303451C3F977A004361A7 /* DemoVC9.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853032E1C3F977A004361A7 /* DemoVC9.m */; }; - 485303461C3F977A004361A7 /* DemoVC9Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303301C3F977A004361A7 /* DemoVC9Cell.m */; }; - 485303471C3F977A004361A7 /* DemoVC9HeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303321C3F977A004361A7 /* DemoVC9HeaderView.m */; }; - 485303481C3F977A004361A7 /* SDWeiXinPhotoContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 485303341C3F977A004361A7 /* SDWeiXinPhotoContainerView.m */; }; 485303501C3F97AA004361A7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853034B1C3F97AA004361A7 /* AppDelegate.m */; }; 485303511C3F97AA004361A7 /* DemoTableViewControler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853034D1C3F97AA004361A7 /* DemoTableViewControler.m */; }; 485303521C3F97AA004361A7 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853034F1C3F97AA004361A7 /* ViewController.m */; }; @@ -187,6 +183,29 @@ 48FC0ECB1C4FB7CA004098B8 /* XYString.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0ECA1C4FB7CA004098B8 /* XYString.m */; }; 99A697741C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m in Sources */ = {isa = PBXBuildFile; fileRef = 99A697711C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m */; }; 99A697751C423B0D004EA699 /* UIView+SDAutoLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 99A697731C423B0D004EA699 /* UIView+SDAutoLayout.m */; }; + 99D694B51C8C54D000DA97E1 /* SDTimeLineCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694A01C8C54D000DA97E1 /* SDTimeLineCellModel.m */; }; + 99D694B61C8C54D100DA97E1 /* SDTimeLineTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694A31C8C54D000DA97E1 /* SDTimeLineTableViewController.m */; }; + 99D694B71C8C54D100DA97E1 /* SDTimeLineCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694A71C8C54D000DA97E1 /* SDTimeLineCell.m */; }; + 99D694B81C8C54D100DA97E1 /* SDTimeLineCellCommentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694AA1C8C54D000DA97E1 /* SDTimeLineCellCommentView.m */; }; + 99D694B91C8C54D100DA97E1 /* SDTimeLineTableHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694AD1C8C54D000DA97E1 /* SDTimeLineTableHeaderView.m */; }; + 99D694BA1C8C54D100DA97E1 /* SDWeiXinPhotoContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694B01C8C54D000DA97E1 /* SDWeiXinPhotoContainerView.m */; }; + 99D694BB1C8C54D100DA97E1 /* SDTimeLineRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694B41C8C54D000DA97E1 /* SDTimeLineRefreshHeader.m */; }; + 99D694D81C8C553500DA97E1 /* NSAttributedString+MLLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694C01C8C553500DA97E1 /* NSAttributedString+MLLabel.m */; }; + 99D694D91C8C553500DA97E1 /* NSMutableAttributedString+MLLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694C21C8C553500DA97E1 /* NSMutableAttributedString+MLLabel.m */; }; + 99D694DA1C8C553500DA97E1 /* NSString+MLLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694C41C8C553500DA97E1 /* NSString+MLLabel.m */; }; + 99D694DB1C8C553500DA97E1 /* MLExpressionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694C71C8C553500DA97E1 /* MLExpressionManager.m */; }; + 99D694DC1C8C553500DA97E1 /* MLTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694C91C8C553500DA97E1 /* MLTextAttachment.m */; }; + 99D694DD1C8C553500DA97E1 /* NSAttributedString+MLExpression.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694CB1C8C553500DA97E1 /* NSAttributedString+MLExpression.m */; }; + 99D694DE1C8C553500DA97E1 /* NSString+MLExpression.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694CD1C8C553500DA97E1 /* NSString+MLExpression.m */; }; + 99D694DF1C8C553500DA97E1 /* MLLabelLayoutManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694D11C8C553500DA97E1 /* MLLabelLayoutManager.m */; }; + 99D694E01C8C553500DA97E1 /* MLLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694D31C8C553500DA97E1 /* MLLabel.m */; }; + 99D694E11C8C553500DA97E1 /* MLLinkLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694D51C8C553500DA97E1 /* MLLinkLabel.m */; }; + 99D694E21C8C553500DA97E1 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 99D694D61C8C553500DA97E1 /* LICENSE */; }; + 99D694E31C8C553500DA97E1 /* README.md in Sources */ = {isa = PBXBuildFile; fileRef = 99D694D71C8C553500DA97E1 /* README.md */; }; + 99D694EE1C8C567A00DA97E1 /* SDBaseRefreshView.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694E91C8C567A00DA97E1 /* SDBaseRefreshView.m */; }; + 99D694EF1C8C567A00DA97E1 /* SDBaseNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694EB1C8C567A00DA97E1 /* SDBaseNavigationController.m */; }; + 99D694F01C8C567A00DA97E1 /* SDBaseTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694ED1C8C567A00DA97E1 /* SDBaseTableViewController.m */; }; + 99D694F21C8C585300DA97E1 /* Discover.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 99D694F11C8C585200DA97E1 /* Discover.xcassets */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -300,16 +319,8 @@ 485303261C3F977A004361A7 /* DemoVC7Model.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC7Model.m; sourceTree = ""; }; 485303281C3F977A004361A7 /* DemoVC8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC8.h; sourceTree = ""; }; 485303291C3F977A004361A7 /* DemoVC8.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC8.m; sourceTree = ""; }; - 4853032B1C3F977A004361A7 /* Demo9Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Demo9Model.h; sourceTree = ""; }; - 4853032C1C3F977A004361A7 /* Demo9Model.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Demo9Model.m; sourceTree = ""; }; 4853032D1C3F977A004361A7 /* DemoVC9.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC9.h; sourceTree = ""; }; 4853032E1C3F977A004361A7 /* DemoVC9.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC9.m; sourceTree = ""; }; - 4853032F1C3F977A004361A7 /* DemoVC9Cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC9Cell.h; sourceTree = ""; }; - 485303301C3F977A004361A7 /* DemoVC9Cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC9Cell.m; sourceTree = ""; }; - 485303311C3F977A004361A7 /* DemoVC9HeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC9HeaderView.h; sourceTree = ""; }; - 485303321C3F977A004361A7 /* DemoVC9HeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC9HeaderView.m; sourceTree = ""; }; - 485303331C3F977A004361A7 /* SDWeiXinPhotoContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWeiXinPhotoContainerView.h; sourceTree = ""; }; - 485303341C3F977A004361A7 /* SDWeiXinPhotoContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWeiXinPhotoContainerView.m; sourceTree = ""; }; 4853034A1C3F97AA004361A7 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 4853034B1C3F97AA004361A7 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 4853034C1C3F97AA004361A7 /* DemoTableViewControler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoTableViewControler.h; sourceTree = ""; }; @@ -343,7 +354,6 @@ 48EB72E71C748D6C003A818E /* SDChatModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDChatModel.m; sourceTree = ""; }; 48EB72EB1C748D6C003A818E /* SDChatTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDChatTableViewCell.h; sourceTree = ""; }; 48EB72EC1C748D6C003A818E /* SDChatTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDChatTableViewCell.m; sourceTree = ""; }; - 48EB72EE1C748D6C003A818E /* GlobalDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GlobalDefines.h; sourceTree = ""; }; 48EB72F41C748DF5003A818E /* MLEmoji_Expression.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MLEmoji_Expression.bundle; sourceTree = ""; }; 48EB72F51C748DF5003A818E /* MLEmoji_Expression.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = MLEmoji_Expression.plist; sourceTree = ""; }; 48EB72F61C748DF5003A818E /* MLEmoji_ExpressionImage.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = MLEmoji_ExpressionImage.plist; sourceTree = ""; }; @@ -513,6 +523,51 @@ 99A697711C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITableView+SDAutoTableViewCellHeight.m"; sourceTree = ""; }; 99A697721C423B0D004EA699 /* UIView+SDAutoLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+SDAutoLayout.h"; sourceTree = ""; }; 99A697731C423B0D004EA699 /* UIView+SDAutoLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+SDAutoLayout.m"; sourceTree = ""; }; + 99D6949F1C8C54D000DA97E1 /* SDTimeLineCellModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDTimeLineCellModel.h; sourceTree = ""; }; + 99D694A01C8C54D000DA97E1 /* SDTimeLineCellModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDTimeLineCellModel.m; sourceTree = ""; }; + 99D694A21C8C54D000DA97E1 /* SDTimeLineTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDTimeLineTableViewController.h; sourceTree = ""; }; + 99D694A31C8C54D000DA97E1 /* SDTimeLineTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDTimeLineTableViewController.m; sourceTree = ""; }; + 99D694A61C8C54D000DA97E1 /* SDTimeLineCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDTimeLineCell.h; sourceTree = ""; }; + 99D694A71C8C54D000DA97E1 /* SDTimeLineCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDTimeLineCell.m; sourceTree = ""; }; + 99D694A91C8C54D000DA97E1 /* SDTimeLineCellCommentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDTimeLineCellCommentView.h; sourceTree = ""; }; + 99D694AA1C8C54D000DA97E1 /* SDTimeLineCellCommentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDTimeLineCellCommentView.m; sourceTree = ""; }; + 99D694AC1C8C54D000DA97E1 /* SDTimeLineTableHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDTimeLineTableHeaderView.h; sourceTree = ""; }; + 99D694AD1C8C54D000DA97E1 /* SDTimeLineTableHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDTimeLineTableHeaderView.m; sourceTree = ""; }; + 99D694AF1C8C54D000DA97E1 /* SDWeiXinPhotoContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWeiXinPhotoContainerView.h; sourceTree = ""; }; + 99D694B01C8C54D000DA97E1 /* SDWeiXinPhotoContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWeiXinPhotoContainerView.m; sourceTree = ""; }; + 99D694B31C8C54D000DA97E1 /* SDTimeLineRefreshHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDTimeLineRefreshHeader.h; sourceTree = ""; }; + 99D694B41C8C54D000DA97E1 /* SDTimeLineRefreshHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDTimeLineRefreshHeader.m; sourceTree = ""; }; + 99D694BF1C8C553500DA97E1 /* NSAttributedString+MLLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSAttributedString+MLLabel.h"; sourceTree = ""; }; + 99D694C01C8C553500DA97E1 /* NSAttributedString+MLLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSAttributedString+MLLabel.m"; sourceTree = ""; }; + 99D694C11C8C553500DA97E1 /* NSMutableAttributedString+MLLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableAttributedString+MLLabel.h"; sourceTree = ""; }; + 99D694C21C8C553500DA97E1 /* NSMutableAttributedString+MLLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableAttributedString+MLLabel.m"; sourceTree = ""; }; + 99D694C31C8C553500DA97E1 /* NSString+MLLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MLLabel.h"; sourceTree = ""; }; + 99D694C41C8C553500DA97E1 /* NSString+MLLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MLLabel.m"; sourceTree = ""; }; + 99D694C61C8C553500DA97E1 /* MLExpressionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MLExpressionManager.h; sourceTree = ""; }; + 99D694C71C8C553500DA97E1 /* MLExpressionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MLExpressionManager.m; sourceTree = ""; }; + 99D694C81C8C553500DA97E1 /* MLTextAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MLTextAttachment.h; sourceTree = ""; }; + 99D694C91C8C553500DA97E1 /* MLTextAttachment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MLTextAttachment.m; sourceTree = ""; }; + 99D694CA1C8C553500DA97E1 /* NSAttributedString+MLExpression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSAttributedString+MLExpression.h"; sourceTree = ""; }; + 99D694CB1C8C553500DA97E1 /* NSAttributedString+MLExpression.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSAttributedString+MLExpression.m"; sourceTree = ""; }; + 99D694CC1C8C553500DA97E1 /* NSString+MLExpression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MLExpression.h"; sourceTree = ""; }; + 99D694CD1C8C553500DA97E1 /* NSString+MLExpression.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MLExpression.m"; sourceTree = ""; }; + 99D694CF1C8C553500DA97E1 /* MLLabel+Override.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MLLabel+Override.h"; sourceTree = ""; }; + 99D694D01C8C553500DA97E1 /* MLLabelLayoutManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MLLabelLayoutManager.h; sourceTree = ""; }; + 99D694D11C8C553500DA97E1 /* MLLabelLayoutManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MLLabelLayoutManager.m; sourceTree = ""; }; + 99D694D21C8C553500DA97E1 /* MLLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MLLabel.h; sourceTree = ""; }; + 99D694D31C8C553500DA97E1 /* MLLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MLLabel.m; sourceTree = ""; }; + 99D694D41C8C553500DA97E1 /* MLLinkLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MLLinkLabel.h; sourceTree = ""; }; + 99D694D51C8C553500DA97E1 /* MLLinkLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MLLinkLabel.m; sourceTree = ""; }; + 99D694D61C8C553500DA97E1 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + 99D694D71C8C553500DA97E1 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 99D694E51C8C556B00DA97E1 /* GlobalDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GlobalDefines.h; sourceTree = ""; }; + 99D694E81C8C567A00DA97E1 /* SDBaseRefreshView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDBaseRefreshView.h; sourceTree = ""; }; + 99D694E91C8C567A00DA97E1 /* SDBaseRefreshView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDBaseRefreshView.m; sourceTree = ""; }; + 99D694EA1C8C567A00DA97E1 /* SDBaseNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDBaseNavigationController.h; sourceTree = ""; }; + 99D694EB1C8C567A00DA97E1 /* SDBaseNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDBaseNavigationController.m; sourceTree = ""; }; + 99D694EC1C8C567A00DA97E1 /* SDBaseTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDBaseTableViewController.h; sourceTree = ""; }; + 99D694ED1C8C567A00DA97E1 /* SDBaseTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDBaseTableViewController.m; sourceTree = ""; }; + 99D694F11C8C585200DA97E1 /* Discover.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Discover.xcassets; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -760,16 +815,9 @@ 4853032A1C3F977A004361A7 /* DemoVC9 */ = { isa = PBXGroup; children = ( - 4853032B1C3F977A004361A7 /* Demo9Model.h */, - 4853032C1C3F977A004361A7 /* Demo9Model.m */, + 99D6949D1C8C54D000DA97E1 /* TimeLine */, 4853032D1C3F977A004361A7 /* DemoVC9.h */, 4853032E1C3F977A004361A7 /* DemoVC9.m */, - 4853032F1C3F977A004361A7 /* DemoVC9Cell.h */, - 485303301C3F977A004361A7 /* DemoVC9Cell.m */, - 485303311C3F977A004361A7 /* DemoVC9HeaderView.h */, - 485303321C3F977A004361A7 /* DemoVC9HeaderView.m */, - 485303331C3F977A004361A7 /* SDWeiXinPhotoContainerView.h */, - 485303341C3F977A004361A7 /* SDWeiXinPhotoContainerView.m */, ); path = DemoVC9; sourceTree = ""; @@ -852,6 +900,7 @@ 48DBCD0F1C01DEB1002EC476 /* Images */ = { isa = PBXGroup; children = ( + 99D694F11C8C585200DA97E1 /* Discover.xcassets */, 48EB73441C749212003A818E /* Home.xcassets */, 48EB73051C748EDE003A818E /* test */, 48EB730B1C748EDE003A818E /* cell_icons */, @@ -881,7 +930,6 @@ 48EB73011C748E1A003A818E /* AnalogDataGenerator */, 48EB72E11C748D6C003A818E /* WebViewController */, 48EB72E41C748D6C003A818E /* ChatController */, - 48EB72ED1C748D6C003A818E /* GloabalDefines */, ); path = DemoVC11; sourceTree = ""; @@ -924,17 +972,10 @@ path = Views; sourceTree = ""; }; - 48EB72ED1C748D6C003A818E /* GloabalDefines */ = { - isa = PBXGroup; - children = ( - 48EB72EE1C748D6C003A818E /* GlobalDefines.h */, - ); - path = GloabalDefines; - sourceTree = ""; - }; 48EB72F31C748DF5003A818E /* MLEmojiLabel */ = { isa = PBXGroup; children = ( + 99D694BC1C8C553500DA97E1 /* MLLabel */, 48EB72F41C748DF5003A818E /* MLEmoji_Expression.bundle */, 48EB72F51C748DF5003A818E /* MLEmoji_Expression.plist */, 48EB72F61C748DF5003A818E /* MLEmoji_ExpressionImage.plist */, @@ -1276,6 +1317,192 @@ path = SDAutoLayout; sourceTree = ""; }; + 99D6949D1C8C54D000DA97E1 /* TimeLine */ = { + isa = PBXGroup; + children = ( + 99D694E61C8C567A00DA97E1 /* BaseClasses */, + 99D694E41C8C556B00DA97E1 /* GloabalDefines */, + 99D6949E1C8C54D000DA97E1 /* Model */, + 99D694A11C8C54D000DA97E1 /* TimeLineController */, + 99D694A41C8C54D000DA97E1 /* Views */, + ); + path = TimeLine; + sourceTree = ""; + }; + 99D6949E1C8C54D000DA97E1 /* Model */ = { + isa = PBXGroup; + children = ( + 99D6949F1C8C54D000DA97E1 /* SDTimeLineCellModel.h */, + 99D694A01C8C54D000DA97E1 /* SDTimeLineCellModel.m */, + ); + path = Model; + sourceTree = ""; + }; + 99D694A11C8C54D000DA97E1 /* TimeLineController */ = { + isa = PBXGroup; + children = ( + 99D694A21C8C54D000DA97E1 /* SDTimeLineTableViewController.h */, + 99D694A31C8C54D000DA97E1 /* SDTimeLineTableViewController.m */, + ); + path = TimeLineController; + sourceTree = ""; + }; + 99D694A41C8C54D000DA97E1 /* Views */ = { + isa = PBXGroup; + children = ( + 99D694A51C8C54D000DA97E1 /* Cell */, + 99D694A81C8C54D000DA97E1 /* CommentView */, + 99D694AB1C8C54D000DA97E1 /* HeaderView */, + 99D694AE1C8C54D000DA97E1 /* PhotoContainer */, + 99D694B11C8C54D000DA97E1 /* TimeLineRefreshFooter */, + 99D694B21C8C54D000DA97E1 /* TimeLineRefreshHeader */, + ); + path = Views; + sourceTree = ""; + }; + 99D694A51C8C54D000DA97E1 /* Cell */ = { + isa = PBXGroup; + children = ( + 99D694A61C8C54D000DA97E1 /* SDTimeLineCell.h */, + 99D694A71C8C54D000DA97E1 /* SDTimeLineCell.m */, + ); + path = Cell; + sourceTree = ""; + }; + 99D694A81C8C54D000DA97E1 /* CommentView */ = { + isa = PBXGroup; + children = ( + 99D694A91C8C54D000DA97E1 /* SDTimeLineCellCommentView.h */, + 99D694AA1C8C54D000DA97E1 /* SDTimeLineCellCommentView.m */, + ); + path = CommentView; + sourceTree = ""; + }; + 99D694AB1C8C54D000DA97E1 /* HeaderView */ = { + isa = PBXGroup; + children = ( + 99D694AC1C8C54D000DA97E1 /* SDTimeLineTableHeaderView.h */, + 99D694AD1C8C54D000DA97E1 /* SDTimeLineTableHeaderView.m */, + ); + path = HeaderView; + sourceTree = ""; + }; + 99D694AE1C8C54D000DA97E1 /* PhotoContainer */ = { + isa = PBXGroup; + children = ( + 99D694AF1C8C54D000DA97E1 /* SDWeiXinPhotoContainerView.h */, + 99D694B01C8C54D000DA97E1 /* SDWeiXinPhotoContainerView.m */, + ); + path = PhotoContainer; + sourceTree = ""; + }; + 99D694B11C8C54D000DA97E1 /* TimeLineRefreshFooter */ = { + isa = PBXGroup; + children = ( + ); + path = TimeLineRefreshFooter; + sourceTree = ""; + }; + 99D694B21C8C54D000DA97E1 /* TimeLineRefreshHeader */ = { + isa = PBXGroup; + children = ( + 99D694B31C8C54D000DA97E1 /* SDTimeLineRefreshHeader.h */, + 99D694B41C8C54D000DA97E1 /* SDTimeLineRefreshHeader.m */, + ); + path = TimeLineRefreshHeader; + sourceTree = ""; + }; + 99D694BC1C8C553500DA97E1 /* MLLabel */ = { + isa = PBXGroup; + children = ( + 99D694BD1C8C553500DA97E1 /* Classes */, + 99D694D61C8C553500DA97E1 /* LICENSE */, + 99D694D71C8C553500DA97E1 /* README.md */, + ); + path = MLLabel; + sourceTree = ""; + }; + 99D694BD1C8C553500DA97E1 /* Classes */ = { + isa = PBXGroup; + children = ( + 99D694BE1C8C553500DA97E1 /* Category */, + 99D694C51C8C553500DA97E1 /* Expression */, + 99D694CE1C8C553500DA97E1 /* Helper */, + 99D694D21C8C553500DA97E1 /* MLLabel.h */, + 99D694D31C8C553500DA97E1 /* MLLabel.m */, + 99D694D41C8C553500DA97E1 /* MLLinkLabel.h */, + 99D694D51C8C553500DA97E1 /* MLLinkLabel.m */, + ); + path = Classes; + sourceTree = ""; + }; + 99D694BE1C8C553500DA97E1 /* Category */ = { + isa = PBXGroup; + children = ( + 99D694BF1C8C553500DA97E1 /* NSAttributedString+MLLabel.h */, + 99D694C01C8C553500DA97E1 /* NSAttributedString+MLLabel.m */, + 99D694C11C8C553500DA97E1 /* NSMutableAttributedString+MLLabel.h */, + 99D694C21C8C553500DA97E1 /* NSMutableAttributedString+MLLabel.m */, + 99D694C31C8C553500DA97E1 /* NSString+MLLabel.h */, + 99D694C41C8C553500DA97E1 /* NSString+MLLabel.m */, + ); + path = Category; + sourceTree = ""; + }; + 99D694C51C8C553500DA97E1 /* Expression */ = { + isa = PBXGroup; + children = ( + 99D694C61C8C553500DA97E1 /* MLExpressionManager.h */, + 99D694C71C8C553500DA97E1 /* MLExpressionManager.m */, + 99D694C81C8C553500DA97E1 /* MLTextAttachment.h */, + 99D694C91C8C553500DA97E1 /* MLTextAttachment.m */, + 99D694CA1C8C553500DA97E1 /* NSAttributedString+MLExpression.h */, + 99D694CB1C8C553500DA97E1 /* NSAttributedString+MLExpression.m */, + 99D694CC1C8C553500DA97E1 /* NSString+MLExpression.h */, + 99D694CD1C8C553500DA97E1 /* NSString+MLExpression.m */, + ); + path = Expression; + sourceTree = ""; + }; + 99D694CE1C8C553500DA97E1 /* Helper */ = { + isa = PBXGroup; + children = ( + 99D694CF1C8C553500DA97E1 /* MLLabel+Override.h */, + 99D694D01C8C553500DA97E1 /* MLLabelLayoutManager.h */, + 99D694D11C8C553500DA97E1 /* MLLabelLayoutManager.m */, + ); + path = Helper; + sourceTree = ""; + }; + 99D694E41C8C556B00DA97E1 /* GloabalDefines */ = { + isa = PBXGroup; + children = ( + 99D694E51C8C556B00DA97E1 /* GlobalDefines.h */, + ); + path = GloabalDefines; + sourceTree = ""; + }; + 99D694E61C8C567A00DA97E1 /* BaseClasses */ = { + isa = PBXGroup; + children = ( + 99D694E71C8C567A00DA97E1 /* BaseRefreshView */, + 99D694EA1C8C567A00DA97E1 /* SDBaseNavigationController.h */, + 99D694EB1C8C567A00DA97E1 /* SDBaseNavigationController.m */, + 99D694EC1C8C567A00DA97E1 /* SDBaseTableViewController.h */, + 99D694ED1C8C567A00DA97E1 /* SDBaseTableViewController.m */, + ); + path = BaseClasses; + sourceTree = ""; + }; + 99D694E71C8C567A00DA97E1 /* BaseRefreshView */ = { + isa = PBXGroup; + children = ( + 99D694E81C8C567A00DA97E1 /* SDBaseRefreshView.h */, + 99D694E91C8C567A00DA97E1 /* SDBaseRefreshView.m */, + ); + path = BaseRefreshView; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -1373,6 +1600,7 @@ 4841F5EB1C2ABC60004979F4 /* pic7.jpg in Resources */, 48EB73251C748EDE003A818E /* test1.jpg in Resources */, 48FC0E9E1C4FB60A004098B8 /* LICENSE in Resources */, + 99D694F21C8C585300DA97E1 /* Discover.xcassets in Resources */, 48DBCD221C01E045002EC476 /* pic3.jpg in Resources */, 48DBCD211C01E045002EC476 /* pic2.jpg in Resources */, 48EB73451C749212003A818E /* Home.xcassets in Resources */, @@ -1387,6 +1615,7 @@ 48EB732D1C748EDE003A818E /* 12.jpg in Resources */, 48EB73391C748EDE003A818E /* 23.jpg in Resources */, 487D3EC01BCB9EC700A66173 /* Main.storyboard in Resources */, + 99D694E21C8C553500DA97E1 /* LICENSE in Resources */, 4841F5F31C2ACC2B004979F4 /* picon.jpg in Resources */, 48EB73321C748EDE003A818E /* 17.jpg in Resources */, 48EB73331C748EDE003A818E /* 18.jpg in Resources */, @@ -1436,7 +1665,7 @@ 4853033C1C3F977A004361A7 /* DemoVC5CellTableViewCell.m in Sources */, 485303501C3F97AA004361A7 /* AppDelegate.m in Sources */, 485302F61C3F65EE004361A7 /* TADotView.m in Sources */, - 485303481C3F977A004361A7 /* SDWeiXinPhotoContainerView.m in Sources */, + 99D694E11C8C553500DA97E1 /* MLLinkLabel.m in Sources */, 485302DB1C3F6490004361A7 /* SDWebImageManager.m in Sources */, 48EB73001C748DF5003A818E /* TTTAttributedLabel.m in Sources */, 48EB73041C748E1A003A818E /* SDAnalogDataGenerator.m in Sources */, @@ -1448,7 +1677,6 @@ 485303431C3F977A004361A7 /* DemoVC8.m in Sources */, 48FC0E1D1C4FB3A8004098B8 /* ThreeSecondCell.m in Sources */, 48FC0E9B1C4FB60A004098B8 /* AFURLRequestSerialization.m in Sources */, - 485303471C3F977A004361A7 /* DemoVC9HeaderView.m in Sources */, 485303421C3F977A004361A7 /* DemoVC7Model.m in Sources */, 485302CE1C3F6490004361A7 /* SDWaitingView.m in Sources */, 48FC0E961C4FB60A004098B8 /* AFHTTPRequestOperationManager.m in Sources */, @@ -1458,24 +1686,31 @@ 485303361C3F977A004361A7 /* DemoVC1.m in Sources */, 485302F71C3F65EE004361A7 /* TAPageControl.m in Sources */, 48FC0EBF1C4FB60A004098B8 /* MJRefreshGifHeader.m in Sources */, + 99D694EF1C8C567A00DA97E1 /* SDBaseNavigationController.m in Sources */, 485302E01C3F6490004361A7 /* UIImage+WebP.m in Sources */, + 99D694F01C8C567A00DA97E1 /* SDBaseTableViewController.m in Sources */, 4853033E1C3F977A004361A7 /* DemoVC6.m in Sources */, 48FC0EAA1C4FB60A004098B8 /* MJFoundation.m in Sources */, 485302D11C3F6490004361A7 /* SDRefreshHeaderView.m in Sources */, + 99D694DE1C8C553500DA97E1 /* NSString+MLExpression.m in Sources */, 48FC0EBE1C4FB60A004098B8 /* MJRefreshBackStateFooter.m in Sources */, + 99D694B81C8C54D100DA97E1 /* SDTimeLineCellCommentView.m in Sources */, 48FC0EBC1C4FB60A004098B8 /* MJRefreshBackGifFooter.m in Sources */, 48FC0EBD1C4FB60A004098B8 /* MJRefreshBackNormalFooter.m in Sources */, 48FC0EAD1C4FB60A004098B8 /* MJPropertyType.m in Sources */, 485302E11C3F6490004361A7 /* UIImageView+HighlightedWebCache.m in Sources */, - 485303441C3F977A004361A7 /* Demo9Model.m in Sources */, 485303401C3F977A004361A7 /* DemoVC7Cell.m in Sources */, + 99D694B51C8C54D000DA97E1 /* SDTimeLineCellModel.m in Sources */, 485303351C3F977A004361A7 /* DemoVC0.m in Sources */, + 99D694DC1C8C553500DA97E1 /* MLTextAttachment.m in Sources */, 48FC0EA71C4FB60A004098B8 /* UIWebView+AFNetworking.m in Sources */, 48FC0EB11C4FB60A004098B8 /* NSObject+MJProperty.m in Sources */, 48FC0E1B1C4FB3A8004098B8 /* ThreeFirstCell.m in Sources */, 48FC0E211C4FB3EA004098B8 /* DemoVC10.m in Sources */, 48FC0E9D1C4FB60A004098B8 /* AFURLSessionManager.m in Sources */, + 99D694E01C8C553500DA97E1 /* MLLabel.m in Sources */, 48EB72FF1C748DF5003A818E /* MLEmojiLabel.m in Sources */, + 99D694B91C8C54D100DA97E1 /* SDTimeLineTableHeaderView.m in Sources */, 48FC0E991C4FB60A004098B8 /* AFSecurityPolicy.m in Sources */, 48FC0EC41C4FB60A004098B8 /* UIScrollView+MJExtension.m in Sources */, 48FC0E9F1C4FB60A004098B8 /* README.md in Sources */, @@ -1498,6 +1733,7 @@ 48FC0EB61C4FB60A004098B8 /* MJRefreshComponent.m in Sources */, 485302E21C3F6490004361A7 /* UIImageView+WebCache.m in Sources */, 485303451C3F977A004361A7 /* DemoVC9.m in Sources */, + 99D694DD1C8C553500DA97E1 /* NSAttributedString+MLExpression.m in Sources */, 485302D61C3F6490004361A7 /* SDImageCache.m in Sources */, 48FC0E9A1C4FB60A004098B8 /* AFURLConnectionOperation.m in Sources */, 48FC0E181C4FB3A8004098B8 /* Imgextra.m in Sources */, @@ -1505,9 +1741,11 @@ 48FC0EBB1C4FB60A004098B8 /* MJRefreshAutoStateFooter.m in Sources */, 48FC0EAF1C4FB60A004098B8 /* NSObject+MJCoding.m in Sources */, 48FC0EB41C4FB60A004098B8 /* MJRefreshAutoFooter.m in Sources */, + 99D694DF1C8C553500DA97E1 /* MLLabelLayoutManager.m in Sources */, 48EB72EF1C748D6C003A818E /* SDWebViewController.m in Sources */, 48FC0E171C4FB3A8004098B8 /* Editor.m in Sources */, 485303551C3F97E6004361A7 /* DemoCell.m in Sources */, + 99D694DA1C8C553500DA97E1 /* NSString+MLLabel.m in Sources */, 48FC0EA61C4FB60A004098B8 /* UIRefreshControl+AFNetworking.m in Sources */, 485303391C3F977A004361A7 /* TestCell2.m in Sources */, 485302CC1C3F6490004361A7 /* SDBrowserImageView.m in Sources */, @@ -1515,6 +1753,7 @@ 48FC0E971C4FB60A004098B8 /* AFHTTPSessionManager.m in Sources */, 48FC0EC71C4FB60A004098B8 /* README.md in Sources */, 48FC0EA51C4FB60A004098B8 /* UIProgressView+AFNetworking.m in Sources */, + 99D694D91C8C553500DA97E1 /* NSMutableAttributedString+MLLabel.m in Sources */, 48FC0EC51C4FB60A004098B8 /* UIScrollView+MJRefresh.m in Sources */, 485303511C3F97AA004361A7 /* DemoTableViewControler.m in Sources */, 48FC0ECB1C4FB7CA004098B8 /* XYString.m in Sources */, @@ -1524,17 +1763,23 @@ 48FC0EB51C4FB60A004098B8 /* MJRefreshBackFooter.m in Sources */, 485302DA1C3F6490004361A7 /* SDWebImageDownloaderOperation.m in Sources */, 485303521C3F97AA004361A7 /* ViewController.m in Sources */, + 99D694E31C8C553500DA97E1 /* README.md in Sources */, 99A697741C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m in Sources */, + 99D694B61C8C54D100DA97E1 /* SDTimeLineTableViewController.m in Sources */, 48FC0EAC1C4FB60A004098B8 /* MJPropertyKey.m in Sources */, 48EB73431C748F26003A818E /* DemoVC11.m in Sources */, 485302D71C3F6490004361A7 /* SDWebImageCompat.m in Sources */, - 485303461C3F977A004361A7 /* DemoVC9Cell.m in Sources */, + 99D694EE1C8C567A00DA97E1 /* SDBaseRefreshView.m in Sources */, 48FC0E1A1C4FB3A8004098B8 /* ThreeBaseCell.m in Sources */, 48FC0EC61C4FB60A004098B8 /* UIView+MJExtension.m in Sources */, 485302D51C3F6490004361A7 /* NSData+ImageContentType.m in Sources */, 48FC0EA21C4FB60A004098B8 /* UIAlertView+AFNetworking.m in Sources */, + 99D694D81C8C553500DA97E1 /* NSAttributedString+MLLabel.m in Sources */, 485303381C3F977A004361A7 /* DemoVC3.m in Sources */, 48FC0EA41C4FB60A004098B8 /* UIImageView+AFNetworking.m in Sources */, + 99D694B71C8C54D100DA97E1 /* SDTimeLineCell.m in Sources */, + 99D694BB1C8C54D100DA97E1 /* SDTimeLineRefreshHeader.m in Sources */, + 99D694BA1C8C54D100DA97E1 /* SDWeiXinPhotoContainerView.m in Sources */, 485302D01C3F6490004361A7 /* SDRefreshFooterView.m in Sources */, 48FC0E9C1C4FB60A004098B8 /* AFURLResponseSerialization.m in Sources */, 485302DD1C3F6490004361A7 /* UIButton+WebCache.m in Sources */, @@ -1546,6 +1791,7 @@ 48FC0E161C4FB3A8004098B8 /* Ads.m in Sources */, 4853033F1C3F977A004361A7 /* DemoVC7.m in Sources */, 485302E31C3F6490004361A7 /* UIView+WebCacheOperation.m in Sources */, + 99D694DB1C8C553500DA97E1 /* MLExpressionManager.m in Sources */, 48FC0EC31C4FB60A004098B8 /* MJRefreshConst.m in Sources */, 48FC0EBA1C4FB60A004098B8 /* MJRefreshAutoNormalFooter.m in Sources */, 48FC0EA01C4FB60A004098B8 /* AFNetworkActivityIndicatorManager.m in Sources */, diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate index cf8599f71ad5dec9f8aec4fab8698d02f8264f5f..d72579f08c40b86ac828a397bf8ee115c473139f 100644 GIT binary patch literal 24390 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 J_#Cz5{{duqDyRSe delta 10876 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 - -@interface Demo9Model : NSObject - -@property (nonatomic, copy) NSString *iconName; -@property (nonatomic, copy) NSString *name; -@property (nonatomic, copy) NSString *content; -@property (nonatomic, strong) NSArray *picNamesArray; - -@property (nonatomic, assign) BOOL isOpening; - -@property (nonatomic, assign, readonly) BOOL shouldShowMoreButton; - -@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m deleted file mode 100644 index 848eed6..0000000 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.m +++ /dev/null @@ -1,64 +0,0 @@ -// -// Demo9Model.m -// SDAutoLayout 测试 Demo -// -// Created by gsd on 15/12/23. -// Copyright © 2015年 gsd. All rights reserved. -// - - -/* - - ********************************************************************************* - * * - * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * - * 帮您解决问题。 * - * 持续更新地址: https://github.com/gsdios/SDAutoLayout * - * Email : gsdios@126.com * - * GitHub: https://github.com/gsdios * - * 新浪微博:GSD_iOS * - * * - ********************************************************************************* - - */ - -#import "Demo9Model.h" -#import - -extern const CGFloat contentLabelFontSize; -extern const CGFloat maxContentLabelHeight; - -@implementation Demo9Model - -@synthesize shouldShowMoreButton = _shouldShowMoreButton; -@synthesize content = _content; - - -- (void)setContent:(NSString *)content -{ - _content = content; -} - -- (NSString *)content -{ - CGFloat contentW = [UIScreen mainScreen].bounds.size.width - 70; - CGRect textRect = [_content boundingRectWithSize:CGSizeMake(contentW, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:contentLabelFontSize]} context:nil]; - if (textRect.size.height > maxContentLabelHeight) { - _shouldShowMoreButton = YES; - } else { - _shouldShowMoreButton = NO; - } - - return _content; -} - -- (void)setIsOpening:(BOOL)isOpening -{ - if (!_shouldShowMoreButton) { - _isOpening = NO; - } else { - _isOpening = isOpening; - } -} - -@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.h index b399098..bcf7dd8 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.h +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.h @@ -21,8 +21,8 @@ */ -#import +#import "SDBaseTableViewController.h" -@interface DemoVC9 : UITableViewController +@interface DemoVC9 : SDBaseTableViewController @end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m index 73469ea..d7c0f1a 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m @@ -23,68 +23,89 @@ #import "DemoVC9.h" -#import "Demo9Model.h" -#import "DemoVC9Cell.h" - -#import "DemoVC9HeaderView.h" - -#import "DemoVC5CellTableViewCell.h" - #import "SDRefresh.h" +#import "SDTimeLineTableHeaderView.h" +#import "SDTimeLineRefreshHeader.h" +#import "SDTimeLineCell.h" + +#import "SDTimeLineCellModel.h" #import "UITableView+SDAutoTableViewCellHeight.h" -#define kDemoVC9CellId @"demovc9cell" +#define kTimeLineTableViewCellId @"SDTimeLineCell" @interface DemoVC9 () -@property (nonatomic, strong) NSMutableArray *modelsArray; - @end @implementation DemoVC9 + { SDRefreshFooterView *_refreshFooter; + SDTimeLineRefreshHeader *_refreshHeader; + CGFloat _lastScrollViewOffsetY; } - (void)viewDidLoad { [super viewDidLoad]; - -// self.edgesForExtendedLayout = UIRectEdgeAll; - self.automaticallyAdjustsScrollViewInsets = NO; -// self.tableView.estimatedRowHeight = 100; + self.automaticallyAdjustsScrollViewInsets = NO; - [self creatModelsWithCount:10]; + [self.dataArray addObjectsFromArray:[self creatModelsWithCount:10]]; __weak typeof(self) weakSelf = self; + // 上拉加载 _refreshFooter = [SDRefreshFooterView refreshView]; [_refreshFooter addToScrollView:self.tableView]; __weak typeof(_refreshFooter) weakRefreshFooter = _refreshFooter; _refreshFooter.beginRefreshingOperation = ^() { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [weakSelf creatModelsWithCount:10]; + [weakSelf.dataArray addObjectsFromArray:[weakSelf creatModelsWithCount:10]]; [weakSelf.tableView reloadData]; [weakRefreshFooter endRefreshing]; }); }; - DemoVC9HeaderView *headerView = [DemoVC9HeaderView new]; + SDTimeLineTableHeaderView *headerView = [SDTimeLineTableHeaderView new]; headerView.frame = CGRectMake(0, 0, 0, 260); self.tableView.tableHeaderView = headerView; - [self.tableView registerClass:[DemoVC9Cell class] forCellReuseIdentifier:kDemoVC9CellId]; + [self.tableView registerClass:[SDTimeLineCell class] forCellReuseIdentifier:kTimeLineTableViewCellId]; } -- (void)creatModelsWithCount:(NSInteger)count +- (void)viewDidAppear:(BOOL)animated { - if (!_modelsArray) { - _modelsArray = [NSMutableArray new]; - } + [super viewDidAppear:animated]; + if (!_refreshHeader.superview) { + + _refreshHeader = [SDTimeLineRefreshHeader refreshHeaderWithCenter:CGPointMake(40, 45)]; + _refreshHeader.scrollView = self.tableView; + __weak typeof(_refreshHeader) weakHeader = _refreshHeader; + __weak typeof(self) weakSelf = self; + [_refreshHeader setRefreshingBlock:^{ + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + weakSelf.dataArray = [[weakSelf creatModelsWithCount:10] mutableCopy]; + [weakHeader endRefreshing]; + dispatch_async(dispatch_get_main_queue(), ^{ + [weakSelf.tableView reloadData]; + }); + }); + }]; + [self.tableView.superview addSubview:_refreshHeader]; + } +} + +- (void)dealloc +{ + [_refreshHeader removeFromSuperview]; +} + +- (NSArray *)creatModelsWithCount:(NSInteger)count +{ NSArray *iconImageNamesArray = @[@"icon0.jpg", @"icon1.jpg", @"icon2.jpg", @@ -98,13 +119,27 @@ - (void)creatModelsWithCount:(NSInteger)count @"我叫郭德纲", @"Hello Kitty"]; - NSArray *textArray = @[@"当你的 app 没有提供 3x 的 LaunchImage 时,系统默认进入兼容模式,大屏幕一切按照 320 宽度渲染,屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。", - @"然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。", - @"当你的 app 没有提供 3x 的 LaunchImage 时屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。", + NSArray *textArray = @[@"当你的 app 没有提供 3x 的 LaunchImage 时,系统默认进入兼容模式,https://github.com/gsdios/SDAutoLayout大屏幕一切按照 320 宽度渲染,屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。", + @"然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,https://github.com/gsdios/SDAutoLayout等于把小屏完全拉伸。", + @"当你的 app 没有提供 3x 的 LaunchImage 时屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。屏幕宽度返回 320;https://github.com/gsdios/SDAutoLayout然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。", @"但是建议不要长期处于这种模式下,否则在大屏上会显得字大,内容少,容易遭到用户投诉。", - @"屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。" + @"屏幕宽度返回 320;https://github.com/gsdios/SDAutoLayout然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。" ]; + NSArray *commentsArray = @[@"社会主义好!👌👌👌👌", + @"正宗好凉茶,正宗好声音。。。", + @"你好,我好,大家好才是真的好", + @"有意思", + @"你瞅啥?", + @"瞅你咋地???!!!", + @"hello,看我", + @"曾经在幽幽暗暗反反复复中追问,才知道平平淡淡从从容容才是真,再回首恍然如梦,再回首我心依旧,只有那不变的长路伴着我", + @"人艰不拆", + @"咯咯哒", + @"呵呵~~~~~~~~", + @"我勒个去,啥世道啊", + @"真有意思啊你💢💢💢"]; + NSArray *picImageNamesArray = @[ @"pic0.jpg", @"pic1.jpg", @"pic2.jpg", @@ -115,16 +150,17 @@ - (void)creatModelsWithCount:(NSInteger)count @"pic7.jpg", @"pic8.jpg" ]; + NSMutableArray *resArr = [NSMutableArray new]; for (int i = 0; i < count; i++) { int iconRandomIndex = arc4random_uniform(5); int nameRandomIndex = arc4random_uniform(5); int contentRandomIndex = arc4random_uniform(5); - Demo9Model *model = [Demo9Model new]; + SDTimeLineCellModel *model = [SDTimeLineCellModel new]; model.iconName = iconImageNamesArray[iconRandomIndex]; model.name = namesArray[nameRandomIndex]; - model.content = textArray[contentRandomIndex]; + model.msgContent = textArray[contentRandomIndex]; // 模拟“随机图片” @@ -139,36 +175,54 @@ - (void)creatModelsWithCount:(NSInteger)count model.picNamesArray = [temp copy]; } - [self.modelsArray addObject:model]; + int commentRandom = arc4random_uniform(6); + NSMutableArray *tempComments = [NSMutableArray new]; + for (int i = 0; i < commentRandom; i++) { + SDTimeLineCellCommentItemModel *commentItemModel = [SDTimeLineCellCommentItemModel new]; + int index = arc4random_uniform((int)namesArray.count); + commentItemModel.firstUserName = namesArray[index]; + commentItemModel.firstUserId = @"666"; + if (arc4random_uniform(10) < 5) { + commentItemModel.secondUserName = namesArray[arc4random_uniform((int)namesArray.count)]; + commentItemModel.secondUserId = @"888"; + } + commentItemModel.commentString = commentsArray[arc4random_uniform((int)commentsArray.count)]; + [tempComments addObject:commentItemModel]; + } + model.commentItemsArray = [tempComments copy]; + + [resArr addObject:model]; } + return [resArr copy]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return self.modelsArray.count; + return self.dataArray.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - DemoVC9Cell *cell = [tableView dequeueReusableCellWithIdentifier:kDemoVC9CellId]; + SDTimeLineCell *cell = [tableView dequeueReusableCellWithIdentifier:kTimeLineTableViewCellId]; cell.indexPath = indexPath; __weak typeof(self) weakSelf = self; if (!cell.moreButtonClickedBlock) { [cell setMoreButtonClickedBlock:^(NSIndexPath *indexPath) { - Demo9Model *model = weakSelf.modelsArray[indexPath.row]; + SDTimeLineCellModel *model = weakSelf.dataArray[indexPath.row]; model.isOpening = !model.isOpening; - [weakSelf.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + [weakSelf.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; }]; } - cell.model = self.modelsArray[indexPath.row]; + + cell.model = self.dataArray[indexPath.row]; return cell; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // >>>>>>>>>>>>>>>>>>>>> * cell自适应 * >>>>>>>>>>>>>>>>>>>>>>>> - id model = self.modelsArray[indexPath.row]; - return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:[DemoVC9Cell class] contentViewWidth:[self cellContentViewWith]]; + id model = self.dataArray[indexPath.row]; + return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:[SDTimeLineCell class] contentViewWidth:[self cellContentViewWith]]; } diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.h deleted file mode 100644 index cab9408..0000000 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// DemoVC9Cell.h -// SDAutoLayout 测试 Demo -// -// Created by gsd on 15/12/23. -// Copyright © 2015年 gsd. All rights reserved. -// - -/* - - ********************************************************************************* - * * - * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * - * 帮您解决问题。 * - * 持续更新地址: https://github.com/gsdios/SDAutoLayout * - * Email : gsdios@126.com * - * GitHub: https://github.com/gsdios * - * 新浪微博:GSD_iOS * - * * - ********************************************************************************* - - */ - -#import - -@class Demo9Model; - -@interface DemoVC9Cell : UITableViewCell - -@property (nonatomic, strong) Demo9Model *model; - -@property (nonatomic, strong) NSIndexPath *indexPath; - -@property (nonatomic, copy) void (^moreButtonClickedBlock)(NSIndexPath *indexPath); - -@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9HeaderView.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9HeaderView.h deleted file mode 100644 index 9cf1962..0000000 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9HeaderView.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// DemoVC9HeaderView.h -// SDAutoLayout 测试 Demo -// -// Created by gsd on 15/12/23. -// Copyright © 2015年 gsd. All rights reserved. -// - - -/* - - ********************************************************************************* - * * - * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * - * 帮您解决问题。 * - * 持续更新地址: https://github.com/gsdios/SDAutoLayout * - * Email : gsdios@126.com * - * GitHub: https://github.com/gsdios * - * 新浪微博:GSD_iOS * - * * - ********************************************************************************* - - */ - -#import - -@interface DemoVC9HeaderView : UIView - -@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.h deleted file mode 100644 index 36a8001..0000000 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// SDWeiXinPhotoContainerView.h -// SDAutoLayout 测试 Demo -// -// Created by gsd on 15/12/23. -// Copyright © 2015年 gsd. All rights reserved. -// - - -/* - - ********************************************************************************* - * * - * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * - * 帮您解决问题。 * - * 持续更新地址: https://github.com/gsdios/SDAutoLayout * - * Email : gsdios@126.com * - * GitHub: https://github.com/gsdios * - * 新浪微博:GSD_iOS * - * * - ********************************************************************************* - - */ - -#import - -@interface SDWeiXinPhotoContainerView : UIView - -@property (nonatomic, strong) NSArray *picPathStringsArray; - -@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/BaseRefreshView/SDBaseRefreshView.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/BaseRefreshView/SDBaseRefreshView.h new file mode 100644 index 0000000..ee17fda --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/BaseRefreshView/SDBaseRefreshView.h @@ -0,0 +1,48 @@ +// +// SDBaseRefreshView.h +// GSD_WeiXin(wechat) +// +// Created by gsd on 16/3/5. +// Copyright © 2016年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import + +UIKIT_EXTERN NSString *const kSDBaseRefreshViewObserveKeyPath; + +typedef enum { + SDWXRefreshViewStateNormal, + SDWXRefreshViewStateWillRefresh, + SDWXRefreshViewStateRefreshing, +} SDWXRefreshViewState; + +@interface SDBaseRefreshView : UIView + +@property (nonatomic, strong) UIScrollView *scrollView; + +- (void)endRefreshing; + +@property (nonatomic, assign) UIEdgeInsets scrollViewOriginalInsets; +@property (nonatomic, assign) SDWXRefreshViewState refreshState; + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/BaseRefreshView/SDBaseRefreshView.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/BaseRefreshView/SDBaseRefreshView.m new file mode 100644 index 0000000..03ae68f --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/BaseRefreshView/SDBaseRefreshView.m @@ -0,0 +1,60 @@ +// +// SDBaseRefreshView.m +// GSD_WeiXin(wechat) +// +// Created by gsd on 16/3/5. +// Copyright © 2016年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import "SDBaseRefreshView.h" + +NSString *const kSDBaseRefreshViewObserveKeyPath = @"contentOffset"; + +@implementation SDBaseRefreshView + +- (void)setScrollView:(UIScrollView *)scrollView +{ + _scrollView = scrollView; + + [scrollView addObserver:self forKeyPath:kSDBaseRefreshViewObserveKeyPath options:NSKeyValueObservingOptionNew context:nil]; +} + +- (void)willMoveToSuperview:(UIView *)newSuperview +{ + if (!newSuperview) { + [self.scrollView removeObserver:self forKeyPath:kSDBaseRefreshViewObserveKeyPath]; + } +} + +- (void)endRefreshing +{ + self.refreshState = SDWXRefreshViewStateNormal; +} + + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + // 子类实现 +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/SDBaseNavigationController.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/SDBaseNavigationController.h new file mode 100644 index 0000000..a9414f3 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/SDBaseNavigationController.h @@ -0,0 +1,33 @@ +// +// SDBaseNavigationController.h +// GSD_WeiXin(wechat) +// +// Created by aier on 16/2/10. +// Copyright © 2016年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import + +@interface SDBaseNavigationController : UINavigationController + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/SDBaseNavigationController.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/SDBaseNavigationController.m new file mode 100644 index 0000000..4ca8f36 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/SDBaseNavigationController.m @@ -0,0 +1,49 @@ +// +// SDBaseNavigationController.m +// GSD_WeiXin(wechat) +// +// Created by aier on 16/2/10. +// Copyright © 2016年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import "SDBaseNavigationController.h" + +@interface SDBaseNavigationController () + +@end + +@implementation SDBaseNavigationController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + + + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/SDBaseTableViewController.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/SDBaseTableViewController.h new file mode 100644 index 0000000..2724d27 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/SDBaseTableViewController.h @@ -0,0 +1,36 @@ +// +// SDBaseTableViewController.h +// GSD_WeiXin(wechat) +// +// Created by aier on 16/2/10. +// Copyright © 2016年 GSD. All rights reserved. +// + + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import + +@interface SDBaseTableViewController : UITableViewController + +@property (nonatomic, strong) NSMutableArray *dataArray; + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/SDBaseTableViewController.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/SDBaseTableViewController.m new file mode 100644 index 0000000..8cba40b --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/BaseClasses/SDBaseTableViewController.m @@ -0,0 +1,50 @@ +// +// SDBaseTableViewController.m +// GSD_WeiXin(wechat) +// +// Created by aier on 16/2/10. +// Copyright © 2016年 GSD. All rights reserved. +// + + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import "SDBaseTableViewController.h" + +@interface SDBaseTableViewController () + +@end + +@implementation SDBaseTableViewController + +- (void)viewDidLoad { + [super viewDidLoad]; +} + +- (NSMutableArray *)dataArray +{ + if (!_dataArray) { + _dataArray = [NSMutableArray new]; + } + return _dataArray; +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/GloabalDefines/GlobalDefines.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/GloabalDefines/GlobalDefines.h new file mode 100644 index 0000000..75c8029 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/GloabalDefines/GlobalDefines.h @@ -0,0 +1,40 @@ +// +// GlobalDefines.h +// GSD_WeiXin(wechat) +// +// Created by aier on 16/2/12. +// Copyright © 2016年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#ifndef GlobalDefines_h +#define GlobalDefines_h + +#define SDColor(r, g, b, a) [UIColor colorWithRed:(r / 255.0) green:(g / 255.0) blue:(b / 255.0) alpha:a] + +#define Global_tintColor [UIColor colorWithRed:0 green:(190 / 255.0) blue:(12 / 255.0) alpha:1] + +#define Global_mainBackgroundColor SDColor(248, 248, 248, 1) + +#define TimeLineCellHighlightedColor [UIColor colorWithRed:92/255.0 green:140/255.0 blue:193/255.0 alpha:1.0] + +#endif diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Model/SDTimeLineCellModel.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Model/SDTimeLineCellModel.h new file mode 100644 index 0000000..496beb7 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Model/SDTimeLineCellModel.h @@ -0,0 +1,69 @@ +// +// SDTimeLineCellModel.h +// GSD_WeiXin(wechat) +// +// Created by gsd on 16/2/25. +// Copyright © 2016年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import + +@class SDTimeLineCellLikeItemModel, SDTimeLineCellCommentItemModel; + +@interface SDTimeLineCellModel : NSObject + +@property (nonatomic, copy) NSString *iconName; +@property (nonatomic, copy) NSString *name; +@property (nonatomic, copy) NSString *msgContent; +@property (nonatomic, strong) NSArray *picNamesArray; + +@property (nonatomic, strong) NSArray *likeItemsArray; +@property (nonatomic, strong) NSArray *commentItemsArray; + +@property (nonatomic, assign) BOOL isOpening; + +@property (nonatomic, assign, readonly) BOOL shouldShowMoreButton; + + +@end + + +@interface SDTimeLineCellLikeItemModel : NSObject + +@property (nonatomic, copy) NSString *userName; +@property (nonatomic, copy) NSString *userId; + +@end + + +@interface SDTimeLineCellCommentItemModel : NSObject + +@property (nonatomic, copy) NSString *commentString; + +@property (nonatomic, copy) NSString *firstUserName; +@property (nonatomic, copy) NSString *firstUserId; + +@property (nonatomic, copy) NSString *secondUserName; +@property (nonatomic, copy) NSString *secondUserId; + +@end \ No newline at end of file diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Model/SDTimeLineCellModel.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Model/SDTimeLineCellModel.m new file mode 100644 index 0000000..2bd09dc --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Model/SDTimeLineCellModel.m @@ -0,0 +1,79 @@ +// +// SDTimeLineCellModel.m +// GSD_WeiXin(wechat) +// +// Created by gsd on 16/2/25. +// Copyright © 2016年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import "SDTimeLineCellModel.h" + +#import + +extern const CGFloat contentLabelFontSize; +extern CGFloat maxContentLabelHeight; + +@implementation SDTimeLineCellModel + +@synthesize msgContent = _msgContent; + +- (void)setMsgContent:(NSString *)msgContent +{ + _msgContent = msgContent; +} + +- (NSString *)msgContent +{ + CGFloat contentW = [UIScreen mainScreen].bounds.size.width - 70; + CGRect textRect = [_msgContent boundingRectWithSize:CGSizeMake(contentW, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:contentLabelFontSize]} context:nil]; + if (textRect.size.height > maxContentLabelHeight) { + _shouldShowMoreButton = YES; + } else { + _shouldShowMoreButton = NO; + } + + return _msgContent; +} + +- (void)setIsOpening:(BOOL)isOpening +{ + if (!_shouldShowMoreButton) { + _isOpening = NO; + } else { + _isOpening = isOpening; + } +} + + +@end + + +@implementation SDTimeLineCellLikeItemModel + + +@end + +@implementation SDTimeLineCellCommentItemModel + + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/TimeLineController/SDTimeLineTableViewController.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/TimeLineController/SDTimeLineTableViewController.h new file mode 100644 index 0000000..cf05c74 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/TimeLineController/SDTimeLineTableViewController.h @@ -0,0 +1,33 @@ +// +// SDTimeLineTableViewController.h +// GSD_WeiXin(wechat) +// +// Created by gsd on 16/2/25. +// Copyright © 2016年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import "SDBaseTableViewController.h" + +@interface SDTimeLineTableViewController : SDBaseTableViewController + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/TimeLineController/SDTimeLineTableViewController.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/TimeLineController/SDTimeLineTableViewController.m new file mode 100644 index 0000000..4d908ba --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/TimeLineController/SDTimeLineTableViewController.m @@ -0,0 +1,244 @@ +// +// SDTimeLineTableViewController.m +// GSD_WeiXin(wechat) +// +// Created by gsd on 16/2/25. +// Copyright © 2016年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import "SDTimeLineTableViewController.h" + +#import "SDRefresh.h" +#import "SDTimeLineTableHeaderView.h" +#import "SDTimeLineRefreshHeader.h" +#import "SDTimeLineCell.h" + +#import "SDTimeLineCellModel.h" + +#import "UITableView+SDAutoTableViewCellHeight.h" + +#define kTimeLineTableViewCellId @"SDTimeLineCell" + +@implementation SDTimeLineTableViewController + +{ + SDRefreshFooterView *_refreshFooter; + SDTimeLineRefreshHeader *_refreshHeader; + CGFloat _lastScrollViewOffsetY; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + self.automaticallyAdjustsScrollViewInsets = NO; + + [self.dataArray addObjectsFromArray:[self creatModelsWithCount:10]]; + + __weak typeof(self) weakSelf = self; + + + // 上拉加载 + _refreshFooter = [SDRefreshFooterView refreshView]; + [_refreshFooter addToScrollView:self.tableView]; + __weak typeof(_refreshFooter) weakRefreshFooter = _refreshFooter; + _refreshFooter.beginRefreshingOperation = ^() { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [weakSelf.dataArray addObjectsFromArray:[weakSelf creatModelsWithCount:10]]; + [weakSelf.tableView reloadData]; + [weakRefreshFooter endRefreshing]; + }); + }; + + SDTimeLineTableHeaderView *headerView = [SDTimeLineTableHeaderView new]; + headerView.frame = CGRectMake(0, 0, 0, 260); + self.tableView.tableHeaderView = headerView; + + [self.tableView registerClass:[SDTimeLineCell class] forCellReuseIdentifier:kTimeLineTableViewCellId]; +} + +- (void)viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + + if (!_refreshHeader.superview) { + + _refreshHeader = [SDTimeLineRefreshHeader refreshHeaderWithCenter:CGPointMake(40, 45)]; + _refreshHeader.scrollView = self.tableView; + __weak typeof(_refreshHeader) weakHeader = _refreshHeader; + __weak typeof(self) weakSelf = self; + [_refreshHeader setRefreshingBlock:^{ + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + weakSelf.dataArray = [[weakSelf creatModelsWithCount:10] mutableCopy]; + [weakHeader endRefreshing]; + dispatch_async(dispatch_get_main_queue(), ^{ + [weakSelf.tableView reloadData]; + }); + }); + }]; + [self.tableView.superview addSubview:_refreshHeader]; + } +} + +- (void)dealloc +{ + [_refreshHeader removeFromSuperview]; +} + +- (NSArray *)creatModelsWithCount:(NSInteger)count +{ + NSArray *iconImageNamesArray = @[@"icon0.jpg", + @"icon1.jpg", + @"icon2.jpg", + @"icon3.jpg", + @"icon4.jpg", + ]; + + NSArray *namesArray = @[@"GSD_iOS", + @"风口上的猪", + @"当今世界网名都不好起了", + @"我叫郭德纲", + @"Hello Kitty"]; + + NSArray *textArray = @[@"当你的 app 没有提供 3x 的 LaunchImage 时,系统默认进入兼容模式,https://github.com/gsdios/SDAutoLayout大屏幕一切按照 320 宽度渲染,屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。", + @"然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,https://github.com/gsdios/SDAutoLayout等于把小屏完全拉伸。", + @"当你的 app 没有提供 3x 的 LaunchImage 时屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。屏幕宽度返回 320;https://github.com/gsdios/SDAutoLayout然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。屏幕宽度返回 320;然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。", + @"但是建议不要长期处于这种模式下,否则在大屏上会显得字大,内容少,容易遭到用户投诉。", + @"屏幕宽度返回 320;https://github.com/gsdios/SDAutoLayout然后等比例拉伸到大屏。这种情况下对界面不会产生任何影响,等于把小屏完全拉伸。但是建议不要长期处于这种模式下。" + ]; + + NSArray *commentsArray = @[@"社会主义好!👌👌👌👌", + @"正宗好凉茶,正宗好声音。。。", + @"你好,我好,大家好才是真的好", + @"有意思", + @"你瞅啥?", + @"瞅你咋地???!!!", + @"hello,看我", + @"曾经在幽幽暗暗反反复复中追问,才知道平平淡淡从从容容才是真,再回首恍然如梦,再回首我心依旧,只有那不变的长路伴着我", + @"人艰不拆", + @"咯咯哒", + @"呵呵~~~~~~~~", + @"我勒个去,啥世道啊", + @"真有意思啊你💢💢💢"]; + + NSArray *picImageNamesArray = @[ @"pic0.jpg", + @"pic1.jpg", + @"pic2.jpg", + @"pic3.jpg", + @"pic4.jpg", + @"pic5.jpg", + @"pic6.jpg", + @"pic7.jpg", + @"pic8.jpg" + ]; + NSMutableArray *resArr = [NSMutableArray new]; + + for (int i = 0; i < count; i++) { + int iconRandomIndex = arc4random_uniform(5); + int nameRandomIndex = arc4random_uniform(5); + int contentRandomIndex = arc4random_uniform(5); + + SDTimeLineCellModel *model = [SDTimeLineCellModel new]; + model.iconName = iconImageNamesArray[iconRandomIndex]; + model.name = namesArray[nameRandomIndex]; + model.msgContent = textArray[contentRandomIndex]; + + + // 模拟“随机图片” + int random = arc4random_uniform(10); + + NSMutableArray *temp = [NSMutableArray new]; + for (int i = 0; i < random; i++) { + int randomIndex = arc4random_uniform(9); + [temp addObject:picImageNamesArray[randomIndex]]; + } + if (temp.count) { + model.picNamesArray = [temp copy]; + } + + int commentRandom = arc4random_uniform(6); + NSMutableArray *tempComments = [NSMutableArray new]; + for (int i = 0; i < commentRandom; i++) { + SDTimeLineCellCommentItemModel *commentItemModel = [SDTimeLineCellCommentItemModel new]; + int index = arc4random_uniform((int)namesArray.count); + commentItemModel.firstUserName = namesArray[index]; + commentItemModel.firstUserId = @"666"; + if (arc4random_uniform(10) < 5) { + commentItemModel.secondUserName = namesArray[arc4random_uniform((int)namesArray.count)]; + commentItemModel.secondUserId = @"888"; + } + commentItemModel.commentString = commentsArray[arc4random_uniform((int)commentsArray.count)]; + [tempComments addObject:commentItemModel]; + } + model.commentItemsArray = [tempComments copy]; + + [resArr addObject:model]; + } + return [resArr copy]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + SDTimeLineCell *cell = [tableView dequeueReusableCellWithIdentifier:kTimeLineTableViewCellId]; + cell.indexPath = indexPath; + __weak typeof(self) weakSelf = self; + if (!cell.moreButtonClickedBlock) { + [cell setMoreButtonClickedBlock:^(NSIndexPath *indexPath) { + SDTimeLineCellModel *model = weakSelf.dataArray[indexPath.row]; + model.isOpening = !model.isOpening; + [weakSelf.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; + }]; + } + + cell.model = self.dataArray[indexPath.row]; + return cell; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + // >>>>>>>>>>>>>>>>>>>>> * cell自适应 * >>>>>>>>>>>>>>>>>>>>>>>> + id model = self.dataArray[indexPath.row]; + return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:[SDTimeLineCell class] contentViewWidth:[self cellContentViewWith]]; +} + + + + +- (CGFloat)cellContentViewWith +{ + CGFloat width = [UIScreen mainScreen].bounds.size.width; + + // 适配ios7 + if ([UIApplication sharedApplication].statusBarOrientation != UIInterfaceOrientationPortrait && [[UIDevice currentDevice].systemVersion floatValue] < 8) { + width = [UIScreen mainScreen].bounds.size.height; + } + return width; +} + + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.h new file mode 100644 index 0000000..66f1924 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.h @@ -0,0 +1,41 @@ +// +// SDTimeLineCell.h +// GSD_WeiXin(wechat) +// +// Created by gsd on 16/2/25. +// Copyright © 2016年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import + +@class SDTimeLineCellModel; + +@interface SDTimeLineCell : UITableViewCell + +@property (nonatomic, strong) SDTimeLineCellModel *model; + +@property (nonatomic, strong) NSIndexPath *indexPath; + +@property (nonatomic, copy) void (^moreButtonClickedBlock)(NSIndexPath *indexPath); + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.m similarity index 51% rename from SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m rename to SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.m index ed3be3a..bc42c95 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9Cell.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.m @@ -1,39 +1,45 @@ // -// DemoVC9Cell.m -// SDAutoLayout 测试 Demo +// SDTimeLineCell.m +// GSD_WeiXin(wechat) // -// Created by gsd on 15/12/23. -// Copyright © 2015年 gsd. All rights reserved. +// Created by gsd on 16/2/25. +// Copyright © 2016年 GSD. All rights reserved. // - /* ********************************************************************************* - * * - * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * - * 帮您解决问题。 * - * 持续更新地址: https://github.com/gsdios/SDAutoLayout * - * Email : gsdios@126.com * - * GitHub: https://github.com/gsdios * - * 新浪微博:GSD_iOS * - * * + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * ********************************************************************************* */ -#import "DemoVC9Cell.h" - -#import "Demo9Model.h" +#import "SDTimeLineCell.h" +#import "SDTimeLineCellModel.h" #import "UIView+SDAutoLayout.h" +#import "SDTimeLineCellCommentView.h" + #import "SDWeiXinPhotoContainerView.h" const CGFloat contentLabelFontSize = 15; -const CGFloat maxContentLabelHeight = 54; +CGFloat maxContentLabelHeight = 0; // 根据具体font而定 + +@implementation SDTimeLineCell -@implementation DemoVC9Cell { UIImageView *_iconView; UILabel *_nameLable; @@ -41,6 +47,8 @@ @implementation DemoVC9Cell SDWeiXinPhotoContainerView *_picContainerView; UILabel *_timeLabel; UIButton *_moreButton; + UIButton *_operationButton; + SDTimeLineCellCommentView *_commentView; BOOL _shouldOpenContentLabel; } @@ -49,6 +57,7 @@ - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSStr { if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { [self setup]; + self.selectionStyle = UITableViewCellSelectionStyleNone; } return self; } @@ -66,20 +75,29 @@ - (void)setup _contentLabel = [UILabel new]; _contentLabel.font = [UIFont systemFontOfSize:contentLabelFontSize]; + if (maxContentLabelHeight == 0) { + maxContentLabelHeight = _contentLabel.font.lineHeight * 3; + } _moreButton = [UIButton new]; - [_moreButton setTitle:@"显示全部" forState:UIControlStateNormal]; - [_moreButton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; + [_moreButton setTitle:@"全文" forState:UIControlStateNormal]; + [_moreButton setTitleColor:TimeLineCellHighlightedColor forState:UIControlStateNormal]; [_moreButton addTarget:self action:@selector(moreButtonClicked) forControlEvents:UIControlEventTouchUpInside]; _moreButton.titleLabel.font = [UIFont systemFontOfSize:14]; + _operationButton = [UIButton new]; + [_operationButton setImage:[UIImage imageNamed:@"AlbumOperateMore"] forState:UIControlStateNormal]; + [_operationButton addTarget:self action:@selector(operationButtonClicked) forControlEvents:UIControlEventTouchUpInside]; + _picContainerView = [SDWeiXinPhotoContainerView new]; + _commentView = [SDTimeLineCellCommentView new]; + _timeLabel = [UILabel new]; _timeLabel.font = [UIFont systemFontOfSize:13]; _timeLabel.textColor = [UIColor lightGrayColor]; - NSArray *views = @[_iconView, _nameLable, _contentLabel, _moreButton, _picContainerView, _timeLabel]; + NSArray *views = @[_iconView, _nameLable, _contentLabel, _moreButton, _picContainerView, _timeLabel, _operationButton, _commentView]; [self.contentView sd_addSubviews:views]; @@ -108,11 +126,11 @@ - (void)setup _moreButton.sd_layout .leftEqualToView(_contentLabel) .topSpaceToView(_contentLabel, 0) - .widthIs(60); + .widthIs(30); _picContainerView.sd_layout - .leftEqualToView(_contentLabel); + .leftEqualToView(_contentLabel); // 已经在内部实现宽度和高度自适应所以不需要再设置宽度高度,top值是具体有无图片在setModel方法中设置 _timeLabel.sd_layout .leftEqualToView(_contentLabel) @@ -120,21 +138,33 @@ - (void)setup .heightIs(15) .autoHeightRatio(0); - [self setupAutoHeightWithBottomView:_timeLabel bottomMargin:margin + 5]; + _operationButton.sd_layout + .rightSpaceToView(contentView, margin) + .centerYEqualToView(_timeLabel) + .heightIs(25) + .widthIs(25); + + _commentView.sd_layout + .leftEqualToView(_contentLabel) + .rightSpaceToView(self.contentView, margin) + .topSpaceToView(_timeLabel, margin); // 已经在内部实现高度自适应所以不需要再设置高度 } -- (void)setModel:(Demo9Model *)model +- (void)setModel:(SDTimeLineCellModel *)model { _model = model; + _commentView.frame = CGRectZero; + [_commentView setupWithLikeItemsArray:model.likeItemsArray commentItemsArray:model.commentItemsArray]; + _shouldOpenContentLabel = NO; _iconView.image = [UIImage imageNamed:model.iconName]; _nameLable.text = model.name; // 防止单行文本label在重用时宽度计算不准的问题 [_nameLable sizeToFit]; - _contentLabel.text = model.content; + _contentLabel.text = model.msgContent; _picContainerView.picPathStringsArray = model.picNamesArray; if (model.shouldShowMoreButton) { // 如果文字高度超过60 @@ -142,10 +172,10 @@ - (void)setModel:(Demo9Model *)model _moreButton.hidden = NO; if (model.isOpening) { // 如果需要展开 _contentLabel.sd_layout.maxHeightIs(MAXFLOAT); - [_moreButton setTitle:@"收起文字" forState:UIControlStateNormal]; + [_moreButton setTitle:@"收起" forState:UIControlStateNormal]; } else { - _contentLabel.sd_layout.maxHeightIs(60); - [_moreButton setTitle:@"显示全部" forState:UIControlStateNormal]; + _contentLabel.sd_layout.maxHeightIs(maxContentLabelHeight); + [_moreButton setTitle:@"全文" forState:UIControlStateNormal]; } } else { _moreButton.sd_layout.heightIs(0); @@ -157,9 +187,28 @@ - (void)setModel:(Demo9Model *)model picContainerTopMargin = 10; } _picContainerView.sd_layout.topSpaceToView(_moreButton, picContainerTopMargin); + + UIView *bottomView; + + if (!model.commentItemsArray.count && !model.likeItemsArray.count) { + _commentView.fixedWith = @0; // 如果没有评论或者点赞,设置commentview的固定宽度为0(设置了fixedWith的控件将不再在自动布局过程中调整宽度) + _commentView.fixedHeight = @0; // 如果没有评论或者点赞,设置commentview的固定高度为0(设置了fixedHeight的控件将不再在自动布局过程中调整高度) + _commentView.sd_layout.topSpaceToView(_timeLabel, 0); + bottomView = _timeLabel; + } else { + _commentView.fixedHeight = nil; // 取消固定宽度约束 + _commentView.fixedWith = nil; // 取消固定高度约束 + _commentView.sd_layout.topSpaceToView(_timeLabel, 10); + bottomView = _commentView; + } + + [self setupAutoHeightWithBottomView:bottomView bottomMargin:15]; + _timeLabel.text = @"1分钟前"; } +#pragma mark - private actions + - (void)moreButtonClicked { if (self.moreButtonClickedBlock) { @@ -167,4 +216,9 @@ - (void)moreButtonClicked } } +- (void)operationButtonClicked +{ + +} + @end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/CommentView/SDTimeLineCellCommentView.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/CommentView/SDTimeLineCellCommentView.h new file mode 100644 index 0000000..6b79e6b --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/CommentView/SDTimeLineCellCommentView.h @@ -0,0 +1,37 @@ +// +// SDTimeLineCellCommentView.h +// GSD_WeiXin(wechat) +// +// Created by gsd on 16/2/25. +// Copyright © 2016年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import + +#import "GlobalDefines.h" + +@interface SDTimeLineCellCommentView : UIView + +- (void)setupWithLikeItemsArray:(NSArray *)likeItemsArray commentItemsArray:(NSArray *)commentItemsArray; + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/CommentView/SDTimeLineCellCommentView.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/CommentView/SDTimeLineCellCommentView.m new file mode 100644 index 0000000..41b1f32 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/CommentView/SDTimeLineCellCommentView.m @@ -0,0 +1,182 @@ +// +// SDTimeLineCellCommentView.m +// GSD_WeiXin(wechat) +// +// Created by gsd on 16/2/25. +// Copyright © 2016年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import "SDTimeLineCellCommentView.h" +#import "UIView+SDAutoLayout.h" +#import "SDTimeLineCellModel.h" +#import "MLLinkLabel.h" + +#import "GlobalDefines.h" + +@interface SDTimeLineCellCommentView () + +@property (nonatomic, strong) NSArray *likeItemsArray; +@property (nonatomic, strong) NSArray *commentItemsArray; + +@property (nonatomic, strong) UIImageView *bgImageView; + +@property (nonatomic, strong) UILabel *likeLabel; +@property (nonatomic, strong) UIView *likeLableBottomLine; + +@property (nonatomic, strong) NSMutableArray *commentLabelsArray; + + +@end + +@implementation SDTimeLineCellCommentView + +- (instancetype)initWithFrame:(CGRect)frame +{ + if (self = [super initWithFrame:frame]) { + [self setupViews]; + } + return self; +} + +- (void)setupViews +{ + _bgImageView = [UIImageView new]; + UIImage *bgImage = [[UIImage imageNamed:@"LikeCmtBg"] stretchableImageWithLeftCapWidth:40 topCapHeight:30]; + _bgImageView.image = bgImage; + [self addSubview:_bgImageView]; + + _likeLabel = [UILabel new]; + [self addSubview:_likeLabel]; + + _likeLableBottomLine = [UIView new]; + _likeLableBottomLine.backgroundColor = [UIColor lightGrayColor]; + [self addSubview:_likeLableBottomLine]; + + _bgImageView.sd_layout.spaceToSuperView(UIEdgeInsetsMake(0, 0, 0, 0)); +} + +- (void)setCommentItemsArray:(NSArray *)commentItemsArray +{ + _commentItemsArray = commentItemsArray; + + long originalLabelsCount = self.commentLabelsArray.count; + long needsToAddCount = commentItemsArray.count > originalLabelsCount ? (commentItemsArray.count - originalLabelsCount) : 0; + for (int i = 0; i < needsToAddCount; i++) { + MLLinkLabel *label = [MLLinkLabel new]; + UIColor *highLightColor = TimeLineCellHighlightedColor; + label.linkTextAttributes = @{NSForegroundColorAttributeName : highLightColor}; + label.font = [UIFont systemFontOfSize:14]; + label.delegate = self; + [self addSubview:label]; + [self.commentLabelsArray addObject:label]; + } + + for (int i = 0; i < commentItemsArray.count; i++) { + SDTimeLineCellCommentItemModel *model = commentItemsArray[i]; + MLLinkLabel *label = self.commentLabelsArray[i]; + label.attributedText = [self generateAttributedStringWithCommentItemModel:model]; + } +} + +- (NSMutableArray *)commentLabelsArray +{ + if (!_commentLabelsArray) { + _commentLabelsArray = [NSMutableArray new]; + } + return _commentLabelsArray; +} + +- (void)setupWithLikeItemsArray:(NSArray *)likeItemsArray commentItemsArray:(NSArray *)commentItemsArray +{ + self.likeItemsArray = likeItemsArray; + self.commentItemsArray = commentItemsArray; + + [_likeLabel sd_clearAutoLayoutSettings]; + _likeLabel.frame = CGRectZero; + + + if (self.commentLabelsArray.count) { + [self.commentLabelsArray enumerateObjectsUsingBlock:^(UILabel *label, NSUInteger idx, BOOL *stop) { + [label sd_clearAutoLayoutSettings]; + label.frame = CGRectZero; + }]; + } + + CGFloat margin = 5; + + if (likeItemsArray.count) { + _likeLabel.sd_layout + .leftSpaceToView(self, 0) + .rightSpaceToView(self, 0) + .topSpaceToView(self, margin) + .autoHeightRatio(0); + + _likeLabel.isAttributedContent = YES; + } + + UIView *lastTopView = _likeLabel; + + for (int i = 0; i < self.commentItemsArray.count; i++) { + UILabel *label = (UILabel *)self.commentLabelsArray[i]; + CGFloat topMargin = i == 0 ? 10 : 5; + label.sd_layout + .leftSpaceToView(self, 8) + .rightSpaceToView(self, 5) + .topSpaceToView(lastTopView, topMargin) + .autoHeightRatio(0); + + label.isAttributedContent = YES; + lastTopView = label; + } + + [self setupAutoHeightWithBottomView:lastTopView bottomMargin:6]; + +} + +#pragma mark - private actions + +- (NSMutableAttributedString *)generateAttributedStringWithCommentItemModel:(SDTimeLineCellCommentItemModel *)model +{ + NSString *text = model.firstUserName; + if (model.secondUserName.length) { + text = [text stringByAppendingString:[NSString stringWithFormat:@"回复%@", model.secondUserName]]; + } + text = [text stringByAppendingString:[NSString stringWithFormat:@":%@", model.commentString]]; + NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:text]; + UIColor *highLightColor = [UIColor blueColor]; + [attString setAttributes:@{NSForegroundColorAttributeName : highLightColor, NSLinkAttributeName : model.firstUserId} range:[text rangeOfString:model.firstUserName]]; + if (model.secondUserName) { + [attString setAttributes:@{NSForegroundColorAttributeName : highLightColor, NSLinkAttributeName : model.secondUserId} range:[text rangeOfString:model.secondUserName]]; + } + return attString; +} + + +#pragma mark - MLLinkLabelDelegate + +- (void)didClickLink:(MLLink *)link linkText:(NSString *)linkText linkLabel:(MLLinkLabel *)linkLabel +{ + NSLog(@"%@", link.linkValue); +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/HeaderView/SDTimeLineTableHeaderView.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/HeaderView/SDTimeLineTableHeaderView.h new file mode 100644 index 0000000..a69cd78 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/HeaderView/SDTimeLineTableHeaderView.h @@ -0,0 +1,33 @@ +// +// SDTimeLineTableHeaderView.h +// GSD_WeiXin(wechat) +// +// Created by gsd on 16/2/25. +// Copyright © 2016年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import + +@interface SDTimeLineTableHeaderView : UIView + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9HeaderView.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/HeaderView/SDTimeLineTableHeaderView.m similarity index 61% rename from SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9HeaderView.m rename to SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/HeaderView/SDTimeLineTableHeaderView.m index 5aa96ab..acef621 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9HeaderView.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/HeaderView/SDTimeLineTableHeaderView.m @@ -1,32 +1,37 @@ // -// DemoVC9HeaderView.m -// SDAutoLayout 测试 Demo +// SDTimeLineTableHeaderView.m +// GSD_WeiXin(wechat) // -// Created by gsd on 15/12/23. -// Copyright © 2015年 gsd. All rights reserved. +// Created by gsd on 16/2/25. +// Copyright © 2016年 GSD. All rights reserved. // - /* ********************************************************************************* - * * - * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * - * 帮您解决问题。 * - * 持续更新地址: https://github.com/gsdios/SDAutoLayout * - * Email : gsdios@126.com * - * GitHub: https://github.com/gsdios * - * 新浪微博:GSD_iOS * - * * + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * ********************************************************************************* */ -#import "DemoVC9HeaderView.h" +#import "SDTimeLineTableHeaderView.h" #import "UIView+SDAutoLayout.h" -@implementation DemoVC9HeaderView +@implementation SDTimeLineTableHeaderView + { UIImageView *_backgroundImageView; UIImageView *_iconView; @@ -61,7 +66,7 @@ - (void)setup [self addSubview:_nameLabel]; - _backgroundImageView.sd_layout.spaceToSuperView(UIEdgeInsetsMake(0, 0, 40, 0)); + _backgroundImageView.sd_layout.spaceToSuperView(UIEdgeInsetsMake(-60, 0, 40, 0)); _iconView.sd_layout .widthIs(70) @@ -78,4 +83,5 @@ - (void)setup .heightIs(20); } + @end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/PhotoContainer/SDWeiXinPhotoContainerView.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/PhotoContainer/SDWeiXinPhotoContainerView.h new file mode 100644 index 0000000..035383c --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/PhotoContainer/SDWeiXinPhotoContainerView.h @@ -0,0 +1,36 @@ +// +// SDWeiXinPhotoContainerView.h +// SDAutoLayout 测试 Demo +// +// Created by gsd on 15/12/23. +// Copyright © 2015年 gsd. All rights reserved. +// + + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import + +@interface SDWeiXinPhotoContainerView : UIView + +@property (nonatomic, strong) NSArray *picPathStringsArray; + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/PhotoContainer/SDWeiXinPhotoContainerView.m similarity index 84% rename from SDAutoLayoutDemo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.m rename to SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/PhotoContainer/SDWeiXinPhotoContainerView.m index 65e1d99..a946cf9 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/SDWeiXinPhotoContainerView.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/PhotoContainer/SDWeiXinPhotoContainerView.m @@ -10,14 +10,19 @@ /* ********************************************************************************* - * * - * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * - * 帮您解决问题。 * - * 持续更新地址: https://github.com/gsdios/SDAutoLayout * - * Email : gsdios@126.com * - * GitHub: https://github.com/gsdios * - * 新浪微博:GSD_iOS * - * * + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * ********************************************************************************* */ @@ -88,7 +93,7 @@ - (void)setPicPathStringsArray:(NSArray *)picPathStringsArray itemH = itemW; } long perRowItemCount = [self perRowItemCountForPicPathArray:_picPathStringsArray]; - CGFloat margin = 10; + CGFloat margin = 5; [_picPathStringsArray enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { long columnIndex = idx % perRowItemCount; @@ -109,6 +114,8 @@ - (void)setPicPathStringsArray:(NSArray *)picPathStringsArray self.fixedWith = @(w); } +#pragma mark - private actions + - (void)tapImageView:(UITapGestureRecognizer *)tap { UIView *imageView = tap.view; diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/TimeLineRefreshHeader/SDTimeLineRefreshHeader.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/TimeLineRefreshHeader/SDTimeLineRefreshHeader.h new file mode 100644 index 0000000..d02995f --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/TimeLineRefreshHeader/SDTimeLineRefreshHeader.h @@ -0,0 +1,38 @@ +// +// SDTimeLineRefreshHeader.h +// GSD_WeiXin(wechat) +// +// Created by gsd on 16/3/5. +// Copyright © 2016年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import +#import "SDBaseRefreshView.h" + +@interface SDTimeLineRefreshHeader : SDBaseRefreshView + ++ (instancetype)refreshHeaderWithCenter:(CGPoint)center; + +@property (nonatomic, copy) void(^refreshingBlock)(); + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/TimeLineRefreshHeader/SDTimeLineRefreshHeader.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/TimeLineRefreshHeader/SDTimeLineRefreshHeader.m new file mode 100644 index 0000000..54793ab --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/TimeLineRefreshHeader/SDTimeLineRefreshHeader.m @@ -0,0 +1,121 @@ +// +// SDTimeLineRefreshHeader.m +// GSD_WeiXin(wechat) +// +// Created by gsd on 16/3/5. +// Copyright © 2016年 GSD. All rights reserved. +// + +/* + + ********************************************************************************* + * + * GSD_WeiXin + * + * QQ交流群: 459274049 + * Email : gsdios@126.com + * GitHub: https://github.com/gsdios/GSD_WeiXin + * 新浪微博:GSD_iOS + * + * 此“高仿微信”用到了很高效方便的自动布局库SDAutoLayout(一行代码搞定自动布局) + * SDAutoLayout地址:https://github.com/gsdios/SDAutoLayout + * SDAutoLayout视频教程:http://www.letv.com/ptv/vplay/24038772.html + * SDAutoLayout用法示例:https://github.com/gsdios/SDAutoLayout/blob/master/README.md + * + ********************************************************************************* + + */ + +#import "SDTimeLineRefreshHeader.h" + +static const CGFloat criticalY = -60.f; + +#define kSDTimeLineRefreshHeaderRotateAnimationKey @"RotateAnimationKey" + +@implementation SDTimeLineRefreshHeader +{ + CABasicAnimation *_rotateAnimation; +} + ++ (instancetype)refreshHeaderWithCenter:(CGPoint)center +{ + SDTimeLineRefreshHeader *header = [SDTimeLineRefreshHeader new]; + header.center = center; + return header; +} + +- (instancetype)initWithFrame:(CGRect)frame +{ + if (self = [super initWithFrame:frame]) { + [self setupView]; + } + return self; +} + +- (void)setupView +{ + self.backgroundColor = [UIColor clearColor]; + + UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"AlbumReflashIcon"]]; + self.bounds = imageView.bounds; + [self addSubview:imageView]; + + _rotateAnimation = [[CABasicAnimation alloc] init]; + _rotateAnimation.keyPath = @"transform.rotation.z"; + _rotateAnimation.fromValue = @0; + _rotateAnimation.toValue = @(M_PI * 2); + _rotateAnimation.duration = 1.0; + _rotateAnimation.repeatCount = MAXFLOAT; +} + +- (void)setRefreshState:(SDWXRefreshViewState)refreshState +{ + [super setRefreshState:refreshState]; + + if (refreshState == SDWXRefreshViewStateRefreshing) { + if (self.refreshingBlock) { + self.refreshingBlock(); + } + [self.layer addAnimation:_rotateAnimation forKey:kSDTimeLineRefreshHeaderRotateAnimationKey]; + } else if (refreshState == SDWXRefreshViewStateNormal) { + [self.layer removeAnimationForKey:kSDTimeLineRefreshHeaderRotateAnimationKey]; + [UIView animateWithDuration:0.3 animations:^{ + self.transform = CGAffineTransformIdentity; + }]; + } +} + + +- (void)updateRefreshHeaderWithOffsetY:(CGFloat)y +{ + + CGFloat rotateValue = y / 50.0 * M_PI; + + if (y < criticalY) { + y = criticalY; + + if (self.scrollView.isDragging && self.refreshState != SDWXRefreshViewStateWillRefresh) { + self.refreshState = SDWXRefreshViewStateWillRefresh; + } else if (!self.scrollView.isDragging && self.refreshState == SDWXRefreshViewStateWillRefresh) { + self.refreshState = SDWXRefreshViewStateRefreshing; + } + } + + if (self.refreshState == SDWXRefreshViewStateRefreshing) return; + + CGAffineTransform transform = CGAffineTransformIdentity; + transform = CGAffineTransformTranslate(transform, 0, -y); + transform = CGAffineTransformRotate(transform, rotateValue); + + self.transform = transform; + +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if (keyPath != kSDBaseRefreshViewObserveKeyPath) return; + + [self updateRefreshHeaderWithOffsetY:self.scrollView.contentOffset.y]; +} + +@end diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/Action_JD_mainMenu.imageset/Action_JD_mainMenu@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/Action_JD_mainMenu.imageset/Action_JD_mainMenu@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..5bdf2b27006c706820b476b03b776e108bf0c4b2 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=0wlMXIamRyU{4pvkch)?uNrbODDtodzOP?2 zqr&`cbK?pHrO&VS`=o9YVK}|(i)E=bZ`q{ImTzS)9Ri9;2e&^f)7{QoC-QH1?t9z9 m-9WJ-)gb=-=|%q=(|K?FwcBa#C)Wrxp25@A&t;ucLK6VC5HTbG literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/Action_JD_mainMenu.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/Action_JD_mainMenu.imageset/Contents.json new file mode 100755 index 0000000..c49725e --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/Action_JD_mainMenu.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "Action_JD_mainMenu@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/CreditCard_ShoppingBag.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/CreditCard_ShoppingBag.imageset/Contents.json new file mode 100755 index 0000000..f499cb2 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/CreditCard_ShoppingBag.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "CreditCard_ShoppingBag@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/CreditCard_ShoppingBag.imageset/CreditCard_ShoppingBag@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/CreditCard_ShoppingBag.imageset/CreditCard_ShoppingBag@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..658c460773a6324e08c4a5a67938b63e46b149d9 GIT binary patch literal 1985 zcmX|>2~d;Q7RLh#76q#EP*hOC4N*jJX#f$z7D))%__C8dp;AFaDMop(5~?C76)F~M zQCyIsJ`qz~0>Wr;0jvWAkN^opf$Sk)kRlM4m%caiX3o9;bLN~g=gyhm+yXrIfZLKa zOCS)48!A4QXjjhP#~EtBdyx6|gyRGr1H_Fc>>EYz1KD^DCj9@tJ+#{>I!yC-HVkCp z>}GfDy@uL*)=LFLcPcuQkf7wgO{rLzogFC@51q>$zWTGAP1Ki{j{hi{QV(`L247QgFHq>zK;V;4k-EkGCC#Pb1>4_R9PQ$_**?1#|XyPWdlTaOG)JGOU&jYlaB(s3jNk$oX z_FlY!g&Px+d#DK`$yfuQ)Imb^Gq5H;Nlr$~DG5d%Fw7$8xJhO{X^an;xkNLEU=dQr z1Y{GN018N^|MFl*<$s)v@cdc>lpm~RxM zcsr{WKB+TTv|zJ=Tq4LJfV?EoK8r(q8*fLQz~3sZwxhf(i-=8X3%1Q`GUi*~KbZ0B z4zfae9{Fn_5Lg;2HVP22Oz)q5Ekk%X5n>%Yo=h!d42*cUgnr|^hEXqP6uKPFp6Oiu z{*-dP7y|QwWY%d{ymrR?BV{-24Zz7m$lSz!a9E&n5oAocEaaFM5YFv)@{HazZ|w*lAT#S`YHxi8X@J`s5vlwu|ro?P1qQD z$R#C7n$;J%Ocab{Jt(N-t{Oa5+xTTLXRgVE=;Hf*SIiRq+D_4iMKAwC@IAJRIWhRN z!Cj7DhxW6Ve=7Dix#g%!u8)3Y+V1;KC%7iXTC_jZ{Hj%5wi@9_0-vuN>g#FStd_k- zeTxlST$%@6oud_}p1R^$2~CeL69?1bUPJp91F+jP0VOMte4q0?$Z}h1p*vZHYH=FN z4O(lmb|gz9LrP1y46)zKxQOg(x9uH*<5SEu%_jWvN~B+|r{)B)BN`g?NCtyXm2PqH zeRCX=ks7$+JNG@%xojJTI{6m;vdO#Tq!9XMrRwfPQ%ij26LJM&sb>X~xAa^XVb)D3i0)j8PS42Ogt`$jg3XV`N73>Jy+Z?@8r{kYIIQ~lLr02PJ%b%vITO_d$?!2o#0;|LQRqRQ< zTrvpy=S&2vzU1=i7d_x#UWH zmk!@-CXh?JosOOsW$}e;UVsfE1JG=Xf|wt!bq&Su35*|g;`txC+w$+}1?;lx5x0nk z?wp9(?YzFqaS+iF?&ZH4zhu(GIiP*|UlkZ1s^uq*6Yayn+C0vh&%vxWTCM1p%A)&RONYp=k6cfmH>-^Tfhg%e(XG**y?;6u{6rm2A56swF z&G_mE6nLu^iN241+1}NnE&mO=yVbm}w=BK*m~gu4QSA@=LU-5d{~TSBnC{3^9Ibhn z{diO3O|RZ<#tcgDjjH-5HRA?gJRj~czJ*aw?!Cr1A+#>d{Cu%L$n|yRbGWW#SH8FJ zc^tetUpGx+}(p0W%!@QqO_F@tsTR_t>JcZ*;jJ`(cqwsrw%(jp!w|r zilCprX?eUZ{6Wr_uFJ&%10&|i!e|G~p4I2SZTJp6zLve_o+==P2G#mOZ75;i)s!YQ z&p$Rx8&^`CDY*)-+VRf1*)@ET$C+Kmdd8;IHt9%s;-xss!=i14cUQQ2%YOOr45^yC zr}~~>CO+XBK8Nx@WNy^5?#P-~g~(+u3RW(gIhxqzlxO9%=5AEI3{Rfp_@(BO{ literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/FootStep.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/FootStep.imageset/Contents.json new file mode 100755 index 0000000..5bb5bff --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/FootStep.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "FootStep@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/FootStep.imageset/FootStep@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/FootStep.imageset/FootStep@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..4de358dc227689fbcf69b4d38d8ff47a79bb2ec5 GIT binary patch literal 299 zcmV+`0o4A9P)0&y?azObpJdpZ7K2Aw+QsBmrmqXZ-?ANM zgTV@?+2lsHjbSFZwZgINhI}h~hx~jAKCMs-FTr1uQm^_X+eg#UP)P000>X1^@s6#OZ}&000EtNklQ)voeP82vD;S04T4U~&$0T94t7jpi5t*Ao@wj^< z7qr z8=aCQ?GwqSOHYdelzPvn1hh5x&w%1lm&9@V0<`yjigtsHVM%W)ON@0+Ns4X)Wm?3o zEOCJ#UT6m#f1&W6nF$uVsttZ|MNvOLAt&6bddnoZc++GrX>QCI< zW}olYfUtIM>a5a{;%5}=nbUqMuO3+kh!43d;nOGt(-MKu!MJuiE zcZq0pbn-Ir*2Og4!4(SqCoH*90|skPI*-WKy^V?!oKtrs*b)VP05I3V9D?%K!#4W8 z^`-h!Oq+>DM>2XR&Of_?n5DPi3gu-3OEl$>ZEOp431oD-^Zt5I{4p2e0l)*E4iB%) zsyG@Q-JTwwNOAFDLm&DSwr2yy$`DwfE`pQ4pMde+D!|EHEP-n7VEULVC~U9xtLVnb z_$q%J_deKs@|8fb^YPQxE_}%l9bMKF9c}53io$Ab0ev}%|qKM74|uB}In zS&p5iWP);*wDrr-aS7+c8zLif9wsKDB`XW9>FH?MwTl^}?(*`Gx+KxCM6zab2l6Ut zIIa!C3&RO`))#!%+m;A&JG*I{XgAIi$$bD)Uv^jz?3SeR-wApxx!8C-lUIhnES z*~48u%E@t#PAtw(IRW{(&5KZFScg9kC1cBdF*e+Lmmmp$F6|UxY!RqvsoblWvvjGi zE;zXEe?-(FkIv%Yfmm!x{sv6v@1>A{Z(Mu#9j5+n2sRFgu%ttPF^8ZoXao38U44&3 z-roLhk#lTrku@_D>D`7_uV#t5KaOwA0-|pv3y!)3!JENehfkuJR_bz=HnAOX>=rDp>^+GG>SwlQC%0|54Tn_ zs#~F0e8C$(+7I<%@eoQiUJE|x?@49bqdU`_9PsJaCB#Xi0DvWfTi7NvRCO7@B$2BDNuGIM=D}$(-kQZ zW#a)DP>n23zk#8OT*I+1#)FUan^^8Q+&{)jC!KWS8~JIK@f{8-Pk(T!=aZaPj`o5e;~d&>?__#-SpbSVJO* z0Bbbkj<|*Z%8>0o#}SZ03$nKmpoPr7BC=>hqJ${4ku@EWLmv`b2+%{$R74&_NbDiN z5c#MP1&oyeF217f6H-SPt}4+6WsHMSzDZOF1m; z3Z5cn0(;kpB4!W;p9ocqD9ljY7IA{PGNNZioXzPZ3UizUh1`bN*tUU?W4PMWEGWcL zhIA}L!@_QqAx=<81&@l5cLqahiik&4taQ>zC)}(qF3Na-?8w+=fA!;K4YH#LRDwbr zh(gC;$PGln2@1JYhPbc|L>%LfGGrJOa*DY!rfVRitBjcAblW~DVy29_j1Y0DjF_Rg z>!!CcQG|H-7$V{WJVnF=w)O-&!Y_zIAEg}vO6Wlp?(rh*aa_PS!~xJj?LS9s2d*+= zj6&4AC66IQ%O^xa7$R@#qRe4%fRH|Nrf>Z$+A)T-k=@r5CWBTCAuVL$c$0nEW5{*f z56n+k8w^>ad8pTN1D=5p4~;`V{p(mo2w900000NkvXXu0mjfN|hRp literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/MoreGame.imageset/MoreGame@3x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/MoreGame.imageset/MoreGame@3x.png new file mode 100755 index 0000000000000000000000000000000000000000..73a5d3888dd25683c09cf2f9d2e650b75201eaf6 GIT binary patch literal 772 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

|V-3odKM*3)(uTTA_WzjwbSr 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Line_Down.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Line_Down.imageset/Contents.json new file mode 100755 index 0000000..808a9c8 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Line_Down.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "Shake_Line_Down@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Line_Down.imageset/Shake_Line_Down@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Line_Down.imageset/Shake_Line_Down@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..07b3cce906117cd49053412d0b42a90e2805590c GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-G!3HERGRJ8GsX$K`$B+ufw^t8xHW)A*y%56v z$Wh>q!$DD(JN0vRHJuCmbf3+#wc|w;qnnGC!Of=h=nqNUak&SjnK-v;{4T8PxbnKr nVCCAqGk7{wcGPp8n^vc@m+e8k!1q5u!x=nX{an^LB{Ts5TI?}H literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Line_Up.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Line_Up.imageset/Contents.json new file mode 100755 index 0000000..fdb84eb --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Line_Up.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "Shake_Line_Up@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Line_Up.imageset/Shake_Line_Up@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Line_Up.imageset/Shake_Line_Up@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..55faff95ea3a2584990ef8a0459605741d81ca6e GIT binary patch literal 139 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 YdU(f_vjv%u{|`{ql(m%_6|5uv581CGu>b%7 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Logo_Up.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Logo_Up.imageset/Contents.json new file mode 100755 index 0000000..f79eb55 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Logo_Up.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "Shake_Logo_Up@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Logo_Up.imageset/Shake_Logo_Up@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_Logo_Up.imageset/Shake_Logo_Up@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..644b272e37192a64a0e2581a7b47f43c99efd835 GIT binary patch literal 6847 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 XppQ~R`PHmi00000NkvXXu0mjfR(}FG literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_peopleHL.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_peopleHL.imageset/Contents.json new file mode 100755 index 0000000..9ba17cd --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_peopleHL.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "Shake_icon_peopleHL@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_peopleHL.imageset/Shake_icon_peopleHL@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_peopleHL.imageset/Shake_icon_peopleHL@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..86621a2081aaa84da8933c940025c35d4f47c6e8 GIT binary patch literal 633 zcmV-<0*3vGP)!M+c{Ch!1RkYd91U`voiORfjof-Kr{J=hs! z(W&dfenS>@T@NPvVz9?5x*Y5dvgpqBf7mr-(RKVvKF*oz!FC{vc3cnEfGldd9&8G- zXv*ziz!7A@5ehy8djnap;7hO~j-ebKqv%I4U>XUOg9Ot)z8bASIau-anXQZy$e;=BzFXW*=XyJMGU{MSfgT-K81&jUxm2x5U TS%@M300000NkvXXu0mjf{dxr) literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_tv.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_tv.imageset/Contents.json new file mode 100755 index 0000000..c7e5b22 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_tv.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "Shake_icon_tv@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_tv.imageset/Shake_icon_tv@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/Shake_icon_tv.imageset/Shake_icon_tv@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..bbca787b195e1bf8ed73d104e4b25e75afc6c27b GIT binary patch literal 519 zcmV+i0{H!jP)9pSnRach!I;mA>SPY+th-G5CjXqGL>XKLqbwNphXt7$O!~Zjvxj!hG=16 z*%VpEA+xf$Waph?<|*PPQ~cmB7KThc_Sj<&GH~&ZfN>kR$bf!E2!{az19qdrwno6# zDl9N$Ct)KLK$=&;C?2MlC1~+5Vw#0nm|?KVY`-E%I196| z0t+i24;vz{omIq8g&F@n|Jn%FR)yUf0UM~W3|wqjQ6K7m-%Of?Sy%;Q91xtb1IDPN z51S%Lu;=t)pNU|H^kH5i*ff3ECA>4=V_)!4P7X6;7G_}<_6;ntBA8L)z6k6BD=Ygt`a8ZEL}c5Cj*tY$YA9p{N_sMN%%h0wL=X#6UCBg@N?F z;LC}o_s|TdqcQUg{1@tJf*(BcExr^E4h{|u4vy*h*Hb%GK)p~Oo;IZdwosp~f%Mwp z527;@uo6{(Y4gvy|po zaUE=zn%mD(oa3DDa~F)eu%D$k$4g5209LY}r8viuFJLKZWHU=)jw8OueK4+NF-vKV zElT+WRut|zwU}ekH!x{tLzCzDwek_HZZJz}j&)zbveZhRr94M|KIv{|v?Ra7-uZXrwgrX&1~7mD3}EO#pxEy; TF1%sP00000NkvXXu0mjfgg5?~ literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumAddBtn.imageset/AlbumAddBtn@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumAddBtn.imageset/AlbumAddBtn@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b458d895e5308ac6300e3a459573254bd294025a GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^O(4w33?w(4ZQ2K<*aCb)TyNaC2}C{1m%IduFqH)P z1^;Jwy4}DF$kX?9aSW+oOjcmK@!y?QIVL6K$$XnirNuz_Ut)p7yc)q%ca61-w2Y!w d^>+y{GkjPtmuB@bKLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO51AM#2z{tSB zz;IdD(Z$J?fi%FHTu@ZPz`$^Tfq}s&CAB!2fq~%*0|P^Pc}YPD0|R3W0|SFdQg%TJ z0|R3L0|SFdc1Vyj0|R3V0|OIJNoqw20|NttbACZ(QD%BZiGrb}rKN&nN`6wRLU3hq zNosDff@fZGeo;YwQDRAI3IhWJ)D8v)1_oZ2{1OHC#LPSeLsL}-Dual~C?)grM$+xhxmf|p7B=;2nnnfbQ63e)F`Yd zd{`u1lvi}CSe!Vg_*RJ&Nny#OQWes=(obaO$cD-Z%AJ+(QSedZRlJ}yML9}EN#(Wb zR<%ZTKMh%px0?I3CTgeZSnCSuzS29QKi{CnFv`f%Skm~n$vxA{#r++CO)=?RdfInDbtjt*-0cR=O|sSme3TYk~JdpT)k*{8ss|57-*GH|SXK z`H)+o&%(Y$FhvSRDMcH{xWz`r<;Axo%ud{#bT;{UDpQ(Vx=lt@W>wa#>^(X6@|g0~ z3w#QTi)I%eE_qufQSMSvSUIoiZ1vw-y}J1NNe#yue>WSnq_@s%yWSz#>D|@deYlsQ z&%VEI!oG?BCp%7QoqA$A?~LG?vt~V-qcyi=-o6D~3&R#IUi@*X!?Fp>AFecB)w=rT zTHSR`>u+u}*wnH4!B(qnQ@4NE>AP#y9*(`~`;H$_KiGNb^%1|Ln~#g1s6F}QwD*}U z=VZ^fU-)z>?((Ut7T1>D5WU%Y>+7BLyEpIqJUH;k^zrJaiqB@g5PaG7n)yxL+n?`C zKYaRB@cG@>yl?M*RI+y?e7jKeZ#YO-C0VhdBK~#9!?3J-f13?gmze|K*La?y0 z5%LO#6amFXNTXKPLdv{B5G#vll}8AIf`zR%K0vS$UqNl;8X*BW@Fe~=ckAW6$gK!M z*qP=ScD~)2oxR@^e`^ICaQ=Y{iSK0&XyGxj$S(pnobX~IioKzMerp3YVvc79`-&YP z;LWNHACxEq*X*WCUIn1TIZGD6G5egE>{Jf{0$^-)3xOMK2XsIO{BH>WXyUU%i6@3p zq|6o--e=_dG*b~H0ey|8e(Oh(Fx=&kfRXw!=L=X>TVZ0+h0tLxMG4hb^}D73)L0{A zgDxJ=_|yS7<&wo2-7YZUp2w_`lioACzp5i_JUhG>;civ4!|BJdIc9yTn0%JG&!!%< kZF{z?OL1>`K7pSD0Fg>?yz@H0u>b%707*qoM6N<$f(Pn3Z~y=R literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumComment.imageset/AlbumComment@3x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumComment.imageset/AlbumComment@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..4337aa542d4bbc42f123b35697f1541d5089d26e GIT binary patch literal 290 zcmV+-0p0$IP)#+axBdIETR*NF-K^PR`*1CKq6I2o@)hXhb9=&10wt(X@i^V|bsn zU;69N;d{-LQcArW0TC-GjWc+Y4=3rVul_Y@$t#Ck zzz7yBSg>Hhf&~i}>>K{sy*g`2%xT@7s4{c0B(k?te0^G?PwZwpWv|89%#8X6OR{J! znh`L1+Q$hE2JGM7$D_i1{O}27dK@xdwWV#Yqx-}zsG9qzJfJ6rl*~_e?24xO>&8wf oo6k4`J38h&rp&3CQcC?#7b*#z;~w3-;s5{u07*qoM6N<$f+7=t#{d8T literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumComment.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumComment.imageset/Contents.json new file mode 100644 index 0000000..afa9b59 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumComment.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "AlbumComment@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "AlbumComment@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumLike.imageset/AlbumLike@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumLike.imageset/AlbumLike@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9246647c09b5e195f0876d0ab4f6c03737fe4daf GIT binary patch literal 1511 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 LS3j3^P6{pNZw$vI82`R5m}I`uCm_kQf2 zTkQe7hD&YMUMxiKb%>>njKy_9JwaEX;m)6qovmvR2(NeH!v`QW#m~E Wug?9nWOWnJ-3*?telF{r5}E+)m{Vy0 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumOperateMoreHL.imageset/AlbumOperateMoreHL@3x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumOperateMoreHL.imageset/AlbumOperateMoreHL@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a4739376540a77fcb06e26d2c9f526cbaecefb GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957Y)yk33x*Ln>~)y|t0^P=H8VVD$A1 zhG&>KclGWq^Gja*Iz#;=+qREoFMZ~HisP8W|Ih5yL~gEiDxQ--NVEF*>8*WRH`XO) zCzlp(NKN9+C~o-bEoYE$pn;K@jYk5)n6_(D!0a2mH!QALm38eEz8_=y@Mh@D=RBu- zxAxl>)lEvBXT0XbPsZ65bq9pb@!$BtEtlk<@KU|9Y|_hu+c#uy^rv&_T%WnD{^6a} z3O}QWYsOzMpXkp=wS(==>pyR8a_`C{_^ydoxTbw=4b+V<@7rB)pFHcpij>7b-!gc* L`njxgN@xNA@;-OD literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumOperateMoreHL.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumOperateMoreHL.imageset/Contents.json new file mode 100644 index 0000000..c4135eb --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumOperateMoreHL.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "AlbumOperateMoreHL@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "AlbumOperateMoreHL@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumOperateMoreViewBkg.imageset/AlbumOperateMoreViewBkg@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumOperateMoreViewBkg.imageset/AlbumOperateMoreViewBkg@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c14a09780376be0af1fa33ef1ec29bd9d5beef45 GIT binary patch literal 680 zcmV;Z0$2TsP)VK0002GP)t-sl9rc* zhl!MznuLdnhl-7YhKNyDS!{80Tw!B_hly`=c5HETlb4v2mzjo&jB|K;gNKQnpP)`u zR!&q`TVP{_iHvP>bas1vg^7!Abaz`}V_IKgQdnAohKGfTidBZaVop?7 zhKh_>USL;UUwD0gg^7!vp`&(teO_c{O;c4_USV5cVoz09d3}F|ij1G4q+McUczk}5 zl$Mf~m~L}*0000>P*Y1$Q%q7+OHouzQB;L;wm1L)06BD0PE!qw3yXn@{Mhq~)Y%IQ zfyIIa{{8iV*t~tz^!EIUfb{i>_5OeN_q>D!#`6C6_Wrzr1@ycN3)uj~57FNM00Cr4 zL_t(|+U?lKZo@DTgyBhVPVc?5 z?)`t2-b;8%^%)-JkM!dGw7XeR6?k&(b1MI?|L_gI4s2ZPxmSS$D;Mho@X*f177Khn z+PPSB9%~FQwtyo77t;~WiJq#quut`V z^2ng(g5`ukO@IcE2I{nfnh%x}1$72mL9GM&890TYpB9iT@P0rEr$Rg7TFc#ROU2qB9QvzP#5^+gC-gs{X2 zGROpI72zaNjbp<(M-{Q079~?`V|5G?kKMvb0C^)vSaMWx4#TG?+Q}wR>^PT0rp0df z?R*?XE7>UmxV!B#$dvfj3*fk`GsejNR_P?n{9;sUkB<_Gq(GvX-#O!6gEN2z0JIp?u7~_D!_BLLt~~4-ymC#L|19>mBs1c0nJma0OnmI?T_P4l&kWtqODcj0Tbp zVD8-pKMq6yXxa_A8G==P`703W5cJ#SE>>8;ss~DAB*Yy79=}`Qxe80&D*}{C3+KUq zy9Hfd=4yq=E>#gC4A~GBh}bImMv?nBfK34?wUPHhfMnR$Kgah};l#>6@;$ z^!RQqh@xqz_}zjt0gXfyiXRk&-M;b-i1rKmz>_d%MrM|La?E5ic4LFoY*$N0VW~Ft`b{dIi2C=V3MVOi11oX3^M_%;4A=A zI{Yge&dqk-&ecE)GZ7#Um=DY}JKy{)0zfK7^34O5z|}Q^?F}VavNOU{`9nPSYDB&f zvaEn}0EnK0v-dggwIzUonR?)X2@c2yfO;eof{)gYqSD=;J0FFMuQnc6wT@bh@C^gO9x{*y}-q=llvQt@>aTGbL8QbpW*e#2NPbG7xNJqLodv z(vfuF6MqqGYrx>y;xGc0{{Ed9X6mefI{~=-gahnyg;mM3jFskn9Qfq>2~;k2>O8Ye zu;aU>Yy>l%R=^WwI7LRP>D0M2FF zz^+1JjZ_>YGaZ0u3OGXJUj=)nRp-Zr6Jym$Z6;wI{Ez#sVLMl&k}$%Y=v?d>_@C!B zR8C#ec)CEa6LnEx*cLbhz`ws{0sCuIMvXyg+P_a}%L0$KwB)_>2^PL=VlDJ%J0h3~ z**LVmH!-#=7nQgXqPqP__FSALU{{BhTYQRGuc#D4VvXh5+QlGju z7OYdSw5(UqVI3a)8=kH14Ov~Es|WF?`?h)jmX`N!LS;aM1*hDjSIg>Fx_;H7r(#rG z{f-A<>D#@(MJ1%cyhi8f+4T@LJbBe3Cw6f740|tq$pf&oqHhZ-{Rx=UU?2Ud<8U#I zir>@MrOmhZdjytN_H9KaI0{+y_Rz0)WB+xjofqQg`*(T<7IZ!;J#qMAoi+5D7Hqr_ zcQNvCHdx>hSXvbECB$;jjnm)aR0Hqhx9InRmy68_lr0)_2A;5V(`VrBC@mS399OIIGI=-Ln2 z)s;h8??z4!R5PUCn!NGhsR42O{eS*10F%%u@Dz9o{6Ab$Iy7Wd!!-Z^002ovPDHLk FV1gobg604K literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumReflashIcon.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumReflashIcon.imageset/Contents.json new file mode 100644 index 0000000..9a050db --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/AlbumReflashIcon.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "AlbumReflashIcon@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Camera.imageset/Camera@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Camera.imageset/Camera@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..85de12da4678dc94d4b1739e616c85c3ffec7b85 GIT binary patch literal 402 zcmV;D0d4+?P)bSou$jbE92T@RNeIQRmv?+9Y{T%OhI$ zCgHWNI5xX&vC*1c$C~2GRC2)(g{kmLPn?>P5-??!>WQO%B|{?X<03tA*sqjGlzm*N zCl30R4vDUh3!I6arP^I_x&J%4KS10cneHzM_t&EPMnJvwQ4q_`p1xRaZ(kKRyn|+Z wU#&|r?j_NnNn?3QI2ivz?8RQ}#a`^iUzk)ta93y*LjV8(07*qoM6N<$f^@62>;M1& literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Camera.imageset/Camera@3x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Camera.imageset/Camera@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..58026ec6b53a2903c4e01ef1fba022787ee91c38 GIT binary patch literal 579 zcmV-J0=)f+P)J{(!@y?a3biynCypl*tKN7~HTut8)&W()pDFxvaoW_?v=ZSti zasKtv$7K9Kf`W|WFzF0`Dpt%HlaeqbWz3uv75-#l(gl93nQ-*sFC8&qjUPprv=3WG zpVs1tEk68J>6SYN9pjExUK(nqZWfm;*pSoEkh5XIrF)(4)Y8&57f!~EJs+`W=A8OQ zEh*hPclnGRe`3d(bGKVDX{VO2Dfx_&Yp1q_q_>Xp8(nyFw6`+SBU>0HT`6smj3lJj z_S_C1b~bMvUwUGn7{1I*<|MXsWgGS$U-q`SS8=76wv_~6+s!hr^sPCwAcTd0i*qH2bRB1aW$_XJi*=ba1I|673p)uJ>T7OQh_-~en{t@T$k36a7veGs# z`NE{HrUD-U`ne_WVJkmEn9?5Fu;zmL(8gj@>i=l~siWSop}M@ZrDDmgSzjb(eX*nh z5ReuiaOWaP5hi_)Bw6Sl@t)$K_K5PK(vd@@Ra&K0TBTK5rBzy`Ra&K0`WMxX4p5K; RCtCmj002ovPDHLkV1m|43poG) literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Camera.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Camera.imageset/Contents.json new file mode 100644 index 0000000..e9bc18f --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Camera.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Camera@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Camera@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Like.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Like.imageset/Contents.json new file mode 100644 index 0000000..5d2aada --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Like.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Like@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Like@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Like.imageset/Like@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Like.imageset/Like@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..24c3dba307c26149f12da610913501808ea525d0 GIT binary patch literal 1010 zcmVaEjw-Fwsk~tReMf-^MjkX{xeMBIb6F{ zQr(^_-RYHRbp+ z_Z?kNnz9Df1ezK1gmEA~NON|FD+R(H-~@>vfw2P@6)vso_6Iu#r@*I^wOx5^#ziqA zK9My%q-iqwG2Fok*S#{?iL8UiQz7VP@i<@u#;^gMO?W^GFr@<}ax6 z34_1L!=eUp3MY(&z=gY;fo3f|Tf`E7RvJ9h_GrvVXlU)P1e(QE8uh5Q(jcDxSH-a( zwR(wBr{0$qQJ9e4s^{d|88PF7=tK12^82!(yqYKq}CpL@H^D_x%Xfl*_B? zqTOFun-S#qB=Z`0qhQVhpvAhVLA9u6BnMIlF0}m!J>7-Lao}FAInI3{-yBqfYRT>` zwTlTL2@lf-5)-@vYnNee4dqI$z{Q>hs=>8v5x*z7?a8&5ds|E<-+>(wnA=V{Qls`t zZ!2j7`%2#TI&hFs&82%y5S|xBW6iYeg17W4f1mFVR9RG=o`sRlNrUNvO zxk0){F&vv|*SSue;SW g%En?NHkLO20@yR^^jL0)4*&oF07*qoM6N<$f}{r1@c;k- literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Like.imageset/Like@3x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/TimeLine/Like.imageset/Like@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..eab5b816140c0ee3d70cd8c6fdc98e5f6a32dea8 GIT binary patch literal 956 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/bottleBkgSpotLight.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/bottleBkgSpotLight.imageset/Contents.json new file mode 100755 index 0000000..bdcbe60 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/bottleBkgSpotLight.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "bottleBkgSpotLight@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/bottleBkgSpotLight.imageset/bottleBkgSpotLight@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/bottleBkgSpotLight.imageset/bottleBkgSpotLight@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..4959ea315e95d1ba910ef6ef5c5b14594ea33ae5 GIT binary patch literal 37117 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�esUaaZJL*;q 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/bottleBoard.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/bottleBoard.imageset/Contents.json new file mode 100755 index 0000000..926bf79 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/bottleBoard.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "bottleBoard.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "bottleBoard@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/bottleBoard.imageset/bottleBoard.png b/SDAutoLayoutDemo/Images/Discover.xcassets/bottleBoard.imageset/bottleBoard.png new file mode 100755 index 0000000000000000000000000000000000000000..154d6ff2a8507ae20cf3f8c316e754f75502fc62 GIT binary patch literal 7524 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/bottleButtonFish.imageset/bottleButtonFish@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/bottleButtonFish.imageset/bottleButtonFish@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..962d620de1ea528a5c299dc16b241bb4d09ec05a GIT binary patch literal 5809 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/bottleButtonMine.imageset/bottleButtonMine@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/bottleButtonMine.imageset/bottleButtonMine@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..56e8f70f7dcf82be26ff8b321240d5073e334a02 GIT binary patch literal 6777 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 bqyNiZz#eyDOntE4oeS9+{ z8Z1a*F-BTmWMRn2$f2R3y}iAen~>SmvmHxx zD^zu6cX@+nQp38c&Bwf(duPC~naaw_=i|@P(YNpM?7h3R&CdLx{gs7Zf zX>7K_xJXb}H$_pGr;MbthC)I@Qc_a2wYA&Y&s}d%vuXy1KgR>*SxVqW}N@o~D_w#=2%>SgyL4>gCizLP7ul0GPbM zxX;X}xvGeji!x4Sj;fbGLPf8=q$^Epnyr<_)y256g!J#=LPA2lvVp9&iTCs8yS0Y4 zwusu+$D*>AS!HR?&$)DPVaLFkid;k1*2v!5!lbvG%g?%!v9M5BU3_?G=iIwLM@=D2 za)Yg;w8E?=B_#j<|FO1?;NZ*I$(h*3kj}!3*Tjpx%Cxn-m)qgcz0AGGo^H?3wZqWB zJ~c4X*v|Ba}a`}+6({{HXl+y4Ik{{H^Mw1K3hnZ&q; zq_vm8vw=lLMM6SCwX=!o-oAjNn$N$8K|enB_V!(8Wk5nhLPA0-RCQZgQQFzd(7J%i zvwFj_e&g1#K|w*!xPH2|ht$!;>g3F-ud_X0c2R41W_Nj@nthIse0zj@%(Q#1qky=m zf4QlDxv77-sei|@d)mpB%d&aZ!G-_;0E%Tu#k;Vpm2``1S=`dbcS|yOSVg9qhpLWg zfKxiSql#-nDgXcfIj#;;0002%bW%=J>ej@^s^BA?!sOZ2uJGCTv++%v{@V6w$@QI+ ztH&(2mC4K+EkyI``u+P?_SpN_;r)@z_UHZH!tnJaGOgl=ytIaAzTSevUG+NtNAc@j z{NuXK;(QnM?fmzT@>$S^^x@3rkIU)n%g)>JNa?%I{q5Py+W6tT&(?h3_YEe?+`qZE zw${b$-Tu*CPm=h)KE#K;f9%E|uA_Tk3WO1<2Ey%zrX#Pr_K^V{Or%EB|| z`yS*G2Fc98$;cLy$voF4p#ROLLC8(yRW*;NiAETtTu#*YQ8h?8n6ko&u zW_@aA{H^ivTMNyr(Xnv$405#Fvl7lAV_p0?>YFo%Z;Z{F^CbFYCuh{(bZ{6ObBOUm z$IirXuU#JO2MEKc>(RX=*56$CVG$ChC$H=O!rnx}h-$sQee>Y~3Nt1L@dFVs zy^Qz1`-Wa6iM1J%LpkO^0@InGFq0-*y6M<}HcVp6-`2J(IVd#IY}IA!{xOE*gkGcK zZJMuDC=|-7yuO~@#!^8!XQK&bGR&0ClS)6(D(v-Y&)jq8dv@=tY^-2!utJ>~rct>p zTA--6+tm_)4fc?j+uU#{3~VW#x=vvSn6|giGH8gZEEQC+`B{*YN!L1&SfnyFS7b0m z<$%%3_OFJ*WZBZS+Ay#tdHxoWXirpSk|6Z6P8f`+R`K5U)B;SBH`HeVd+y0;Z7hMq zFq2I4&N{7Ht(N2i?5YKPIgZtq9EQPgoWQErcWWaf!>Vi~c6G3=9~Ps)tw)qfNvbVx z0_*8N-U^QqM~^5|t8Dp0`F~?gDA+)+Z3xtN{$IiNcVbLpdS);&iLEg~Vq5p#jj>vr zVlTj++3D`P*Ayl-#X1sX7y@=~0%H|4#m**wY1KG7cD$hEQAa|i0>_4ii5ADjv69&H z9bHs717~K4<1BD;dQ3);p|05m)|_X5#Dyor8NkGx0(RLV@CelCOgIeo^&M<+9IG}a zcJ{=YXqZJr-p^v(pHM-bS$Ow>JJ=wJJ?`GF)4^dU%kIHSzcaTJ%wWa|498%xk8%%! zPHi(7sHYQ&5jY%H-pvtyOC=VIbDC=f6h=T|f}aJ8dHK|(Ea@n2 zp#oMzK*UBI7PG$K<1?k9g9=a$OIE$+MZjWR{O9F$U{!faN{U=A_g%HpyapO0tY+ts zOzymT@M8NaH}iGB_co*acM42f`jVfk@3LjSu6}PVO*@StU>~Qazp^52`4^z&X)E3h zPT!8hW82S?r3d@_`v;$;`UL(1_=(m&c=x#)d>$X(Ui|h-*w15epEpNn{ti*Lf%(w(-P{{H^OwSWKr|20Th zElp_n_U@FXj?T-t(#Dv)wu!*DgwxE8ps$6au$9cvvx9tL)YrnSwt{=Aq%k@`#?#6@ zMopQrqBBZe#L&N?z_O>Zj*G6XkG7>!TVA)tt+dL^=;hS7(8sj0oXxz8teuTOLPXo% z%+}x9uD+(o)499Evdq!B(b>bPwwj8km<0p_(7J%jxPy{_lz-Rj`OZ*E@u`}?=F zrPJNhqPCbaSaqnjmaMms+S8-TwamthSW7zmz6XbVfu$ zJ6(2tpPE};SwcogqMLoSr+=E4eUg!Uxv77-seg5VdRK0EVRU&zK|t!{%tT{%+R2rP zjC`-7ez&N9e};Q&dU?aPgSV)ExTt^T=he}`hX4Qo|NsA?w3zPd*vYbc=iR==v3$ z_|@X#`Sj_`%{`hj*_Eg;S(?8O=63qT##m0!@%iqS#!L{s2 z{@3Zu68X{h)4e9o>f&?8(eakv;J83a*IyPG?k>>|-1^Y+H|@>!Y2-A+3H;3Iy;Qu) z&g>3CY8Fb8zy!KSMT1Of4u`WnyXBZMso9F;!i| zAROeiBpAx$$I-~Z$N>}u!L`Z6$Hub&Jn^bW000VjNklnyq-j`sf*C1 zRg|5Xec!y{Y&O_f1uw$>3iCP4`C<4nhnZ4=#$f-9!5ECe7>vOfjKLU;!5ECeYVl6e zs}ols!D`9qOe9B(w4>3a0tQx#M)H2WUOv}Of`P5&#w=RD|KkD}Sarfhi-3X6kO@{l zFM)wcSjTRD$Ims(_dvnE)a!D=Yk%)EDA>1? zRoSa>=?yU0i?3HtUS7#;z6J-|J~&wa_{xLr|7RG3G1$AKa|2sEFE9pEeuv$J15<#) z)MMrEuAtj z>)5L(m7d%<3tKO>Hv)qFWY&IP+PcCxfRC0@Xv^*kS>K3F6fPJGR@fUmM5bY4Nne=D z0x4n?=}e3!Xot;WiuT1Y4L9aSf`N8~cFC%AYh7HfMjNHjy>4(D8>GY-%jM=*lRrWB zoO_SP;23*#ZXVwXe)vA;Jm+$bf;de1p#Gd}is!NjmdCK40j4W7P5yTLiwTh+Oi1{6 zD&R@~@n#~&SvO8#&212wZFB6^#(7yLB=})IA&`QJ3Eq=-s=dxPcdQPEvoHu&e)oe` z9|l-TH@Im_o}WbB6#4W@nimPdz?EKcI*sa&?>LeS%`mLR3W>G07GH$7wwC)sOM^YO zC+vBX57 z>IzWQvkVgnM*Tp`WF5Knf%nD37h%-Q#igz;SE?}i8L>4cqQB$wNG|)OUYcg3N6~1| z&v5bl`arRGc!-(_u)(eyw$#L1c~=TVcBPmO*zIp5UFw6t7wvuyB4Du%-_NwzhQU{kkksivm{VIp)A8fi3KX8aJC zR6$D>b{Jkput5}=`D@}ZyHWitLeo(h#xjaBrJ_#&`AuV z8OuhYRbM=4Zfk2>2ALe0EA{P<hRJZal`&Jkj9?!m89K+|ra-ksxRt!ehfeX)Stesa12!6s z#PbM-<`|NN(bwY6+&)a878yHb!p zd_d;;Yc|4JV3Y-EHo2E8m)9XND4@YPt{InMcb*blW3tS51;H4Wg`wdn$4m$&$>eh! zU~{Bln0BQ%!*LmScd&5Qaz2I=!;zK7pF?DXVYn9VX1EQGOKv!_@p9Q@0vMJ-WF?KV zu&l$8wZe2QgRGiZJ;1VX7Qu7{SiZgzE5u`aCKzH+D6x8hC9{Rx9#Uagu})!U6T2zF zgnCO1!$iV~J)Qj@iA^lj1+4h5FrU(}fm4aKRbe8pIP7#{BPTFVqK*;+*zPgRE7VnD z8Z(B8fl6H^rWrBIuoZ8mz7l)h-n+lLHnBjh)O=+s0()OG$ILnjrasw}KA0N{!D{E2 z&JD0p15SxwNf2t~!-Wf!-)av)a37Utu+9=ty$aG78XJu`E~OL0i+|VLaSz@Af)`L;b&}ZO@vejmNB@P!7Ah?$467X%?pH7U ze!8*6U@)iyX;CrQF90i^BsRXQn|8Tq_FSW#ulUg2sMjNsf~Ec=v5}6B{{BvOv!O+e z0SVs2CjH0&k^jW>yHGZy#}BN z3@4`5hD#D`?bh{26`$IpI81iwVT~c!zN&K#U==5&Fl-&)b%G1SZeBw$Auz0bVyI4F zi`^2elJF|O#xN{gLU*wJ7*_G{^^zEdtzwwq5y-;&&aAOo*nJGEhzTWN?{LX4y!g@@ z!4@$L$pmt+*D|d2yW@g?pph%QCB2NOma4D{Nm!?=ucJNQ`lJf`y95QVZ(GaYf=90V z*QzhP1Yu(cW^R4*$w_ITN+k`vS4x3RDF)jFn0dDf+l3#EW_)~mdmg7RoggV--6DmrMl9H2`*pWetL5gWcD=0A;Ql+4p3* zo+pC&xt!*@l{gNAFjy6aVQkw`n#!_V%g+d4^PJCNwrzuKUA%Mw%#ov7zQ411STimb zi-zGw5vQ$Nxg3Yp>iuN%u>EcZOCzB1Vw)GOT&`3Lo)R2sPWl|?q$$v@l!6PAq}t(} z00zJQB4hv|T^8{Vl(AfJRc2!f*!XcnEBd|7uhSGu* zrQ!1$kZ*O`l2j4;`!uj*-py&O1F+uFi^+taJ3Z>PE)>fGmmtiVRQHm+`Jw9yLPuG_ zCK>E@2UJ3#-z2;+HCIPNNYE?=W&@RCwb>9Vm@2raV9EBhEUM@;n+CcV(5!x~_|&2;XIn$|@xkuI+ zC4jxhL;<^xX^-Gt`4bZXZ1Dlpf?%;_fMp`72mJ!9kz{tRWLem4xNRMV>W?^MvX5!%B;^N@o z=i}q!7ybieBQP2yl7^Osj)sPgk&c0m5zPny&9ZBRg#*n50L{U^kCl~mA3NCu7Z(P@ zi^2S{A-q!$p^*qrcpwFg4}zm%6lmB^1H=tn-2>=1z~B@JN-FA|UI1X@5A_JYhTQiy>d28gQ(g1BO!K{6`?`lLZ^ zgS)Lk?!W^f$a@qF0s(mK2M|XA;6NZoT8OHI!5KI~ZKwe(QfNT14%=OqAV?mFKoC0_ z$wNwkKqi1pLn6>1V`?o_RSUU-X~|-$Jf6EFWPM=VmfV5gvC$y6WMJ59$T;HKnc?)mig-^UJO{;=OwO@LKwN;noSIzVNEmjcJRO=O`)(bQpv~4LNl|b)0Bd5^PJkWAhRh~ zZ^1`ZZ{J)=7H989qDt`0i55Z$W#y%L9zGWi8+m^^@hx>ku_2LA_4GvH053!%ia){7n_V0G1CtepHe9F zo^UTTf2!Q5a*j?eS??)pAS%c_NuJKC`#Bb!@a_tqehe?l%q(BjQo;LjtL3PZ|H-!} zW%b$OPVy!u&?=ao8!b_w^X^oR)el3{YDnHshMQ$%3`R7c7ZEVm4@0$6npj`Z$1>kV zTWL$<%g#w)c+Dva3VO>;1+vOWy4hG-t;bJPvOp#8t73CyElw~m3S{R)Vi2Mtkm~hw z@0${P7FrO3Jvc*9(?0Gs ziz{=}iTsQp@nQ`V4F~}-R%(>BGMs7VB?dy7tjw{RaF!~VTZ!)5z}zf$5fc$Y2#S~K zm_0&FK$n2Xum}?C(kOu=DTtgJf~@Rjw;^Ui6CQ~QT*9^R!HIe2%@Sb@P zn`BvJWU!(##c_BoxWoqy!fjfM3>*YEK@qh0>H{IM*OU+?Dub6-BgUvc%sc^WDZ&at z2&5K9{FalZiwI0B5JE!CG>*j#?5wl|bKoKb6Eic{z|*ptu+qXHN;o@22%=964i^*$ znkJxrwNA*I>hcwcWP!?uG9l!?`-BWu5pq%T1&N@>a2X<^K#~##L99{dO-$H8hYZCI zX&_iYh!;VuC=umwR1zCcjAN z^*{7vaDPnDgT?qQ%=SkQdTpxln=Sh{GV>qYzmenw?}6-pO3IjL{1%|M*vkUwQ?TKF zbN@b_bp9WY8L#I4p_RKtHGYZ1lza34_#b73`{N()H+Qq&S%5Pt_LAU%dnyJL;eF;A zzh>58QZ4KKom(VaW#hE_-WozsB6REh`QB%l8oSf-B9M!H=X=e<;Vr-n3JO8@ z5N|_88K8^Oq~VV&^|Ckx>f{8>1me}CK_5C_Se9U+MRo!XM+j(3vQM~MkTo(OBpi-G z#T`2B{>Z}o8M$T?2i`T6T%zL~>0q`n(|+0sS~*)v8jD{K8X20&s&D%*lrpSR7Dre?)qgpU-Ln z!4XJ&OdOV_&D*`KtE`J8MxcaH2tGb$fmne>>(hW)C`KTen84tu5I!tgpf$M9y{ymR zlv%im2pmph&!-c{BC1U1URGF^SSSj7Mk4rhbg;}=X~27AfFpr~pm<|ZVZawhc%NnO zX>&6|2872T!!QDI8qjI?Q>V={HB6yEd@Py|3vR)M`J_`O8Bj196~?SX0gf}A|9Y4K zTO3Y7iP$~Nz)@hmRy6>EOrYOI2Gd{;1Und_A@jkB1%iILa1;bI?(U=S_hM5zWX3J!siL_#<^ zuw`%>;gsP7u-nAQTSlbG1mKLO43G%|Jzzt$yO?qp!wktB=u80^hTyx~MUc$cBl!aV z4T;eJ0u=IjxAZYJ$5Ya`R8r4F+wDI!GlVBQfD5Q-9dT`WhQ05Q|5LO@G0$v_}O3={KoS>Z?wGbOlwz>s(t4rpmH{a1y6prG6>1PbzE ztl0vz2fXA42~L2(kzJCVTnM`W|4saAGsvw7SrY7B0P0p5xLIpK?io%uU4(@}%HEeW=aCBrXG9U!MzqF^RN*PHI5*2__<-262cC z7<3}T9$%^h@tI^)Siq3*I6{W4Ng^Dg6A?%2gW%vH5Qxk~90mi+Nl63LD53kj1Fu`8*l0 zT8naKIP8)4rM&aPS>wo$_uBFYyT@*nD_lpPnNzwwjIf4>sTN@KpC}_rscvy7}_A1>a9TsR$bp_L_}M@NIJ$J}b&> zeS7P&aO&#SwBsLjUr&9wypYf5>v3(I&2Q!S4&;6_K#h2HaR=(+8fqi%K%YvVm`k0F z^jA-tuTE;#*>XBDJVUA{q)qF zQSS1ygbu-j%5`QFqLph}*Q8j|%SeJ)EgG+;~pr!a?`M{KSN~cf}SA zCntT=^YZr4eKK`FI|p>LbMnvM&(8aeeu@0L=iw|CX0a<#zQhrS?e-Li!^*}Ex?yDxvD9OQ>N$OU zd^{r@I9^FfNlBv75W_>4DRS*`=t+m5V_GA_1g)6e?(*~HUlNE9>gGo}eFG{dl|`Bk z$}TLFTrOECDT%u;Ee1jOZmcXJ3|JR3i;W!<84Yk8!=N2&VPQgMgovDEWt^Vbq4e0; z?{JxLSyYrj%azncw#f-*LlVEeQCM+pT1b35m=_)45Jt#y62+Ot3ar#ZFk1)@mthAj zl`J94Q#b>NfE^ad&k;$ig{VYG*PDg$vuJMWL-6`qMtdi4Po9ClvV~xQ-4J9;1<_*# zx?9YI;n!)#fF4Ci+_gZc0g|Dh;P2lLuZ5s)s`d#<3Ri*QV~AvfkoZp&5H+~^iBol4 zhuC?lx|`y#YSIgVwd5z*qDWwKJ`hk1jGok~hZ;4~8sf0yL2uRJlz^+07LsycKe$ny zIN{^)3P|n2Unc6qCgSP~P2^p7WOvt5Qc@u(s3~{HVc=Z@1v5s*G?rIG)8s1x#V2iR z$0Dm`=6NZI|G2$FTxRj*z}mX@UptXP9kys~G?V+vsZF*6eM!=LbkI0`m@ZK9^y2;; zwbN+7cU!AhomVn+Ll4P^RfD~d1f8NOnY-uAxgLGt)ItZ>9AWI6TCUH<4-!1yrb|N> zg^9=SI*Tsyd@sG-P+B9>dX@3QDK5&?V>fO&zpg9rkSH2h~)d)-$;zExSv z-C?Nf+Rstv`mO@@TDQ^dYIx9aimSFp$y>>h8s%DQW^K>?32h8limoT_K#})exK)uJ z$$WM7iQmW6wof54P#lS%`;oFZYE=F4tC#cJR{RB>cu$&-{U?4nwN>2uZtieuRX()l zn^+(5gNIT@ZLfsl8QuuZA<4A55NVl2Bx+I4Wo)M0@h!!)UmShJQPwf$F>ak<<9n+L zg;&BZ1ejcRubh20;*u_0r70`<^?8i#NV6+-tnTZ#U-YBJdZF~TFeB}~+^^VA_n2-sMkh`(O1e<#oPG9z+o?nU z#|@t=%?FI?mikY94MN6YU!)pm4V?SPEyrHrtNFPon={qN(+iiR$0`B?hnv}Fk^Ebmgr;;~(b50fuy_1=H5%!#sCrY69 z+qYRsY2kyRE1g)vG<3?aChU8LVOZ>6S1D2rPCNQP$4d$zIelJNY@c@yxq>?ve}a>V zx?#@b>#KWenV~d?Ce{XU-1Bu*DpwwqZQI*Vuji)Bk8t;GGu3Vg`8~PVP=2V#C4Qn_ z=+MCSj0W@Z_n~)|cc9_YFNI$N{Fol5n3h>zH=N<^@zQfmODunNsT3UyY1I14pZsy= z(CeYES8*DBk1UPr*Uy_@{Jd$%)caf&mzZLfxo_+Jjp|3m%KYA|G z^sX`H;lNcr>mLG}!YLDH4v9rper&kid;ajiqbLU2=V5G2x4GgtBsXJ<5rajy1Rg34 zUNN%WHx%b}vR0V8LMUjiU)|zz7KiiLF&kd%V7CV+wcH2IN3V|z(0a~F)KTDX zpB0+uvTCmKwpj2;v+zsFvG_k`g#LGSnp}U)#`SMzwEW-l$vSgd!c9J%*V`hU=}qog zLjE19#~lc*f=jez*tW_A7Cggklb>SQ*p-X^6P=hZ>0)`+n##h_8TpM=Ik$!}m!3sa zpU-E?S=QCZ9~bRsnLi|K3(r3aJ(y7ztEta78lH37qP!{Ia;+?Xj^)dy(DwXz%I2$_ zR3Fjfk(=68CL<;N@v_mDsWo8u+Ovp9&- zcH|AF$;)*^sMOvOL1Oxqb|CM$mZOTui;c}lOc821us>@4nnv*cX=2nYi;0oprpcyN zxgrwt4WaC^sDS$6yVrL0jHuMAN7gw3EK1VG+h4FI%@fBq~g;3**hP4-L74{HdQ)_HY&Vr{iN02 z<+iKp3-zeSj4ld|m4Pztm4aehOC0l(V{FS>Ylb&-_kBM4NdhkHKz(v7OW2qiL ziiT(LmhT z9ncvyJUD+xK^P-c`InDhSl8T~s*e>L|tsw^P6vXqnJYlqZAg2&!GR)#0|gOLcLh4#(>=Z)6GLe!EtXmA~`pPyAjw-Y+^O7UD0;Pm_%o^r@x_D`qiQ zxY{d~3`+g8?cleMdVjuYE{#ws-kVb{bjanm8M5{R`jKQd(bGy-y03Dr_TR2KfQrli zcBW3G>+!1{Xeg%sZwdbG>~D4U*wdH9FD?t&?OFcK{(Hb$bm%8OJJ6TVd!NKrp9>Su z6Y5hqzA0BFa%OeDTJw)CFv^w{^}Jx%U;jV#?7s=@Z~o8vrXc&wb6Lh&Had zQ9rNdLD8Ltt#duWce2O!f4bhMCwW;~}$^ZM}3O-eT&ST1e_2>B= zNM|~+Lp5nbJZtsQpBozeWjwgxDc?%8xD=4(v%R{_I@a?vpda;_XzwIYAvvM40~saX ze9Vvh{8ai-n6e$$qq22wd79^{FW+9c7{dL!`l0fYp?iPN64Mq_ds%4FW;NoSnZr3XG?vE?k`y^QC*J!%^E3G`G?ZLlQVx$`QvMmO}2ioG;=`yW@!UO84+xL&K zWH&f1$aW1cS`{br_&v2Zpn1+!UK2~7Qf{Rppe$M=r0qWFw^)&qF3fc|;A{}*0S9>V zTgm3?K~Fmgt^0MK`WB8*LC4=;p8oB=Q+bK*(HAK#tF`fW zdlt^5wI;UI)E1?uTqA6l$_RQtf4=GHaAF~U2hvrIpWJ~ctA2=DeLs+OlX!DYy}ev% zlT+F(r7$@i+441cF6&19VVyUoXBYWT*=Ez^e0XnMl(+V2U8egSZFu?{`s>oRxzFyG z&W3$UtJ=Qh$1^G}9hair{Iuy&<#8$ax#Vpwnqj~+{=)-=~5&}u|r1!z#@PqbW_Bl$rsQI(?V?3l6%cnhMjjWqa7bordcfsXqG#*>4X7tup*XynAc?@k9EJGLuEQ z$(U)G9<_$Y4IT~nS50AISsXOXb#lu4hhnGvL!!Ndp18ElpSRnAsPFaepH_O<%)qGY z&3;XhCLwuVZ*#xPkF$=FEN_-d&OOQaG4Rt|BIH4Lxt(0m3xmcj{LH%6iEwqgE#4`t zKh@RksOGap@dKncsQ%T>v{8SmM^f`5!_{MVxAq%s@Gevn_g!8=O%GK*4g8`zeai8g zP>0RNz8(fOkbk`);$xP5953(o@(ktSha$zCqWqXwrRV4`E6pp+V(E+3E2HhM)75S? z-~9STcD%cwa8@?yY<4Nfmt6hlNb6X}UV+E;@N+u-b&5+yRGzN3H{PY!e(rX4yTeWe zUMQp#AGBAWh`#cyu}ZBI4KO%H2)|b(FfZx7~ZJ_*dn+FUD4x zP2Jj`a&0TA?f|?>~z+V zSS0RweA9>F?#@`IgHy!z^u?*p)#S@ku)Ew<7*tEhEt{Kyi-(iDtu&fy zj6@ASguLIpEHg+mqOa$8gURj;Tiuxp>m@vIH}P55%VR@PG=G>n>!eKX?Yzj_)#!#NxZnuR;Mf3fO_qyImYE7An0)&BRA^t zocTH0Q@d`O8L!iQp-x<14Urc1rJlpJ>Gfsf%a3uD9DbZPsCsa1jr3?wJGSzp!BQ2e z=oF7T*3U2~&Eb|W4|^q)JC+1j`Qv#uuFQRq!Jr~E*OY1ey=;#QR}Nd*bBx-IFp7uj z>OW^bphf5p(a&{}=WuW8IW9IzIzu2Gwz8asOiM4%Ffh$M=}BoQdv`s|o|Bl|#d0 zz5d8b@odYM_wvr&?$x~_LKe+dR~5q}Ugue{6+It>KVn zmX1R{DuN7qX9?aBEHy&=FT4?&V0x;$op^(#+a)4w+_*YEVj@Fe?ebIlpmT=!{9 zA#(v;y|&Ex;)qQiSmJ~!Ze8@`$#mT3D-;r};G%;w_t5h4&}~MOK>?${8!`@TRcTU1 zJ6>kK!H^upEUg&Yq9{^+MaW>xIFDv7bDh-)jrP>7TM{*liwWV!Aa!)J=}~xmh>p$~ zG#VA6ht%>`mC5-~)n1mKc!U8&&!7@KNUR(mqF!pM7617Y`?3L z3bHap$Jj5HV}-+2wR|*K+ve!3a=StZCR&d}rd_@+(oS9rg@5x@-}o?wlQT|McK6iD zK(wTaw!f#;NkxBzt@vnB6!Oao>&2$!5S3i1MfR2#dt~DPVKt;bVUXU zqzRIg&PJ?6^raX_a(X~eA$%AlP{f17A0B@fTOb_g14dYKQAD2I)3M&sY=0mbq9}@e zD3>Ldg+Ur&V~`!sEk6bkIa3Z&W#dXCOwtPQFiHi_cX)QOG1M>_!-+hGZvw-gTveuMri>%;Kv2(_tne|t zilbB2Bt*C=J6<0o&xjnM{;}L+$yuMs@<=1+hreR+1?E-3=m{-X`U_xYxdORPU{?$E zzBz}4)E00&=XKx6Sx;Y!6KF1d{iXHWC*W?jFJOAL36tpkN?1OmgCaQ1lOWYrWLraL zuxKzfGTOZ?YRIvCX}&^cL4{-4E-F_Gl_vMtm*rbgi0~ttd6w_Vooe~k7sgntz_n$b zWi08GSyH>TT)y8N*I>dH_9h)^TUC86f19TUFJWc21C1P91Baavy0zf;n~bL( zi}kK0)HCC*8pZ0{lZG#?9&fd5?8{Um{G|JAu+Ta_NN8x-@JKq{?oYRHcYH`wMn*<< z{DJPLrL%fTBd-3m))#dI}gxkHU23&omNVv1XBvF4Zo4bI~5g7(xN~e|7G36^| zB=rbq22M5p=WW7m?sj@T3<&nMmP|4zl+p!bug#LOlZaE^Ro0S`VasH5)*jDZvXZ7q z;0H#aMMjf#2Au|lpC-JjlpgvDkwLi23*2Ug#R(?0cJ+1LTNRsdvni0n37i>7Yxf{{vKq__13iKv0An0k9Hh@|!V6^Y zFnJxlft!1_N!;zl#l_X(Lf}_tqP@M7C{75-f%O8}&Igjdt_Fpo{}+lI zINpO(w5b8F^!d@?JNmu%`Fp=NLueR^8KPj})i8le+af4gci-g0VK6wfqG~vQ4ECeV zK3W8#|0NAw9UDj;U%OV0AANo{)Z!0(cixUDm`&MOzuEj_SuB4SwzmT4f06n5Pi7Xk zY_2H{czu88=REc1B9GrgwVOvbRGxCau88Jnz{>2Iaz3c7C+p=bblHJl>#{r<`1!RS z-L|j}axc@fjBx64{M-nWJ3{1tWq`ZXqx93*bReE_5097GjmAng^X_4hmSHv={g~Uc|gk>o$&xkuz}J z?6Auu|EO?I6w&wkq<#FyqsFQ_-sm4cR&!LN!X}ubUw)PP%X)I&CUX3M@BHB5=Urc4 zl=uIz;j1p4P1io^3>HQj4Z$G_N@@x?HF-)hz~E?83KT}uj+s|lM&nYfiEXB59SfhV zR#3+LuT`Q@hlYi>Zpd+N93S+*`DR6SW9G-_)}e{Z?o zjKKix;*q!$$L`3%uSv{)K73~U@Lx}6ZeAF?V>hlUnM~JqSLkq59xXAC-Hhkbb%olG z-g*ynCsl@m%tKcz8Ut>TroH~6*8BiaPMieQqIN#-nI2~?gm#=35kurn642Js)X|J% zLtreIlPTI_%mYJiqYA2ZbJP4{S~=InKg(ee-4Ra;gv>cnAm#8>@EuUsSFNHzpOT@W?36KJsvfVmoTUhei9`zxAH3PB!;rv^IQ%%i7|Buvl&h!B3KfU>>){H-$AD%uZAb2-F_%MYG zbmvQ6vQ8<#yFwUKZUI*ZWpI62Enj_-<~OtHd{#Z6XA?l*=XZk;9K#XFRZy-Zto-Ok zOLw7V&B5W+RjIU^mu`LMj;*ZDWwkTaYz-dvs$p#YQLlrds zY)QUQh0U7HMsu)G{z-2B;`PJ%`5ntV3y&WWCx2M)>$Z^^9`e~>dQ-E0`ewq-+TLjW zFWz_T`XTB|4Xf|szfouZ)hMkDT{#kMzN}qvcn1OtB?-0?3`R*siJ;ia0C_8!q0qdh zb`%(CO_Nw=84cS@2$sw``lQXK^|G z35H4XciJ$H;`bH~$REXAKKetR-SESQlUz)ETBWoN;x4;~Qhdn)0sWXoo`-@>iH@N% z5uJ!6J|DhQ49p*577hr6xfsjpEC?)eEO0aiIbu!}Y888)7El4d!{E=DA4J`*)nZqe vSmF_!0B1=@mp1Ver~<8hu&6h3+M3ay6lHpHp4w2!ER*b4LHH66c6$C7n{xC@ literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/bottleRecord.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/bottleRecord.imageset/Contents.json new file mode 100755 index 0000000..5e913f6 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/bottleRecord.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "bottleRecord@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/bottleRecord.imageset/bottleRecord@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/bottleRecord.imageset/bottleRecord@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..47a7cf70a58f3e77743bc11380827eea3cf74d3a GIT binary patch literal 6951 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconBottle.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconBottle.imageset/Contents.json new file mode 100755 index 0000000..c9e472f --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconBottle.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "ff_IconBottle.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "ff_IconBottle@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x", + "filename" : "ff_IconBottle@3x.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconBottle.imageset/ff_IconBottle.png b/SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconBottle.imageset/ff_IconBottle.png new file mode 100755 index 0000000000000000000000000000000000000000..7e97c06ef019d0c7e2f12da98b3d47569c937e6c GIT binary patch literal 1092 zcmV-K1iSl*P)P000>X1^@s6#OZ}&000CFNkl>H5JZ`R6(9J@@~6 z&UxDNkSEtxhVxqf+0*6%(!OmB2ihA+p&kVY8MDtel?Crt4dY03~c|AzblAn#|m_V9*bY%VoQJOvwq! z@`|GCC&~Gni0KAmIUv#Oz}uCB2+C`E?ZHm3>Uo27Fr74h^=ft{P(j5D9xATd}0E` zq=>dzglPKllB{0f9zfmy=q8N~DW*B3TFI~r_{a!^k-|H9P`VA+Q8$cWrR4*+AVEy8 zT%;REmYoa<@Uaun!D}}`q6i}GB}n~M1eSD)Rt(s{SS8ylFF|H^Kw{=ic>rHcL??eI z(Z&UAV(oZpXQI!_02=$#!R!Tm#myt74-j>d@qJbBmBn^D@Osr{_~)ILt@zRdR5ryP z{p3HiiH{@cyU#daXY(Z1=eN|*E8e74{~e&VfAMDZ5X~b8;>|z=51~qEU)H85!yRm3 z2k=akENDgljh8h8fYz|4V#s6deSo5(qIGJu1_l#{(Wx7ln7xgm@d+3?3yzkTBfa>@boend_MW?m z`0jfUx6dJ>ywhoh<}-SX-+AbG|DJo3ceNAd@9!TFA0MAd zhE)XB(y3XhIKj`)??rn41c}=6U~AQqiT6?~o?J3s!yn>*vi<_z$>F}AMkIUy0000< KMNUMnLSTZ|dIQJ+ literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconBottle.imageset/ff_IconBottle@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconBottle.imageset/ff_IconBottle@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..957ab771f1021d95e46670a4f1fc4f0cb187dbde GIT binary patch literal 973 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconQRCode.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconQRCode.imageset/Contents.json new file mode 100755 index 0000000..6a38b9c --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconQRCode.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "ff_IconQRCode.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "ff_IconQRCode@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x", + "filename" : "ff_IconQRCode@3x.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconQRCode.imageset/ff_IconQRCode.png b/SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconQRCode.imageset/ff_IconQRCode.png new file mode 100755 index 0000000000000000000000000000000000000000..27c11c2ff517e749b666ed2f5cf3819a589fb67b GIT binary patch literal 1080 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 O0000k5i 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconShowAlbum.imageset/ff_IconShowAlbum@2x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconShowAlbum.imageset/ff_IconShowAlbum@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..cbcaae4c97e8257e8910aca7965ec406ea08f84f GIT binary patch literal 1462 zcmV;n1xfmeP)~e zDr!3&#>AK7h=l#uOI5pN9h#sJ0boRzWBc6)qYIN6&px1PSIo4wdC`KP^D zmgl$UeV+Fn%rL_Y)5mpL&P&L0MM8G&ip$bL`aG4WbVcd&T0(Z6iObIRkxFMhZgH-{ znwnh5Hjv_&?vgN_K(>L^)dkdn-$g|{e(i+E)3^BlDZXiej1BqSxYxQ22$bao zB-0}zQs>o1-9Bx^?Nx)jcVq7K2m~H0#K!!SB!MjS{RTG8F9!m*ZhbT%OJNa_IOoGd(*tl>l5Li|9FwM(P!Xgyv%%I!fziEmjEH7b$Wta=x z8_P{>vQz-UHWGEFOGJc68})9BNtu<{W8Fl>j#6;aG+Ksm&w>p=U~O#<$(#@tq0rn6 z`+VBU%t*YoXbBZKm{Ni#j!pSaeF4m+WA>GZ2$xa&cI+4|G$(Ojc`g;!OTjdgB>C#Q z%ONm_F2XN_M0jUTniFZ9A52?QHOY#C%5^pI>dDngx5>-=gt5L@;S z7P^`THfEQMOM2UY$W8aQfwe%?9EdG+wrH1~E&U1@0e@Na0G_j=P{Ou1APrJnh(mS0 zSOpL-w+>jG&1ytyR*^*xT+d4_a=zf{v<1#vM@hmDf{cHnXmPJs+WfZdPd#Wr#CF=CL;}Os%|K*MWWWtXZ3pJiaq7BPfOkYa zWnf0ER}CDeIED)(;FuPnx!4JW+=+9k6DP(C@VHvEsF99DCzr4dQzu>ko%V>M0Zc-7 z#U3C6r*RIg*smuN;2qJf8R&@Z`-w$tL$uYNACpk*JA)DX2$+X;Vm2L_&QuaCu4eU2 zYLTg zid!L@V4DdqSeNlml&+!SjAWFxjB`btQxXhOxEWclusbWVYZHXiJ7j$ACm?5N;wuy@HlzbDo zvMxuT8HsY+xCq{&lz~|~QJzglEFvhvqm+E-`Mdlw2qlpzD17^N=02$`bu($YM7 zmi!|s!jD>Bnpx9LCrr62ovDU65%yx>wAjr%A7{2%nj=oBS+`e7jv zJ~I)Y;#jE9%u?z?H+5(;OgEp>UzC=>A(Ba^Ey6ok literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconShowAlbum.imageset/ff_IconShowAlbum@3x.png b/SDAutoLayoutDemo/Images/Discover.xcassets/ff_IconShowAlbum.imageset/ff_IconShowAlbum@3x.png new file mode 100755 index 0000000000000000000000000000000000000000..302a0bcebf950c7864dc449962c1bc1b5160f1ac GIT binary patch literal 2115 zcmV-J2)y@+P)002t}1^@s6I8J)%000OINklscQilLxTzN5o6@u>L#|`j;D#{^xi4nw)b~8o1WyGEu&p? zKb+tB{dx;5U-`;czVekXLkohz5xoz&t?`AP+hYqn-k2zC!5qPK$3;QL^u17PFDGU3kvSrT1ipPy`kz@@wAy zj6|^Ae6c7}WwgeOVSZ0`P!t4Prdg5&u@d(#zF3rsWy(T+P{Av0cs%&c2q;R?ql3Ua z!VaET6lGv(rQ$Lks&Q^1URaNTP?XxqE3|hcl6M+7Vo`ibwDmgIZ&misz&_Cn!p7Q9uip5QWX$vAjx5THb3l1Ph^d@rI%ltznu< zl(-vsVbO6S`jG**U3=!%#Y*Kn^m7#E8y5PFg)$k2B6)#(x4@|K7Fj@ZRe=!&c~7sFae=HOF|{% zc`7k)_VIdTDR0T^Z@ddbCs8c>pBK;j96n#TK)S-DJIY9N}U%(>_ z%VaEq^2A7?35-2kHz>VOU? zz|L#dd2FzJkR{YbIBvO@QJIhBkFHiNy%rdS!+f7EC=AZCBRXf6^-ShimOeOUyPHv& zjwSizTFo#o6hcZXVd%k9y7ex@z6?967w6QSETx*muC-=jA=J7-P<8U#1fjdLWWAkr zAp@*mahTu1QmQH9T#vbE8kS#Co#=yyU?g7j8-$=g2;8T)vrebE>nS+QZ&h_v#8KN6 zc0hC3kzi&P&8PyLQLm>BMa%Gv-nTl3(}0qpbJ|VnrRQ9ogd(gVfC?$ErjJDNgraRa z&so++ox}VWT(UQ+m!4~75^1Qgf&e41qjqErMV+-xXJ^^Ubqw>Lp=0{>ETy)D9gh(d zVVMdQQeMgii8@QJ(b-wHTmA#;C+M7UtqLmQtRf^cvFMW^9OhfHMN0cN4SeFf;u16J z2V8#FsAkj&ho68<#v-W3?2#y9oov_r;{S5i`VM!!+3H=-DdEmHFqBwAy|URDB#PA7 zS(wJnKkIhQ(mM~I&v2r55YN$0~&5l26vq=D5{4BoIkhdx1} z^Hv=kn?6Hxjw&Un%&`8-CYH;!<)m|A^5O|2D=hFv>EzdlUE5%VP~8WjKHFJyX=jFz*=D)duISl&AVXFe)*kn9wh)n zu_%$^tw9Km(0~O@gW3Zv%!u0BJ=?~wvnaSrzWfhhtN3F<0=w!8W>hstT(w-WXi2`( z0%Cy%Yz1d5V~;Y)3&8H`;fh5a_F53;jby2{2Oi}F^)+7HC}wnR`|9ee=+w>$i@y zD9sF$vIc8~dd9uz)=UF$ECMUuSAEtsS_8HeyR1J$sGZF0{~3lm(+$=NYuQj0?UJ+ZMVMZ$SdJ!~J$V#BREahu0a zc{b2nBMw+}(*L-od-ep)u|hB=p*wH3+*?SP955LOzXQw6H`J}M3S?Y3n tD^EFY!(Gr44B|bneB~=&`O4QN>rca@9%+HxUFrY;002ovPDHLkV1g9{_VEA! literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/game_tag_icon.imageset/1.png b/SDAutoLayoutDemo/Images/Discover.xcassets/game_tag_icon.imageset/1.png new file mode 100755 index 0000000000000000000000000000000000000000..cbcfe3f952940eef0738abe4852561a0397b6508 GIT binary patch literal 435044 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∈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 (vb}w6kQ-R|Spdi0RR5jVPyuq`q3KePW2{ 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

?HMSx61$H?reJIHIAHwB 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 aYL8LrzUnP`s!CT=J9Wb28@%(yfBqXJA?#xS literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Images/Discover.xcassets/game_tag_icon.imageset/Contents.json b/SDAutoLayoutDemo/Images/Discover.xcassets/game_tag_icon.imageset/Contents.json new file mode 100755 index 0000000..d036d40 --- /dev/null +++ b/SDAutoLayoutDemo/Images/Discover.xcassets/game_tag_icon.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "1.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSAttributedString+MLLabel.h b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSAttributedString+MLLabel.h new file mode 100644 index 0000000..1d8e541 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSAttributedString+MLLabel.h @@ -0,0 +1,16 @@ +// +// NSAttributedString+MLLabel.h +// Pods +// +// Created by molon on 15/6/13. +// +// + +#import +#import + +@interface NSAttributedString (MLLabel) + ++ (instancetype)attributedStringWithHTML:(NSString*)htmlString; + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSAttributedString+MLLabel.m b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSAttributedString+MLLabel.m new file mode 100644 index 0000000..202764c --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSAttributedString+MLLabel.m @@ -0,0 +1,39 @@ +// +// NSAttributedString+MLLabel.m +// Pods +// +// Created by molon on 15/6/13. +// +// + +#import "NSAttributedString+MLLabel.h" + +@implementation NSAttributedString (MLLabel) + ++ (instancetype)attributedStringWithHTML:(NSString*)htmlString +{ + NSData* htmlData = [htmlString dataUsingEncoding:NSUTF8StringEncoding]; + if (htmlData) { + __block id attributedString = nil; + dispatch_block_t block = ^{ + attributedString = [[self alloc] initWithData:htmlData + options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, + NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)} + documentAttributes:nil + error:NULL]; + }; + + //这个解析必须在主线程执行,文档上要求的 + if ([NSThread isMainThread]) { + block(); + }else{ + dispatch_sync(dispatch_get_main_queue(), block); + } + + return attributedString; + } + + return nil; +} + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSMutableAttributedString+MLLabel.h b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSMutableAttributedString+MLLabel.h new file mode 100644 index 0000000..8d68b3f --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSMutableAttributedString+MLLabel.h @@ -0,0 +1,17 @@ +// +// NSMutableAttributedString+MLLabel.h +// MLLabel +// +// Created by molon on 15/6/5. +// Copyright (c) 2015年 molon. All rights reserved. +// + +#import + +@interface NSMutableAttributedString (MLLabel) + +- (void)removeAllNSOriginalFontAttributes; + +- (void)removeAttributes:(NSArray *)names range:(NSRange)range; + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSMutableAttributedString+MLLabel.m b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSMutableAttributedString+MLLabel.m new file mode 100644 index 0000000..49bbdb5 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSMutableAttributedString+MLLabel.m @@ -0,0 +1,29 @@ +// +// NSMutableAttributedString+MLLabel.m +// MLLabel +// +// Created by molon on 15/6/5. +// Copyright (c) 2015年 molon. All rights reserved. +// + +#import "NSMutableAttributedString+MLLabel.h" + +@implementation NSMutableAttributedString (MLLabel) + +- (void)removeAllNSOriginalFontAttributes +{ + [self enumerateAttribute:@"NSOriginalFont" inRange:NSMakeRange(0, self.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) { + if (value){ + [self removeAttribute:@"NSOriginalFont" range:range]; + } + }]; +} + + +- (void)removeAttributes:(NSArray *)names range:(NSRange)range +{ + for (NSString *name in names) { + [self removeAttribute:name range:range]; + } +} +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSString+MLLabel.h b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSString+MLLabel.h new file mode 100644 index 0000000..dc1bcbf --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSString+MLLabel.h @@ -0,0 +1,24 @@ +// +// NSString+MLLabel.h +// Pods +// +// Created by molon on 15/6/13. +// +// + +#import + +@interface NSString (MLLabel) + +//这个只是由于换行符的原因所必须有的行数 +- (NSUInteger)lineCount; + +//拿到某行之前的字符串 +- (NSString*)subStringToLineIndex:(NSUInteger)lineIndex; + +//拿到某行之前的字符串的长度 +- (NSUInteger)lengthToLineIndex:(NSUInteger)lineIndex; + +//是否最后字符属于换行符 +- (BOOL)isNewlineCharacterAtEnd; +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSString+MLLabel.m b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSString+MLLabel.m new file mode 100644 index 0000000..233c5c8 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Category/NSString+MLLabel.m @@ -0,0 +1,76 @@ +// +// NSString+MLLabel.m +// Pods +// +// Created by molon on 15/6/13. +// +// + +#import "NSString+MLLabel.h" + +@implementation NSString (MLLabel) + +- (NSUInteger)lineCount +{ + if (self.length<=0) { return 0; } + + NSUInteger numberOfLines, index, stringLength = [self length]; + for (index = 0, numberOfLines = 0; index < stringLength; numberOfLines++) { + index = NSMaxRange([self lineRangeForRange:NSMakeRange(index, 0)]); + } + + if ([self isNewlineCharacterAtEnd]) { + return numberOfLines+1; + } + + return numberOfLines; +} + +- (BOOL)isNewlineCharacterAtEnd +{ + if (self.length<=0) { + return NO; + } + //检查最后是否有一个换行符 + NSCharacterSet *separator = [NSCharacterSet newlineCharacterSet]; + NSRange lastRange = [self rangeOfCharacterFromSet:separator options:NSBackwardsSearch]; + return (NSMaxRange(lastRange) == self.length); +} + +- (NSString*)subStringToLineIndex:(NSUInteger)lineIndex +{ + NSUInteger index = [self lengthToLineIndex:lineIndex]; + + return [self substringToIndex:index]; +} + +- (NSUInteger)lengthToLineIndex:(NSUInteger)lineIndex +{ + if (self.length<=0) { + return 0; + } + + NSUInteger numberOfLines, index, stringLength = [self length]; + for (index = 0, numberOfLines = 0; index < stringLength; numberOfLines++) { + NSRange lineRange = [self lineRangeForRange:NSMakeRange(index, 0)]; + index = NSMaxRange(lineRange); + + if (numberOfLines==lineIndex) { + NSString *lineString = [self substringWithRange:lineRange]; + if (![lineString isNewlineCharacterAtEnd]) { + return index; + } + //把这行对应的换行符给忽略 + if (NSMaxRange([lineString rangeOfString:@"\r\n"])==lineString.length) { + return index-2; + } + + return index - 1; + } + } + + return 0; +} + + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/MLExpressionManager.h b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/MLExpressionManager.h new file mode 100644 index 0000000..74c00ab --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/MLExpressionManager.h @@ -0,0 +1,32 @@ +// +// MLExpressionManager.h +// Pods +// +// Created by molon on 15/6/18. +// +// + +#import + +@interface MLExpression : NSObject + +@property (readonly, nonatomic, copy) NSString *regex; +@property (readonly, nonatomic, copy) NSString *plistName; +@property (readonly, nonatomic, copy) NSString *bundleName; + ++ (instancetype)expressionWithRegex:(NSString*)regex plistName:(NSString*)plistName bundleName:(NSString*)bundleName; + +@end + +@interface MLExpressionManager : NSObject + ++ (instancetype)sharedInstance; + +//获取对应的表情attrStr ++ (NSAttributedString*)expressionAttributedStringWithString:(id)string expression:(MLExpression*)expression; +//给一个str数组,返回其对应的表情attrStr数组,顺序一致 ++ (NSArray *)expressionAttributedStringsWithStrings:(NSArray*)strings expression:(MLExpression*)expression; +//同上,但是以回调方式返回 ++ (void)expressionAttributedStringsWithStrings:(NSArray*)strings expression:(MLExpression*)expression callback:(void(^)(NSArray *result))callback; + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/MLExpressionManager.m b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/MLExpressionManager.m new file mode 100644 index 0000000..340c2c8 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/MLExpressionManager.m @@ -0,0 +1,273 @@ +// +// MLExpressionManager.m +// Pods +// +// Created by molon on 15/6/18. +// +// + +#import "MLExpressionManager.h" +#import "MLTextAttachment.h" + +/* + 如果设置高于1.00f的话,会引起 有表情行的行距 显得比 没表情行的行距 多,显得不工整 + https://github.com/molon/MLLabel/issues/1 + 所以我们还是设置为1.00f,至于怎么解决这个问题,请参考Demo里的ClipExpressionViewController + */ +#define kExpressionLineHeightMultiple 1.00f + +@interface MLExpression() + +@property (nonatomic, copy) NSString *regex; +@property (nonatomic, copy) NSString *plistName; +@property (nonatomic, copy) NSString *bundleName; + +@property (nonatomic, strong) NSRegularExpression *expressionRegularExpression; +@property (nonatomic, strong) NSDictionary *expressionMap; + +- (BOOL)isValid; + +@end + +@interface MLExpressionManager() + +@property (nonatomic, strong) NSMutableDictionary *expressionMapRecords; +@property (nonatomic, strong) NSMutableDictionary *expressionRegularExpressionRecords; + +@end + +@implementation MLExpressionManager + ++ (instancetype)sharedInstance { + static MLExpressionManager *_sharedInstance = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _sharedInstance = [[[self class] alloc]init]; + }); + return _sharedInstance; +} + +#pragma mark - getter +- (NSMutableDictionary *)expressionMapRecords +{ + if (!_expressionMapRecords) { + _expressionMapRecords = [NSMutableDictionary new]; + } + return _expressionMapRecords; +} + +- (NSMutableDictionary *)expressionRegularExpressionRecords +{ + if (!_expressionRegularExpressionRecords) { + _expressionRegularExpressionRecords = [NSMutableDictionary new]; + } + return _expressionRegularExpressionRecords; +} + +#pragma mark - common +- (NSDictionary*)expressionMapWithPlistName:(NSString*)plistName +{ + NSAssert(plistName&&plistName.length>0, @"expressionMapWithRegex:参数不得为空"); + + if (self.expressionMapRecords[plistName]) { + return self.expressionMapRecords[plistName]; + } + + NSString *plistPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:plistName]; + NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:plistPath]; + NSAssert(dict,@"表情字典%@找不到,请注意大小写",plistName); + self.expressionMapRecords[plistName] = dict; + + return self.expressionMapRecords[plistName]; +} + +- (NSRegularExpression*)expressionRegularExpressionWithRegex:(NSString*)regex +{ + NSAssert(regex&®ex.length>0, @"expressionRegularExpressionWithRegex:参数不得为空"); + + if (self.expressionRegularExpressionRecords[regex]) { + return self.expressionRegularExpressionRecords[regex]; + } + + NSRegularExpression *re = [[NSRegularExpression alloc] initWithPattern:regex options:NSRegularExpressionCaseInsensitive error:nil]; + + NSAssert(re,@"正则%@有误",regex); + self.expressionRegularExpressionRecords[regex] = re; + + return self.expressionRegularExpressionRecords[regex]; +} + +//多线程转表情attrStr ++ (NSArray *)expressionAttributedStringsWithStrings:(NSArray*)strings expression:(MLExpression*)expression +{ + NSMutableDictionary *results = [NSMutableDictionary dictionaryWithCapacity:strings.count]; + + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + dispatch_group_t group = dispatch_group_create(); + for (id str in strings) { + dispatch_group_async(group, queue, ^{ + NSAttributedString *result = [MLExpressionManager expressionAttributedStringWithString:str expression:expression]; + + @synchronized(results){ + results[str] = result; + } + }); + } + dispatch_group_wait(group, DISPATCH_TIME_FOREVER); + + //重新排列 + NSMutableArray *resultArr = [NSMutableArray arrayWithCapacity:results.count]; + for (id str in strings) { + [resultArr addObject:results[str]]; + } + + return resultArr; +} + ++ (void)expressionAttributedStringsWithStrings:(NSArray*)strings expression:(MLExpression*)expression callback:(void(^)(NSArray *result))callback +{ + NSMutableDictionary *results = [NSMutableDictionary dictionaryWithCapacity:strings.count]; + + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + dispatch_group_t group = dispatch_group_create(); + for (id str in strings) { + dispatch_group_async(group, queue, ^{ + NSAttributedString *result = [MLExpressionManager expressionAttributedStringWithString:str expression:expression]; + + @synchronized(results){ + results[str] = result; + } + }); + } + + dispatch_group_notify(group, queue, ^{ + //重新排列 + NSMutableArray *resultArr = [NSMutableArray arrayWithCapacity:results.count]; + for (id str in strings) { + [resultArr addObject:results[str]]; + } + dispatch_async(dispatch_get_main_queue(), ^{ + if (callback) { + callback(resultArr); + } + }); + }); +} + ++ (NSAttributedString*)expressionAttributedStringWithString:(id)string expression:(MLExpression*)expression { + NSAssert(expression&&[expression isValid], @"expression invalid"); + NSAssert([string isKindOfClass:[NSString class]]||[string isKindOfClass:[NSAttributedString class]], @"string非字符串. %@",string); + + NSAttributedString *attributedString = nil; + if ([string isKindOfClass:[NSString class]]) { + attributedString = [[NSAttributedString alloc]initWithString:string]; + }else{ + attributedString = string; + } + + if (attributedString.length<=0) { + return attributedString; + } + + NSMutableAttributedString *resultAttributedString = [NSMutableAttributedString new]; + + //处理表情 + NSArray *results = [expression.expressionRegularExpression matchesInString:attributedString.string + options:NSMatchingWithTransparentBounds + range:NSMakeRange(0, [attributedString length])]; + //遍历表情,然后找到对应图像名称,并且处理 + NSUInteger location = 0; + for (NSTextCheckingResult *result in results) { + NSRange range = result.range; + NSAttributedString *subAttrStr = [attributedString attributedSubstringFromRange:NSMakeRange(location, range.location - location)]; + //先把非表情的部分加上去 + [resultAttributedString appendAttributedString:subAttrStr]; + + //下次循环从表情的下一个位置开始 + location = NSMaxRange(range); + + NSAttributedString *expressionAttrStr = [attributedString attributedSubstringFromRange:range]; + NSString *imageName = expression.expressionMap[expressionAttrStr.string]; + if (imageName.length>0) { + //加个表情到结果中 + NSString *imagePath = [expression.bundleName stringByAppendingPathComponent:imageName]; + UIImage *image = [UIImage imageNamed:imagePath]; + + MLTextAttachment *textAttachment = [MLTextAttachment textAttachmentWithLineHeightMultiple:kExpressionLineHeightMultiple imageBlock:^UIImage *(CGRect imageBounds, NSTextContainer *textContainer, NSUInteger charIndex, MLTextAttachment *textAttachment) { + return image; + } imageAspectRatio:image.size.width/image.size.height]; + [resultAttributedString appendAttributedString:[NSAttributedString attributedStringWithAttachment:textAttachment]]; + }else{ + //找不到对应图像名称就直接加上去 + [resultAttributedString appendAttributedString:expressionAttrStr]; + } + } + + if (location < [attributedString length]) { + //到这说明最后面还有非表情字符串 + NSRange range = NSMakeRange(location, [attributedString length] - location); + NSAttributedString *subAttrStr = [attributedString attributedSubstringFromRange:range]; + [resultAttributedString appendAttributedString:subAttrStr]; + } + + return resultAttributedString; +} + +@end + + + +@implementation MLExpression + +- (BOOL)isValid +{ + return self.expressionRegularExpression&&self.expressionMap&&self.bundleName.length>0; +} + ++ (instancetype)expressionWithRegex:(NSString*)regex plistName:(NSString*)plistName bundleName:(NSString*)bundleName +{ + MLExpression *expression = [MLExpression new]; + expression.regex = regex; + expression.plistName = plistName; + expression.bundleName = bundleName; + NSAssert([expression isValid], @"此expression无效,请检查参数"); + return expression; +} + +#pragma mark - setter +- (void)setRegex:(NSString *)regex +{ + NSAssert(regex.length>0, @"regex length must >0"); + _regex = regex; + + self.expressionRegularExpression = [[MLExpressionManager sharedInstance]expressionRegularExpressionWithRegex:regex]; +} + +- (void)setPlistName:(NSString *)plistName +{ + + NSAssert(plistName.length>0, @"plistName's length must >0"); + + + if (![[plistName lowercaseString] hasSuffix:@".plist"]) { + plistName = [plistName stringByAppendingString:@".plist"]; + } + + _plistName = plistName; + + self.expressionMap = [[MLExpressionManager sharedInstance]expressionMapWithPlistName:plistName]; +} + +- (void)setBundleName:(NSString *)bundleName +{ + if (![[bundleName lowercaseString] hasSuffix:@".bundle"]) { + bundleName = [bundleName stringByAppendingString:@".bundle"]; + } + + _bundleName = bundleName; + //TODO: 这个最好验证下存在性,后期搞 +} + + +@end + diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/MLTextAttachment.h b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/MLTextAttachment.h new file mode 100644 index 0000000..bce8cf1 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/MLTextAttachment.h @@ -0,0 +1,32 @@ +// +// MLTextAttachment.h +// MLLabel +// +// Created by molon on 15/6/11. +// Copyright (c) 2015年 molon. All rights reserved. +// + +#import + +@interface MLTextAttachment : NSTextAttachment + +@property (readonly, nonatomic, assign) CGFloat width; +@property (readonly, nonatomic, assign) CGFloat height; + +/** + * 优先级比上面的高,以lineHeight为根据来决定高度 + * 宽度根据imageAspectRatio来定 + */ +@property (readonly, nonatomic, assign) CGFloat lineHeightMultiple; + +/** + * image.size.width/image.size.height + */ +@property (readonly, nonatomic, assign) CGFloat imageAspectRatio; + ++ (instancetype)textAttachmentWithWidth:(CGFloat)width height:(CGFloat)height imageBlock:(UIImage * (^)(CGRect imageBounds,NSTextContainer *textContainer,NSUInteger charIndex,MLTextAttachment *textAttachment))imageBlock; + ++ (instancetype)textAttachmentWithLineHeightMultiple:(CGFloat)lineHeightMultiple imageBlock:(UIImage * (^)(CGRect imageBounds,NSTextContainer *textContainer,NSUInteger charIndex,MLTextAttachment *textAttachment))imageBlock + imageAspectRatio:(CGFloat)imageAspectRatio; + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/MLTextAttachment.m b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/MLTextAttachment.m new file mode 100644 index 0000000..98efbe6 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/MLTextAttachment.m @@ -0,0 +1,101 @@ +// +// MLTextAttachment.m +// MLLabel +// +// Created by molon on 15/6/11. +// Copyright (c) 2015年 molon. All rights reserved. +// + +#import "MLTextAttachment.h" + +@interface MLTextAttachment() + +@property (nonatomic, assign) CGFloat width; +@property (nonatomic, assign) CGFloat height; + +@property (nonatomic, assign) CGFloat lineHeightMultiple; +@property (nonatomic, assign) CGFloat imageAspectRatio; + +@property (nonatomic, copy) UIImage * (^imageBlock)(CGRect imageBounds,NSTextContainer *textContainer,NSUInteger charIndex,MLTextAttachment *textAttachment); + +@end + +@implementation MLTextAttachment + ++ (instancetype)textAttachmentWithWidth:(CGFloat)width height:(CGFloat)height imageBlock:(UIImage * (^)(CGRect imageBounds,NSTextContainer *textContainer,NSUInteger charIndex,MLTextAttachment *textAttachment))imageBlock +{ + MLTextAttachment *textAttachment = [MLTextAttachment new]; + textAttachment.width = width; + textAttachment.height = height; + textAttachment.imageBlock = imageBlock; + return textAttachment; +} + ++ (instancetype)textAttachmentWithLineHeightMultiple:(CGFloat)lineHeightMultiple imageBlock:(UIImage * (^)(CGRect imageBounds,NSTextContainer *textContainer,NSUInteger charIndex,MLTextAttachment *textAttachment))imageBlock + imageAspectRatio:(CGFloat)imageAspectRatio +{ + MLTextAttachment *textAttachment = [MLTextAttachment new]; + textAttachment.lineHeightMultiple = lineHeightMultiple; + textAttachment.imageBlock = imageBlock; + textAttachment.imageAspectRatio = imageAspectRatio; + return textAttachment; +} + +//重写以绘制 +- (UIImage *)imageForBounds:(CGRect)imageBounds textContainer:(NSTextContainer *)textContainer characterIndex:(NSUInteger)charIndex +{ + if (self.imageBlock) + { + return self.imageBlock(imageBounds,textContainer,charIndex,self); + } + + return [super imageForBounds:imageBounds textContainer:textContainer characterIndex:charIndex]; +} + +//重写以返回附件的大小 +- (CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex +{ + if (self.imageBlock) + { + CGFloat width = self.width; + CGFloat height = self.height; + + // 找到其是否有设置字体,如果有,就根据字体的descender调整下位置,以及lineHeight调整大小 + UIFont *font = [textContainer.layoutManager.textStorage attribute:NSFontAttributeName + atIndex:charIndex + effectiveRange:nil]; + CGFloat baseLineHeight = (font?font.lineHeight:lineFrag.size.height); + + if (self.lineHeightMultiple>0) { + width = height = baseLineHeight*self.lineHeightMultiple; + if (self.imageAspectRatio>0) { + width = height*self.imageAspectRatio; + } + }else{ + if (width==0&&height==0) { + width = height = lineFrag.size.height; + }else if (width==0&&height!=0) { + width = height; + }else if (height==0&&width!=0) { + height = width; + } + } + + CGFloat y = font.descender; + y -= (height-baseLineHeight)/2; + + return CGRectMake(0, y, width, height); + + } + + return [super attachmentBoundsForTextContainer:textContainer proposedLineFragment:lineFrag glyphPosition:position characterIndex:charIndex]; +} + +#pragma mark - setter +- (void)setLineHeightMultiple:(CGFloat)lineHeightMultiple +{ + NSAssert(lineHeightMultiple>0, @"lineHeightMultiple必须大于0"); + + _lineHeightMultiple = lineHeightMultiple; +} +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/NSAttributedString+MLExpression.h b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/NSAttributedString+MLExpression.h new file mode 100644 index 0000000..43794e2 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/NSAttributedString+MLExpression.h @@ -0,0 +1,15 @@ +// +// NSAttributedString+MLExpression.h +// Pods +// +// Created by molon on 15/6/18. +// +// + +#import +#import "MLExpressionManager.h" + +@interface NSAttributedString (MLExpression) + +- (NSAttributedString*)expressionAttributedStringWithExpression:(MLExpression*)expression; +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/NSAttributedString+MLExpression.m b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/NSAttributedString+MLExpression.m new file mode 100644 index 0000000..4165f15 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/NSAttributedString+MLExpression.m @@ -0,0 +1,19 @@ +// +// NSAttributedString+MLExpression.m +// Pods +// +// Created by molon on 15/6/18. +// +// + +#import "NSAttributedString+MLExpression.h" + +@implementation NSAttributedString (MLExpression) + + +- (NSAttributedString*)expressionAttributedStringWithExpression:(MLExpression*)expression +{ + return [MLExpressionManager expressionAttributedStringWithString:self expression:expression]; +} + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/NSString+MLExpression.h b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/NSString+MLExpression.h new file mode 100644 index 0000000..410c076 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/NSString+MLExpression.h @@ -0,0 +1,16 @@ +// +// NSString+MLExpression.h +// Pods +// +// Created by molon on 15/6/18. +// +// + +#import +#import "MLExpressionManager.h" + +@interface NSString (MLExpression) + +- (NSAttributedString*)expressionAttributedStringWithExpression:(MLExpression*)expression; + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/NSString+MLExpression.m b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/NSString+MLExpression.m new file mode 100644 index 0000000..33ba99f --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Expression/NSString+MLExpression.m @@ -0,0 +1,18 @@ +// +// NSString+MLExpression.m +// Pods +// +// Created by molon on 15/6/18. +// +// + +#import "NSString+MLExpression.h" + +@implementation NSString (MLExpression) + +- (NSAttributedString*)expressionAttributedStringWithExpression:(MLExpression*)expression; +{ + return [MLExpressionManager expressionAttributedStringWithString:self expression:expression]; +} + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Helper/MLLabel+Override.h b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Helper/MLLabel+Override.h new file mode 100644 index 0000000..93dda88 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Helper/MLLabel+Override.h @@ -0,0 +1,33 @@ +// +// MLLabel+Override.h +// MLLabel +// +// Created by molon on 15/6/6. +// Copyright (c) 2015年 molon. All rights reserved. +// + +#import "MLLabel.h" + +@class MLLabelLayoutManager; +@interface MLLabel (Override) + +@property (nonatomic, strong) NSTextStorage *textStorage; +@property (nonatomic, strong) MLLabelLayoutManager *layoutManager; +@property (nonatomic, strong) NSTextContainer *textContainer; + +@property (nonatomic, strong) NSAttributedString *lastAttributedText; +@property (nonatomic, assign) MLLastTextType lastTextType; + +//初始化 +- (void)commonInit; + +//复写这个可以最终文本改变 +- (NSMutableAttributedString*)attributedTextForTextStorageFromLabelProperties; + +//获取绘制起点 +- (CGPoint)textOffsetWithTextSize:(CGSize)textSize; + +//可以完全重绘当前label +- (void)reSetText; + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Helper/MLLabelLayoutManager.h b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Helper/MLLabelLayoutManager.h new file mode 100644 index 0000000..abf2668 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Helper/MLLabelLayoutManager.h @@ -0,0 +1,13 @@ +// +// MLLabelLayoutManager.h +// MLLabel +// +// Created by molon on 15/6/11. +// Copyright (c) 2015年 molon. All rights reserved. +// + +#import + +@interface MLLabelLayoutManager : NSLayoutManager + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Helper/MLLabelLayoutManager.m b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Helper/MLLabelLayoutManager.m new file mode 100644 index 0000000..4cdd6c2 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/Helper/MLLabelLayoutManager.m @@ -0,0 +1,103 @@ +// +// MLLabelLayoutManager.m +// MLLabel +// +// Created by molon on 15/6/11. +// Copyright (c) 2015年 molon. All rights reserved. +// + +#import "MLLabelLayoutManager.h" + +@interface MLLabelLayoutManager() + +@property (nonatomic, assign) CGPoint lastDrawPoint; + +@end + +@implementation MLLabelLayoutManager + +- (void)drawBackgroundForGlyphRange:(NSRange)glyphsToShow atPoint:(CGPoint)origin +{ + self.lastDrawPoint = origin; + [super drawBackgroundForGlyphRange:glyphsToShow atPoint:origin]; + self.lastDrawPoint = CGPointZero; +} + +- (void)fillBackgroundRectArray:(const CGRect *)rectArray count:(NSUInteger)rectCount forCharacterRange:(NSRange)charRange color:(UIColor *)color +{ + CGContextRef ctx = UIGraphicsGetCurrentContext(); + if (!ctx) { + [super fillBackgroundRectArray:rectArray count:rectCount forCharacterRange:charRange color:color]; + return; + } + + CGContextSaveGState(ctx); + { + [color setFill]; + + NSRange glyphRange = [self glyphRangeForCharacterRange:charRange actualCharacterRange:NULL]; + + CGPoint textOffset = self.lastDrawPoint; + + NSRange lineRange = NSMakeRange(glyphRange.location, 1); + while (NSMaxRange(lineRange)<=NSMaxRange(glyphRange)) { + + //这里可以防止这行没有用到的区域也绘制上背景色,例如收到word wrap,center alignment影响后每行文字没有占满时候 + CGRect lineBounds = [self lineFragmentUsedRectForGlyphAtIndex:lineRange.location effectiveRange:&lineRange]; + lineBounds.origin.x += textOffset.x; + lineBounds.origin.y += textOffset.y; + + //找到这行具有背景色文字区域的位置 + NSRange glyphRangeInLine = NSIntersectionRange(glyphRange,lineRange); + NSRange truncatedGlyphRange = [self truncatedGlyphRangeInLineFragmentForGlyphAtIndex:glyphRangeInLine.location]; + if (truncatedGlyphRange.location!=NSNotFound) { + //这里的glyphRangeInLine本身可能会带有被省略的区间,而我们下面计算最大行高和最小drawY的实现是不需要考虑省略的区间的,否则也可能计算有误。所以这里我们给过滤掉 + NSRange sameRange = NSIntersectionRange(glyphRangeInLine, truncatedGlyphRange); + if (sameRange.length>0&&NSMaxRange(sameRange)==NSMaxRange(glyphRangeInLine)) { + //我们这里先只处理tail模式的 + //而经过测试truncatedGlyphRangeInLineFragmentForGlyphAtIndex暂时只支持NSLineBreakByTruncatingTail模式 + //其他两种暂时也不会用,即使用,现在通过TextKit的话也没法获取 + glyphRangeInLine = NSMakeRange(glyphRangeInLine.location, sameRange.location-glyphRangeInLine.location); + } + } + + if (glyphRangeInLine.length>0) { + CGFloat startDrawY = CGFLOAT_MAX; + CGFloat maxLineHeight = 0.0f; //找到这行的 背景色区间 的文字的最小Y值和最大的文字高度 + for (NSInteger glyphIndex = glyphRangeInLine.location; glyphIndex + +typedef NS_ENUM(NSUInteger, MLLastTextType) { + MLLastTextTypeNormal, + MLLastTextTypeAttributed, +}; +// UILabel的baselineAdjustment属性功能没模拟,其他的属性都模拟了 + +@interface MLLabel : UILabel + +@property (nonatomic, assign) CGFloat lineHeightMultiple; //行高的multiple +@property (nonatomic, assign) CGFloat lineSpacing; //行间距 + +@property (nonatomic, assign) UIEdgeInsets textInsets; + +@property (nonatomic, copy) void(^doBeforeDrawingTextBlock)(CGRect rect,CGPoint beginOffset,CGSize drawSize); + +- (CGSize)preferredSizeWithMaxWidth:(CGFloat)maxWidth; + + +//方便码代码 +- (void)setDoBeforeDrawingTextBlock:(void (^)(CGRect rect,CGPoint beginOffset,CGSize drawSize))doBeforeDrawingTextBlock; +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/MLLabel.m b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/MLLabel.m new file mode 100644 index 0000000..dc1dea1 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/MLLabel.m @@ -0,0 +1,703 @@ +// +// MLLabel.m +// MLLabel +// +// Created by molon on 15/5/18. +// Copyright (c) 2015年 molon. All rights reserved. +// + +#import "MLLabel.h" +#import "NSMutableAttributedString+MLLabel.h" +#import "MLLabelLayoutManager.h" +#import "NSString+MLLabel.h" + +#define kAdjustFontSizeEveryScalingFactor (M_E / M_PI) +//总得有个极限 +static CGFloat MLFLOAT_MAX = 100000.0f; +static CGFloat ADJUST_MIN_FONT_SIZE = 1.0f; +static CGFloat ADJUST_MIN_SCALE_FACTOR = 0.01f; + +static NSArray * kStylePropertyNames() { + static NSArray *_stylePropertyNames = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + //TODO: 这个highlighted在tableview滚动到的时候会设置下(即使cell的selectStyle为None),然后就造成resetText,很鸡巴,耗费性能,这个似乎没辙,实在有必要,后期+个属性来开关 + _stylePropertyNames = @[@"font",@"textAlignment",@"textColor",@"highlighted", + @"highlightedTextColor",@"shadowColor",@"shadowOffset",@"enabled",@"lineHeightMultiple",@"lineSpacing"]; + }); + return _stylePropertyNames; +} + +@interface MLLabelStylePropertyRecord : NSObject + +@property (nonatomic, strong) UIFont *font; +@property (nonatomic, assign) NSTextAlignment textAlignment; +@property (nonatomic, strong) UIColor *textColor; +@property (nonatomic, assign) BOOL highlighted; +@property (nonatomic, strong) UIColor *highlightedTextColor; +@property (nonatomic, strong) UIColor *shadowColor; +@property (nonatomic, assign) CGSize shadowOffset; +@property (nonatomic, assign) BOOL enabled; + +@property (nonatomic, assign) CGFloat lineHeightMultiple; //行高的multiple +@property (nonatomic, assign) CGFloat lineSpacing; //行间距 + +@end +@implementation MLLabelStylePropertyRecord +@end + + +@interface MLLabel() + +@property (nonatomic, strong) NSTextStorage *textStorage; +@property (nonatomic, strong) MLLabelLayoutManager *layoutManager; +@property (nonatomic, strong) NSTextContainer *textContainer; + +@property (nonatomic, assign) MLLastTextType lastTextType; + +@property (nonatomic, strong) MLLabelStylePropertyRecord *styleRecord; + +//为什么需要这个,是因为setAttributedText之后内部可能会对其进行了改动,然后例如再次更新style属性,然后更新绘制会出问题。索性都以记录的最原始的为准。 +@property (nonatomic, copy) NSAttributedString *lastAttributedText; +//读取的时候需要 +@property (nonatomic, copy) NSString *lastText; + +@end + +@implementation MLLabel + +#pragma mark - init +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self commonInit]; + } + return self; +} + +- (id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super initWithCoder:aDecoder]; + if (self) + { + [self commonInit]; + } + return self; +} + +- (void)commonInit +{ + self.lineHeightMultiple = 1.0f; + + //设置TextKit初始相关 + [self.textStorage addLayoutManager:self.layoutManager]; + [self.layoutManager addTextContainer:self.textContainer]; + + //label helper相关 + if ([super attributedText]) { + self.attributedText = [super attributedText]; + }else{ + self.text = [super text]; + } + + //kvo 监视style属性 + for (NSString *key in kStylePropertyNames()) { + [self.styleRecord setValue:[self valueForKey:key] forKey:key]; + //不直接使用NSKeyValueObservingOptionInitial来初始化赋值record,是防止无用的resettext + [self addObserver:self forKeyPath:key options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil]; + } +} + +- (void)dealloc +{ + //kvo 移除监视style属性 + for (NSString *key in kStylePropertyNames()) { + [self removeObserver:self forKeyPath:key context:nil]; + } +} + + +#pragma mark - KVO +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if ([kStylePropertyNames() containsObject:keyPath]) { + //存到记录对象里 + [_styleRecord setValue:[object valueForKey:keyPath] forKey:keyPath]; + + id old = change[NSKeyValueChangeOldKey]; + id new = change[NSKeyValueChangeNewKey]; + if ([old isEqual:new]||(!old&&!new)) { + return; + } + + [self reSetText]; + }else{ + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + } +} + + +#pragma mark - getter +- (NSTextStorage *)textStorage +{ + if (!_textStorage) { + _textStorage = [NSTextStorage new]; + } + return _textStorage; +} + +- (MLLabelLayoutManager *)layoutManager +{ + if (!_layoutManager) { + _layoutManager = [MLLabelLayoutManager new]; + _layoutManager.allowsNonContiguousLayout = NO; + _layoutManager.delegate = self; + } + return _layoutManager; +} + +- (NSTextContainer *)textContainer +{ + if (!_textContainer) { + _textContainer = [NSTextContainer new]; + _textContainer.maximumNumberOfLines = self.numberOfLines; + _textContainer.lineBreakMode = self.lineBreakMode; + _textContainer.lineFragmentPadding = 0.0f; + _textContainer.size = self.frame.size; + } + return _textContainer; +} + +- (MLLabelStylePropertyRecord *)styleRecord +{ + if (!_styleRecord) { + _styleRecord = [MLLabelStylePropertyRecord new]; + } + return _styleRecord; +} + +- (NSAttributedString *)attributedText +{ + return _lastTextType==MLLastTextTypeAttributed?_lastAttributedText:[self attributedTextForTextStorageFromLabelProperties]; +} + +- (NSString*)text +{ + return _lastTextType==MLLastTextTypeAttributed?_lastAttributedText.string:_lastText; +} + +#pragma mark - set text +- (void)setLastTextType:(MLLastTextType)lastTextType +{ + _lastTextType = lastTextType; + //重置下 + self.lastText = nil; + self.lastAttributedText = nil; +} + +- (void)setText:(NSString *)text +{ + NSAssert(!text||[text isKindOfClass:[NSString class]], @"text must be NSString"); + + self.lastTextType = MLLastTextTypeNormal; + self.lastText = text; + + [self invalidateIntrinsicContentSize]; + // [super setText:text]; + + [_textStorage setAttributedString:[self attributedTextForTextStorageFromLabelProperties]]; + + //如果text和原本的一样的话 super 是不会触发redraw的,但是很遗憾我们的label比较灵活,验证起来很麻烦,所以还是都重绘吧 + [self setNeedsDisplay]; +} + +- (void)setAttributedText:(NSAttributedString *)attributedText +{ + NSAssert(!attributedText||[attributedText isKindOfClass:[NSAttributedString class]], @"text must be NSAttributedString"); + + self.lastTextType = MLLastTextTypeAttributed; + self.lastAttributedText = attributedText; + + [self invalidateIntrinsicContentSize]; + // [super setAttributedText:attributedText]; + + [_textStorage setAttributedString:[self attributedTextForTextStorageFromLabelProperties]]; + + //如果text和原本的一样的话 super 是不会触发redraw的,但是很遗憾我们的label比较灵活,验证起来很麻烦,所以还是都重绘吧 + [self setNeedsDisplay]; + // NSLog(@"set attr text %p",self); +} + +#pragma mark - common helper +- (CGSize)textContainerSizeWithBoundsSize:(CGSize)size +{ + //bounds改了之后,要相应的改变textContainer的size,但是要根据insets调整 + CGFloat width = fmax(0, size.width-_textInsets.left-_textInsets.right); + CGFloat height = fmax(0, size.height-_textInsets.top-_textInsets.bottom); + return CGSizeMake(width, height); +} + +- (void)reSetText +{ + if (_lastTextType == MLLastTextTypeNormal) { + self.text = _lastText; + }else{ + self.attributedText = _lastAttributedText; + } +} + +/** + * 根据label的属性来进行处理并返回给textStorage使用的 + */ +- (NSMutableAttributedString*)attributedTextForTextStorageFromLabelProperties +{ + if (_lastTextType==MLLastTextTypeNormal) { + if (!_lastText) { + return [[NSMutableAttributedString alloc]initWithString:@""]; + } + + //根据text和label默认的一些属性得到attributedText + return [[NSMutableAttributedString alloc] initWithString:_lastText attributes:[self attributesFromLabelProperties]]; + } + + if (!_lastAttributedText) { + return [[NSMutableAttributedString alloc]initWithString:@""]; + } + + //遍历并且添加Label默认的属性 + NSMutableAttributedString *newAttrStr = [[NSMutableAttributedString alloc]initWithString:_lastAttributedText.string attributes:[self attributesFromLabelProperties]]; + + [_lastAttributedText enumerateAttributesInRange:NSMakeRange(0, newAttrStr.length) options:0 usingBlock:^(NSDictionary *attrs, NSRange range, BOOL *stop) { + if (attrs.count>0) { + // [newAttrStr removeAttributes:[attrs allKeys] range:range]; + [newAttrStr addAttributes:attrs range:range]; + } + }]; + return newAttrStr; +} + +- (NSDictionary *)attributesFromLabelProperties +{ + //颜色 + UIColor *color = self.styleRecord.textColor; + if (!_styleRecord.enabled) + { + color = [UIColor lightGrayColor]; + } + else if (_styleRecord.highlighted) + { + color = _styleRecord.highlightedTextColor; + } + if (!color) { + color = _styleRecord.textColor; + if (!color) { + color = [UIColor darkTextColor]; + } + } + + //阴影 + NSShadow *shadow = shadow = [[NSShadow alloc] init]; + if (_styleRecord.shadowColor) + { + shadow.shadowColor = _styleRecord.shadowColor; + shadow.shadowOffset = _styleRecord.shadowOffset; + } + else + { + shadow.shadowOffset = CGSizeMake(0, -1); + shadow.shadowColor = nil; + } + + //水平位置 + NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init]; + paragraph.alignment = _styleRecord.textAlignment; + paragraph.lineSpacing = _styleRecord.lineSpacing; + paragraph.lineHeightMultiple = _styleRecord.lineHeightMultiple; + + if (!_styleRecord.font) { + _styleRecord.font = [UIFont systemFontOfSize:17.0f]; + } + //最终 + NSDictionary *attributes = @{NSFontAttributeName : _styleRecord.font, + NSForegroundColorAttributeName : color, + NSShadowAttributeName : shadow, + NSParagraphStyleAttributeName : paragraph, + }; + return attributes; +} + + +- (CGRect)textRectForBounds:(CGRect)bounds attributedString:(NSAttributedString*)attributedString limitedToNumberOfLines:(NSInteger)numberOfLines lineCount:(NSInteger*)lineCount +{ + //这种算是特殊情况,如果为空字符串,那就没必要必要了,也忽略textInset,这样比较合理 + if (attributedString.length<=0) { + bounds.size = CGSizeZero; + return bounds; + } + + CGSize newTextContainerSize = [self textContainerSizeWithBoundsSize:bounds.size]; + if (newTextContainerSize.width<=0||newTextContainerSize.height<=0){ + CGRect textBounds = CGRectZero; + textBounds.origin = bounds.origin; + textBounds.size = CGSizeMake(fmin(_textInsets.left+_textInsets.right,CGRectGetWidth(bounds)), fmin(_textInsets.top+_textInsets.bottom,CGRectGetHeight(bounds))); + return textBounds; + } + + CGRect textBounds = CGRectZero; + @autoreleasepool { + CGSize savedTextContainerSize = _textContainer.size; + NSInteger savedTextContainerNumberOfLines = _textContainer.maximumNumberOfLines; + + _textContainer.size = newTextContainerSize; + _textContainer.maximumNumberOfLines = numberOfLines; + + NSAttributedString *savedAttributedString = nil; + if (![_textStorage isEqual:attributedString]) { + savedAttributedString = [_textStorage copy]; + [_textStorage setAttributedString:attributedString]; + } + + NSRange glyphRange = [_layoutManager glyphRangeForTextContainer:_textContainer]; + if (lineCount) { + [_layoutManager enumerateLineFragmentsForGlyphRange:glyphRange usingBlock:^(CGRect rect, CGRect usedRect, NSTextContainer *textContainer, NSRange glyphRange, BOOL *stop) { + (*lineCount)++; + }]; + //在最后字符为换行符的情况下,实际绘制出来的是会多那个一行,这里作为AppleBUG修正 + if ([_textStorage.string isNewlineCharacterAtEnd]) { + (*lineCount)++; + } + } + + textBounds = [_layoutManager usedRectForTextContainer:_textContainer]; + + //还原 + if (savedAttributedString) { + [_textStorage setAttributedString:savedAttributedString]; + } + _textContainer.size = savedTextContainerSize; + _textContainer.maximumNumberOfLines = savedTextContainerNumberOfLines; + } + //最终修正 + textBounds.size.width = fmin(ceilf(textBounds.size.width), newTextContainerSize.width); + textBounds.size.height = fmin(ceilf(textBounds.size.height), newTextContainerSize.height); + textBounds.origin = bounds.origin; + + textBounds.size = CGSizeMake(fmin(CGRectGetWidth(textBounds)+_textInsets.left+_textInsets.right,CGRectGetWidth(bounds)), fmin(CGRectGetHeight(textBounds)+_textInsets.top+_textInsets.bottom,CGRectGetHeight(bounds))); + + // NSLog(@"bounds:%@ result:%@ %p",NSStringFromCGRect(bounds),NSStringFromCGRect(textBounds),self); + return textBounds; +} + +#pragma mark - draw +- (BOOL)adjustsCurrentFontSizeToFitWidthWithScaleFactor:(CGFloat)scaleFactor numberOfLines:(NSInteger)numberOfLines originalAttributedText:(NSAttributedString*)originalAttributedText bounds:(CGRect)bounds resultAttributedString:(NSAttributedString**)resultAttributedString +{ + __block BOOL mustReturnYES = NO; + if (self.minimumScaleFactor > scaleFactor) { + scaleFactor = self.minimumScaleFactor; //这个的话 就不能在循环验证了 + mustReturnYES = YES; + } + //总得有个极限 + scaleFactor = fmax(scaleFactor, ADJUST_MIN_SCALE_FACTOR); + + //遍历并且设置一个新的字体 + NSMutableAttributedString *attrStr = [originalAttributedText mutableCopy]; + + if (scaleFactor!=1.0f) { //如果是1.0f的话就没有调整font size的必要 + [attrStr enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, attrStr.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) { + UIFont *font = (UIFont *)value; + if (font&&[font isKindOfClass:[UIFont class]]) { + NSString *fontName = font.fontName; + CGFloat newSize = font.pointSize*scaleFactor; + if (newSize0) { + NSInteger lineCount = 0; + currentTextSize = [self textRectForBounds:CGRectMake(0, 0, CGRectGetWidth(bounds), MLFLOAT_MAX) attributedString:attrStr limitedToNumberOfLines:0 lineCount:&lineCount].size; + //如果求行数大于设置行数,也不认为塞满了 + if (lineCount>numberOfLines) { + return NO; + } + }else{ + currentTextSize = [self textRectForBounds:CGRectMake(0, 0, CGRectGetWidth(bounds), MLFLOAT_MAX) attributedString:attrStr limitedToNumberOfLines:0 lineCount:NULL].size; + } + + //大小已经足够就认作OK + if (currentTextSize.width<=CGRectGetWidth(bounds)&¤tTextSize.height<=CGRectGetHeight(bounds)) { + if (resultAttributedString) { + (*resultAttributedString) = attrStr; + } + return YES; + } + + return NO; +} + +- (void)drawTextInRect:(CGRect)rect +{ + // NSLog(@"draw text %p",self); + //不调用super方法 + // [super drawTextInRect:rect]; //这里调用可以查看是否绘制和原来的不一致 + + //如果绘制区域本身就为0,就应该直接返回,不做多余操作。 + if (_textContainer.size.width<=0||_textContainer.size.height<=0){ + return; + } + + if (self.adjustsFontSizeToFitWidth) { + //初始scale,每次adjust都需要从头开始,因为也可能有当前font被adjust小过需要还原。 + CGFloat scaleFactor = 1.0f; + BOOL mustContinueAdjust = YES; + NSAttributedString *attributedString = [self attributedTextForTextStorageFromLabelProperties]; + + //numberOfLine>0时候可以直接尝试找寻一个preferredScale + if (self.numberOfLines>0) { + //一点点矫正,以使得内容能放到当前的size里 + + //找到当前text绘制在一行时候需要占用的宽度,其实这个值很可能不够,因为多行时候可能会因为wordwrap的关系多行+起的总宽度会多。但是这个能找到一个合适的矫正过程的开始值,大大减少矫正次数。 + + //还有一种情况就是,有可能由于字符串里带换行符的关系造成压根不可能绘制到一行,这时候应该取会显示的最长的那一行。所以这里需要先截除必然不会显示的部分。 + NSUInteger stringlineCount = [attributedString.string lineCount]; + if (stringlineCount>self.numberOfLines) { + //这里说明必然要截取 + attributedString = [attributedString attributedSubstringFromRange:NSMakeRange(0, [attributedString.string lengthToLineIndex:self.numberOfLines-1])]; + } + + CGFloat textWidth = [self textRectForBounds:CGRectMake(0, 0, MLFLOAT_MAX, MLFLOAT_MAX) attributedString:attributedString limitedToNumberOfLines:0 lineCount:NULL].size.width; + textWidth = fmax(0, textWidth-_textInsets.left-_textInsets.right); + if (textWidth>0) { + CGFloat availableWidth = _textContainer.size.width*self.numberOfLines; + if (textWidth > availableWidth) { + //这里得到的scaleFactor肯定是大于这个的是必然不满足的,目的就是找这个,以能减少下面的矫正次数。 + scaleFactor = availableWidth / textWidth; + } + }else{ + mustContinueAdjust = NO; + } + } + + if (mustContinueAdjust) { + //一点点矫正,以使得内容能放到当前的size里 + NSAttributedString *resultAttributedString = attributedString; + while (![self adjustsCurrentFontSizeToFitWidthWithScaleFactor:scaleFactor numberOfLines:self.numberOfLines originalAttributedText:attributedString bounds:self.bounds resultAttributedString:&resultAttributedString]){ + scaleFactor *= kAdjustFontSizeEveryScalingFactor; + }; + [_textStorage setAttributedString:resultAttributedString]; + } + } + + + CGPoint textOffset; + //这里根据container的size和manager布局属性以及字符串来得到实际绘制的range区间 + NSRange glyphRange = [_layoutManager glyphRangeForTextContainer:_textContainer]; + + //获取绘制区域大小 + CGRect drawBounds = [_layoutManager usedRectForTextContainer:_textContainer]; + + //因为label是默认垂直居中的,所以需要根据实际绘制区域的bounds来调整出居中的offset + textOffset = [self textOffsetWithTextSize:drawBounds.size]; + + if (_doBeforeDrawingTextBlock) { + //而实际上drawBounds的宽度可能不是我们想要的,我们想要的是_textContainer的宽度,但是高度需要是真实绘制高度 + CGSize drawSize = CGSizeMake(_textContainer.size.width, drawBounds.size.height); + _doBeforeDrawingTextBlock(rect,textOffset,drawSize); + } + + //绘制文字 + [_layoutManager drawBackgroundForGlyphRange:glyphRange atPoint:textOffset]; + [_layoutManager drawGlyphsForGlyphRange:glyphRange atPoint:textOffset]; +} + +//这个计算出来的是绘制起点 +- (CGPoint)textOffsetWithTextSize:(CGSize)textSize +{ + CGPoint textOffset = CGPointZero; + //根据insets和默认垂直居中来计算出偏移 + textOffset.x = _textInsets.left; + CGFloat paddingHeight = (_textContainer.size.height - textSize.height) / 2.0f; + textOffset.y = paddingHeight+_textInsets.top; + + return textOffset; +} + + +//- (NSUInteger)layoutManager:(NSLayoutManager *)layoutManager +// shouldGenerateGlyphs:(const CGGlyph *)glyphs +// properties:(const NSGlyphProperty *)props +// characterIndexes:(const NSUInteger *)charIndexes +// font:(UIFont *)aFont +// forGlyphRange:(NSRange)glyphRange +//{ +// NSLog(@"shouldGenerateGlyphs: start:%ld end:%ld",*charIndexes,charIndexes[glyphRange.length-1]); +//// if (*charIndexes>=100) { +//// return 0; +//// } +// [layoutManager setGlyphs:glyphs properties:props characterIndexes:charIndexes font:aFont forGlyphRange:glyphRange]; +// return glyphRange.length; +//} + +#pragma mark - sizeThatsFit +- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines +{ + //fit实现与drawTextInRect大部分一个屌样,所以不写注释了。 + if (numberOfLines>1&&self.adjustsFontSizeToFitWidth) { + CGFloat scaleFactor = 1.0f; + NSAttributedString *attributedString = [self attributedTextForTextStorageFromLabelProperties]; + + NSUInteger stringlineCount = [attributedString.string lineCount]; + if (stringlineCount>self.numberOfLines) { + //这里说明必然要截取 + attributedString = [attributedString attributedSubstringFromRange:NSMakeRange(0, [attributedString.string lengthToLineIndex:self.numberOfLines-1])]; + } + + CGFloat textWidth = [self textRectForBounds:CGRectMake(0, 0, MLFLOAT_MAX, MLFLOAT_MAX) attributedString:attributedString limitedToNumberOfLines:0 lineCount:NULL].size.width; + textWidth = fmax(0, textWidth-_textInsets.left-_textInsets.right); + if (textWidth>0) { + CGFloat availableWidth = _textContainer.size.width*numberOfLines; + if (textWidth > availableWidth) { + //这里得到的scaleFactor肯定是大于这个的是必然不满足的,目的就是找这个,以能减少下面的矫正次数。 + scaleFactor = availableWidth / textWidth; + } + //一点点矫正,以使得内容能放到当前的size里 + NSAttributedString *resultAttributedString = attributedString; + while (![self adjustsCurrentFontSizeToFitWidthWithScaleFactor:scaleFactor numberOfLines:numberOfLines originalAttributedText:attributedString bounds:bounds resultAttributedString:&resultAttributedString]){ + scaleFactor *= kAdjustFontSizeEveryScalingFactor; + }; + + //计算当前adjust之后的合适大小,为什么不用adjust里面的 因为也可能有异常情况,例如压根adjust就没走到计算大小那一步啊什么的。 + CGRect textBounds = [self textRectForBounds:bounds attributedString:resultAttributedString limitedToNumberOfLines:numberOfLines lineCount:NULL]; + + return textBounds; + } + } + return [self textRectForBounds:bounds attributedString:_textStorage limitedToNumberOfLines:numberOfLines lineCount:NULL]; +} + +- (CGSize)sizeThatFits:(CGSize)size +{ + size = [super sizeThatFits:size]; + if (size.height>0) { + size.height++; + } + return size; +} + +- (CGSize)intrinsicContentSize { + CGSize size = [super intrinsicContentSize]; + if (size.height>0) { + size.height++; + } + return size; +} + +- (CGSize)preferredSizeWithMaxWidth:(CGFloat)maxWidth +{ + CGSize size = [self sizeThatFits:CGSizeMake(maxWidth, MLFLOAT_MAX)]; + size.width = fmin(size.width, maxWidth); //在numberOfLine为1模式下返回的可能会比maxWidth大,所以这里我们限制下 + return size; +} + +#pragma mark - set 修改container size相关 +- (void)resizeTextContainerSize +{ + if (_textContainer) { + _textContainer.size = [self textContainerSizeWithBoundsSize:self.bounds.size]; + } +} + +- (void)setFrame:(CGRect)frame +{ + [super setFrame:frame]; + [self resizeTextContainerSize]; +} + +- (void)setBounds:(CGRect)bounds +{ + [super setBounds:bounds]; + [self resizeTextContainerSize]; +} + +- (void)setTextInsets:(UIEdgeInsets)insets +{ + _textInsets = insets; + [self resizeTextContainerSize]; + + [self invalidateIntrinsicContentSize]; +} + +#pragma mark - set container相关属性 +- (void)setNumberOfLines:(NSInteger)numberOfLines +{ + BOOL isChanged = (numberOfLines!=_textContainer.maximumNumberOfLines); + + [super setNumberOfLines:numberOfLines]; + + _textContainer.maximumNumberOfLines = numberOfLines; + + if (isChanged) { + [self invalidateIntrinsicContentSize]; + [self setNeedsDisplay]; + } +} + +- (void)setLineBreakMode:(NSLineBreakMode)lineBreakMode +{ + [super setLineBreakMode:lineBreakMode]; + + _textContainer.lineBreakMode = lineBreakMode; + + [self invalidateIntrinsicContentSize]; +} + +#pragma mark - set 其他 +- (void)setMinimumScaleFactor:(CGFloat)minimumScaleFactor +{ + [super setMinimumScaleFactor:minimumScaleFactor]; + + [self invalidateIntrinsicContentSize]; + [self setNeedsDisplay]; +} + +- (void)setDoBeforeDrawingTextBlock:(void (^)(CGRect rect,CGPoint beginOffset,CGSize drawSize))doBeforeDrawingTextBlock +{ + _doBeforeDrawingTextBlock = doBeforeDrawingTextBlock; + + [self setNeedsDisplay]; +} + +#pragma mark - UIResponder +- (BOOL)canBecomeFirstResponder { + return YES; +} + +- (BOOL)canPerformAction:(SEL)action + withSender:(__unused id)sender +{ + return (action == @selector(copy:)); +} + +#pragma mark - UIResponderStandardEditActions +- (void)copy:(__unused id)sender { + [[UIPasteboard generalPasteboard] setString:self.text]; +} + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/MLLinkLabel.h b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/MLLinkLabel.h new file mode 100644 index 0000000..92c460b --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/MLLinkLabel.h @@ -0,0 +1,135 @@ +// +// MLLinkLabel.h +// MLLabel +// +// Created by molon on 15/6/6. +// Copyright (c) 2015年 molon. All rights reserved. +// + +#import "MLLabel.h" + +typedef NS_OPTIONS(NSUInteger, MLDataDetectorTypes) { + MLDataDetectorTypeURL = 1 << 1, // 链接,不用link定义,是因为link作为统称 + MLDataDetectorTypePhoneNumber = 1 << 0, // 电话 + MLDataDetectorTypeNone = 0, // 禁用 + MLDataDetectorTypeAll = NSUIntegerMax, // 所有 + //上面4个和UIDataDetectorTypes的对应,下面是自己加的 + + MLDataDetectorTypeEmail = 1 << 4, // 邮箱 + MLDataDetectorTypeUserHandle = 1 << 5, //@ + MLDataDetectorTypeHashtag = 1 << 6, //#..# + //上面是个性化的匹配 + + + //这个是对attributedText里带有Link属性的检测,至于为什么31,预留上面空间以添加新的个性化 + //这个东西和dataDetectorTypesOfAttributedLinkValue对应起来,会对带有NSLinkAttributeName区间的value进行检测,匹配则给予对应的LinkType,找不到则为Other + MLDataDetectorTypeAttributedLink = 1 << 31, +}; + + +typedef NS_ENUM(NSUInteger, MLLinkType) { + MLLinkTypeNone = 0, + MLLinkTypeURL = 1, // 链接 + MLLinkTypePhoneNumber = 2, // 电话 + MLLinkTypeEmail = 3, // 邮箱 + MLLinkTypeUserHandle = 4, //@ + MLLinkTypeHashtag = 5, //#..# + + MLLinkTypeOther = 31, //这个一般是和MLDataDetectorTypeAttributedLink对应的,但是也可以自己随意添加啦,不过是一个标识而已,至于为什么31,随便定的,预留上面空间以添加新的个性化 +}; + +#define kDefaultLinkColorForMLLinkLabel [UIColor colorWithRed:0.061 green:0.515 blue:0.862 alpha:1.000] +#define kDefaultActiveLinkBackgroundColorForMLLinkLabel [UIColor colorWithWhite:0.215 alpha:0.300] + +@class MLLink,MLLinkLabel; + +@protocol MLLinkLabelDelegate + +- (void)didClickLink:(MLLink*)link linkText:(NSString*)linkText linkLabel:(MLLinkLabel*)linkLabel; + +@optional + +- (void)didLongPressLink:(MLLink*)link linkText:(NSString*)linkText linkLabel:(MLLinkLabel*)linkLabel; + +@end + +@interface MLLinkLabel : MLLabel + +//默认为MLDataDetectorTypeURL|MLDataDetectorTypePhoneNumber|MLDataDetectorTypeEmail|MLDataDetectorTypeAttributedLink,自动检测除了@和#话题的全部类型并且转换为链接 +@property (nonatomic, assign) MLDataDetectorTypes dataDetectorTypes; + +//这个是当dataDetectorTypes的MLDataDetectorTypeAttributedLink可用时候,自动对attributedText里Link属性value检测给予linkType的检测类型,默认为MLDataDetectorTypeNone,也就是默认最终得到的linkType为MLLinkTypeOther +@property (nonatomic, assign) MLDataDetectorTypes dataDetectorTypesOfAttributedLinkValue; + +@property (nonatomic, strong) NSDictionary *linkTextAttributes; +@property (nonatomic, strong) NSDictionary *activeLinkTextAttributes; + +//这个主要是为了不会在点击非常快速结束触摸的情况下,激活的链接样式基本没体现,这里的delay可以让其多体现那个一会,显得有反馈。 +//默认为0.3秒 +@property (nonatomic, assign) NSTimeInterval activeLinkToNilDelay; + +//是否允许在link内line break,默认为YES,即为允许,这样的话链接会能折行就折行和正常文本一样 +@property (nonatomic, assign) BOOL allowLineBreakInsideLinks; + +//优先级比delegate高 +@property (nonatomic, copy) void(^didClickLinkBlock)(MLLink *link,NSString *linkText,MLLinkLabel *label); +@property (nonatomic, copy) void(^didLongPressLinkBlock)(MLLink *link,NSString *linkText,MLLinkLabel *label); + +@property (nonatomic, weak) id delegate; //这个优先级没有block高 + +@property (nonatomic, strong, readonly) NSMutableArray *links; //可以遍历针对自定义 + +/** + * link在正式add之前可以自定义修改属性的block + */ +@property (nonatomic, copy) void(^beforeAddLinkBlock)(MLLink *link); + + +- (MLLink *)linkAtPoint:(CGPoint)location; + +/** + * 设置文本后添加link。注意如果在此之后设置了text、attributedText、dataDetectorTypes或dataDetectorTypesOfAttributedLinkValue属性的话添加的link会丢失。 + */ +- (BOOL)addLink:(MLLink*)link; +/** + * 设置文本后添加link,注意如果在此之后设置了text、attributedText、dataDetectorTypes或dataDetectorTypesOfAttributedLinkValue属性的话添加的link会丢失。 + */ +- (MLLink*)addLinkWithType:(MLLinkType)type value:(NSString*)value range:(NSRange)range; +/** + * 设置文本后添加link,注意如果在此之后设置了text、attributedText、dataDetectorTypes或dataDetectorTypesOfAttributedLinkValue属性的话添加的link会丢失。 + */ +- (NSArray*)addLinks:(NSArray*)links; + +//下面俩是为了编写代码时候外部设置block时候不需要自定义名字了,方便。 +- (void)setDidClickLinkBlock:(void (^)(MLLink *link, NSString *linkText, MLLinkLabel *label))didClickLinkBlock; +- (void)setDidLongPressLinkBlock:(void (^)(MLLink *link, NSString *linkText, MLLinkLabel *label))didLongPressLinkBlock; + +/** + * 一般用在修改了某些link的样式属性之后效果不会立马启用,使用此方法可启用。 + */ +- (void)invalidateDisplayForLinks; + +@end + +@interface MLLink : NSObject + +@property (nonatomic, assign) MLLinkType linkType; +@property (nonatomic, copy) NSString *linkValue; +@property (readonly, nonatomic, assign) NSRange linkRange; + +//可以单独设置且覆盖label的三个参数 +@property (nonatomic, strong) NSDictionary *linkTextAttributes; +@property (nonatomic, strong) NSDictionary *activeLinkTextAttributes; + +//初始化 ++ (instancetype)linkWithType:(MLLinkType)type value:(NSString*)value range:(NSRange)range; ++ (instancetype)linkWithType:(MLLinkType)type value:(NSString*)value range:(NSRange)range linkTextAttributes:(NSDictionary*)linkTextAttributes activeLinkTextAttributes:(NSDictionary*)activeLinkTextAttributes; + +@property (nonatomic, copy) void(^didClickLinkBlock)(MLLink *link,NSString *linkText,MLLinkLabel *label); +@property (nonatomic, copy) void(^didLongPressLinkBlock)(MLLink *link,NSString *linkText,MLLinkLabel *label); + +//下面俩是为了编写代码时候外部设置block时候不需要自定义名字了,方便。 +- (void)setDidClickLinkBlock:(void (^)(MLLink *link, NSString *linkText, MLLinkLabel *label))didClickLinkBlock; +- (void)setDidLongPressLinkBlock:(void (^)(MLLink *link, NSString *linkText, MLLinkLabel *label))didLongPressLinkBlock; + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/MLLinkLabel.m b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/MLLinkLabel.m new file mode 100644 index 0000000..a3e4097 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/Classes/MLLinkLabel.m @@ -0,0 +1,529 @@ +// +// MLLinkLabel.m +// MLLabel +// +// Created by molon on 15/6/6. +// Copyright (c) 2015年 molon. All rights reserved. +// + +#import "MLLinkLabel.h" +#import "MLLabel+Override.h" +#import "NSMutableAttributedString+MLLabel.h" +#import "MLLabelLayoutManager.h" + +#define REGULAREXPRESSION_OPTION(regularExpression,regex,option) \ +\ +static NSRegularExpression * k##regularExpression() { \ +static NSRegularExpression *_##regularExpression = nil; \ +static dispatch_once_t onceToken; \ +dispatch_once(&onceToken, ^{ \ +_##regularExpression = [[NSRegularExpression alloc] initWithPattern:(regex) options:(option) error:nil];\ +});\ +\ +return _##regularExpression;\ +}\ + +#define REGULAREXPRESSION(regularExpression,regex) REGULAREXPRESSION_OPTION(regularExpression,regex,NSRegularExpressionCaseInsensitive) + + +REGULAREXPRESSION(URLRegularExpression,@"((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)") +REGULAREXPRESSION(PhoneNumerRegularExpression, @"\\d{3}-\\d{8}|\\d{3}-\\d{7}|\\d{4}-\\d{8}|\\d{4}-\\d{7}|1+[358]+\\d{9}|\\d{8}|\\d{7}") +REGULAREXPRESSION(EmailRegularExpression, @"[A-Z0-9a-z\\._%+-]+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}") +REGULAREXPRESSION(UserHandleRegularExpression, @"@[\\u4e00-\\u9fa5\\w\\-]+") +REGULAREXPRESSION(HashtagRegularExpression, @"#([\\u4e00-\\u9fa5\\w\\-]+)") + +@interface MLLink() + +@property (nonatomic, assign) NSRange linkRange; + +@end + +@implementation MLLink + ++ (instancetype)linkWithType:(MLLinkType)type value:(NSString*)value range:(NSRange)range +{ + return [MLLink linkWithType:type value:value range:range linkTextAttributes:nil activeLinkTextAttributes:nil]; +} + ++ (instancetype)linkWithType:(MLLinkType)type value:(NSString*)value range:(NSRange)range linkTextAttributes:(NSDictionary*)linkTextAttributes activeLinkTextAttributes:(NSDictionary*)activeLinkTextAttributes +{ + MLLink *link = [MLLink new]; + link.linkType = type; + link.linkValue = value; + link.linkRange = range; + link.linkTextAttributes = linkTextAttributes; + link.activeLinkTextAttributes = activeLinkTextAttributes; + return link; +} + +@end + + +@interface MLLinkLabel() + +@property (nonatomic, strong) NSMutableArray *links; +@property (nonatomic, strong) MLLink *activeLink; +@property (nonatomic, assign) BOOL dontReCreateLinks; + +@property (nonatomic, strong) UILongPressGestureRecognizer *longPressGestureRecognizer; + +@end + +@implementation MLLinkLabel + +#pragma mark - getter +- (NSMutableArray *)links +{ + if (!_links) { + _links = [NSMutableArray array]; + } + return _links; +} + +- (UILongPressGestureRecognizer *)longPressGestureRecognizer +{ + if (!_longPressGestureRecognizer) { + _longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressGestureDidFire:)]; + _longPressGestureRecognizer.delegate = self; + } + return _longPressGestureRecognizer; +} + + +#pragma mark - setter +- (void)setActiveLink:(MLLink *)activeLink +{ + BOOL isUnChanged = (!activeLink&&!_activeLink)||[activeLink isEqual:_activeLink]; + + _activeLink = activeLink; + + if (isUnChanged) { + return; + } + + [self reSetText]; + + [CATransaction flush]; +} + +- (void)setAllowLineBreakInsideLinks:(BOOL)allowLineBreakInsideLinks +{ + if (allowLineBreakInsideLinks==_allowLineBreakInsideLinks) return; + + _allowLineBreakInsideLinks = allowLineBreakInsideLinks; + [self reSetText]; +} + +- (void)setLinkTextAttributes:(NSDictionary *)linkTextAttributes +{ + _linkTextAttributes = linkTextAttributes; + [self reSetText]; +} + +- (void)setActiveLinkTextAttributes:(NSDictionary *)activeLinkTextAttributes +{ + _activeLinkTextAttributes = activeLinkTextAttributes; + [self reSetText]; +} + +- (void)setDataDetectorTypes:(MLDataDetectorTypes)dataDetectorTypes +{ + _dataDetectorTypes = dataDetectorTypes; + [super reSetText]; +} + +- (void)setDataDetectorTypesOfAttributedLinkValue:(MLDataDetectorTypes)dataDetectorTypesOfAttributedLinkValue +{ + _dataDetectorTypesOfAttributedLinkValue = dataDetectorTypesOfAttributedLinkValue; + [super reSetText]; +} + +#pragma mark - override +- (void)reSetText +{ + //标记不重新生成链接,因为修改label的样式,例如字体啊什么的,父类会调用reSetText方法。而这时候如果依然重新生成link的话,会引起addLink方式后添加的link丢失。 + //然后此类内部所有需要重新生成链接的都是调用[super reSetText],否则只是需要重绘的调用[self reSetText] + self.dontReCreateLinks = YES; + [super reSetText]; + self.dontReCreateLinks = NO; +} + +- (void)commonInit +{ + [super commonInit]; + + self.exclusiveTouch = YES; + self.userInteractionEnabled = YES; + + self.activeLinkToNilDelay = 0.3f; + + //默认除了话题和@都检测 + _dataDetectorTypes = MLDataDetectorTypeURL|MLDataDetectorTypePhoneNumber|MLDataDetectorTypeEmail|MLDataDetectorTypeAttributedLink; + _dataDetectorTypesOfAttributedLinkValue = MLDataDetectorTypeNone; + _allowLineBreakInsideLinks = YES; + + [self addGestureRecognizer:self.longPressGestureRecognizer]; +} + +- (void)setText:(NSString *)text +{ + //先提取出来links + if (!self.dontReCreateLinks) { + self.links = [self linksWithString:text]; + _activeLink = nil; //这里不能走setter + } + + [super setText:text]; +} + +- (void)setAttributedText:(NSAttributedString *)attributedText +{ + //先提取出来links + if (!self.dontReCreateLinks) { + self.links = [self linksWithString:attributedText]; + _activeLink = nil; //这里不能走setter + } + + [super setAttributedText:attributedText]; +} + +- (NSMutableAttributedString*)attributedTextForTextStorageFromLabelProperties +{ + NSMutableAttributedString *attributedString = [super attributedTextForTextStorageFromLabelProperties]; + + //默认的链接样式不是我们想要的,去除它 + [attributedString removeAttribute:NSLinkAttributeName range:NSMakeRange(0, attributedString.length)]; + + //检测是否有链接,有的话就直接给设置链接样式 + for (MLLink *link in self.links) { + NSDictionary *attributes = nil; + if ([link isEqual:self.activeLink]) { + attributes = link.activeLinkTextAttributes?link.activeLinkTextAttributes:self.activeLinkTextAttributes; + if (!attributes) { + attributes = @{NSForegroundColorAttributeName:kDefaultLinkColorForMLLinkLabel,NSBackgroundColorAttributeName:kDefaultActiveLinkBackgroundColorForMLLinkLabel}; + } + }else{ + attributes = link.linkTextAttributes?link.linkTextAttributes:self.linkTextAttributes; + if (!attributes) { + attributes = @{NSForegroundColorAttributeName:kDefaultLinkColorForMLLinkLabel}; + } + } + // [attributedString removeAttributes:[attributes allKeys] range:link.linkRange]; + [attributedString addAttributes:attributes range:link.linkRange]; + } + + return attributedString; + +} + +#pragma mark - 正则匹配相关 +static NSArray * kAllRegexps() { + static NSArray *_allRegexps = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _allRegexps = @[kURLRegularExpression(),kPhoneNumerRegularExpression(),kEmailRegularExpression(),kUserHandleRegularExpression(),kHashtagRegularExpression()]; + }); + return _allRegexps; +} + +- (NSArray*)regexpsWithDataDetectorTypes:(MLDataDetectorTypes)dataDetectorTypes +{ + MLDataDetectorTypes const allDataDetectorTypes[] = {MLDataDetectorTypeURL,MLDataDetectorTypePhoneNumber,MLDataDetectorTypeEmail,MLDataDetectorTypeUserHandle,MLDataDetectorTypeHashtag}; + NSArray *allRegexps = kAllRegexps(); + + NSMutableArray *regexps = [NSMutableArray array]; + for (NSInteger i=0; i0?regexps:nil; +} + +//根据dataDetectorTypes和string获取其linkType +- (MLLinkType)linkTypeOfString:(NSString*)string withDataDetectorTypes:(MLDataDetectorTypes)dataDetectorTypes +{ + if (dataDetectorTypes == MLDataDetectorTypeNone) { + return MLLinkTypeOther; + } + + NSArray *allRegexps = kAllRegexps(); + NSArray *regexps = [self regexpsWithDataDetectorTypes:dataDetectorTypes]; + + NSRange textRange = NSMakeRange(0, string.length); + for (NSRegularExpression *regexp in regexps) { + NSTextCheckingResult *result = [regexp firstMatchInString:string options:NSMatchingAnchored range:textRange]; + if (result&&NSEqualRanges(result.range, textRange)) { + //这个type确定 + MLLinkType linkType = [allRegexps indexOfObject:regexp]+1; + return linkType; + } + } + + return MLLinkTypeOther; +} + +- (NSMutableArray*)linksWithString:(id)string +{ + if (self.dataDetectorTypes == MLDataDetectorTypeNone||!string) { + return nil; + } + + NSString *plainText = [string isKindOfClass:[NSAttributedString class]]?((NSAttributedString*)string).string:string; + if (plainText.length<=0) { + return nil; + } + + NSMutableArray *links = [NSMutableArray array]; + + if ((self.dataDetectorTypes&MLDataDetectorTypeAttributedLink)&&[string isKindOfClass:[NSAttributedString class]]) { + NSAttributedString *attributedString = ((NSAttributedString*)string); + [attributedString enumerateAttribute:NSLinkAttributeName inRange:NSMakeRange(0, attributedString.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) { + if (value) { + NSString *linkValue = nil; + if ([value isKindOfClass:[NSURL class]]) { + linkValue = [value absoluteString]; + }else if ([value isKindOfClass:[NSString class]]) { + linkValue = value; + }else if ([value isKindOfClass:[NSAttributedString class]]) { + linkValue = [value string]; + } + if (linkValue.length>0) { + MLLink *link = [MLLink linkWithType:[self linkTypeOfString:linkValue withDataDetectorTypes:self.dataDetectorTypesOfAttributedLinkValue] value:linkValue range:range]; + if (self.beforeAddLinkBlock) { + self.beforeAddLinkBlock(link); + } + [links addObject:link]; + } + } + }]; + } + + NSArray *allRegexps = kAllRegexps(); + NSArray *regexps = [self regexpsWithDataDetectorTypes:self.dataDetectorTypes]; + NSRange textRange = NSMakeRange(0, plainText.length); + for (NSRegularExpression *regexp in regexps) { + [regexp enumerateMatchesInString:plainText options:0 range:textRange usingBlock:^(NSTextCheckingResult *result, __unused NSMatchingFlags flags, __unused BOOL *stop) { + //去重处理 + for (MLLink *link in links){ + if (NSMaxRange(NSIntersectionRange(link.linkRange, result.range))>0){ + return; + } + } + + //这个刚好和MLLinkType对应 + MLLinkType linkType = [allRegexps indexOfObject:regexp]+1; + + if (linkType!=MLLinkTypeNone) { + MLLink *link = [MLLink linkWithType:linkType value:[plainText substringWithRange:result.range] range:result.range]; + if (self.beforeAddLinkBlock) { + self.beforeAddLinkBlock(link); + } + [links addObject:link]; + } + }]; + } + + return links.count>0?links:nil; + +} + +#pragma mark - 链接点击交互相关 +- (MLLink *)linkAtPoint:(CGPoint)location +{ + if (self.links.count<=0||self.textStorage.string.length == 0||self.textContainer.size.width<=0||self.textContainer.size.height<=0) + { + return nil; + } + + CGPoint textOffset; + //在执行usedRectForTextContainer之前最好还是执行下glyphRangeForTextContainer relayout + [self.layoutManager glyphRangeForTextContainer:self.textContainer]; + textOffset = [self textOffsetWithTextSize:[self.layoutManager usedRectForTextContainer:self.textContainer].size]; + + //location转换成在textContainer的绘制区域的坐标 + location.x -= textOffset.x; + location.y -= textOffset.y; + + //获取触摸的字形 + NSUInteger glyphIdx = [self.layoutManager glyphIndexForPoint:location inTextContainer:self.textContainer]; + + //apple文档上写有说 如果location的区域没字形,可能返回的是最近的字形index,所以我们再找到这个字形所处于的rect来确认 + CGRect glyphRect = [self.layoutManager boundingRectForGlyphRange:NSMakeRange(glyphIdx, 1) + inTextContainer:self.textContainer]; + if (!CGRectContainsPoint(glyphRect, location)) + return nil; + + NSUInteger charIndex = [self.layoutManager characterIndexForGlyphAtIndex:glyphIdx]; + + //找到了charIndex,然后去寻找是否这个字处于链接内部 + for (MLLink *link in self.links) { + if (NSLocationInRange(charIndex,link.linkRange)) { + return link; + } + } + + return nil; +} + + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event +{ + UITouch *touch = [touches anyObject]; + + self.activeLink = [self linkAtPoint:[touch locationInView:self]]; + + //如果已经触发了链接,就不朝上传递消息了 + if (!self.activeLink) { + [super touchesBegan:touches withEvent:event]; + } +} + +- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event +{ + //如果当前位置和之前的active的不一样的话,就认为不选那个链接了 + if (self.activeLink) { + UITouch *touch = [touches anyObject]; + + if (![self.activeLink isEqual:[self linkAtPoint:[touch locationInView:self]]]) { + self.activeLink = nil; + } + } else { + [super touchesMoved:touches withEvent:event]; + } + +} + +- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event +{ + if (self.activeLink) { + NSString *linkText = [self.textStorage.string substringWithRange:self.activeLink.linkRange]; + + //告诉外面已经点击了某链接 + if (self.activeLink.didClickLinkBlock) { + self.activeLink.didClickLinkBlock(self.activeLink,linkText,self); + }else if (self.didClickLinkBlock) { + self.didClickLinkBlock(self.activeLink,linkText,self); + }else if(self.delegate&&[self.delegate respondsToSelector:@selector(didClickLink:linkText:linkLabel:)]){ + [self.delegate didClickLink:self.activeLink linkText:linkText linkLabel:self]; + } + + [self performSelector:@selector(setActiveLink:) withObject:nil afterDelay:self.activeLinkToNilDelay]; + } else { + [super touchesEnded:touches withEvent:event]; + } + +} + +- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event +{ + if (self.activeLink) { + self.activeLink = nil; + } else { + [super touchesCancelled:touches withEvent:event]; + } +} + +#pragma mark - 长按相关 +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { + MLLink *link = [self linkAtPoint:[touch locationInView:self]]; + if (link) { + //检测是否有长按回调,没的话就不继续 + if ((self.delegate&&[self.delegate respondsToSelector:@selector(didLongPressLink:linkText:linkLabel:)]) + ||self.didLongPressLinkBlock + ||link.didLongPressLinkBlock) { + return YES; + } + } + + return NO; +} + +- (void)longPressGestureDidFire:(UILongPressGestureRecognizer *)sender { + if (sender.state==UIGestureRecognizerStateBegan) { + MLLink *link = [self linkAtPoint:[sender locationInView:self]]; + if (link) { + NSString *linkText = [self.textStorage.string substringWithRange:link.linkRange]; + + //告诉外面已经长按了某链接 + if (link.didLongPressLinkBlock) { + link.didLongPressLinkBlock(link,linkText,self); + }else if (self.didLongPressLinkBlock) { + self.didLongPressLinkBlock(link,linkText,self); + }else if (self.delegate&&[self.delegate respondsToSelector:@selector(didLongPressLink:linkText:linkLabel:)]){ + [self.delegate didLongPressLink:link linkText:linkText linkLabel:self]; + } + } + } +} + + +#pragma mark - 外部调用相关 +- (BOOL)addLink:(MLLink*)link +{ + return [self addLinks:@[link]].count>0; +} + +- (MLLink*)addLinkWithType:(MLLinkType)type value:(NSString*)value range:(NSRange)range +{ + MLLink *link = [MLLink linkWithType:type value:value range:range]; + return [self addLink:link]?link:nil; +} + +- (NSArray*)addLinks:(NSArray*)links +{ + NSMutableArray *validLinks = [NSMutableArray arrayWithCapacity:links.count]; + for (MLLink *link in links) { + if (!link||NSMaxRange(link.linkRange)>self.textStorage.length) { + continue; + } + + //检测是否此位置已经有东西占用 + for (MLLink *aLink in self.links){ + if (NSMaxRange(NSIntersectionRange(aLink.linkRange, link.linkRange))>0){ + continue; + } + } + + if (self.beforeAddLinkBlock) { + self.beforeAddLinkBlock(link); + } + + //加入它 + [self.links addObject:link]; + + [validLinks addObject:link]; + } + + //重绘 + [self reSetText]; + + return validLinks; +} + +- (void)invalidateDisplayForLinks +{ + [self reSetText]; +} + +#pragma mark - 布局相关 +-(BOOL)layoutManager:(NSLayoutManager *)layoutManager shouldBreakLineByWordBeforeCharacterAtIndex:(NSUInteger)charIndex +{ + if (self.lineBreakMode == NSLineBreakByCharWrapping) { + return NO; + } + + if (self.allowLineBreakInsideLinks) { + return YES; + } + + //让在链接区间下,尽量不break + for (MLLink *link in self.links) { + if (NSLocationInRange(charIndex,link.linkRange)) { + return NO; + } + } + return YES; +} + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/LICENSE b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/LICENSE new file mode 100644 index 0000000..1b30f21 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 molon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/README.md b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/README.md new file mode 100644 index 0000000..c092410 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLLabel/README.md @@ -0,0 +1,10 @@ +# MLLabel +UILabel with TextKit. support for Link and custom Expression. (iOS 7+) + +- Long-press handling for links + +**My library does not seek any reward, +but if you use this library, tell me if you like. :)** + +![MLLabel](https://raw.githubusercontent.com/molon/MLLabel/master/snapshot1.png) +![MLLabel](https://raw.githubusercontent.com/molon/MLLabel/master/snapshot2.png) \ No newline at end of file From 9f87c951c27936577072f6c34b0727eba4bad627 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 6 Mar 2016 23:14:43 +0800 Subject: [PATCH 092/276] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=9C=8B=E5=8F=8B?= =?UTF-8?q?=E5=9C=88demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDAutoLayoutDemo.xcodeproj/project.pbxproj | 6 + .../UserInterfaceState.xcuserstate | Bin 24390 -> 24512 bytes SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m | 14 +-- .../SDTimeLineRefreshFooter.h | 22 ++++ .../SDTimeLineRefreshFooter.m | 111 ++++++++++++++++++ 5 files changed, 146 insertions(+), 7 deletions(-) create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/TimeLineRefreshFooter/SDTimeLineRefreshFooter.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/TimeLineRefreshFooter/SDTimeLineRefreshFooter.m diff --git a/SDAutoLayoutDemo.xcodeproj/project.pbxproj b/SDAutoLayoutDemo.xcodeproj/project.pbxproj index 0f6ea43..78980eb 100644 --- a/SDAutoLayoutDemo.xcodeproj/project.pbxproj +++ b/SDAutoLayoutDemo.xcodeproj/project.pbxproj @@ -206,6 +206,7 @@ 99D694EF1C8C567A00DA97E1 /* SDBaseNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694EB1C8C567A00DA97E1 /* SDBaseNavigationController.m */; }; 99D694F01C8C567A00DA97E1 /* SDBaseTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694ED1C8C567A00DA97E1 /* SDBaseTableViewController.m */; }; 99D694F21C8C585300DA97E1 /* Discover.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 99D694F11C8C585200DA97E1 /* Discover.xcassets */; }; + 99D694F81C8C7F7600DA97E1 /* SDTimeLineRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694F71C8C7F7600DA97E1 /* SDTimeLineRefreshFooter.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -568,6 +569,8 @@ 99D694EC1C8C567A00DA97E1 /* SDBaseTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDBaseTableViewController.h; sourceTree = ""; }; 99D694ED1C8C567A00DA97E1 /* SDBaseTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDBaseTableViewController.m; sourceTree = ""; }; 99D694F11C8C585200DA97E1 /* Discover.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Discover.xcassets; sourceTree = ""; }; + 99D694F61C8C7F7600DA97E1 /* SDTimeLineRefreshFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDTimeLineRefreshFooter.h; sourceTree = ""; }; + 99D694F71C8C7F7600DA97E1 /* SDTimeLineRefreshFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDTimeLineRefreshFooter.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1399,6 +1402,8 @@ 99D694B11C8C54D000DA97E1 /* TimeLineRefreshFooter */ = { isa = PBXGroup; children = ( + 99D694F61C8C7F7600DA97E1 /* SDTimeLineRefreshFooter.h */, + 99D694F71C8C7F7600DA97E1 /* SDTimeLineRefreshFooter.m */, ); path = TimeLineRefreshFooter; sourceTree = ""; @@ -1761,6 +1766,7 @@ 48FC0EA31C4FB60A004098B8 /* UIButton+AFNetworking.m in Sources */, 485302F81C3F65EE004361A7 /* SDCollectionViewCell.m in Sources */, 48FC0EB51C4FB60A004098B8 /* MJRefreshBackFooter.m in Sources */, + 99D694F81C8C7F7600DA97E1 /* SDTimeLineRefreshFooter.m in Sources */, 485302DA1C3F6490004361A7 /* SDWebImageDownloaderOperation.m in Sources */, 485303521C3F97AA004361A7 /* ViewController.m in Sources */, 99D694E31C8C553500DA97E1 /* README.md in Sources */, diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate index d72579f08c40b86ac828a397bf8ee115c473139f..f64014969964c287a2b25a218f59e85d9666beec 100644 GIT binary patch delta 6963 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 diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m index d7c0f1a..9bac85d 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m @@ -23,9 +23,9 @@ #import "DemoVC9.h" -#import "SDRefresh.h" #import "SDTimeLineTableHeaderView.h" #import "SDTimeLineRefreshHeader.h" +#import "SDTimeLineRefreshFooter.h" #import "SDTimeLineCell.h" #import "SDTimeLineCellModel.h" @@ -39,9 +39,8 @@ @interface DemoVC9 () @end @implementation DemoVC9 - { - SDRefreshFooterView *_refreshFooter; + SDTimeLineRefreshFooter *_refreshFooter; SDTimeLineRefreshHeader *_refreshHeader; CGFloat _lastScrollViewOffsetY; } @@ -52,22 +51,23 @@ - (void)viewDidLoad self.automaticallyAdjustsScrollViewInsets = NO; + self.edgesForExtendedLayout = UIRectEdgeTop; + [self.dataArray addObjectsFromArray:[self creatModelsWithCount:10]]; __weak typeof(self) weakSelf = self; // 上拉加载 - _refreshFooter = [SDRefreshFooterView refreshView]; - [_refreshFooter addToScrollView:self.tableView]; + _refreshFooter = [SDTimeLineRefreshFooter refreshFooterWithRefreshingText:@"正在加载数据..."]; __weak typeof(_refreshFooter) weakRefreshFooter = _refreshFooter; - _refreshFooter.beginRefreshingOperation = ^() { + [_refreshFooter addToScrollView:self.tableView refreshOpration:^{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [weakSelf.dataArray addObjectsFromArray:[weakSelf creatModelsWithCount:10]]; [weakSelf.tableView reloadData]; [weakRefreshFooter endRefreshing]; }); - }; + }]; SDTimeLineTableHeaderView *headerView = [SDTimeLineTableHeaderView new]; headerView.frame = CGRectMake(0, 0, 0, 260); diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/TimeLineRefreshFooter/SDTimeLineRefreshFooter.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/TimeLineRefreshFooter/SDTimeLineRefreshFooter.h new file mode 100644 index 0000000..b31410b --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/TimeLineRefreshFooter/SDTimeLineRefreshFooter.h @@ -0,0 +1,22 @@ +// +// SDTimeLineRefreshFooter.h +// GSD_WeiXin(wechat) +// +// Created by aier on 16/3/6. +// Copyright © 2016年 GSD. All rights reserved. +// + +#import "SDBaseRefreshView.h" + +@interface SDTimeLineRefreshFooter : SDBaseRefreshView + ++ (instancetype)refreshFooterWithRefreshingText:(NSString *)text; + +- (void)addToScrollView:(UIScrollView *)scrollView refreshOpration:(void(^)())refrsh; + +@property (nonatomic, strong) UILabel *indicatorLabel; +@property (nonatomic, strong) UIActivityIndicatorView *indicator; + +@property (nonatomic, copy) void (^refreshBlock)(); + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/TimeLineRefreshFooter/SDTimeLineRefreshFooter.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/TimeLineRefreshFooter/SDTimeLineRefreshFooter.m new file mode 100644 index 0000000..2da550a --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/TimeLineRefreshFooter/SDTimeLineRefreshFooter.m @@ -0,0 +1,111 @@ +// +// SDTimeLineRefreshFooter.m +// GSD_WeiXin(wechat) +// +// Created by aier on 16/3/6. +// Copyright © 2016年 GSD. All rights reserved. +// + +#import "SDTimeLineRefreshFooter.h" +#import "UIView+SDAutoLayout.h" + +#define kSDTimeLineRefreshFooterHeight 50 + +@implementation SDTimeLineRefreshFooter + ++ (instancetype)refreshFooterWithRefreshingText:(NSString *)text +{ + SDTimeLineRefreshFooter *footer = [SDTimeLineRefreshFooter new]; + footer.indicatorLabel.text = text; + return footer; +} + +- (instancetype)initWithFrame:(CGRect)frame +{ + if (self = [super initWithFrame:frame]) { + [self setupView]; + } + return self; +} + +- (void)addToScrollView:(UIScrollView *)scrollView refreshOpration:(void (^)())refrsh +{ + self.scrollView = scrollView; + self.refreshBlock = refrsh; +} + +- (void)setupView +{ + UIView *containerView = [UIView new]; + [self addSubview:containerView]; + + self.indicatorLabel = [UILabel new]; + self.indicatorLabel.textColor = [UIColor lightGrayColor]; + self.indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; + [self.indicator startAnimating]; + [containerView sd_addSubviews:@[self.indicatorLabel, self.indicator]]; + + containerView.sd_layout + .heightIs(20) + .centerYEqualToView(self) + .centerXEqualToView(self); + [containerView setupAutoWidthWithRightView:self.indicatorLabel rightMargin:0]; // 宽度自适应 + + self.indicator.sd_layout + .leftEqualToView(containerView) + .topEqualToView(containerView); // ActivityIndicatorView 宽高固定不用约束 + + self.indicatorLabel.sd_layout + .leftSpaceToView(self.indicator, 5) + .topEqualToView(containerView) + .bottomEqualToView(containerView); + [self.indicatorLabel setSingleLineAutoResizeWithMaxWidth:250]; // label宽度自适应 +} + +- (void)setScrollView:(UIScrollView *)scrollView +{ + [super setScrollView:scrollView]; + + [scrollView addSubview:self]; + self.hidden = YES; +} + +- (void)endRefreshing +{ + [super endRefreshing]; + + [UIView animateWithDuration:0.2 animations:^{ + self.scrollView.contentInset = self.scrollViewOriginalInsets; + }]; +} + +- (void)setRefreshState:(SDWXRefreshViewState)refreshState +{ + [super setRefreshState:refreshState]; + + if (refreshState == SDWXRefreshViewStateRefreshing) { + self.scrollViewOriginalInsets = self.scrollView.contentInset; + UIEdgeInsets insets = self.scrollView.contentInset; + insets.bottom += kSDTimeLineRefreshFooterHeight; + self.scrollView.contentInset = insets; + if (self.refreshBlock) { + self.refreshBlock(); + } + } +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if (keyPath != kSDBaseRefreshViewObserveKeyPath) return; + + if (self.scrollView.contentOffset.y > self.scrollView.contentSize.height - self.scrollView.height && self.refreshState != SDWXRefreshViewStateRefreshing) { + self.frame = CGRectMake(0, self.scrollView.contentSize.height, self.scrollView.width, kSDTimeLineRefreshFooterHeight); + self.hidden = NO; + self.refreshState = SDWXRefreshViewStateRefreshing; + } else if (self.refreshState == SDWXRefreshViewStateNormal) { + self.hidden = YES; + } +} + + +@end From 755de7bbeb2cb22576e74e583fa6d8a187c88c7d Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 7 Mar 2016 00:13:46 +0800 Subject: [PATCH 093/276] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 73f37fa..b09e343 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ ☆☆ SDAutoLayout 进阶版视频教程:http://www.letv.com/ptv/vplay/24381390.html ☆☆ ## 部分SDAutoLayout的DEMO +### 完整微信 https://github.com/gsdios/GSD_WeiXin ![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) From f22ac2990ced8c3fd399c80cf76d2650bc08a4dc Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 7 Mar 2016 00:14:52 +0800 Subject: [PATCH 094/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b09e343..8a56706 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ ☆☆ SDAutoLayout 进阶版视频教程:http://www.letv.com/ptv/vplay/24381390.html ☆☆ ## 部分SDAutoLayout的DEMO -### 完整微信 https://github.com/gsdios/GSD_WeiXin +### 完整微信Demo https://github.com/gsdios/GSD_WeiXin ![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) From 885edd05f0592d5e9f40ab893ad245723e2ed361 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 7 Mar 2016 00:50:52 +0800 Subject: [PATCH 095/276] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8a56706..9b5cf73 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,8 @@ ## 部分SDAutoLayout的DEMO ### 完整微信Demo https://github.com/gsdios/GSD_WeiXin -![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) +![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3lweg3g207s0dcu0x.gif) +![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3pziawg205u0a0qv5.gif)![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) ## 更新记录: From 08fcfe98b1323268a0df8042b84460e282d20979 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 7 Mar 2016 00:51:53 +0800 Subject: [PATCH 096/276] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9b5cf73..d175390 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,8 @@ ## 部分SDAutoLayout的DEMO ### 完整微信Demo https://github.com/gsdios/GSD_WeiXin -![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3lweg3g207s0dcu0x.gif) -![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3pziawg205u0a0qv5.gif)![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) + +![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3pziawg205u0a0qv5.gif)![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3lweg3g207s0dcu0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) ## 更新记录: From 4d0134356b81b8fdfd2569679304584211b4d570 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 7 Mar 2016 17:25:36 +0800 Subject: [PATCH 097/276] =?UTF-8?q?=E5=BE=AE=E8=B0=83demo10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 88302 -> 89684 bytes SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m | 39 +++++++++++------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 625a8990eea9e08f8663f8871cd2c5169ce8caaa..5a24d7f35173dff08425a633d73a67683b2518d8 100644 GIT binary patch literal 89684 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%0A_Qa!`3&c}IC)`9L|M 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 CJ|yq} literal 88302 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 diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m index 8f93ebf..4a1b8e9 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m @@ -25,15 +25,18 @@ #import "ThreeThirdCell.h" #import "ThreeFourthCell.h" +/* + 本demo由SDAutoLayout库的使用者“李西亚”提供,感谢“李西亚”对本库的关注与支持! + */ + @interface DemoVC10 () -{ - MJRefreshComponent *myRefreshView; - NSInteger page; -} @property(nonatomic ,strong) UITableView *tv; @property(nonatomic ,strong) NSMutableArray *listArry; +@property (nonatomic, assign) NSInteger page; +@property (nonatomic, strong) MJRefreshComponent *myRefreshView; + @end @implementation DemoVC10 @@ -71,21 +74,25 @@ - (UITableView *)tv{ _tv.delegate = self; _tv.dataSource = self; + __weak typeof(self) weakSelf = self; + //..下拉刷新 _tv.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ - page = 0; - myRefreshView = _tv.header; - [self loadData]; + weakSelf.myRefreshView = weakSelf.tv.header; + weakSelf.page = 0; + [weakSelf loadData]; }]; + // 马上进入刷新状态 [_tv.header beginRefreshing]; //..上拉刷新 _tv.footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{ - page = page + 10; - myRefreshView = _tv.footer; - [self loadData]; + weakSelf.myRefreshView = weakSelf.tv.footer; + weakSelf.page = weakSelf.page + 10; + [weakSelf loadData]; }]; + _tv.footer.hidden = YES; @@ -103,7 +110,7 @@ -(NSMutableArray *)listArry{ #pragma mark - 请求数据 -(void)loadData{ - NSString * urlString = [NSString stringWithFormat:@"http://c.m.163.com/nc/article/%@/%ld-20.html",@"headline/T1348647853363",page]; + NSString * urlString = [NSString stringWithFormat:@"http://c.m.163.com/nc/article/%@/%ld-20.html",@"headline/T1348647853363",self.page]; NSLog(@"______%@",urlString); AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.requestSerializer = [AFJSONRequestSerializer serializer]; @@ -119,29 +126,29 @@ -(void)loadData{ NSMutableArray *arrayM = [NSMutableArray arrayWithArray:[ThreeModel mj_objectArrayWithKeyValuesArray:temArray]]; //..下拉刷新 - if (myRefreshView == _tv.header) { + if (self.myRefreshView == _tv.header) { self.listArry = arrayM; _tv.footer.hidden = self.listArry.count==0?YES:NO; - }else if(myRefreshView == _tv.footer){ + }else if(self.myRefreshView == _tv.footer){ [self.listArry addObjectsFromArray:arrayM]; } - [self doneWithView:myRefreshView]; + [self doneWithView:self.myRefreshView]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"请求失败"); - [myRefreshView endRefreshing]; + [_myRefreshView endRefreshing]; }]; } #pragma mark - 回调刷新 -(void)doneWithView:(MJRefreshComponent*)refreshView{ [_tv reloadData]; - [myRefreshView endRefreshing]; + [_myRefreshView endRefreshing]; } From 838263a6505a8ed841a928ff7f03b5b5de0a86f5 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Tue, 8 Mar 2016 15:43:21 +0800 Subject: [PATCH 098/276] =?UTF-8?q?=E6=9B=B4=E6=96=B0demo1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 89684 -> 90658 bytes SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m | 78 ++++++------------ .../Others/DemoTableViewControler.m | 2 +- 3 files changed, 26 insertions(+), 54 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 5a24d7f35173dff08425a633d73a67683b2518d8..d39bd733ff53bf5ccc9ead4342cb2233c1a01850 100644 GIT binary patch literal 90658 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%0A_Qa!`3&c}IC)`9L|M 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 CJ|yq} diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m b/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m index 0f3a882..6b0fa17 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m @@ -30,75 +30,47 @@ - (void)viewDidLoad [super viewDidLoad]; - // 暂时用view替代展示cell效果 + /* + + 设置view1高度根据子view而自适应(在view1中加入两个子view(testLabel和testView),然后设置view1高度根据子view内容自适应) + */ - self.view0.sd_layout - .leftSpaceToView(self.view, 10) - .topSpaceToView(self.view, 80) - .widthIs(50) - .heightIs(50); - - // view1使用高度根据子view内容自适应,所以不需要设置高度,而是在后面设置“[self.view1 setupAutoHeightWithBottomView:testView bottomMargin:10];”实现高度根据内容自适应 - self.view1.sd_layout - .leftSpaceToView(self.view0, 10) - .topEqualToView(self.view0) - .rightSpaceToView(self.view, 30); - self.view2.sd_layout - .rightSpaceToView(self.view, 10) - .topSpaceToView(self.view1, 20) - .widthRatioToView(self.view0, 1) - .heightRatioToView(self.view0, 1); - - self.view3.sd_layout - .rightSpaceToView(self.view2, 10) - .leftSpaceToView(self.view, 30) - .heightRatioToView(self.view, 0.17) - .topEqualToView(self.view2); - - self.view4.sd_layout - .leftEqualToView(self.view0) - .heightRatioToView(self.view0, 1) - .widthRatioToView(self.view0, 1) - .topSpaceToView(self.view3, 20); - - self.view5.sd_layout - .leftEqualToView(self.view1) - .rightEqualToView(self.view1) - .bottomSpaceToView(self.view, 20) - .topEqualToView(self.view4); -// ============================================================ - - // 在view1中加入两个子view,然后设置view1高度根据子view内容自适应 + UILabel *testLabel_subview1 = [UILabel new]; // 初始化子view1 + testLabel_subview1.text = @"这个紫色的label会根据这些文字内容高度自适应;而这个灰色的父view会根据紫色的label和橙色的view具体情况实现高度自适应。\nGot it! OH YAEH!"; + testLabel_subview1.backgroundColor = [UIColor purpleColor]; + UIView *testView_subview2 = [UIView new]; // 初始化子view2 + testView_subview2.backgroundColor = [UIColor orangeColor]; - UILabel *testLabel = [UILabel new]; - UIView *testView = [UIView new]; - [self.view1 addSubview:testLabel]; - [self.view1 addSubview:testView]; + // 将子view添加进父view + [self.view1 sd_addSubviews:@[testLabel_subview1, testView_subview2]]; - testLabel.backgroundColor = [UIColor purpleColor]; - testView.backgroundColor = [UIColor orangeColor]; - testLabel.text = @"edflgjl;ijf;iljd;lij;lfk;lknsdfhfg;ljhl;sfdj;oigfj;jgf;lfgjrlkfewiorrgi"; - - testLabel.sd_layout + testLabel_subview1.sd_layout .leftSpaceToView(self.view1, 10) .rightSpaceToView(self.view1, 10) .topSpaceToView(self.view1, 10) .autoHeightRatio(0); // 设置文本内容自适应,如果这里的参数为大于0的数值则会以此数值作为view的高宽比设置view的高度 - testView.sd_layout - .topSpaceToView(testLabel, 10) - .widthRatioToView(testLabel, 1) + testView_subview2.sd_layout + .topSpaceToView(testLabel_subview1, 10) + .widthRatioToView(testLabel_subview1, 1) .heightIs(30) - .leftEqualToView(testLabel); + .leftEqualToView(testLabel_subview1); + + + // view1使用高度根据子view内容自适应,所以不需要设置高度,而是设置“[self.view1 setupAutoHeightWithBottomView:testView bottomMargin:10];”实现高度根据内容自适应 + self.view1.sd_layout + .leftSpaceToView(self.view, 10) + .topSpaceToView(self.view, 80) + .rightSpaceToView(self.view, 10); // 设置view1高度根据子其内容自适应 - [self.view1 setupAutoHeightWithBottomView:testView bottomMargin:10]; + [self.view1 setupAutoHeightWithBottomView:testView_subview2 bottomMargin:10]; + -// ============================================================ } @end diff --git a/SDAutoLayoutDemo/Others/DemoTableViewControler.m b/SDAutoLayoutDemo/Others/DemoTableViewControler.m index d469ae3..8d3eab5 100644 --- a/SDAutoLayoutDemo/Others/DemoTableViewControler.m +++ b/SDAutoLayoutDemo/Others/DemoTableViewControler.m @@ -28,7 +28,7 @@ #import "DemoCell.h" NSString * const demo0Content = @"自动布局动画,修改一个view的布局约束,其他view也会自动重新排布"; -NSString * const demo1Content = @"布局示例,其中view1用到了普通view的内容自适应功能,view1内部的label用到了文字自适应功能"; +NSString * const demo1Content = @"设置view1高度根据子view而自适应(在view1中加入两个子view(testLabel和testView),然后设置view1高度根据子view内容自适应)"; NSString * const demo2Content = @"1.设置水平方向的3个等宽子view\n2.设置一个宽高都为50的位于父view中间的view"; NSString * const demo3Content = @"简单tableview展示"; NSString * const demo4Content = @"1.行间距为8的attributedString的label\n2.类cell的自动布局展示"; From 8b2b333bb0d823d8ee5cbe255a40fc24c6a92393 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Wed, 9 Mar 2016 01:28:09 +0800 Subject: [PATCH 099/276] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d175390..005891f 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ ☆☆ SDAutoLayout 基础版视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ ☆☆ SDAutoLayout 进阶版视频教程:http://www.letv.com/ptv/vplay/24381390.html ☆☆ +☆☆ SDAutoLayout 原理简介视频教程:http://www.iqiyi.com/w_19rt0tec4p.html ☆☆ ## 部分SDAutoLayout的DEMO ### 完整微信Demo https://github.com/gsdios/GSD_WeiXin From 91c88fac00a99422dce42fe7211c5f425d73d1d8 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Wed, 9 Mar 2016 01:28:55 +0800 Subject: [PATCH 100/276] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 005891f..d610d1b 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ ☆☆ SDAutoLayout 基础版视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ ☆☆ SDAutoLayout 进阶版视频教程:http://www.letv.com/ptv/vplay/24381390.html ☆☆ + ☆☆ SDAutoLayout 原理简介视频教程:http://www.iqiyi.com/w_19rt0tec4p.html ☆☆ ## 部分SDAutoLayout的DEMO From 2a1c4d55dedd61db4532ba6a700781a11a8a5ba2 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 10 Mar 2016 18:03:55 +0800 Subject: [PATCH 101/276] =?UTF-8?q?=E4=BF=AE=E6=94=B9sd=5FresetLayout?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 90658 -> 90803 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 16 +++++ SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.h | 4 ++ SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m | 6 ++ .../Views/SDChatTableViewCell.m | 17 +---- .../SDAutoLayout/UIView+SDAutoLayout.h | 60 +++++++++++------- .../SDAutoLayout/UIView+SDAutoLayout.m | 37 +++++++++++ 7 files changed, 102 insertions(+), 38 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index d39bd733ff53bf5ccc9ead4342cb2233c1a01850..8eab1d7dd03114fe902f1ac93ff0ef70bd3936d3 100644 GIT binary patch literal 90803 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�C#!X`S|{s=$=y-wWVKFK>twY~ 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 Xu_*dq9><>Of7$l?L;ja_%r*ZXP?xlf literal 90658 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 + + + + diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.h b/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.h index 92f762c..983cb7d 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.h +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.h @@ -8,6 +8,10 @@ #import +/* + 本demo由SDAutoLayout库的使用者“李西亚”提供,感谢“李西亚”对本库的关注与支持! + */ + @interface DemoVC10 : UIViewController @end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m index 4a1b8e9..36d39d3 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m @@ -110,6 +110,9 @@ -(NSMutableArray *)listArry{ #pragma mark - 请求数据 -(void)loadData{ + /* + 本demo由SDAutoLayout库的使用者“李西亚”提供,感谢“李西亚”对本库的关注与支持! + */ NSString * urlString = [NSString stringWithFormat:@"http://c.m.163.com/nc/article/%@/%ld-20.html",@"headline/T1348647853363",self.page]; NSLog(@"______%@",urlString); AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; @@ -160,6 +163,9 @@ -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger) } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ + /* + 本demo由SDAutoLayout库的使用者“李西亚”提供,感谢“李西亚”对本库的关注与支持! + */ ThreeBaseCell * cell = nil; ThreeModel * threeModel = self.listArry[indexPath.row]; diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.m b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.m index 7554860..b8d4f15 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.m @@ -103,20 +103,6 @@ - (void)setModel:(SDChatModel *)model { _model = model; - // 重置frame,防止重用过程中出现问题(只有在cell布局变化非常大的情况下需要此步设置,一般cell的自动布局不需要这样处理) - _label.frame = CGRectZero; - _container.frame = CGRectZero; - _iconImageView.frame = CGRectZero; - _messageImageView.frame = CGRectZero; - _maskImageView.frame = CGRectZero; - - // 清空之前的约束(只有在cell布局变化非常大的情况下需要此步设置,一般cell的自动布局不需要这样处理) - [_label sd_clearAutoLayoutSettings]; - [_container sd_clearAutoLayoutSettings]; - [_iconImageView sd_clearAutoLayoutSettings]; - [_messageImageView sd_clearAutoLayoutSettings]; - - _label.text = model.text; self.iconImageView.image = [UIImage imageNamed:model.iconName]; @@ -127,6 +113,7 @@ - (void)setModel:(SDChatModel *)model // cell重用时候清除只有文字的情况下设置的container宽度自适应约束 [self.container clearAutoWidthSettings]; + self.messageImageView.hidden = NO; self.messageImageView.image = [UIImage imageNamed:model.imageName]; @@ -170,6 +157,8 @@ - (void)setModel:(SDChatModel *)model // 清除展示图片时候用到的mask [_container.layer.mask removeFromSuperlayer]; + self.messageImageView.hidden = YES; + // 清除展示图片时候_containerBackgroundImageView用到的didFinishAutoLayoutBlock _containerBackgroundImageView.didFinishAutoLayoutBlock = nil; diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h index 5a442b5..e806126 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h @@ -218,6 +218,42 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @end +@interface UIView (SDAutoLayout) + +/** 开始自动布局 */ +- (SDAutoLayoutModel *)sd_layout; + +/** 清空之前的自动布局设置,重新开始自动布局 */ +- (SDAutoLayoutModel *)sd_resetLayout; + +/** 清空之前的自动布局设置 */ +- (void)sd_clearAutoLayoutSettings; + +/** 将自身frame清零(一般在cell内部控件重用前调用) */ +- (void)sd_clearViewFrameCache; + +/** 将自己的需要自动布局的subviews的frame清零(一般在cell内部控件重用前调用) */ +- (void)sd_clearSubviewsAutoLayoutFrameCaches; + +/** 设置固定宽度保证宽度不在自动布局过程再做中调整 */ +@property (nonatomic, strong) NSNumber *fixedWith; + +/** 设置固定高度保证高度不在自动布局过程中再做调整 */ +@property (nonatomic, strong) NSNumber *fixedHeight; + + + +// -------------------库内部使用----------------------- +- (NSMutableArray *)autoLayoutModelsArray; +- (void)addAutoLayoutModel:(SDAutoLayoutModel *)model; +@property (nonatomic) SDAutoLayoutModel *ownLayoutModel; +@property (nonatomic, strong) NSNumber *sd_maxWidth; +@property (nonatomic, strong) NSNumber *autoHeightRatioValue; +// -------------------库内部使用----------------------- + +@end + + @interface UIScrollView (SDAutoContentSize) /** 设置scrollview内容竖向自适应 */ @@ -282,31 +318,7 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @end -@interface UIView (SDAutoLayout) - -/** 开始自动布局 */ -- (SDAutoLayoutModel *)sd_layout; - -/** 清空之前的自动布局设置,重新开始自动布局 */ -- (SDAutoLayoutModel *)sd_resetLayout; - -/** 清空之前的自动布局设置 */ -- (void)sd_clearAutoLayoutSettings; - -- (NSMutableArray *)autoLayoutModelsArray; - -- (void)addAutoLayoutModel:(SDAutoLayoutModel *)model; -@property (nonatomic) SDAutoLayoutModel *ownLayoutModel; - -@property (nonatomic, strong) NSNumber *fixedWith; -@property (nonatomic, strong) NSNumber *fixedHeight; - -@property (nonatomic, strong) NSNumber *sd_maxWidth; - -@property (nonatomic, strong) NSNumber *autoHeightRatioValue; - -@end @interface UIView (SDChangeFrame) diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m index bc1f720..33b4721 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m @@ -726,8 +726,28 @@ - (SDAutoLayoutModel *)sd_layout - (SDAutoLayoutModel *)sd_resetLayout { + /* + * 方案待定 [self sd_clearAutoLayoutSettings]; return [self sd_layout]; + */ + + SDAutoLayoutModel *model = [self ownLayoutModel]; + SDAutoLayoutModel *newModel = [SDAutoLayoutModel new]; + newModel.needsAutoResizeView = self; + [self sd_clearViewFrameCache]; + NSInteger index = 0; + if (model) { + index = [self.superview.autoLayoutModelsArray indexOfObject:model]; + [self.superview.autoLayoutModelsArray replaceObjectAtIndex:index withObject:newModel]; + } else { + [self.superview.autoLayoutModelsArray addObject:newModel]; + } + [self setOwnLayoutModel:newModel]; + if (self.autoHeightRatioValue) { + self.autoHeightRatioValue = nil; + } + return newModel; } - (void)sd_clearAutoLayoutSettings @@ -742,6 +762,23 @@ - (void)sd_clearAutoLayoutSettings } } +- (void)sd_clearViewFrameCache +{ + self.frame = CGRectZero; +} + +- (void)sd_clearSubviewsAutoLayoutFrameCaches +{ + if (self.autoLayoutModelsArray.count == 0) return; + + [self.autoLayoutModelsArray enumerateObjectsUsingBlock:^(SDAutoLayoutModel *model, NSUInteger idx, BOOL *stop) { + model.needsAutoResizeView.frame = CGRectZero; + if (model.needsAutoResizeView.tag == 11001) { + NSLog(@">>>>> %@", model.needsAutoResizeView); + } + }]; +} + - (void)sd_layoutSubviews { [self sd_layoutSubviews]; From e8ed9780bba94e98728c37af7265af371791d98d Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 10 Mar 2016 19:35:54 +0800 Subject: [PATCH 102/276] =?UTF-8?q?=E4=BF=AE=E6=94=B9sd=5FresetLayout?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 90803 -> 90760 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 16 ---------------- .../SDAutoLayout/UIView+SDAutoLayout.m | 3 --- 3 files changed, 19 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 8eab1d7dd03114fe902f1ac93ff0ef70bd3936d3..5ddefb30a7aabd2727d63af4e14ae5bf93bb21d1 100644 GIT binary patch delta 18605 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 diff --git a/SDAutoLayoutDemo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/SDAutoLayoutDemo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index d7d9e8c..8f94031 100644 --- a/SDAutoLayoutDemo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/SDAutoLayoutDemo.xcodeproj/xcuserdata/gsd.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -13,21 +13,5 @@ stopOnStyle = "0"> - - - - diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m index 33b4721..1cf844f 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m @@ -773,9 +773,6 @@ - (void)sd_clearSubviewsAutoLayoutFrameCaches [self.autoLayoutModelsArray enumerateObjectsUsingBlock:^(SDAutoLayoutModel *model, NSUInteger idx, BOOL *stop) { model.needsAutoResizeView.frame = CGRectZero; - if (model.needsAutoResizeView.tag == 11001) { - NSLog(@">>>>> %@", model.needsAutoResizeView); - } }]; } From ec2392b0a0ac3400862c62018095fa85893ede72 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 14 Mar 2016 20:17:44 +0800 Subject: [PATCH 103/276] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d610d1b..63dd8c5 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ ☆☆ SDAutoLayout 原理简介视频教程:http://www.iqiyi.com/w_19rt0tec4p.html ☆☆ ## 部分SDAutoLayout的DEMO +### SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3effb8 ### 完整微信Demo https://github.com/gsdios/GSD_WeiXin ![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3pziawg205u0a0qv5.gif)![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3lweg3g207s0dcu0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) From 0e93eb1c6f00f7c771cc37fa719eb14405dc6a68 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Wed, 16 Mar 2016 15:36:33 +0800 Subject: [PATCH 104/276] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 如果发现pod search SDAutoLayout 搜索出来的不是最新版本,需要在终端执行cd转换文件路径命令退回到desktop,然后执行pod setup命令更新本地spec缓存(可能需要几分钟),然后再搜索就可以了 --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 63dd8c5..0676e80 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ 支持pod: pod 'SDAutoLayout', '~> 1.31' +如果发现pod search SDAutoLayout 搜索出来的不是最新版本,需要在终端执行cd转换文件路径命令退回到desktop,然后执行pod setup命令更新本地spec缓存(可能需要几分钟),然后再搜索就可以了 + ### QQ交流群:519489682(已满)497140713 ☆☆ SDAutoLayout 基础版视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ @@ -146,4 +148,3 @@ ![](http://ww3.sinaimg.cn/bmiddle/9b8146edgw1ex4mukixr6g209g07lhdt.gif) - From 7ee2355a1eb38d11c725b35a0a1475c98f010c3c Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Fri, 18 Mar 2016 22:46:53 +0800 Subject: [PATCH 105/276] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=80=A7=E8=83=BD?= =?UTF-8?q?=EF=BC=9B=E5=A2=9E=E5=8A=A0=E4=BB=BB=E6=84=8F=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E7=9A=84contentsize=E8=87=AA=E9=80=82=E5=BA=94scrollview?= =?UTF-8?q?=E7=9A=84demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDAutoLayoutDemo.xcodeproj/project.pbxproj | 28 ++ .../UserInterfaceState.xcuserstate | Bin 90760 -> 95787 bytes SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.m | 6 + SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m | 3 +- SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.h | 13 + SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.m | 164 +++++++++++ SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.h | 13 + SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.m | 259 ++++++++++++++++++ SDAutoLayoutDemo/DemoVC/DemoVC6/DemoVC6.m | 2 +- .../Others/DemoTableViewControler.m | 30 +- .../UITableView+SDAutoTableViewCellHeight.h | 4 +- .../UITableView+SDAutoTableViewCellHeight.m | 53 ++-- 12 files changed, 539 insertions(+), 36 deletions(-) create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.m create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.m diff --git a/SDAutoLayoutDemo.xcodeproj/project.pbxproj b/SDAutoLayoutDemo.xcodeproj/project.pbxproj index 78980eb..ed74f9c 100644 --- a/SDAutoLayoutDemo.xcodeproj/project.pbxproj +++ b/SDAutoLayoutDemo.xcodeproj/project.pbxproj @@ -119,6 +119,8 @@ 48EB73401C748EDE003A818E /* 9.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73231C748EDE003A818E /* 9.jpg */; }; 48EB73431C748F26003A818E /* DemoVC11.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EB73421C748F26003A818E /* DemoVC11.m */; }; 48EB73451C749212003A818E /* Home.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 48EB73441C749212003A818E /* Home.xcassets */; }; + 48EEAD6C1C9C25F4001138FE /* DemoVC12.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EEAD6B1C9C25F4001138FE /* DemoVC12.m */; }; + 48EEAD701C9C3006001138FE /* DemoVC13.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EEAD6F1C9C3006001138FE /* DemoVC13.m */; }; 48FC0E161C4FB3A8004098B8 /* Ads.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E041C4FB3A8004098B8 /* Ads.m */; }; 48FC0E171C4FB3A8004098B8 /* Editor.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E061C4FB3A8004098B8 /* Editor.m */; }; 48FC0E181C4FB3A8004098B8 /* Imgextra.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E081C4FB3A8004098B8 /* Imgextra.m */; }; @@ -396,6 +398,10 @@ 48EB73411C748F26003A818E /* DemoVC11.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC11.h; sourceTree = ""; }; 48EB73421C748F26003A818E /* DemoVC11.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC11.m; sourceTree = ""; }; 48EB73441C749212003A818E /* Home.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Home.xcassets; sourceTree = ""; }; + 48EEAD6A1C9C25F4001138FE /* DemoVC12.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC12.h; sourceTree = ""; }; + 48EEAD6B1C9C25F4001138FE /* DemoVC12.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC12.m; sourceTree = ""; }; + 48EEAD6E1C9C3006001138FE /* DemoVC13.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC13.h; sourceTree = ""; }; + 48EEAD6F1C9C3006001138FE /* DemoVC13.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC13.m; sourceTree = ""; }; 48FC0E031C4FB3A8004098B8 /* Ads.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Ads.h; sourceTree = ""; }; 48FC0E041C4FB3A8004098B8 /* Ads.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Ads.m; sourceTree = ""; }; 48FC0E051C4FB3A8004098B8 /* Editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Editor.h; sourceTree = ""; }; @@ -706,6 +712,8 @@ 485303021C3F977A004361A7 /* DemoVC */ = { isa = PBXGroup; children = ( + 48EEAD6D1C9C2FE4001138FE /* DemoVC13 */, + 48EEAD691C9C25DB001138FE /* DemoVC12 */, 48EB72E01C748D40003A818E /* DemoVC11 */, 48FC0E011C4FB399004098B8 /* DemoVC10 */, 485303031C3F977A004361A7 /* DemoVC0 */, @@ -1050,6 +1058,24 @@ path = cell_icons; sourceTree = ""; }; + 48EEAD691C9C25DB001138FE /* DemoVC12 */ = { + isa = PBXGroup; + children = ( + 48EEAD6A1C9C25F4001138FE /* DemoVC12.h */, + 48EEAD6B1C9C25F4001138FE /* DemoVC12.m */, + ); + path = DemoVC12; + sourceTree = ""; + }; + 48EEAD6D1C9C2FE4001138FE /* DemoVC13 */ = { + isa = PBXGroup; + children = ( + 48EEAD6E1C9C3006001138FE /* DemoVC13.h */, + 48EEAD6F1C9C3006001138FE /* DemoVC13.m */, + ); + path = DemoVC13; + sourceTree = ""; + }; 48FC0E011C4FB399004098B8 /* DemoVC10 */ = { isa = PBXGroup; children = ( @@ -1706,6 +1732,7 @@ 485302E11C3F6490004361A7 /* UIImageView+HighlightedWebCache.m in Sources */, 485303401C3F977A004361A7 /* DemoVC7Cell.m in Sources */, 99D694B51C8C54D000DA97E1 /* SDTimeLineCellModel.m in Sources */, + 48EEAD701C9C3006001138FE /* DemoVC13.m in Sources */, 485303351C3F977A004361A7 /* DemoVC0.m in Sources */, 99D694DC1C8C553500DA97E1 /* MLTextAttachment.m in Sources */, 48FC0EA71C4FB60A004098B8 /* UIWebView+AFNetworking.m in Sources */, @@ -1752,6 +1779,7 @@ 485303551C3F97E6004361A7 /* DemoCell.m in Sources */, 99D694DA1C8C553500DA97E1 /* NSString+MLLabel.m in Sources */, 48FC0EA61C4FB60A004098B8 /* UIRefreshControl+AFNetworking.m in Sources */, + 48EEAD6C1C9C25F4001138FE /* DemoVC12.m in Sources */, 485303391C3F977A004361A7 /* TestCell2.m in Sources */, 485302CC1C3F6490004361A7 /* SDBrowserImageView.m in Sources */, 485302CD1C3F6490004361A7 /* SDPhotoBrowser.m in Sources */, diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 5ddefb30a7aabd2727d63af4e14ae5bf93bb21d1..845b32255a1587b7e5659d44c085bb3d74b3183a 100644 GIT binary patch literal 95787 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 literal 90760 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 diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.m b/SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.m index 682dc53..e7f1cf2 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.m @@ -114,5 +114,11 @@ - (void)animation } +- (void)dealloc +{ + [_timer invalidate]; + _timer = nil; +} + @end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m b/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m index 6b0fa17..7cf7471 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m @@ -69,8 +69,7 @@ - (void)viewDidLoad // 设置view1高度根据子其内容自适应 [self.view1 setupAutoHeightWithBottomView:testView_subview2 bottomMargin:10]; - - } + @end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.h b/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.h new file mode 100644 index 0000000..134ff36 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.h @@ -0,0 +1,13 @@ +// +// DemoVC12.h +// SDAutoLayoutDemo +// +// Created by gsd on 16/3/18. +// Copyright © 2016年 gsd. All rights reserved. +// + +#import + +@interface DemoVC12 : UIViewController + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.m b/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.m new file mode 100644 index 0000000..543f0b8 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.m @@ -0,0 +1,164 @@ +// +// DemoVC12.m +// SDAutoLayoutDemo +// +// Created by gsd on 16/3/18. +// Copyright © 2016年 gsd. All rights reserved. +// + +#import "DemoVC12.h" + +#import "UIView+SDAutoLayout.h" + +@implementation DemoVC12 +{ + UIScrollView *_scrollView; + + UIView *_subview1; + UILabel *_subview1_label; + + UILabel *_subview2; + + UIView *_redView; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor whiteColor]; + + [self setupScrollView]; +} + +// 添加scrollview +- (void)setupScrollView +{ + UIScrollView *scroll = [UIScrollView new]; + [self.view addSubview:scroll]; + _scrollView = scroll; + + // 设置scrollview与父view的边距 + scroll.sd_layout.spaceToSuperView(UIEdgeInsetsZero); + + [self setupScrollViewSubView1]; + [self setupScrollViewSubView2]; + [self setupScrollViewSubView3]; + + // 设置scrollview的contentsize自适应 + [scroll setupAutoContentSizeWithBottomView:_redView bottomMargin:10]; +} + +// 设置scrollview的第一个子深粉色view(包含左边一个label、右边一个button的深粉色view,这个view根据label文字高度自适应) +- (void)setupScrollViewSubView1 +{ + // 深粉色view + UIView *container = [UIView new]; + container.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:0.3]; + [_scrollView addSubview:container]; + _subview1 = container; + + + // 深粉色view第一个子view:左边的lable + UILabel *leftLabel = [UILabel new]; + leftLabel.text = @"我是SDAutoLayout,你是谁?么么哒!"; + _subview1_label = leftLabel; + + // 深粉色view第二个子view:白色文字button + UIButton *rightButton = [UIButton new]; + [rightButton setTitle:@"添加文字" forState:UIControlStateNormal]; + [rightButton addTarget:self action:@selector(subView1ButtonClicked) forControlEvents:UIControlEventTouchUpInside]; + + + [container sd_addSubviews:@[leftLabel, rightButton]]; + + leftLabel.sd_layout + .leftSpaceToView(container, 10) + .rightSpaceToView(container, 100) + .topSpaceToView(container, 10) + .autoHeightRatio(0); // 此行设置label文字自适应 + + rightButton.sd_layout + .bottomEqualToView(container) + .rightSpaceToView(container, 10) + .widthIs(80) + .heightIs(20); + + + container.sd_layout + .leftSpaceToView(_scrollView, 10) + .rightSpaceToView(_scrollView, 10) + .topSpaceToView(_scrollView, 10); + [container setupAutoHeightWithBottomView:leftLabel bottomMargin:10]; // 设置深粉色view根据label的具体内容而自适应 +} + + +- (void)setupScrollViewSubView2 +{ + UILabel *label = [UILabel new]; + label.text = [NSString stringWithFormat:@" 共有%ld个字符 ", [_subview1_label.text length]]; + label.backgroundColor = [[UIColor blueColor] colorWithAlphaComponent:0.5]; + _subview2 = label; + [_scrollView addSubview:label]; + + label.sd_layout + .topSpaceToView(_subview1, 10) + .centerXEqualToView(_subview1) + .heightIs(30); + [label setSingleLineAutoResizeWithMaxWidth:400]; +} + +- (void)setupScrollViewSubView3 +{ + UIView *red = [UIView new]; + red.backgroundColor = [UIColor redColor]; + _redView = red; + + UIView *green = [UIView new]; + green.backgroundColor = [UIColor greenColor]; + + UIView *blue = [UIView new]; + blue.backgroundColor = [UIColor blueColor]; + + [_scrollView sd_addSubviews:@[red, green, blue]]; + + // 设置scrollview底部三个等宽子view(红绿蓝三个view) + _scrollView.sd_equalWidthSubviews = @[red, green, blue]; + + red.sd_layout + .leftSpaceToView(_scrollView, 20) // 设置redview的左边距 + .topSpaceToView(_subview2, 20) + .heightEqualToWidth(); + + green.sd_layout + .leftSpaceToView(red, 20) // 设置greenview的左边距 + .topEqualToView(red) + .heightEqualToWidth(); + + blue.sd_layout + .leftSpaceToView(green, 20) // 设置blueview的左边距 + .topEqualToView(red) + .rightSpaceToView(_scrollView, 20) // 设置blueview的右边距 + .heightEqualToWidth(); +} + + +- (void)subView1ButtonClicked +{ + NSString *addStr = [NSString stringWithFormat:@"新增文字,发生时间:%@", [[NSDate date] descriptionWithLocale:nil]]; + _subview1_label.text = [NSString stringWithFormat:@"%@ ---> %@", _subview1_label.text, addStr]; + [_subview1_label updateLayout]; + + _subview2.text = [NSString stringWithFormat:@" 共有%ld个字符 ", [_subview1_label.text length]]; + + if (_scrollView.contentSize.height > _scrollView.height) { + CGPoint point = _scrollView.contentOffset; + point.y = _scrollView.contentSize.height - _scrollView.height; + [UIView animateWithDuration:0.2 animations:^{ + _scrollView.contentOffset = point; + }]; + } +} + + + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.h b/SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.h new file mode 100644 index 0000000..f63301f --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.h @@ -0,0 +1,13 @@ +// +// DemoVC13.h +// SDAutoLayoutDemo +// +// Created by gsd on 16/3/18. +// Copyright © 2016年 gsd. All rights reserved. +// + +#import + +@interface DemoVC13 : UIViewController + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.m b/SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.m new file mode 100644 index 0000000..b344145 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.m @@ -0,0 +1,259 @@ +// +// DemoVC13.m +// SDAutoLayoutDemo +// +// Created by gsd on 16/3/18. +// Copyright © 2016年 gsd. All rights reserved. +// + +#import "DemoVC13.h" + +#import "UIView+SDAutoLayout.h" + +NSString *const kCommonText = @"Hello, everybody! 我是SDAutoLayout,我是不是萌萌哒呢? ^_^ ^(***)^ ^_^ "; +static const CGFloat maxImageViewWidth = 200.f; + +@interface DemoVC13 () + +@property (nonatomic, strong) UIScrollView *scroollView; + +@property (nonatomic, strong) UILabel *contentLabel; + +@property (nonatomic, strong) UIView *lastBottomLine; + +@property (nonatomic, strong) UIImageView *imageView; + +@end + +@implementation DemoVC13 + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.edgesForExtendedLayout = UIRectEdgeNone; + self.view.backgroundColor = [UIColor whiteColor]; + + [self setupContentCell]; + [self setupImageCell]; + + [self.scroollView setupAutoContentSizeWithBottomView:self.lastBottomLine bottomMargin:10]; +} + +- (UIScrollView *)scroollView +{ + if (!_scroollView) { + _scroollView = [UIScrollView new]; + [self.view addSubview:_scroollView]; + + _scroollView.sd_layout.spaceToSuperView(UIEdgeInsetsZero); + } + return _scroollView; +} + +- (UIView *)addSeparatorLineBellowView:(UIView *)view margin:(CGFloat)margin +{ + UIView *line = [UIView new]; + line.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.6]; + [self.scroollView addSubview:line]; + + line.sd_layout + .leftSpaceToView(self.scroollView, 5) + .rightSpaceToView(self.scroollView, 5) + .heightIs(1) + .topSpaceToView(view, margin); + + return line; +} + +- (UILabel *)titleLabelWithText:(NSString *)text +{ + UILabel *titleLabel = [UILabel new]; + titleLabel.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.5]; + titleLabel.text = text; + titleLabel.textAlignment = NSTextAlignmentCenter; + return titleLabel; +} + +- (UIButton *)buttonWithTitle:(NSString *)title bgColor:(UIColor *)bgColor sel:(SEL)sel +{ + UIButton *button = [UIButton new]; + [button setTitle:title forState:UIControlStateNormal]; + button.backgroundColor = bgColor; + [button addTarget:self action:sel forControlEvents:UIControlEventTouchUpInside]; + return button; +} + +- (void)setupContentCell +{ + UILabel *titleLabel = [self titleLabelWithText:@"文字内容"]; + + UILabel *contentLabel = [UILabel new]; + contentLabel.backgroundColor = titleLabel.backgroundColor; + contentLabel.text = kCommonText; + self.contentLabel = contentLabel; + + UIView *buttonContainer = [UIView new]; + + { + UIButton *addButton = [self buttonWithTitle:@"添加文字" bgColor:[[UIColor blueColor] colorWithAlphaComponent:0.3] sel:@selector(addText)]; + + UIButton *delButton = [self buttonWithTitle:@"删减文字" bgColor:[[UIColor redColor] colorWithAlphaComponent:0.7] sel:@selector(delText)]; + + [buttonContainer sd_addSubviews:@[addButton, delButton]]; + + + buttonContainer.sd_equalWidthSubviews = @[addButton, delButton]; + + addButton.sd_layout + .leftSpaceToView(buttonContainer, 10) + .topEqualToView(buttonContainer) + .bottomEqualToView(buttonContainer); + + delButton.sd_layout + .leftSpaceToView(addButton, 30) + .rightSpaceToView(buttonContainer, 10) + .topEqualToView(buttonContainer) + .bottomEqualToView(buttonContainer); + } + + [self.scroollView sd_addSubviews:@[titleLabel, contentLabel, buttonContainer]]; + + titleLabel.sd_layout + .leftSpaceToView(self.scroollView, 10) + .topSpaceToView(self.scroollView, 20) + .widthIs(80) + .heightIs(20); + + contentLabel.sd_layout + .leftSpaceToView(titleLabel, 10) + .topEqualToView(titleLabel) + .rightSpaceToView(self.scroollView, 10) + .autoHeightRatio(0); + + buttonContainer.sd_layout + .leftEqualToView(contentLabel) + .rightEqualToView(contentLabel) + .topSpaceToView(contentLabel, 10) + .heightIs(25); + + self.lastBottomLine = [self addSeparatorLineBellowView:buttonContainer margin:10]; + +} + +- (void)setupImageCell +{ + UILabel *titleLabel = [self titleLabelWithText:@"图片展示"]; + + UIImageView *imageView = [UIImageView new]; + imageView.image = [UIImage imageNamed:@"pic0.jpg"]; + self.imageView = imageView; + + UIButton *magnifyButton = [self buttonWithTitle:@"放大" bgColor:[[UIColor blueColor] colorWithAlphaComponent:0.3] sel:@selector(magnifyImage)]; + + UIButton *shrinkButton = [self buttonWithTitle:@"缩小" bgColor:[[UIColor redColor] colorWithAlphaComponent:0.7] sel:@selector(shrinkImage)]; + + [self.scroollView sd_addSubviews:@[titleLabel, imageView, magnifyButton, shrinkButton]]; + + titleLabel.sd_layout + .leftSpaceToView(self.scroollView, 10) + .topSpaceToView(self.lastBottomLine, 10) + .widthIs(80) + .heightIs(20); + + imageView.sd_layout + .leftSpaceToView(titleLabel, 10) + .topEqualToView(titleLabel) + .widthIs(50) + .autoHeightRatio(2) + .maxWidthIs(maxImageViewWidth) + .maxHeightIs(800); + + magnifyButton.sd_layout + .centerXEqualToView(imageView) + .topSpaceToView(imageView, 10) + .widthIs(50) + .heightIs(25); + + shrinkButton.sd_layout + .leftEqualToView(magnifyButton) + .rightEqualToView(magnifyButton) + .topSpaceToView(magnifyButton, 10) + .heightIs(25); + + self.lastBottomLine = [self addSeparatorLineBellowView:shrinkButton margin:10]; +} + + +- (void)addText +{ + self.contentLabel.text = [NSString stringWithFormat:@"%@ %@", self.contentLabel.text, kCommonText]; + [self.scroollView layoutSubviews]; +} + +- (void)delText +{ + long to = self.contentLabel.text.length - 20; + to = to < 1 ? 1 : to; + self.contentLabel.text = [self.contentLabel.text substringToIndex:to]; + [self.scroollView layoutSubviews]; +} + +- (void)magnifyImage +{ + CGFloat w = self.imageView.width * 1.1; + if (w > maxImageViewWidth) { + [self showAlertWithText:@"已经达到最大宽度"]; + return; + } + [UIView animateWithDuration:0.2 animations:^{ + self.imageView.sd_layout.widthIs(self.imageView.width * 1.2); + [self.scroollView layoutSubviews]; + }]; +} + +- (void)shrinkImage +{ + [UIView animateWithDuration:0.2 animations:^{ + self.imageView.sd_layout.widthIs(self.imageView.width * 0.8); + [self.scroollView layoutSubviews]; + }]; +} + + +- (void)showAlertWithText:(NSString *)text +{ + UIView *alert = [UIView new]; + alert.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5]; + + UILabel *label = [UILabel new]; + label.text = text; + label.textColor = [UIColor whiteColor]; + + [alert addSubview:label]; + + label.sd_layout + .leftSpaceToView(alert, 20) + .rightSpaceToView(alert, 20) + .topSpaceToView(alert, 20) + .autoHeightRatio(0); + + + + + [[UIApplication sharedApplication].keyWindow addSubview:alert]; + + alert.sd_layout + .centerXEqualToView(alert.superview) + .centerYEqualToView(alert.superview) + .widthIs(200); + [alert setupAutoHeightWithBottomView:label bottomMargin:20]; + + alert.sd_cornerRadius = @(5); + + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [alert removeFromSuperview]; + }); +} + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC6/DemoVC6.m b/SDAutoLayoutDemo/DemoVC/DemoVC6/DemoVC6.m index 9795839..54924e7 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC6/DemoVC6.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC6/DemoVC6.m @@ -55,7 +55,7 @@ - (void)viewDidLoad { [scrollView setupAutoContentSizeWithBottomView:self.view3 bottomMargin:20]; // 设置圆角 - self.view0.sd_cornerRadiusFromHeightRatio = @(0.5); + self.view0.sd_cornerRadiusFromHeightRatio = @(0.5); // 设置view0的圆角半径为自身高度的0.5倍 self.view1.sd_cornerRadiusFromWidthRatio = @(0.5); self.view2.sd_cornerRadiusFromWidthRatio = @(0.5); } diff --git a/SDAutoLayoutDemo/Others/DemoTableViewControler.m b/SDAutoLayoutDemo/Others/DemoTableViewControler.m index 8d3eab5..5989538 100644 --- a/SDAutoLayoutDemo/Others/DemoTableViewControler.m +++ b/SDAutoLayoutDemo/Others/DemoTableViewControler.m @@ -27,18 +27,20 @@ #import "DemoCell.h" -NSString * const demo0Content = @"自动布局动画,修改一个view的布局约束,其他view也会自动重新排布"; -NSString * const demo1Content = @"设置view1高度根据子view而自适应(在view1中加入两个子view(testLabel和testView),然后设置view1高度根据子view内容自适应)"; -NSString * const demo2Content = @"1.设置水平方向的3个等宽子view\n2.设置一个宽高都为50的位于父view中间的view"; -NSString * const demo3Content = @"简单tableview展示"; -NSString * const demo4Content = @"1.行间距为8的attributedString的label\n2.类cell的自动布局展示"; -NSString * const demo5Content = @"1.利用普通view的内容自适应功能添加tableheaderview\n2.利用自动布局功能实现cell内部图文排布,图片可根据原始尺寸按比例缩放后展示\n3.利用“普通版tableview的cell高度自适应”完成tableview的排布"; -NSString * const demo6Content = @"展示scrollview的内容自适应和普通view的动态圆角处理"; -NSString * const demo7Content = @"利用“普通版tableview的《多cell》高度自适应”2步设置完成tableview的排布"; -NSString * const demo8Content = @"利用“升级版tableview的《多cell》高度自适应”1步完成tableview的排布。\n注意:升级版方法适用于cell的model有多个的情况下,性能比普通版稍微差一些,不建议在数据量大的tableview中使用(cell数量尽量少于100个),如果有大量的cell或者cell界面复杂渲染耗费性能较大则推荐使用普通方法简化版“cellHeightForIndexPath:model:keyPath:cellClass:contentViewWidth:”方法同样是一步设置即可完成"; -NSString * const demo9Content = @"利用SDAutoLayout仿制微信朋友圈。高仿微信计划:\n1.高仿朋友圈 \n2.完善细节 \n3.高仿完整微信app \nPS:代码会持续在我的github更新"; -NSString * const demo10Content = @"一个SDAutoLayout使用者“李西亚”同学贡献的仿网易新闻界面"; -NSString * const demo11Content = @"仿微信的聊天界面:\n1.纯文本消息(带可点击链接,表情)\n2.图片消息"; +NSString * const demo0Description = @"自动布局动画,修改一个view的布局约束,其他view也会自动重新排布"; +NSString * const demo1Description = @"设置view1高度根据子view而自适应(在view1中加入两个子view(testLabel和testView),然后设置view1高度根据子view内容自适应)"; +NSString * const demo2Description = @"1.设置水平方向的3个等宽子view\n2.设置一个宽高都为50的位于父view中间的view"; +NSString * const demo3Description = @"简单tableview展示"; +NSString * const demo4Description = @"1.行间距为8的attributedString的label\n2.类cell的自动布局展示"; +NSString * const demo5Description = @"1.利用普通view的内容自适应功能添加tableheaderview\n2.利用自动布局功能实现cell内部图文排布,图片可根据原始尺寸按比例缩放后展示\n3.利用“普通版tableview的cell高度自适应”完成tableview的排布"; +NSString * const demo6Description = @"展示scrollview的内容自适应和普通view的动态圆角处理"; +NSString * const demo7Description = @"利用“普通版tableview的《多cell》高度自适应”2步设置完成tableview的排布"; +NSString * const demo8Description = @"利用“升级版tableview的《多cell》高度自适应”1步完成tableview的排布。\n注意:升级版方法适用于cell的model有多个的情况下,性能比普通版稍微差一些,不建议在数据量大的tableview中使用(cell数量尽量少于100个),如果有大量的cell或者cell界面复杂渲染耗费性能较大则推荐使用普通方法简化版“cellHeightForIndexPath:model:keyPath:cellClass:contentViewWidth:”方法同样是一步设置即可完成"; +NSString * const demo9Description = @"利用SDAutoLayout仿制微信朋友圈。高仿微信计划:\n1.高仿朋友圈 \n2.完善细节 \n3.高仿完整微信app \nPS:代码会持续在我的github更新"; +NSString * const demo10Description = @"一个SDAutoLayout使用者“李西亚”同学贡献的仿网易新闻界面"; +NSString * const demo11Description = @"仿微信的聊天界面:\n1.纯文本消息(带可点击链接,表情)\n2.图片消息"; +NSString * const demo12Description = @"scroll任意布局内容自适应"; +NSString * const demo13Description = @"scroll任意布局内容自适应2"; @implementation DemoTableViewControler { @@ -52,9 +54,9 @@ - (void)viewDidLoad self.view.backgroundColor = [UIColor whiteColor]; - [self.navigationController pushViewController:[NSClassFromString(@"DemoVC10") new] animated:YES]; + [self.navigationController pushViewController:[NSClassFromString(@"DemoVC13") new] animated:YES]; - _contenArray = @[demo0Content, demo1Content, demo2Content, demo3Content, demo4Content, demo5Content, demo6Content, demo7Content, demo8Content, demo9Content, demo10Content, demo11Content]; + _contenArray = @[demo0Description, demo1Description, demo2Description, demo3Description, demo4Description, demo5Description, demo6Description, demo7Description, demo8Description, demo9Description, demo10Description, demo11Description, demo12Description, demo13Description]; } #pragma mark - tableview datasourece and delegate diff --git a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h index 1d17e34..0bf0ae9 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h +++ b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h @@ -146,7 +146,7 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass; -- (instancetype)initWithCellClass:(Class)cellClass; -+ (instancetype)managerWithCellClass:(Class)cellClass; +- (instancetype)initWithCellClass:(Class)cellClass tableView:(UITableView *)tableView; ++ (instancetype)managerWithCellClass:(Class)cellClass tableView:(UITableView *)tableView; @end diff --git a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m index ce0f17f..b50d1b0 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m @@ -25,43 +25,54 @@ #import "UIView+SDAutoLayout.h" #import +@interface SDCellAutoHeightManager () + +@property (nonatomic, weak) UITableView *modelTableview; + +@end + @implementation SDCellAutoHeightManager { NSMutableDictionary *_cacheDictionary; - UITableView *_modelTableview; + NSMutableDictionary *_modelCellsDict; } - (instancetype)init { if (self = [super init]) { - _modelTableview = [UITableView new]; - _cacheDictionary = [NSMutableDictionary new]; + [self setup]; } return self; } -- (instancetype)initWithCellClass:(Class)cellClass +- (instancetype)initWithCellClass:(Class)cellClass tableView:(UITableView *)tableView { if (self = [super init]) { - _modelTableview = [UITableView new]; + [self setup]; + self.modelTableview = tableView; [self registerCellWithCellClass:cellClass]; - _cacheDictionary = [NSMutableDictionary new]; } return self; } -- (instancetype)initWithCellClasses:(NSArray *)cellClassArray +- (instancetype)initWithCellClasses:(NSArray *)cellClassArray tableView:(UITableView *)tableView { if (self = [super init]) { - _modelTableview = [UITableView new]; + [self setup]; + self.modelTableview = tableView; [cellClassArray enumerateObjectsUsingBlock:^(Class obj, NSUInteger idx, BOOL *stop) { [self registerCellWithCellClass:obj]; }]; - _cacheDictionary = [NSMutableDictionary new]; } return self; } +- (void)setup +{ + _cacheDictionary = [NSMutableDictionary new]; + _modelCellsDict = [NSMutableDictionary new]; +} + - (void)registerCellWithCellClass:(Class)cellClass { [_modelTableview registerClass:cellClass forCellReuseIdentifier:NSStringFromClass(cellClass)]; @@ -71,11 +82,14 @@ - (void)registerCellWithCellClass:(Class)cellClass [_modelTableview registerNib:[UINib nibWithNibName:NSStringFromClass(cellClass) bundle:nil] forCellReuseIdentifier:NSStringFromClass(cellClass)]; self.modelCell = [_modelTableview dequeueReusableCellWithIdentifier:NSStringFromClass(cellClass)]; } + if (self.modelCell) { + [_modelCellsDict setObject:self.modelCell forKey:NSStringFromClass(cellClass)]; + } } -+ (instancetype)managerWithCellClass:(Class)cellClass ++ (instancetype)managerWithCellClass:(Class)cellClass tableView:(UITableView *)tableView { - SDCellAutoHeightManager *manager = [[self alloc] initWithCellClass:cellClass]; + SDCellAutoHeightManager *manager = [[self alloc] initWithCellClass:cellClass tableView:tableView]; return manager; } @@ -132,7 +146,7 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPa NSAssert(self.modelCell.sd_bottomViewsArray.count, @">>>>>> 你的cell还没有调用“setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法或者你传递的bottomView为nil,请检查并修改"); #endif - + [self.modelCell.contentView layoutSubviews]; NSString *cacheKey = [NSString stringWithFormat:@"%ld%ld", (long)indexPath.section, (long)indexPath.row]; [_cacheDictionary setObject:@(self.modelCell.autoHeight) forKey:cacheKey]; @@ -144,7 +158,7 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPa { if (![self.modelCell isKindOfClass:cellClass]) { self.modelCell = nil; - self.modelCell = [_modelTableview dequeueReusableCellWithIdentifier:NSStringFromClass(cellClass)]; + self.modelCell = [_modelCellsDict objectForKey:NSStringFromClass(cellClass)]; if (!self.modelCell) { [self registerCellWithCellClass:cellClass]; } @@ -160,10 +174,14 @@ - (void)setContentViewWidth:(CGFloat)contentViewWidth { if (_contentViewWidth == contentViewWidth) return; - [self clearHeightCache]; _contentViewWidth = contentViewWidth; self.modelCell.contentView.width = self.contentViewWidth; + + dispatch_async(dispatch_get_main_queue(), ^{ + [self clearHeightCache]; + [self.modelTableview reloadData]; + }); } @end @@ -222,7 +240,7 @@ - (void)sd_moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath - (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth NS_DEPRECATED(10_0, 10_4, 6_0, 6_0) { if (!self.cellAutoHeightManager) { - self.cellAutoHeightManager = [SDCellAutoHeightManager managerWithCellClass:cellClass]; + self.cellAutoHeightManager = [SDCellAutoHeightManager managerWithCellClass:cellClass tableView:self]; } self.cellAutoHeightManager.contentViewWidth = contentViewWidth; } @@ -230,7 +248,7 @@ - (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFl - (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth NS_DEPRECATED(10_0, 10_4, 6_0, 6_0) { if (!self.cellAutoHeightManager) { - self.cellAutoHeightManager = [[SDCellAutoHeightManager alloc] initWithCellClasses:cellClassArray]; + self.cellAutoHeightManager = [[SDCellAutoHeightManager alloc] initWithCellClasses:cellClassArray tableView:self]; } self.cellAutoHeightManager.contentViewWidth = contentViewWidth; } @@ -249,6 +267,7 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPa { if (!self.cellAutoHeightManager) { self.cellAutoHeightManager = [[SDCellAutoHeightManager alloc] init]; + self.cellAutoHeightManager.modelTableview = self; } self.cellAutoHeightManager.contentViewWidth = contentViewWidth; @@ -284,10 +303,10 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth: { if (!tableView.cellAutoHeightManager) { tableView.cellAutoHeightManager = [[SDCellAutoHeightManager alloc] init]; + tableView.cellAutoHeightManager.modelTableview = tableView; } if (tableView.cellAutoHeightManager.contentViewWidth != width) { tableView.cellAutoHeightManager.contentViewWidth = width; - [tableView.cellAutoHeightManager clearHeightCache]; } if ([tableView.cellAutoHeightManager heightCacheForIndexPath:indexPath]) { return [[tableView.cellAutoHeightManager heightCacheForIndexPath:indexPath] floatValue]; From 3a7fb0d4353e4dea82fdba89358c4b0925675d16 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 20 Mar 2016 18:37:52 +0800 Subject: [PATCH 106/276] =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 95787 -> 100302 bytes SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.h | 16 +++ SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.m | 18 +++ SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.h | 16 +++ SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.m | 129 +++++++++++++++++- .../Others/DemoTableViewControler.m | 2 +- .../SDAutoLayout/UIView+SDAutoLayout.h | 5 +- .../SDAutoLayout/UIView+SDAutoLayout.m | 24 +++- 8 files changed, 201 insertions(+), 9 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 845b32255a1587b7e5659d44c085bb3d74b3183a..7fc02f38f20072ae5a1f5ec7b8ac73ef3d8d2433 100644 GIT binary patch literal 100302 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%0DDU^BKM0Xwk= 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�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 literal 95787 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 diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.h b/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.h index 134ff36..8230781 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.h +++ b/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.h @@ -6,6 +6,22 @@ // Copyright © 2016年 gsd. All rights reserved. // +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * QQ交流群:519489682(一群)497140713(二群) * + ********************************************************************************* + + */ + + #import @interface DemoVC12 : UIViewController diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.m b/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.m index 543f0b8..b5d00a6 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.m @@ -6,6 +6,24 @@ // Copyright © 2016年 gsd. All rights reserved. // + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * QQ交流群:519489682(一群)497140713(二群) * + ********************************************************************************* + + */ + + + #import "DemoVC12.h" #import "UIView+SDAutoLayout.h" diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.h b/SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.h index f63301f..ab9d193 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.h +++ b/SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.h @@ -6,6 +6,22 @@ // Copyright © 2016年 gsd. All rights reserved. // +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * QQ交流群:519489682(一群)497140713(二群) * + ********************************************************************************* + + */ + + #import @interface DemoVC13 : UIViewController diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.m b/SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.m index b344145..e7525fb 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC13/DemoVC13.m @@ -6,6 +6,21 @@ // Copyright © 2016年 gsd. All rights reserved. // +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * QQ交流群:519489682(一群)497140713(二群) * + ********************************************************************************* + + */ + #import "DemoVC13.h" #import "UIView+SDAutoLayout.h" @@ -13,6 +28,8 @@ NSString *const kCommonText = @"Hello, everybody! 我是SDAutoLayout,我是不是萌萌哒呢? ^_^ ^(***)^ ^_^ "; static const CGFloat maxImageViewWidth = 200.f; +#define kGridItemViewColor [[UIColor greenColor] colorWithAlphaComponent:0.5] + @interface DemoVC13 () @property (nonatomic, strong) UIScrollView *scroollView; @@ -23,6 +40,10 @@ @interface DemoVC13 () @property (nonatomic, strong) UIImageView *imageView; +@property (nonatomic, strong) UIView *gridItemContainerView; + +@property (nonatomic, strong) UIButton *addGridItemButton; + @end @implementation DemoVC13 @@ -35,6 +56,7 @@ - (void)viewDidLoad { [self setupContentCell]; [self setupImageCell]; + [self setupGridViewCell]; [self.scroollView setupAutoContentSizeWithBottomView:self.lastBottomLine bottomMargin:10]; } @@ -83,6 +105,7 @@ - (UIButton *)buttonWithTitle:(NSString *)title bgColor:(UIColor *)bgColor sel:( return button; } +// 设置展示文字的模拟cell - (void)setupContentCell { UILabel *titleLabel = [self titleLabelWithText:@"文字内容"]; @@ -140,6 +163,7 @@ - (void)setupContentCell } +// 设置展示图片的模拟cell - (void)setupImageCell { UILabel *titleLabel = [self titleLabelWithText:@"图片展示"]; @@ -183,6 +207,51 @@ - (void)setupImageCell self.lastBottomLine = [self addSeparatorLineBellowView:shrinkButton margin:10]; } +// 设置展示列表的模拟cell +- (void)setupGridViewCell +{ + + UILabel *titleLabel = [self titleLabelWithText:@"列表展示"]; + + UIView *contanerView = [UIView new]; + contanerView.backgroundColor = [UIColor redColor]; + self.gridItemContainerView = contanerView; + + [_scroollView sd_addSubviews:@[titleLabel, contanerView]]; + + + { + UIButton *addButton = [UIButton new]; + self.addGridItemButton = addButton; + [addButton setTitle:@"添加" forState:UIControlStateNormal]; + addButton.backgroundColor = kGridItemViewColor; + [addButton addTarget:self action:@selector(addGridItemView) forControlEvents:UIControlEventTouchUpInside]; + [contanerView addSubview:addButton]; + + addButton.sd_layout + .leftSpaceToView(contanerView, 10) + .topSpaceToView(contanerView, 10) + .rightSpaceToView(contanerView, 10) + .heightIs(50); + } + + + + titleLabel.sd_layout + .leftSpaceToView(self.scroollView, 10) + .topSpaceToView(self.lastBottomLine, 10) + .widthIs(80) + .heightIs(20); + + contanerView.sd_layout + .leftSpaceToView(titleLabel, 10) + .topEqualToView(titleLabel) + .rightSpaceToView(_scroollView, 10); + [contanerView setupAutoHeightWithBottomView:contanerView.subviews.lastObject bottomMargin:10]; + + self.lastBottomLine = [self addSeparatorLineBellowView:contanerView margin:10]; +} + - (void)addText { @@ -198,27 +267,80 @@ - (void)delText [self.scroollView layoutSubviews]; } +// 放大图片 - (void)magnifyImage { - CGFloat w = self.imageView.width * 1.1; + CGFloat w = self.imageView.width * 1.3; if (w > maxImageViewWidth) { [self showAlertWithText:@"已经达到最大宽度"]; return; } [UIView animateWithDuration:0.2 animations:^{ - self.imageView.sd_layout.widthIs(self.imageView.width * 1.2); + self.imageView.sd_layout.widthIs(self.imageView.width * 1.3); [self.scroollView layoutSubviews]; }]; } +// 缩小图片 - (void)shrinkImage { [UIView animateWithDuration:0.2 animations:^{ - self.imageView.sd_layout.widthIs(self.imageView.width * 0.8); + self.imageView.sd_layout.widthIs(self.imageView.width * 0.7); [self.scroollView layoutSubviews]; }]; } +- (void)addGridItemView +{ + UIView *view = [UIView new]; + view.backgroundColor = kGridItemViewColor; + [self.gridItemContainerView insertSubview:view belowSubview:self.addGridItemButton]; + + __block UIView *lastView = self.gridItemContainerView; + + [self.gridItemContainerView.subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) { + if (idx < 3 && (idx == (self.gridItemContainerView.subviews.count > 2 ? 2 : 1))) { // 如果idx等于当第一行最后一个view的index时开始设置一行等宽子view + NSMutableArray *equalWidthSubviews = [NSMutableArray new]; + for (int i = 0; i <= idx; i++) { + UIView *subview = self.gridItemContainerView.subviews[i]; + [equalWidthSubviews addObject:subview]; + if (i == 0) { // 设置一排等宽子view的第一个view的约束 + subview.sd_resetLayout + .leftSpaceToView(lastView, 10) + .topSpaceToView(lastView, 10) + .heightIs(50); + } else if (i == idx) { // 设置一排等宽子view的中间view的约束 + subview.sd_resetLayout + .leftSpaceToView(lastView, 10) + .topEqualToView(lastView) + .rightSpaceToView(self.gridItemContainerView, 10) + .heightRatioToView(lastView, 1); + self.gridItemContainerView.sd_equalWidthSubviews = [equalWidthSubviews copy]; + } else { // 设置一排等宽子view的最后一个view的约束 + subview.sd_resetLayout + .leftSpaceToView(lastView, 10) + .topEqualToView(lastView) + .heightIs(50); + } + lastView = subview; + } + } else if (idx > 2){ // 设置第一排之后的子view的的约束 + long lastViewIndex = idx - 3; + lastView = self.gridItemContainerView.subviews[lastViewIndex]; + + view.sd_resetNewLayout + .leftEqualToView(lastView) + .rightEqualToView(lastView) + .heightRatioToView(lastView, 1) + .topSpaceToView(lastView, 10); + } + }]; + + [self.gridItemContainerView setupAutoHeightWithBottomView:self.gridItemContainerView.subviews.lastObject bottomMargin:10]; + + [_scroollView layoutSubviews]; +} + - (void)showAlertWithText:(NSString *)text { @@ -239,7 +361,6 @@ - (void)showAlertWithText:(NSString *)text - [[UIApplication sharedApplication].keyWindow addSubview:alert]; alert.sd_layout diff --git a/SDAutoLayoutDemo/Others/DemoTableViewControler.m b/SDAutoLayoutDemo/Others/DemoTableViewControler.m index 5989538..c0774b4 100644 --- a/SDAutoLayoutDemo/Others/DemoTableViewControler.m +++ b/SDAutoLayoutDemo/Others/DemoTableViewControler.m @@ -40,7 +40,7 @@ NSString * const demo10Description = @"一个SDAutoLayout使用者“李西亚”同学贡献的仿网易新闻界面"; NSString * const demo11Description = @"仿微信的聊天界面:\n1.纯文本消息(带可点击链接,表情)\n2.图片消息"; NSString * const demo12Description = @"scroll任意布局内容自适应"; -NSString * const demo13Description = @"scroll任意布局内容自适应2"; +NSString * const demo13Description = @"scroll任意布局内容自适应自动布局"; @implementation DemoTableViewControler { diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h index e806126..4c3aca9 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h @@ -223,9 +223,12 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); /** 开始自动布局 */ - (SDAutoLayoutModel *)sd_layout; -/** 清空之前的自动布局设置,重新开始自动布局 */ +/** 清空之前的自动布局设置,重新开始自动布局(重新生成布局约束并使其在父view的布局序列数组中位置保持不变) */ - (SDAutoLayoutModel *)sd_resetLayout; +/** 清空之前的自动布局设置,重新开始自动布局(重新生成布局约束并添加到父view布局序列数组中的最后一个位置) */ +- (SDAutoLayoutModel *)sd_resetNewLayout; + /** 清空之前的自动布局设置 */ - (void)sd_clearAutoLayoutSettings; diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m index 1cf844f..a44ee81 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m @@ -655,6 +655,9 @@ - (NSNumber *)fixedWith - (void)setFixedWith:(NSNumber *)fixedWith { + if (fixedWith) { + self.width = [fixedWith floatValue]; + } objc_setAssociatedObject(self, @selector(fixedWith), fixedWith, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } @@ -665,6 +668,9 @@ - (NSNumber *)fixedHeight - (void)setFixedHeight:(NSNumber *)fixedHeight { + if (fixedHeight) { + self.height = [fixedHeight floatValue]; + } objc_setAssociatedObject(self, @selector(fixedHeight), fixedHeight, OBJC_ASSOCIATION_RETAIN); } @@ -744,12 +750,17 @@ - (SDAutoLayoutModel *)sd_resetLayout [self.superview.autoLayoutModelsArray addObject:newModel]; } [self setOwnLayoutModel:newModel]; - if (self.autoHeightRatioValue) { - self.autoHeightRatioValue = nil; - } + [self sd_clearExtraAutoLayoutItems]; return newModel; } +- (SDAutoLayoutModel *)sd_resetNewLayout +{ + [self sd_clearAutoLayoutSettings]; + [self sd_clearExtraAutoLayoutItems]; + return [self sd_layout]; +} + - (void)sd_clearAutoLayoutSettings { SDAutoLayoutModel *model = [self ownLayoutModel]; @@ -757,9 +768,16 @@ - (void)sd_clearAutoLayoutSettings [self.superview.autoLayoutModelsArray removeObject:model]; [self setOwnLayoutModel:nil]; } + [self sd_clearExtraAutoLayoutItems]; +} + +- (void)sd_clearExtraAutoLayoutItems +{ if (self.autoHeightRatioValue) { self.autoHeightRatioValue = nil; } + self.fixedHeight = nil; + self.fixedWith = nil; } - (void)sd_clearViewFrameCache From a5c473045f380c17df52a1c7b55713508b50b543 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 21 Mar 2016 01:05:50 +0800 Subject: [PATCH 107/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0676e80..0547f1f 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ ### SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3effb8 ### 完整微信Demo https://github.com/gsdios/GSD_WeiXin -![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3pziawg205u0a0qv5.gif)![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3lweg3g207s0dcu0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) +![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3pziawg205u0a0qv5.gif)![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3lweg3g207s0dcu0x.gif)![](http://ww2.sinaimg.cn/mw690/9b8146edgw1f23irukb0qg207i0dwu0x.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) ## 更新记录: From 7772ebf2ad496766a9cb14fcbd63ac1a68da7b29 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 21 Mar 2016 14:54:15 +0800 Subject: [PATCH 108/276] =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 100302 -> 100309 bytes SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 7fc02f38f20072ae5a1f5ec7b8ac73ef3d8d2433..fd336d10ca4facc3bb65ab8b24616ec70bd1b45d 100644 GIT binary patch literal 100309 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

{trPuNM%#jCjZKG^>6Cx-aCIw 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%0DDU^BKM0Xwk= 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�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 diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m index 9bac85d..e1f80b5 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m @@ -133,7 +133,7 @@ - (NSArray *)creatModelsWithCount:(NSInteger)count @"你瞅啥?", @"瞅你咋地???!!!", @"hello,看我", - @"曾经在幽幽暗暗反反复复中追问,才知道平平淡淡从从容容才是真,再回首恍然如梦,再回首我心依旧,只有那不变的长路伴着我", + @"曾经在幽幽暗暗反反复复中追问,才知道平平淡淡从从容容才是真", @"人艰不拆", @"咯咯哒", @"呵呵~~~~~~~~", @@ -164,7 +164,7 @@ - (NSArray *)creatModelsWithCount:(NSInteger)count // 模拟“随机图片” - int random = arc4random_uniform(10); + int random = arc4random_uniform(6); NSMutableArray *temp = [NSMutableArray new]; for (int i = 0; i < random; i++) { @@ -175,7 +175,7 @@ - (NSArray *)creatModelsWithCount:(NSInteger)count model.picNamesArray = [temp copy]; } - int commentRandom = arc4random_uniform(6); + int commentRandom = arc4random_uniform(3); NSMutableArray *tempComments = [NSMutableArray new]; for (int i = 0; i < commentRandom; i++) { SDTimeLineCellCommentItemModel *commentItemModel = [SDTimeLineCellCommentItemModel new]; From 29fe384fd74064a870fa72e3dfac86d7647df992 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 21 Mar 2016 19:57:08 +0800 Subject: [PATCH 109/276] =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 100309 -> 100795 bytes SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m | 2 +- .../TimeLine/Model/SDTimeLineCellModel.m | 16 +++++++++++----- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index fd336d10ca4facc3bb65ab8b24616ec70bd1b45d..a92679588511b6fa35f87e38f2345042baa6038b 100644 GIT binary patch literal 100795 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 literal 100309 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

{trPuNM%#jCjZKG^>6Cx-aCIw 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 maxContentLabelHeight) { - _shouldShowMoreButton = YES; - } else { - _shouldShowMoreButton = NO; + if (contentW != _lastContentWidth) { + _lastContentWidth = contentW; + CGRect textRect = [_msgContent boundingRectWithSize:CGSizeMake(contentW, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:contentLabelFontSize]} context:nil]; + if (textRect.size.height > maxContentLabelHeight) { + _shouldShowMoreButton = YES; + } else { + _shouldShowMoreButton = NO; + } } return _msgContent; From a33246692cb4d2acee178925be1cf3380a99c5d8 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Wed, 23 Mar 2016 14:43:05 +0800 Subject: [PATCH 110/276] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDAutoLayoutDemo.xcodeproj/project.pbxproj | 6 +- .../UserInterfaceState.xcuserstate | Bin 100795 -> 108274 bytes SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m | 1 + .../DemoVC/DemoVC10/view/ThreeBaseCell.m | 1 + .../DemoVC/DemoVC11/ChatController/DemoVC11.m | 10 +++ SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.m | 4 +- SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.m | 8 +++ .../DemoVC/DemoVC5/DemoVC5CellTableViewCell.m | 1 + SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.m | 9 +++ SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m | 9 +++ SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m | 13 +++- .../TimeLine/Views/Cell/SDTimeLineCell.m | 1 + .../UITableView+SDAutoTableViewCellHeight.h | 18 ++++-- .../UITableView+SDAutoTableViewCellHeight.m | 41 +++++++++++- .../SDAutoLayout/UIView+SDAutoLayout.h | 9 +++ .../SDAutoLayout/UIView+SDAutoLayout.m | 59 ++++++++++++++---- 16 files changed, 164 insertions(+), 26 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.pbxproj b/SDAutoLayoutDemo.xcodeproj/project.pbxproj index ed74f9c..2ae827c 100644 --- a/SDAutoLayoutDemo.xcodeproj/project.pbxproj +++ b/SDAutoLayoutDemo.xcodeproj/project.pbxproj @@ -321,9 +321,9 @@ 485303251C3F977A004361A7 /* DemoVC7Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC7Model.h; sourceTree = ""; }; 485303261C3F977A004361A7 /* DemoVC7Model.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC7Model.m; sourceTree = ""; }; 485303281C3F977A004361A7 /* DemoVC8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC8.h; sourceTree = ""; }; - 485303291C3F977A004361A7 /* DemoVC8.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC8.m; sourceTree = ""; }; + 485303291C3F977A004361A7 /* DemoVC8.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = DemoVC8.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 4853032D1C3F977A004361A7 /* DemoVC9.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC9.h; sourceTree = ""; }; - 4853032E1C3F977A004361A7 /* DemoVC9.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC9.m; sourceTree = ""; }; + 4853032E1C3F977A004361A7 /* DemoVC9.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = DemoVC9.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 4853034A1C3F97AA004361A7 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 4853034B1C3F97AA004361A7 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 4853034C1C3F97AA004361A7 /* DemoTableViewControler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoTableViewControler.h; sourceTree = ""; }; @@ -1583,7 +1583,7 @@ TargetAttributes = { 487D3EB01BCB9EC700A66173 = { CreatedOnToolsVersion = 6.4; - DevelopmentTeam = L6X9DMN9D4; + DevelopmentTeam = V4Q779DR3D; }; 487D3EC91BCB9EC700A66173 = { CreatedOnToolsVersion = 6.4; diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index a92679588511b6fa35f87e38f2345042baa6038b..82fcb39f71a2ef45b62f29901b6fc704654f3a3b 100644 GIT binary patch literal 108274 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 z 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 z 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 diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m index 36d39d3..4c20dfc 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m @@ -177,6 +177,7 @@ -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NS cell = [[mClass alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; } cell.threeModel = threeModel; + return cell; } diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeBaseCell.m b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeBaseCell.m index e592ca7..5a38381 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeBaseCell.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC10/view/ThreeBaseCell.m @@ -42,6 +42,7 @@ -(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSStri self.lblSubtitle = [UILabel new]; self.lblSubtitle.textColor = [UIColor grayColor]; self.lblSubtitle.font = [UIFont systemFontOfSize:13]; + self.lblSubtitle.numberOfLines = 0; [self.contentView addSubview:self.lblSubtitle]; self.lineView = [UIView new]; diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.m b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.m index 9120259..119f9ef 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.m @@ -35,6 +35,8 @@ #import "UITableView+SDAutoTableViewCellHeight.h" +#import "UIView+SDAutoLayout.h" + #define kChatTableViewControllerCellId @"ChatTableViewController" @interface DemoVC11 () @@ -104,6 +106,14 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N [weakSelf.navigationController pushViewController:[SDWebViewController webViewControllerWithUrlString:link] animated:YES]; } }]; + + ////// 此步设置用于实现cell的frame缓存,可以让tableview滑动更加流畅 ////// + + cell.sd_tableView = tableView; + cell.sd_indexPath = indexPath; + + /////////////////////////////////////////////////////////////////////// + return cell; } diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.m b/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.m index b5d00a6..6014104 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC12/DemoVC12.m @@ -113,7 +113,7 @@ - (void)setupScrollViewSubView1 - (void)setupScrollViewSubView2 { UILabel *label = [UILabel new]; - label.text = [NSString stringWithFormat:@" 共有%ld个字符 ", [_subview1_label.text length]]; + label.text = [NSString stringWithFormat:@" 共有%u个字符 ", [_subview1_label.text length]]; label.backgroundColor = [[UIColor blueColor] colorWithAlphaComponent:0.5]; _subview2 = label; [_scrollView addSubview:label]; @@ -166,7 +166,7 @@ - (void)subView1ButtonClicked _subview1_label.text = [NSString stringWithFormat:@"%@ ---> %@", _subview1_label.text, addStr]; [_subview1_label updateLayout]; - _subview2.text = [NSString stringWithFormat:@" 共有%ld个字符 ", [_subview1_label.text length]]; + _subview2.text = [NSString stringWithFormat:@" 共有%u个字符 ", [_subview1_label.text length]]; if (_scrollView.contentSize.height > _scrollView.height) { CGPoint point = _scrollView.contentOffset; diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.m b/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.m index a0b2101..d92a310 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.m @@ -186,6 +186,14 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell = [[DemoVC5CellTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID]; } cell.model = self.modelsArray[indexPath.row]; + + ////// 此步设置用于实现cell的frame缓存,可以让tableview滑动更加流畅 ////// + + cell.sd_tableView = tableView; + cell.sd_indexPath = indexPath; + + /////////////////////////////////////////////////////////////////////// + return cell; } diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m b/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m index 2c08aa6..c2da415 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m @@ -58,6 +58,7 @@ - (void)setup UILabel *view2 = [UILabel new]; view2.textColor = [UIColor grayColor]; view2.font = [UIFont systemFontOfSize:16]; + view2.numberOfLines = 0; _view2 = view2; UIImageView *view3 = [UIImageView new]; diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.m b/SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.m index bc5051c..fbee376 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.m @@ -15,6 +15,8 @@ #import "UITableView+SDAutoTableViewCellHeight.h" +#import "UIView+SDAutoLayout.h" + #import "SDRefresh.h" @@ -130,6 +132,13 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell.model = model; + ////// 此步设置用于实现cell的frame缓存,可以让tableview滑动更加流畅 ////// + + cell.sd_tableView = tableView; + cell.sd_indexPath = indexPath; + + /////////////////////////////////////////////////////////////////////// + return cell; } diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m b/SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m index 82bef7c..b680f4d 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m @@ -15,6 +15,8 @@ #import "UITableView+SDAutoTableViewCellHeight.h" +#import "UIView+SDAutoLayout.h" + #import "SDRefresh.h" @interface DemoVC8 () @@ -124,6 +126,13 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell.model = model; + ////// 此步设置用于实现cell的frame缓存,可以让tableview滑动更加流畅 ////// + + cell.sd_tableView = tableView; + cell.sd_indexPath = indexPath; + + /////////////////////////////////////////////////////////////////////// + return cell; } diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m index e848ec9..8b84530 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m @@ -31,6 +31,7 @@ #import "SDTimeLineCellModel.h" #import "UITableView+SDAutoTableViewCellHeight.h" +#import "UIView+SDAutoLayout.h" #define kTimeLineTableViewCellId @"SDTimeLineCell" @@ -62,7 +63,7 @@ - (void)viewDidLoad _refreshFooter = [SDTimeLineRefreshFooter refreshFooterWithRefreshingText:@"正在加载数据..."]; __weak typeof(_refreshFooter) weakRefreshFooter = _refreshFooter; [_refreshFooter addToScrollView:self.tableView refreshOpration:^{ - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [weakSelf.dataArray addObjectsFromArray:[weakSelf creatModelsWithCount:10]]; [weakSelf.tableView reloadData]; [weakRefreshFooter endRefreshing]; @@ -87,7 +88,7 @@ - (void)viewDidAppear:(BOOL)animated __weak typeof(_refreshHeader) weakHeader = _refreshHeader; __weak typeof(self) weakSelf = self; [_refreshHeader setRefreshingBlock:^{ - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ weakSelf.dataArray = [[weakSelf creatModelsWithCount:10] mutableCopy]; [weakHeader endRefreshing]; dispatch_async(dispatch_get_main_queue(), ^{ @@ -102,6 +103,7 @@ - (void)viewDidAppear:(BOOL)animated - (void)dealloc { [_refreshHeader removeFromSuperview]; + [_refreshFooter removeFromSuperview]; } - (NSArray *)creatModelsWithCount:(NSInteger)count @@ -214,6 +216,13 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N }]; } + ////// 此步设置用于实现cell的frame缓存,可以让tableview滑动更加流畅 ////// + + cell.sd_tableView = tableView; + cell.sd_indexPath = indexPath; + + /////////////////////////////////////////////////////////////////////// + cell.model = self.dataArray[indexPath.row]; return cell; } diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.m index bc42c95..80a2ff6 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.m @@ -74,6 +74,7 @@ - (void)setup _nameLable.textColor = [UIColor colorWithRed:(54 / 255.0) green:(71 / 255.0) blue:(121 / 255.0) alpha:0.9]; _contentLabel = [UILabel new]; + _contentLabel.numberOfLines = 0; _contentLabel.font = [UIFont systemFontOfSize:contentLabelFontSize]; if (maxContentLabelHeight == 0) { maxContentLabelHeight = _contentLabel.font.lineHeight * 3; diff --git a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h index 0bf0ae9..3fad268 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h +++ b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.h @@ -51,12 +51,12 @@ // ☆☆☆☆☆☆☆☆☆☆☆【推荐使用方法(性能高+易用性好),详见demo7和demo9】☆☆☆☆☆☆☆☆☆☆☆ -/** - * 返回计算出的cell高度(普通简化版方法,同样只需一步设置即可完成) - * model : cell的数据模型实例 - * keyPath : cell的数据模型属性的属性名字符串(即kvc原理中的key) - * cellClass : 当前的indexPath对应的cell的class - * contentViewWidth : cell的contentView的宽度 +/** + * 返回计算出的cell高度(普通简化版方法,同样只需一步设置即可完成) + * model : cell的数据模型实例 + * keyPath : cell的数据模型属性的属性名字符串(即kvc原理中的key) + * cellClass : 当前的indexPath对应的cell的class + * contentViewWidth : cell的contentView的宽度 */ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth; @@ -136,6 +136,8 @@ @property (nonatomic, strong) UITableViewCell *modelCell; +@property (nonatomic, strong) NSMutableDictionary *subviewFrameCacheDict; + - (void)clearHeightCache; - (void)clearHeightCacheOfIndexPaths:(NSArray *)indexPaths; @@ -146,6 +148,10 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass; + +- (NSMutableArray *)subviewFrameCachesWithIndexPath:(NSIndexPath *)indexPath;; +- (void)setSubviewFrameCache:(CGRect)rect WithIndexPath:(NSIndexPath *)indexPath; + - (instancetype)initWithCellClass:(Class)cellClass tableView:(UITableView *)tableView; + (instancetype)managerWithCellClass:(Class)cellClass tableView:(UITableView *)tableView; @end diff --git a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m index b50d1b0..4d3ec54 100644 --- a/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UITableView+SDAutoTableViewCellHeight.m @@ -104,6 +104,7 @@ - (UITableViewCell *)modelCell - (void)clearHeightCache { [_cacheDictionary removeAllObjects]; + [_subviewFrameCacheDict removeAllObjects]; } - (void)clearHeightCacheOfIndexPaths:(NSArray *)indexPaths @@ -111,6 +112,7 @@ - (void)clearHeightCacheOfIndexPaths:(NSArray *)indexPaths [indexPaths enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) { NSString *cacheKey = [NSString stringWithFormat:@"%ld%ld", (long)indexPath.section, (long)indexPath.row]; [_cacheDictionary removeObjectForKey:cacheKey]; + [_subviewFrameCacheDict removeObjectForKey:cacheKey]; }]; } @@ -131,6 +133,11 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPa return 0; } + if (self.modelTableview && self.modelTableview != self.modelCell.sd_tableView) { + self.modelCell.sd_tableView = self.modelTableview; + } + self.modelCell.sd_indexPath = indexPath; + if (model && keyPath) { [self.modelCell setValue:model forKey:keyPath]; } @@ -146,10 +153,19 @@ - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPa NSAssert(self.modelCell.sd_bottomViewsArray.count, @">>>>>> 你的cell还没有调用“setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法或者你传递的bottomView为nil,请检查并修改"); #endif - + [self.modelCell.contentView layoutSubviews]; NSString *cacheKey = [NSString stringWithFormat:@"%ld%ld", (long)indexPath.section, (long)indexPath.row]; [_cacheDictionary setObject:@(self.modelCell.autoHeight) forKey:cacheKey]; + + + if (self.modelCell.sd_indexPath && self.modelCell.sd_tableView) { + [self.modelCell.contentView.autoLayoutModelsArray enumerateObjectsUsingBlock:^(SDAutoLayoutModel *model, NSUInteger idx, BOOL *stop) { + [self.modelTableview.cellAutoHeightManager setSubviewFrameCache:model.needsAutoResizeView.frame WithIndexPath:self.modelCell.sd_indexPath]; + }]; + } + + return self.modelCell.autoHeight; } } @@ -184,6 +200,27 @@ - (void)setContentViewWidth:(CGFloat)contentViewWidth }); } + +- (void)setSubviewFrameCache:(CGRect)rect WithIndexPath:(NSIndexPath *)indexPath +{ + if (!self.subviewFrameCacheDict) { + self.subviewFrameCacheDict = [NSMutableDictionary new]; + } + NSString *cacheKey = [NSString stringWithFormat:@"%ld%ld", (long)indexPath.section, (long)indexPath.row]; + NSMutableArray *caches = [self.subviewFrameCacheDict objectForKey:cacheKey]; + if (!caches) { + caches = [NSMutableArray new]; + [self.subviewFrameCacheDict setValue:caches forKey:cacheKey]; + } + [caches addObject:[NSValue valueWithCGRect:rect]]; +} + +- (NSMutableArray *)subviewFrameCachesWithIndexPath:(NSIndexPath *)indexPath +{ + NSString *cacheKey = [NSString stringWithFormat:@"%ld%ld", (long)indexPath.section, (long)indexPath.row]; + return [self.subviewFrameCacheDict valueForKey:cacheKey]; +} + @end @@ -197,7 +234,7 @@ + (void)load { [selStringsArray enumerateObjectsUsingBlock:^(NSString *selString, NSUInteger idx, BOOL *stop) { NSString *mySelString = [@"sd_" stringByAppendingString:selString]; - + Method originalMethod = class_getInstanceMethod(self, NSSelectorFromString(selString)); Method myMethod = class_getInstanceMethod(self, NSSelectorFromString(mySelString)); method_exchangeImplementations(originalMethod, myMethod); diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h index 4c3aca9..28fa8d7 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h @@ -245,6 +245,12 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @property (nonatomic, strong) NSNumber *fixedHeight; +/** 所属tableview(目前为cell专用属性,后期会扩展到其他view) */ +@property (nonatomic) UITableView *sd_tableView; + +/** cell的indexPath(目前为cell专用属性,后期会扩展到cell的其他子view) */ +@property (nonatomic) NSIndexPath *sd_indexPath; + // -------------------库内部使用----------------------- - (NSMutableArray *)autoLayoutModelsArray; @@ -348,5 +354,8 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); @property (nonatomic, strong) NSArray *rightViewsArray; @property (nonatomic, assign) CGFloat rightViewRightMargin; +@property (nonatomic, weak) UITableView *sd_tableView; +@property (nonatomic, strong) NSIndexPath *sd_indexPath; + @end diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m index a44ee81..6fec16b 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m @@ -694,6 +694,32 @@ - (void)setSd_maxWidth:(NSNumber *)sd_maxWidth objc_setAssociatedObject(self, @selector(sd_maxWidth), sd_maxWidth, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } +- (UITableView *)sd_tableView +{ + return self.sd_categoryManager.sd_tableView; +} + +- (void)setSd_tableView:(UITableView *)sd_tableView +{ + if ([self isKindOfClass:[UITableViewCell class]]) { + [(UITableViewCell *)self contentView].sd_tableView = sd_tableView; + } + self.sd_categoryManager.sd_tableView = sd_tableView; +} + +- (NSIndexPath *)sd_indexPath +{ + return self.sd_categoryManager.sd_indexPath; +} + +- (void)setSd_indexPath:(NSIndexPath *)sd_indexPath +{ + if ([self isKindOfClass:[UITableViewCell class]]) { + [(UITableViewCell *)self contentView].sd_indexPath = sd_indexPath; + } + self.sd_categoryManager.sd_indexPath = sd_indexPath; +} + - (SDAutoLayoutModel *)ownLayoutModel { return objc_getAssociatedObject(self, _cmd); @@ -709,11 +735,11 @@ - (SDAutoLayoutModel *)sd_layout #ifdef SDDebugWithAssert /* - 卡在这里说明你的要自动布局的view在没有添加到父view的情况下就开始设置布局,你需要这样: - 1. UIView *view = [UIView new]; - 2. [superView addSubview:view]; - 3. view.sd_layout - .leftEqualToView()... + 卡在这里说明你的要自动布局的view在没有添加到父view的情况下就开始设置布局,你需要这样: + 1. UIView *view = [UIView new]; + 2. [superView addSubview:view]; + 3. view.sd_layout + .leftEqualToView()... */ NSAssert(self.superview, @">>>>>>>>>在加入父view之后才可以做自动布局设置"); @@ -732,11 +758,11 @@ - (SDAutoLayoutModel *)sd_layout - (SDAutoLayoutModel *)sd_resetLayout { - /* + /* * 方案待定 - [self sd_clearAutoLayoutSettings]; - return [self sd_layout]; - */ + [self sd_clearAutoLayoutSettings]; + return [self sd_layout]; + */ SDAutoLayoutModel *model = [self ownLayoutModel]; SDAutoLayoutModel *newModel = [SDAutoLayoutModel new]; @@ -813,8 +839,19 @@ - (void)sd_layoutSubviews } if (self.autoLayoutModelsArray.count) { + + NSMutableArray *caches = nil; + + if ([self isKindOfClass:NSClassFromString(@"UITableViewCellContentView")] && self.sd_tableView) { + caches = [self.sd_tableView.cellAutoHeightManager subviewFrameCachesWithIndexPath:self.sd_indexPath]; + } + [self.autoLayoutModelsArray enumerateObjectsUsingBlock:^(SDAutoLayoutModel *model, NSUInteger idx, BOOL *stop) { - [self sd_resizeWithModel:model]; + if (caches) { + model.needsAutoResizeView.frame = [[caches objectAtIndex:idx] CGRectValue]; + } else { + [self sd_resizeWithModel:model]; + } }]; } @@ -1044,7 +1081,7 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model } } } - + if (model.top) { if (view.superview == model.top.refView) { From 85664716905efa0ac44e6fb292fb00e348e72495 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Wed, 23 Mar 2016 21:04:51 +0800 Subject: [PATCH 111/276] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 108274 -> 105025 bytes SDAutoLayoutDemo/DemoVC/DemoVC10/DemoVC10.m | 7 +++++++ SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m | 1 + .../UITableView+SDAutoTableViewCellHeight.m | 3 +++ 4 files changed, 11 insertions(+) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 82fcb39f71a2ef45b62f29901b6fc704654f3a3b..861ed86fbe9c0acd1e74808ea0d35874b541793f 100644 GIT binary patch literal 105025 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 z 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 z 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 Date: Thu, 24 Mar 2016 00:08:16 +0800 Subject: [PATCH 112/276] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0547f1f..a39950a 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,8 @@ ## 更新记录: +2016.03.23 -- 升级了缓存机制,新版本在tableview滑动cell时候流畅度和性能提升20%以上 + 2016.01.23 -- 增加label对attributedString的内容自适应 2016.01.21 -- 实现tableview局部刷新cell高度缓存的自动管理 From 8a1aa8514b80acf5d34eb8288dc5f59e57f9c423 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 24 Mar 2016 21:39:27 +0800 Subject: [PATCH 113/276] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 105025 -> 106450 bytes .../UITableView+SDAutoTableViewCellHeight.m | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 861ed86fbe9c0acd1e74808ea0d35874b541793f..d4ee1cb0ce38638c97bae84a5183b33b52bc8cda 100644 GIT binary patch literal 106450 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 Date: Fri, 25 Mar 2016 20:58:10 +0800 Subject: [PATCH 114/276] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 106450 -> 106239 bytes SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.m | 2 +- SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.m | 4 +- .../SDAutoLayout/UIView+SDAutoLayout.m | 41 +++++++++++++++++- 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index d4ee1cb0ce38638c97bae84a5183b33b52bc8cda..d377a7f123f2277b8793ed496a431c521c3f107b 100644 GIT binary patch literal 106239 zcmdRX2Y3|a*6_U3c4zC%)04-7$%m9W8#?vCXq>E1~P+~!ORe5C^L*1&WvD2GCpP$lg6Yo z8RQ^2LXML6$w%ZA`ILM{z9e6f@5uM$XL6SON`503$t9MsEGx1)*2tPznN?UP>tb(U zYq2-6b=jNQhHMkIDI3K`v$1R(o5Uuwt=Tqg2eu>ImF>p%V0*HC*?#Omb`U#^9nOwo z(^x+{njOcEXY<$zY$033PGP6A)7cs9EOs_~CwmvWfW4P}fL+8cV;^K!vJbPX*%Edg zyPkcFeVl!geTv=2ZfBokpJ!iSUu0ip_p-0EZ?JE%Z?i|(qwERxJ@!NPBla}=DSL+f zlKqzbj{S-KnLW?`%3feEatuc}ffG3cXXLD$%sDtG7s=hg)!}a98gMsrjkzXV3oeR_ z;bOT&E{VI9Yt6OiI&fXMu3UGn2iJ$|%MIWLaznXcoR1sDWpaKliyOz~a(P?D)|i7B`Q(lbg>i;O^%h;FfaBxQDov+$wH0x0YMSZQ>r|ws22!&v4tgXSwIN zJ=_c2E8MHxe(rVdAomt`m^;F~%bnm(avyS^aHqL1xHH^0+_&71+)vy&?mYJgcY*th zXLz0$c!@Xg7T(I+c?TcCNAk7#I(&V;0e=hMm~YOv;JthdpTH;bt@vB{c6@ujGv9^3 zjqlF)=KJvd`2qY8ekebZ_wgBgCO?+X;&b?1KA$h(C-IZ{JNRil@H6?j{5<|1em=jD zzn@>iFXdP85Al!ktN2oWEx(c9#6Q7r;kWY7@H_cu`Q7{;{$>6ZejmS|f0IARzr!Eq zkMr;HAMhvnkNHpd&-pL-ulaBIANU{nU-)zU@BAP9pZs3}C-8z^kOZ?}5p058a0?N_ zjY4gqo={(CB-|o26PgPi!7IcI2|`PumC#mbCv*}z3n{{FLNB4WkSg>SMhR&`x{x7c z3VvaG>AsgB$~xY@dmM$c%xWbtRvneHWQnREyQH8rPxZmRctM` z5!;I0#U5f$v6t9e>?8IS`-vk(pEycP6Vt^EF;ko%-Y({g1>y`bAcD9+yjQ$WTqv#- z9~K`G9~D=LtHl!W32}?~r1+Hhw76A#M%*U8B)%-ZBEBsi65kOIiyw)n#E->K#M9!Z z;%DOL;!onw;#u(*@tk;G{8ju-$Lj>0sMG26I!R~H8Fg-5gf3EdgRYkDMqO=P9bHph zGhK6C3tf~hTIbPub**)6bZvF*bUk!Eb-i@Gb;ESSbt7~mb>np7b=kTcU9K)qH$iv1 zZkleoZiX(Po3C4-yH|Ig?jhYu-NU*^benXK=^oc@);*!yqI**Jly0|fkM0HC0o|Lr zgSxkL@9RF$oz#7(`$%_6_p$C1-FLe0bwB7X=q~Cm>HgIHrDya+Z`ND%R=uphQD0kM zN8eQ6Oy6AJLLa4%)_e3`eQSLieOrBZeGh$4eJ}k`{V@G-{RsU?y-z<%pRLc)=jx~G zi}iQtr|GBbXXpcZ&@a&6tG`dbP=CMv0sSKVV*M)pYJG`*jed*%N&Qp$r}caEFX&&? zzob8?e@p+i{*eBp{zLso`cwLk^`GcZ>p#{1p#M?-lm3$aPyJsKBbg+#WRa|rEGd#r zvP(Bfb)|YzeJM(cmOPSIYAv;q+Dh%D9#T)Km(*JtCJmQHNaLk!DM!kc@}vn;p)^^V zB2ATwrFqhw(p}Qs(o$)e^q^EKt(DeE>!q#IGtxF`yR<{vDLpGaC%q=^llDumOK(UA zq&KC5(tFbT(g)H>=|kxw>6G-b^sV%r^u6?hbV0f(U6TGZ7z{>($q-?PG~8gQWw^!A z*wDn#)R16EG$a|44V?{L3|$S~4E+rQ3k(@gWoXPkZ&k36dH;QV3=u`Ww_6< z&~U%u0mCDPM-8hCj~g}{o-jOTc;2wfu-ovu;SIw9!<&W^hW8Bb8$K|cF??zG%5ctb z-tep8HzRKpjG|Fz)EgzE!RRu&jS6Izal7$l<15Bjjfafy7!Mnd7*82LHhy9}ZT!^unelVu7sj8BXN|v@7!xtECeCCv z$tJ~QGu1KOWU6bbXKG=JGDVv_rdv&|O>IoKnYx>Ln0lIenR=W0nEIMVm`0j>rtzk1 zQ;sRuG}TmWy2CWhbeHLF(>u zVmfL%W;$*Z88b1nW{cTsmd%Q}wz-b^CUaeLb8`!Gl)0t3 zmHAe4H*<>lHuFI9AoF1J5c3%GIP-XOwmHW<#XQwqY`(*Mr}-}P-R7m{W#$LX%grmy z51Ch*A2x3^Z!$k-e%!p%{H*yo^Yi9?=Kbc^&2N~Go8L8`Fu!O1-28?4jQLCRFXnUR z^X6YIoQ1at7SUp}*ewoAT}wSneMaPezBahoVT)8&dOT_t75fT?N*1iuC<=E zzBS4kZS`2a*4EZG*0$Dm)*jZL)?U`3)?wD+*0I(s>p1Ip>m=)B>lEu$Yq9kX>on_h z>)qCStn;l4tjnz{tPfdNS~plXS~pp@TX$G@T3@y9wZ3NEXFXy)YCUE>Zar=N)cTqA zbL&smpRH%DzsQVCWLCDwR#}!6xwc$KzDcetHy-7%2IX<(X=S^zLwR0#N!hEsrW{huu{}>u(!i8)6%38)@^|GHjW)v9>H*jxE=gZ!54(vQ4(#VVh*q*dKW!rAsWqZ-K*Y=uipY5RS9ouo+yS5Xyk8G!H zXKY{EzOwybJ8S#R_Pgy5J7eeVlHFi8+7-LgeuKT1{YHCzdn0=@dvkjWd#pXteyhE; zy^Xz-y_>zKy_dbWeSm$4eWcxIA7vkHA7{_APq5!^pJXq#2kc;(Q`jyaCGj(Ltd9d|kIaV&Byb}Vr$ zb*yl#a;$cgI5s&Rb3E?Y?0CYl)v?3zisMzsUdL;WeU5{Uw;V?tA2?1rK6HHK_`-3< z@ulNi$4`!*9cLXE92XszoW!Yf8l5Jm?7Y!g*ICcm(Amh@)Y;4#?esX~oJr1Go$Z`m zoVPiw3-grt6^VUDpZMd#?9gAGv;X z{p9-Db=LKZ>zwPn>sQxrZr&}pMYqnaxNYtm+;!dc+zs7L+)drh+|h22+v|>ZC%ap^ z+qm1hJG#5NySY=`J>7lX{oI4yBi&=&S?+P}@$Nh~xM#X&xo5lQxaYd(x$kr@b}w-+ zbuV*2>@Ib0aBp;Pc0b{M+P&4i!@bkJ%e~vZ$Nhr)756^(e)m!LG52xzyY3V2&)lE8 zzi^*%f9d|-{e%0Q`@H)?1Q)?a2oYk0F2WiiM<@}_h*}XhM%0UF645lGSww6^Tts|C z>xixqJtGE042c*Kkrv^P$ch*jksDDEF)5-rVn)QAh`S>mh*%V{IAUeQ!x0-JHbp!Z z@p#1Mh}{u;B3_7iG2*3&mm^+@cs=5ch(i(YM7$UAe#B=HpGTaH_$A_8#QBJekxV3s z)J2*j?U9j@H$^s#jE_u+OpHv5Opa_B*($PgWS7XUk=-JDM)r#A9oZ+cZ)Cs7v5{Gk z<08jLW=G~k=0@g4PKdlcvM_Q|`%qmip3H$-lXd@Azk z$gPpj47fSBC_DQIBQXZX$e0)_V;j^fHEO(nO2JV4x2&=rcymT}T0ubxV`eM?Ho%oI zGNS}|5SM@`_+&>)r_O`&^2ZlUNXzhd%F8Iq@#hx$wZxWuIR7ICp& zPmA`QlVe*Xc#}JOV!E{N7@On?-rB{~W14Sb+)M-$$=txyVs2z=Gj*7on7RQWAO>^+ zeLxBr0>*$TU=CO|G4+`S%*{+grV(=s)0k<(G-a9wtN|H>$sqOuu`h@|5NCoo3&;ZX zfA=At9rFEY<0s^08jcX5OR@{;_Ejv-0wXs{s6|8Dsr9egv)k+OH_LlfR%aD>tnW zI}<+H(<7~*uw!1%gls?Fst;{g6ci$Jw97iA75FpN3$qHR^z%>1%SWzRgACN}hbTn! z^Jm~S8hXLMmSNX^!h|l!@Pd@wo>{qB<+vh3A-{Lb%Pq*u_Dex-Co^4{=9`(8Oe^MA zrZv-sY0I=@+A|%Pj!Y+}Gt(uY1Z)9&z!7i;Tmg3=A`lt4Ay6xDW1#kCrW=#O+{Scg zdN4hiUQBPM57U?F$D}g-19gDk5BvwfUjV@cLJJVQAhZSHEQrlP^nlnJ#P&c?5{(9D z;eQC7zI9(j4=wGYckC`Vg`72792kG9WJ zizZM7yn;+BsNi>ea#BWKPE^_i)aR(o!l<5E1sN&@Dy{_sQlh$KW&2ZltG{XrU4gpy zpHbYg&wz?+TK&!Kdie_{q2syA9k0o(9(iMe_X%1>CW&C0Z;`h$er7Z?h8fFbG2@u= zOg59l^A2;EIl>%ejxooXcbOB+ zd(8XH2h2(4L*^sq6!S6j33HnHl=+PLocV$|!+gnn#eB_t!+gtp$9&KH!2HPk#Qe;h zWqx7KG3S|InctY-nLn5d%thuB^C$BcVF)2C;RsIzA`%_Z6Nwmzk(h{?ScsL#L?Jd} zCl2ByF5(W{6sRA#InXH3IM6iEJP;M|1Y!blfrLO(pk?6JK$}3jK!-r5K$k$bz-@sZ zfnI?=fqsGhfq{X+fuVunfsuhxf%HITV02(?U|b+OkQVh?kS;*F z0l5uG4yAfs6x^4I~%H1R(i93V}=n zG8xEJAa?+n4kQ3%CXm@^5hRk_Kx&a2No`Vx+(hbbRZo`C(@a8Azeu~l0t4H z-AND9lk_6JNgvXe^dqUHKN&y{iJ#7{<(F=Q;s zBIC$-l1*|*F3BSk$n7Mb6p%tvL?)6+WHOmTrjlZE2bo5ulNlsHkTNoh%qDZlTr!W` zN$w(dlY7W~vVh!6?jsAy{p10%h%6>c$WpS5JV=(4733kZk~~ZvA&-((WHl)vYe*?s zOV*L~WCPhqHj&53<76{=f@~pAlBdYiWGi`wY$Myr4ziOxOP(XolU-yt*+X6+FOrwY z%j6aED%ne3Bm2mH@;Z5g8~`#G$U-0w0$BxQ1CYmoYz6W>kUc>a?)0Cpa*cLRGbuuFh_5ZG0~ZUFXiV4no`8DMt;`y#Nf0J{&^w}CwZ z?7P5z0PHDXPXqfMus;F&3$VWd#{j1XP6o~aTm*2nfV&B}2Eg3{Tr=RJfr|w$5xADX zwE?a@aGikb23!x|`T&;-+#uja0+$Y)AGmSA?FH_2;0^+J2)LubodE76aHoL#6u2|MeFNMN z!2Jx|Ip7fOi@+1$1>p6-%fLH;j{yEg;Ohc^Gw_XpZw`Dk@Ug%r0^bVww!n7;zANzE zf$t4`D)0k=9|HUc;M0Kj1D_521mFvSp9Fj{@H2p)3H%)3?*jgQ;Fkcu9Qc*MKMMRB z;MW8H81P$we;WAhz&{849^hXB{#DGGj*zz)BYB$~BJYsHG(}IxiXp3(HMeTMn^{vD8O_xdQ3rPG^V8EaUd4muycIF4jmgNc^Y<3XxO2B!(>l% zYNz%^g?T;FrsNeBhWyenM*CKL!=w%kJ0~@4-=$%4Jbu^-6A}cNlQ*zq*+0p_f1`2^ zlVjvKd6%3Rsuc{mX*vGE+K>K%0liW&X)VD&zc;v7YHxLBSDC60RSFvT;EzHl$&i3b*Vea)tTYy z+5SqJQvQ2Ke|B~^f7Y0>g&|0>n7gC*^!ntvRftrGmqg#wJ~u5Ji;lFyw66YKe?HYL z>T<9AG{o*%LB%cBCudg;ZvVg=#fEanpkfg3lQXIYgD{>sCYp*XYI0V3B}csH%JQRhYDhdO9@`FJXs#`~k3i6|~ax=1vGX2pw5zN411f@RT`hOfV`p&e)kMLO8a4HmD-i?W+Fg?n`Q6KF;_< zHGZB-&Y0@sZ+TBOq0Eycgz|U3icpqMp8bF4Z|~Hrv zeX9`M)~dMS{z?_~9R9{{r}{JUax<^=+?!N1ihS~fYETl2bVJt|Jq zsw4Xe38}BB_nqOB{Z*qll-x4Tm;K|7E&n0Zz3x|U4gbn|@^5A-DY=>c$$ioa$A(gL zP^D;Am5tD@saTb)@JbawtYR{!I?E(aC@2~ya@3@Csj=Dx{l4)a$ge~z&}xM ze2-6F8?>$eJzf2$>D1K|)T<8^dZeY}FgS!~U#O@rsGg{H)dcJt6${+w935m}6=Z$? z&>{b*-uwRQw4nG<8JtrwScLuRs-gax-bCX{JoO|MF`f4DL)79A6{RIU`Hmn;*I%P6 z7YI35xZJ-~jFwfIn8L)bm|*;h8Jv}_R>_rl!tp8w%d2c#Aq)mr?3GX~=EV;3Cw!udXsb z8%B95H=nv><>PsQ%gvgrtzxm}I!4I2G8+nQe{=QK8?W`rW2#O;uN=%$rd&Cc_2-$8_=9rz4c>N)dq=oTdOSQ|E<0a>=?Si$=#-6u&sK6S!yS>QQsjy zZxXKDV$`qvYe;^^^;YrP;gc6sjka8qGc@w2r{v%Y9^w@Iu~Xip-0VEMbJ!bq9<^=6 zka*i)Me*6|>8C0Zw$NZZM7{O%KKZ_C;Lbol_6Vr7I!?*R#&di@uYKhwp-7HYk=$LK z${jid;4)MUUhv6NgKYZep0s~nUUtSI=$M2XtK#!g4fGJpSI@6#uy8plQm^>rf*_OrZ+`ijmPVs}r5%P4 zd&*Z4*;{47H;jX>oI#e4FGD=?Bo&E$)mj5xUj3AB-G|!K9V%+CU&q`w{4k9J^~MLP zt9cP3kGbl-5B?kCQ;4$OqvG{;mFD|pl||V<*D%?I>doJ|j+#)uo)#LFm#8;B;*;;J z244}H9$c0!pc5ILb(wozp<;Ke%53+Vo{V~z@+ow=th7T4YE2WOE|03Hy?Y%c7MxAQ zhB}Q>^~Ud2XAq7F)tQYd1|M9TG0@~@l)b30WmKJm%hgNFXkGpFl)I_T;hg|7a*9DiZ{lu%*sR%!XPI!z!k z6oZ#l3_kbC%Yxjzo+;MV()B)A-<0KE(f!+3`YqIB>{F3FQvG&_pzJ5_L_}wS>twJ-oV!w|2UA@hP>LfJubQbrgiovCST|=sJEy;5# zl7IQ+d#gqo|3CG?KO8RddWs_uavhynu&Ee2z~jx@ow@4iPF;f^Au_XRSP50OeRE~R zD|hZR-d4nZI$Nyl?RmF`itaj!##>hVdqcc3f1`G1$tOP@)ZG6g&a?Ld4tk<#86f)HhRe6tgcf}`T zx8=G&EG2x-%g1X-*sIJjsV?BMs=VCp%O06g{yTLFWe-9K5ll-BE9ZalkrP)tlg78z zh;sYntwDMJ7aYx%YkzzvjgrVJQ<`fUbx1QX)Sg13S&D{Lts0p~WoPAN6&8d#BDldClJ%}*&0l%DJjBzC(C*!!I%Sj`Dx-7_g@)JRi37>r z>>ZXi{Ze7E)tQNyambxdZ;Cowc`hbnQgcK7IN$=^dXC7|8eTit0? zhzpyeArb47@2;uXe$54F{%#Gy`0Dg?q5FUQeHsdh*HJ~nH@W%6+MScDllb`1WPiDa zLaQo6A&fr@_8z?D8|Wd1@`#2)YoGkUzd=XUM>vE##mleJ5N-P(tH`hDk@6cfLfTi) zZ0i47bZyqK?f9?UjlKF@vZ9!*SnUb%%};A|b-s>$k$*HK4>86a8d6=WZ}3*WPf^ha z3&CiYhEYnT5LO+7)Zj)aJ}*)2(lqOd??A}H7a!muo=_M1l7?XS|20oek5BL?#3W_J zU-4wFxVWU`WKUdtd{TUTtjC++jlJ^8TzGX_W(IyIBu{=#!>Q+g>~sJ=GZ0rU@o^rP zRjdaza(Y+Ug2X>4?6qU+A*y&tL!)mE7)N=3AyoH{X&9we4`Z+`RQ{-m5XQW(p)sI( zT$$S2y=>Lz$~}Ajl!nxxf29rl%?a)H`T1#~8!h~28aYF*W13oCM}^ibh9Tc;D2%v{#8>3#A*y{=yR)x4iBAaS|8E)!X;o(AVRH1!OVSm`>_RwkNkb!} zMwZ4aXHEjEVdD46FVmDHU z)i+h%tG*&JqE9}iQ5En0qsKn*x#l?&@Wq;!{b^uUK^DI70v|S#pO%4dEmYqmGNM~n zroVl5c1l4(kso73!^nYyl!%A>@@w5;`mr^ zV)MG5Y3dt(ge+m4Pqz0;?O9Yv-?Y&w3ty(0my5`*!9R^B?+x#jTJc$s2{}SOWkRly zCrl7-2Xa4<2Y@UBvba>8~yXMk)2vK`2dQsJQR7SeDC$W9e$Q0a+5?JXywuGo+YC7dG>8;Q4Q zL>ve5ZaERCvOV^HFn42=YS2lZasi7`Vk~7ywCEANVhoV?fV>an10W|$#W*ougY_Yh zkIG@yAVb{o9$FQ^EngNu{nD?21HRUAyI=`Rit2a1D$dC{DR5;HhG<#+-x)A71QD@X$CGmslafHR1+JN2$10 zTqmvvmH^8F%K^)miW|jE$Q^vQs{pJ>>0os=Yg8?}ywQs|HK`;dCeq|9A+~wl*b1?1 z7oVr(gmwJ8#NDb`SP57|xmZwfR-G-FGv>gM;+PoJ$K-@^^?p@+{i?v;5Dy@44gzZe z)~xczqG`^mv-t;1cMU~zN6eC95>a&$W8*8U&Jpnh1$$IHCLR~@^|&&y3a~a{?WN*- z;`<2pB(M%(ohn#Y&9Z!0%ZQh{7>5>9`}E?Psv2#Rkx@ulS(PJxA$~&%IwO85ekFbl zYy_~8z}^6Cty1w@@jE2w2Vidmwzf)8oth=6_scPje?By#IK~sBCUpsM@zaJC$9TQ5 zSjHt(2>*BSPfFAu;sx=dcnR3Lz}5q{KClf+#lLh6(^Q9cax<_ERiYZzEKyCOr|#X- z1nUxS68hAngk)+OSol;@JDo|VAVE5_&Z4vGQ0E#0+XUFAz&0z@*>rX!$O&w7U|XmJ zMb#`pYqLHc_|zzrQhZVpDjV*7&^!-UrDH0alI|wm&6K9Px_Y|$x(2{{fb{|!18i)m zuA#0G(u7pT0UNKQnDR)ai_s-gl?xZCbV<5oqz2#A zodj&MN=-|o2Ax;i%&j|YJ%?g5hE^zvF;w!NWGsZrouaP2t_#8q+g#Fh)pbL-w*h-A zu&q_NZ8W%D<{s?4zaFZThq}ci^s(q5;}b#v_t6cY2#52wx`Dbu2zUsv?SO5s0`8yz zUUh!jq7ROgg;sRpgNx&nDi>k#k;V21-cLIpgs zW`(=5RkLQUg;@V%HvvgP<|C`(V!asID`fDrZU+@^xE`Nwr|wxT-4S5N0E>o{1?;#|-7(#91bzb8@xW%Qz;kMr z^*t?*E_~*WGB1%#y#!_-mDzq;cjl^W|5Epr#`Zj5Cxozl$0wgRPeKjFc7fOHt+3D^ zb>}E=e$xG{JFEKz*nD6MfGq^Js8n}e_p1hNBCwOnq19l0TzXSqX>aMU;-tg`ly{=H zyk($g^*YLwa9t_AUN13C^+sT)06SF`aj~X9MVau%_e(TZV>6SoI;1 zyY&$obEW}1y_`8}HTFvv^UXAVP-Z7p@LGS9o(64wU41=$eLV*40I&e;Okih~>Kp1Y zXzLpTI~&+JDw1<+Ru7x4YIWlEWkEgkAag#Zee`|x{q(88-UsYLVDAU^fl~bd{Xh-PMZhjDN3#YMyyJ@9 zzbsr-#vZJ`%RHDqO+Olm2pc@~WAtM+B9;QXtegmB&&mdix-GysO3PlX?>rUOlBX}E zJei=sU7xQ{MrUBfl}BTsHzzq~;M|Hv+p!rKWs5Gb&^AqnHcRc5t#st%C4`Wo0gv z>Ng_Xu!)U+lm0P;yBS#g-xDfaoZ6^4_R{W#CK+YCkBd|73wd8DuhDPS@4PD9XZ6n^ z++Dyv1*|&tVYimSU18t#MR%18G090N(wLCMUH`Iv9|8?qvg!BhUq_$^fZYb{b`{wj z8ql>l`tQH5i|Ji_GUh3X2{DLnoHr56gTxBgQ;eXO`C0!f_HXq zTQ$q{rgL7p`>8c$+=WFl8c))BUSkj;|bwI zdr7UX!{uC3R|%_Y39IXqz~XcTfqtX`EgH*xa45NqyJ``fOm`_NxZ6ikOY5+F7${+B zP1A~xfyD_(g+}+D@qX*6E6TW=R6Y)qMoL&wua$h#C@D=!m#~2N6xh#z{T$dYfIYKT z@=I7&OJk)hV7~1||1#>frvKD!tp29{SoVL~--DlI8R;iFR-8O3e6U6XFtsI8xj^tqj`QjZ`E}^vTxpwHxhGhHLQSN#wo3y;8N`QK!4U zeB=6lop5<2Hj(yqV^FVYJ1VAfg(ck~0h(giK8!R|nuQ882iWg{#Q_g0HqLmcwagy3 zx_9zvG`^T*gq*C#c5Jm)ZtzI=NDC2g*m^>`UwS~(?Vo|g0Z)Z)m*l=(uk@5=hS;(w zbJo&w>5;1<`KYuCk;EkE9I)qAByq;0A=$)y@^>WP6Hg0f50133xs^m`2^AK&LE4Ov zrH#@i=`rbXV1Ebp4`9*tUo4fLkhUOX4Cj}C{ZoaEbDo+Ektub1J-hEM%=;-pw52_m zinB5~&r2^-a&}3(r9ILMz!BhB;5gv;Qt2h>WhCcS-~`}AN)A`UgPs+q9=6t+I;=R6 z(%?k=RI))^@3!E7^i%OEU zW+haz|M%YtV=yg?^ z7-Tz5Zel!W)!4ian%`dr9$|;A$P9u(R85(S1nve3JD7N_yv)R-F}~;`i11gWR?2LW^B08P!EBIP52G<4Gj=z zL*VKHS5KwBz6P|d|J=pwOE@r1j#u*uTp>dTk(g9DL>rnJJP0{#I%n`2Vi0m1a5n?j zP=(w`gWU83-PccEz%C;4F%g?{_)|Qpb$oe}VrXe-dsVRQ4DAtYN8lO**F*)|v<&RY z+lGBrgmbJII#f@J(^jBD7SjwVhF+At;o3Nc-iAI1xF2xMfoq`xj?w^^WS&s!BjC7L zb>j^aD-0B|A-h$E!G;l6W${RZ4*{nE=K;>E0*)zT@uHvhD?Mp@JBF6!TA)Y>>G2uH z7_zSlILDBSfF}TlOjgG`TtXS(VFfQu+kyjFx($|u%V0QQ2*r1zp_novT$j~whhdtg zv`N6JbC#ge_Bfz?ejb-zvE7DVC>9N^%mxgz4R=v+5N65KaJS(e#1b89E8uQb$;TlJ z4MA=H?DWUvJo;LF)iq$I8%3ay!ksPwP|1C6zZ~3|kD(P*`Ctb(>*3 zlDreR&cJn1N$#qVT$JHj_0)%`N;J(-7iLj1Aw3Mk9>XgLH@rJ})vy=g?gK6bxZ6~? z-8Hx?yYHJiq~*|JwHr#8p0M(Yiw$uC2Mvd>itiD_QG|OOxSqiEQsMS4!#8t$i(7x7 zfd>^7C#$qTSCy*V{TWUgK0&zQUBGF>ry5WD0@trHPn(|n=FgFD;xv=iDhbKu@yzhG z;Ri~6xWSj1nd8&Py~gLWa=6IId$*3oe(T@do2f2sW(w z8tWSCX}rk*PMx`wTiGl3{qosGE$UR*n6a@jN-eZdgG+G2h0QlCv<9p5tsyw#T5F6p zdJxYTV=Qo^fg7V@Iu^JrM7FHVF(%UDMlR7xivOS5rhem&UAy3EgTf}^OO6;d*Z&_& z4%(k80~;(kkh?1zJ@wei6Eu;gi469hX(AmP>%m_t7<{X-Ju*0~8#8t=cGMU=9yoRG zRL+@wBneK2UCt?2~5mS<& zVT?28QF!4zyK#c?b`9QS;HFfDSCYrZoffSOx#9De@e$%pOII@CEDQR1lf#nZuux4hG7yvIn3 z&G6cHzfmhTxmm!?uFRaaOP`!{>OQU5te8I-mm6uZ8QxVqYQ$pGSOVN!;O42U!2>*M zq`&k<%W(~c7vne<<%TvwQz*=OXx3NG^bJN@Y=(#Ygb|BP<5R%h4IHj2Vlsi_9~JV> zpDrYnt;2b+Esb#xpCnk>^mZ6`U6uIV#yy&5+zZ@&A;d44S!Z&@73sNgukj587B)N? z4;bG>9Nz-&e&8NZaa^R~ID1^3hh4F#wn<(p7mu3q#+02E3aZ>u<9i6%c+7a*_^$B; za7%z&3fwZ_9xOG!Z~Ooue+b-i;8v)R@%T&)s@$$V+dG(sexd3{e6l)X@KC{4xTrJ6 zZz(llUDS8R?=_}B4BR7?nZA7Np7z$+*uwNAs0&Y?*zz8S@tpAw1Q_1FFBmT(d;SD& z6>zIn_LOLhFY(tF8@`8X7f;=V+7d;z!|JmVswUnfQOMy^SCheHWSW|=d@coUtqOTv znc6*_MmlEWR)i;k7DqT*zzIXF+DXC#F=a9}*-a4$I&5lWiZtDTps|wM0Nh3u^d=2- z)3*v1UmBsQ9zN{{H5yd~lcWl;^-Z@R*s$hoYHVtPV4DH=IB=U)uuqg>oVn@Zpy8My z(!|q?wHCD$PY5TxrUZl=R=G`yrX)>hPXhN8g&Pb~v$OiOy;K&YycLD4sjaCK0yDKU zwKsJzVYRjuxMzUd2Hf^iQ)g2bM6w%jJAlIzG-%DwB9b-dLU*<4@M(ITQJ5jo5m8bs z&5+_lcAZWAOoOh<^TDPe8gHHl4v)`N@TTp;Lyf-!)l6_NrCcpWnfwSV>>S!O+B61P zlLg!!;Be%Gta(wBU&j?&2X^+M#$kt+>M~A#(B;Qdk5X=SraTj!=7y~uOhqP~=9(}B zz6=~5%0bAlYLHhp+VtU`b6WiHV*3CUBboMRD!@)R&7ug0+g32mHqAk>^MHE|xP2;E zJT*f-bF)=FUYm$jKJ6}|&!dF{wUr8}3rr6n)UYOPT4Y*`P|*Rt0o(x<>YEzWlH4R; zyBo0}iKAO!NlEGgG(JVPGT@b_)sze2Y6w$_X^kc;^wV!sz!iG@;fhbnT1YgI1Z{Ye zX$!?NT%l}w()1K!iJJWmaEDbak7!u-*uQ>iUY#=9F>6GY(#j;J+@G1AHSM8b!&Q%_ z7fdfASQOJS;Ete0ziT>qRc?N0`bgs@#wMKVRO05i#rgNv#tkg0 zNGSdC){g0O)7MwU@f*{(h~xLbeGJ?uDvqbiaD3>}nl0$ay)hm-ouFGw$kHU*-Kfx~ zUrfJKM8hrjn*K0dK**PX`wY0xRmfjxkk^h{J}{*@X77n~0h8tq)U0BXE3?4Nne_-c ztPYqZvw>-9HUak~a9^pAzt$l4IM}RX>&W57NviwC%#4oslVd}c7tJ=an?ep3e9RH% zNQ7JqxNm{`PKErv2D$B}H~RN|P}8m$T-Qc~so$!oqRsWpjSy^D4`aT?+*p&@kHGyz z!3Hg$Hz#PYuqY2XhtlIfoq_8G4MjX~Q4XxNxdQ?V z8@kLL&7Cx0=Yhi^MFnDQm)`YF&pjG2?7o%*>u&CIRp#|I_e17kqu_Vo{!p2RM^mV} zx7~Zo-JkYBS5F&*$???Psl^12lgdoqJk&f&tzdC0CLi}=a4QBYSX_*GNZpNDxz?O! zPDkLGW@F8AbwJ zR=cd!y?j&`c7BEr)V^YVhTM5%>j$;#9mM`r9JQ_F7}}goN=!!6s9<}px!|fYEHoD( zXC?v90?$#l^L!cGm%hEi(4kC*c(57;5QErPI*n|eW}ZpmhC5DVo@Jh`>IN?YudA#Z zc&um3bDK1{aTRXHe2^fZvfs1ys6ZDzZpv&^J3u5z*|%#t%zg| zrXP!No1dn94|fXByw&^+0^Sb16L^;jxNJ7kZTZoAcC^=0 z8|-*s)Sy#>3ZT2pFCoydG1&aF`4t4Z7x+lv)u9MqOH-2B# zXQRWN{xyGW{siHE3Vc1_aX5l-8)$IJdtJ8+WxEC*T--vX_Rv+UiZjyYugu>gzF|YM z`3Lil2=`~;8v>7`5rlh-2DfR6|Ii}?=`Kes-K3#F>EtOXhE8W=%6A&fznL#l$%R{e zH~(q=i)m^hz&8QDsS3QA2E66cj!&(nDxsz%iR$@%1dJ>%=Y~aRFufkA2n%)xn!UTiV|E#8}mTs{5@K z+~{i=h_J)9)GUK6gAw*n;M)P;UWMI3gWYA`*cA`=Lv2W=ikqkw^Kmhr$_~OZ%0lav zu<4Iwv<2%GOBV2*fbXmV#(4*gvpx2=9Jk~G+A>vOe1a`vjD3FmxuTnG$+OUMC9F%c z6j`ubu}lWO8}KPA;M+97CEXWobKHuW5l>wj&cfBz$>fkzIhN@bTCs%Z#cT^!ES7n| z_W-`93b|L17o&IOpG7r8upV`M7!#TZS{7K;k|kWaW?5vxlEtzV_&&h*Rl)Ytz+!nk z{l`0K@=Bi$sw(-m zesX$a4c(Ynx;GL!gtUBap*4%;3(FbHmzJ-99}WB%;Ku@=RciUhf;9_e=s4iVmou~m zlZjPs>Dc#nRgg)TM-KnsI`fOO!L+Dq4*cbhymKYOk=&>j-N)LJPY@WzDc=BEe`L zbAeX}0DRd1V8wf5dY-~%J1?@58ZQO`OqTH6UF8EB)@^e zANU2O)_iLLf<|%Q3;ca5FBc*&YtYW_&*}1gJz0|>G8<(`dlMB_F~d3=i3uBmtaGe$ zk(fJye*kzK5@4vuGbhw4y3E~vd;w}4u1zD~sUyY|I5t${?zJwW;tZGdSr=QEAmC-d zV;owh0)9{f+_Ll6#zDu+Tyng+bWEqg73e-}EurX!Rk=0RQcX!#0RK>^%AK=Ji`RHi zv5;te%=+Y2VLfGiT7&g4@Q;MR%G}v^QfisyRy^{=`mB|9%EC61tuI)yQ)Yb`_*KBK zR>>{V$ZZpQa(CwMXu0w97*`T517cW@p(&wQ3iP7XRqDfh^|^7 zT-=bLm4v$G>aAF2v7WQ4du4Jh;CBG8 zP84`LQ9y%gwyJ;Hqo0*&m3pvGeJDk_7RdEv+A0gXKq=oMW2;PV3jFiHtBrkrw+6N3 z^`@=PeTjo5PgzQ*wxMy;sFHrk9yy-k8}7K7oFFG^JbeN97bzctX;{Y<&urgzROKly z-UXw#+(zz*u)>zpawoa71`F*#ZR`hO%^vqLZ+M~1I?Gc!xrf{rVTEly%l+h3q<8@E zSe?J7$_IP;l#fN3ZGZTD1FDXC#v7AY>X^KA&RoIDVKPRBb@Fg|ggjFA$)n^n;9m#+ z0PqKae;ar-rz7j+3^`Nw%cJEnGA2;RfIklWyTG3S{ypH|$D17?Z!t#lHaSGzk#p3? zQ}S>4CT9636|{_wP8^+?oR*xC9`Es2e({BzuU+`&H7-m~ zPR|&fp5Y%Ia^WQH!ndw*VJ6-$VRUR<$g4KwJG2WAUGu`U%*2e?^q7!4f_CBIYh37$ zPfLr>NJ_{Exp1y_;n8bcn3+D>>raY{#kc2a580IOlJ91kuUbXI0L_d_)|~e0iO`K7b7a>`zS(b1f z8|6*%WAfwjX88%=(Jf+^eg%2ye?7c+vHA!Xff$fnt zC9f#-Eidv;4Tn=z_SE5PKK=L~;8rHZ=ViLu9yWZ-FUh#tP969sz@M({Y)ZOpxN&$F zb+Hx8vqa3ogG%wb{1$=>?-k#c5224Z4E$%nf3Et7FEk%fvMyp~b`LDjJhZh-Pu;20 z_7Eq2LjDi|hi%!&AIYZ>Fe3RS@aiaq|5^jQviqN#H=R)(SyDWOis^FY(T{vart1db zssB#Kbp!cF;J*d_I~CpU%h2t1=>2G*xWC{|5Z;DoKB6ylQ&1pwo#-n7=0_(40L1^E1rf6B9$0ij@cj zE4I}NwskMARxlXdCLd>dn>fyRQf1=m3~Sp2xbs0AXq_=OO*l2KxL3J z7z70b8whp~oQU(#p?P^ZUGTZgdHKUSBCq}Vee$w$3w^S?GoDrRXZFvV(8E8`pIs)7 zPAG<(d#8`XXEUdC>YrDRy~g1_c?IhEww`Gd8no3gV@4L^#48H(|G3!XsQ76b+tZY| z)k-=D4&?pNtX`fL*|9DB6FLOR7_E%CjOKAlHdXNPAh=g6IUqzL>Xj8-OFM*!>UjY| zhqMBJRQ81Yym8Sz)3S2$Twq@Ql=Qr`{LCN)MG9{DuT>^0la$HI6lE$1H-JzJgd0Jq z4MLr@sQ=TH>B4;ghdr1d*CtG9l_x>)T&A?! z)Rabu_Q@@SN%jPP{^%At{v6aNOtSO+6Y}y4+h(T~7Ndw@w`G$HxJs zCuHIxS@8Bdm1i%z{VoOT_tna75MovOS`?uPbkW5D!8E2#IUZ0uCx~soI|e0v)*c)a`&fA4<2 z)XqIRckG|iyO*zfXMFS4m0##QxKI0DspVg&dj*7nDXA$PdUWoGU?>btv`3Y9OO#{E zaS)P0Xaz!R?c?{9_g8_?Qi}#Bl@CXjA7)j9!W!iy4GY?LPbu%ORz3y+BSK3IG8i`| zOz5AVmRmqYmg>(a%FimCqCxsh`5YfPU-mTmRR8~@?k>QixY`EppHOy|0;S1j6=`u# zaF^mz@HtZZ6_VfK5Smo2E?LQg%T!3VI838BkF z-6x{#I%kW^BbUc6Kf63}`Nid_%QKhfE-zeOy1a6E?eeS38<*c)es}r9-VnM;O%KUE{x!X& zhMlsH)by2_ep2&|)c8wHfYb!hzAn2?qf>NRT@Kx+x}3UPy4zs8iI-Sl{ zr`H*DMx9A#)>(9Ub@_Dc>Vl<)J>Mv)87r9uYa*oPJE@s3HA|!>T595?X0_C8keV%0 zvr}pkrRI?2e&5{PTXR8bu1L*IsktXL52Z$(H>TU$>k8RNF2A4J_1_%11H62#A?1Sl z__}`+|;`a9V1=Ma?(4L=nh0G0>u{X$1llK1i8w}-#8p^5v^Fg!a?alJzqgm6> zYMJ|4#oi#lE$aR6_tTpnBlq;G40FTeJO~^GDxj2ioJ{7cR44l&OR4gT3Q0dyD*% zWmay$A0#~7-YmZ~nKf^;A2c}5-XK3OnKcbo%{-PT+Z*H;BC~k&{os9ey1iw74l*lC z`a!d^?ac;e+1UNy{dIx8MSk=#N&ecjoXF! zdG~J>7}&op({lUIwRR14{K{B&pOp1>Y|kOhV5u1-`F$=8ze$*NM+AHrx47=>l50Jj zh3&Xbw^6sr(>Z_oP&4;7Mz>k_z0>9YuoOR5)~Hj5%&$#3eAaE%abWLA@D8aNMuP20 z+^r^YkJJp$l*IkI1G+V~tc;YJ5w@&k%~o$4lD4$`71#HYBj6*tV`%|%JQtoC@F_Lm z(^4Zd1)QuqpAzsGuJE%3oR!;dTG&6n8}f@I?8`c?U~}a8n$(O-4g01VHi!D-GlhLm z_hU-f6QyQC7UtP@++@r1@0vAnj({KO`0T|I@Dr(-oEq>mHQ?t`!`ZkDTi0vduPFgf zlbWfvfU|h-Y@0~hB7Z*O-2_MEf9kk=+7bCXso}CB`;c~ZB68PkQZplC;Rw5+)GSC1yNDWgQK?y&DeRK2rBcFPEH#V% z7egd%Ykc13W=}`t?ylw2BCjAdT(Ojr@XBiBoJHilCPTt&xYkUGJW6UJvvP>oW>@yj z@x~usj)=c zj)2>`woeO~4~ybc1MZ{-+*xW?W(v5wYmbzG6QpKUmXGPQoyYwx7qdCS_Hy-33)@F( zxaKNlWcaFKbKY`orm+282c(3}N%(bHIWp2B{xkcY2abq?UAfxcu@y4o*_ayfU^U_) zQnM*j#3NisrbPU`)NIbGh*OWdZA0VNvcZl^Q(VWmj!TP}x4o^Y5l>Pho-8%nGDRHW zIz1&~rYPHO5ohsROWIcW+|n#{bj)_;^CU;E+4FMsSjy;Fs7B5njn6|eY=z5QBU2*Z zD>clfm_ugm;dj~&@7bZZtsH}7xoccn;PFzkFE#K4HE_<9@6QzYde;ppfghBb1OJ1- z(=z_7%bY|<;9Fd|`E-=)R;f80(t7A&blc#L` z$f5~L+B^T-)d!0^BEIaJHk);2HhVTTVs$p_%53&rrikykI%c!yr6$=HaaK;k(+1Oz zWz0^Fupham&1qek(_TysTb4Ie zw5hBsQ`xJIfc5HBR?k$HZ-`u0-uN@{+M)_2f%l$zh9qF(!y?jv4( zH~Y!7*PhP)S${Ik-F8K_di_xP5IpT6y!ltJ$4G0coTI#b^juvPtM}IX=&ky`QuDji z{2?`eO3m9?eLuaQ{u_ONsrgGPpGqaCRP-du)4609^&0R>TvexD`lVii6d3Ft5*QZj zZEeM+9_}Gr@ew+ZtMNRY%YJ0hw!zkcet}^j9lU~lttl^W=W4{1NJZho4##Rn>ZQ;{>qqIsrQ#%&Y|;AB`Y}@ZL@L>(qUp)%(k@i=bav)%b)>v1KYu%BDh^w&?0*7Q%k22np%KRr_fGxRg1qLoSx zB4}Hr-h_#^S9?0^KFo%FcQa4jc;`zcm%8!l7unCb>KE&m=$Go3bq%rlQ&}!Bl1d(_ zd?uCLQgQv)F8KbZ4}{VUQ8wUa^NU8;UFJx9jGp_(M(bns%cb(URGg#rar$_vxJdPf zwWoKo55!LP%73)$fzEp2AsUJLB20veK+#Hgi6Q)}{#9^5%PAK`L7ugW0V2?LQdhrD zzuwciK!#D4c^Jm%H|RI2XLbL1v41?RtKY2uKI8RT`fd8%>UOzZzeB%Mze_4cshFf< zmWm}-zem4UpQzs_mAq0ZB9)?2QEw{n|KIKMh+dsg>yJt$UzGm1RPx(;^LN|jX?43i zqdzN^0#e~B$<*!gy#5DutGJ-QD3vdy@@2IClDb_M{1>-N$4I=Xzmut{8Txy+4X`j9 zV3B%LbNr|6@1eT=J(3F7H>TVEp6GwkKh-ajN=d1dkV(1_?VbL8#u07EX5a?xQ3iICZczq} zRLZf|bnkeEoVIs7#og1nR)z~8)puYwzrg?Q3P{6e24=SDuaq{p7>sOD2A#pxpf?z# zQb8(}q*6sH)nW}MgV|s)usPL`N=>QMl1lAN(S2!;uA--NwG7dD2ZjA#BTM^6m7%D8 zZI%Dqwe{)aUA>Y|`O1CLe+9`<%D%R$|LxkiZnRHdet09p7n%(2_O(_2@7LzVS5EqJ z+lrJiV5nfIn5hO;3{^8dQo~R)(<5~Zbu&Fu-@w=Iq6`hBQa8%bNGkO*)y95pk@A(N zbKMNJ39yC^3JmW5-w&QvhOaY)(AJ>N9S!Xa?WIB-jiL=53>~G?L@Hlr3dTNnRJc5_ zq9YjpKwrj44Srv!QvJ$R-I`RZ*vPGNjrx_{YE-UY!L3TeMpYYDs?xYh#j5qwZx8kv zpu%N;nO0P>N+WJ;Qn`s+g~m0ix>c^yq?%j(#ue+kRj<;pe8Vc-LZngS3XT%=G5Dyd z^Oj1}D1%ih&4~6to{us3v2!wfBbDatoGyr5x_H9?-AY4%A<*fJrmvx!fti}Kb#RbZ zfRF7WSMOlIpwO;<0Y28jZM{PKNu^b|U?S2`DlL)?VTOSsmtl}$uz}+M7p~5AEY`{z z;2YYHHKlv3lb3&()!E6ptyEgt-hmCn48yypTOisn!s&AQ2kc9YGKAYdCvFw!`@tKu zK^jJ@Z_w)J$RBzBAK#e`V-1}A%&;GsXqYT?QHDuUX%l6bA{AoQ^kmhoy#`qAKWp>% zyG6qc!vaA%XBuW1zB9}=%rVS0%rh_zV_11erGr!$RGp;KSt?zm(ly?&P!txW4NDA5 z4a*FXf;X3L;h(GD2vWLBrH52{N~ISMD4MRJw#l?dqn6$LLK^$~`TF(oXQpYiKir53 zx3{% z2IXtGRjAa2QC^`+LpL^=#%}fbwr^!Nq-sr?ROmFgdR5P=l{@*hRaf2B{!g{C6&<60 zgMn#PjA5f;lVP(|dP~JiDt%%MTMSzb+oZxq!3>_8H?T#Nr-1dD@ebrV?e?|{?HdLT z2=ce8b6}6K0Ry~(huCZDVf9t7U?7F&4_?wHNL`$#)RC5PZ5{kV{jIi{w_%UVmF0%L zhD5_Y!+yg7srX2xzf=OH5+apBY10|QVFRNds09g2nq2I+*;_{cTd9G^Sq&6mGuu`>K3Xvd=J?FN%S&6z9rXL(Y8A*)kSZ}rHS zZw%BA<@d(=gmI~Mc((A|;h%K%2=n%~T79fO$u7E_u11R*QGe@@kZ$~&(rUEc5S~3; z6KyhwE8(Ap=jznjqX}P-W66er{(-^g3w-fq&Vq#s7vXUazoAxI?c2oP%Qu9-)xBAf zdd2N2botCVTpON)f$h#08~m*vLqa%C?$}&iSp$BM?OgE^B};X)hZ?{OyV(EJs;)>~ zCc0#4)@}c$SaMmnobKhy6GLZpA4AV;IUu2`DCt5jvd zMt-(qQntnDD(ZvPYp`2Mml^e|fPMkK(KSnd^l{tok+rlAvHIBdZ`9&!ow^-@0|P_D zokR}dBJzqN!c9~Z)kI^_QnVM{MIR0hzZD@IAdV8_MTA%&7K^1KQpAYmB2KIn>%}&) zPaF|v#U*iD+!Oc311BdZ#mU7fuTvqXqE2p3m7QukHFs*|)Y_@7Q%9$sPQ9J1PQgxL zPD7ohJI!*6bK35-%W0oI%h{al|BA0t{!RJEiJini`}^E`qv)CX<&j1VzZk=Nqm$ER z@~r-qvfnd)V$8``z70u6jZrZiHRdpWYTJPfmdX(JAyOGCm0>Fk$Bns-pBeM;zZ~7O zKN&8S5mFgt`;Xza9ZTVV-UD_kDNL#jy`HcDPiLpi-^Eq7(bpBj)prAgsqyB>YFGu~Y zb9poq)kRHFMO1cv^pPExZKrK4#20)-o^ZaOTGReOF_$Z=jKz&5j3vblV`*a|L%2>>S0)?hUM)4 zRCE06J|KO|HS8@<$ikM(r?gx?W6O2zEl>K_&L*k-ESLT;v|PvL>It{MzkPtQp*@Bv z|Kk|?rLRCUdkoXEumUwwDo`V11-`bo%&f=y@0{JXRUpHttKcYpg^bnLKee}AJbflQ z*&mzb=^T`W@u=sc%XR1%Y_)di=NIhLknaO!OiOor7_A%##WS2@9mMP%4Y0vN+D@YwTzA6M2kY>H&gOmPlo(RF<)WQs&!_ z5S*s>VxQZYqq4w3O@et-=DafxvW@K&GB92bYEZ@C@3`Y=Zi4G#48w|%X?uKJ>n zKIz$@QFVUFv2g>piVZ7NbF192S{1hj6{}Trt6rgTg$DJRpjWNVm+;D_UxB^(v<5l` z_P6iW;XFry8djBSdNA3?n=H zRn&otk+s#NwyxBUlG;h?ftz-!)N-Gp>FN=q{e*S>U@PCXaOQ81eu0BpdkysSwa>qe z_4$r(NT^pp%4Z}Y_B)|?I=iX8{%DOlhWhbA#t?Otsh=#^*PXgvdvh78lwk}s;tK%W4)q5y7LbW&MXAMyY8tZ7ni8}T8zq|d?u)V|TA(=hj>cOg~2Wj=;EBa~~ z)P?O&aa`QVK5@7I?Ge^z084jE_d;hw#ucS3&q)LxZ)E?1ysc$>vjtNgYOAi6NpnCb zN0-6Y5dOn{1w7|O9D$}*ted~>mNy;PS2^;RXxz_v93$uaw?rA4531K-@vFu5z*5G= z-?iabN0RZVx{f1K*%oCyCKdJGTpiR~7C06-WjrTzF~-xzGsd%0*&&skQrQ(_OeXgi zq{5|AB>Ofe8#pw~&@jnl`o_Qw@U{JC>O7sX!I^@L%i2C!vif9xys0&CfHgFDh<$c- zRoy(VNrh{IQa8_=Mh^VqjJJ%pjdzT9jrWW{8t+SGuT&DHLSFVug}fY;%Aq*p1LH&E zBjaP^&&DUlU!-zaDoIk|gM}MXIW3i&QcGi8$sYR8$j;Agm+|sRzdf#95 zc0k0HkCiJCiGOoog#3RKtWp1Nz}aL#^b7u%pP zxw=$dZql0!CZow@GE3!@R2Zh`rSgMRxYj3ovMHY_KgR?=8*`h!?3UJiM_XXF(sPJ& zrfbT?*nNQQD8W?NRK)(3jI^TLk0Wg_YwP6~9BnG<_}a$bE|b!@sko_x=}W1clS(pe zbxvu^IhW)4vL-k6dA27$r8?8e{=9Rxl&1~bL{ar=z7xT=cE<6ds`f{@rb&I2?5CgZ zs;fv=zcHhWH`OxLb~+=Kt5UfZF0ycDneM2UGMyAGm za+!H3q~$r|1{iH>qOR`$ygZX0w@`IER^P&Es^7P45*XY*a8Uiwlj>2G z*wQc5-M%Yu3}bf>+l3A4+0As5R#PqeZ1JjnXtrj5Wojc8E{MvW=^hU1oiF*ZtJHfq zm^@4!Q+MSi&h_47UzDf~cTtoA}*gKp2)!uTR?ory_*%V|N%--4bttr?PVhS~dnFg8$N#(IrewNA; zsjwG*DwStadCuP1G}JWAG~6`8G}1K6ws(FZm0zWno!9SD`-#+M|Nq?H*-?W@rU>@H zAH5-)X}W0!d*E48c`21wwmtA``yM!YMc(+^-+lasZ0UEv^GyrvJ7B35QhAfQzqAjr zr7o3YP0LJ?rYKXiRDP4nA5wWM6|ORL?D$M0)E%FiMDu5kNuRR;ncs? za{Yb$p*e@h7z`lz~zdzY-+n;Ei?8QE)ZefR{mdlPlwm+%HUGg0FgfSg8 zo#JzC(=pR=(+Sf_sm&p^pGs{`sm&E@I&C_``^`D2%`LSq>RXOh{Y8>4t*m`*S37lW zuMPlp*VxTIhqTR&ZByLT$!O|i*0Bv-Hr-I$yJEU(x@NjAwVz3C9;y9YYMr?~u_)?N zijS!{&|wT|K4Frs&QtSsqTA|7wB2@1oo|P<_ZnpT=zs}g-i*(tOb|W11J$#O1v5OU zhU&pBbvQ_|edrjd-U-f_VG-Nf)hV4L-iIb`*BfPeB(=II!F8d7Z6UdEP#O~GZ)Fn5 zZO+twJC=WDdZ8}=Tx#`Erk7G{urL4dtHexixEjUun~5ElQEKz0eSBkjYkJQmBBsAg z@1)iwwdQEEFgr=DMQZc1TlkMxiKW(vi@6HgP6VgKXU<{Hm1)Jf&D0>j)D~dHX(cUE zZ}77WFVvY`Gk%n5Hk$cm#3(c26^t?yS)qUGs<{ANHGg5|D66p4a@~sK!W(m8bFoYj z6*rfV+9Fb0RE>zYRr`1^Qg7_~3=x$zm&^3R^5zOsTU=^O@Iubl^HRsrk$OB;q+VCs z>&1CZ$`m?I*+w`lNgv`R^t%-T64qaR8{cRY_{ANNwqK?*-;&=H`y~f{IdGCgXd7 znd!!Ia~pG8b31c;vxn4{m0CBcb(h+5Qd>Ul4Z%JWPM!EV_Td?)sE$W7PE1oC{rG&; z+}E~q*K+;xe={G=kWMq#5||t7);pcit(RI(gp-4CVcYweL)rV8YpFFzxf!E*u$fOU z)lUXej}6$Fr=3>HSoUc1P<4*@e_h-*4K)upkMMLZ@_%R{+B{NS`~PK8#}*rI9-X>J zF^`ej>TG8Ao{m>HsR`zZQd>i6Yp2_!rkI&%WY~L5H_wpTno?VfErTmO!%Jq^lIED_ zf3W;Q+wyf-zDT`*$P9}wHOH_IH!m|snxo9oQu~$E)|1-$QrjTb9BW=~USW=t+J;i= zDYb!88)Vxp6wL4@mwGmD*-f+kAz2i+L;WK&8z)%sZvFh17OZ z--pz5Ze66dtE~@ubzfw=aK-9lyVO_RRoKs2rZ%17`3Ba$fx#(n5}e+!FRp&e-=pEz z>dAtz5c?Yl&ovHE-{Cm1p`K=KZ}nyicN{}xUPe7(mU0f01-a{+x}$Sk=bY}ekNKea zFxQ%xnF+LvGABuGtJK}1{mrv}NcyFZo4J*Kl=+0zejQ~#CAF<>eg5!Z(SEZA^EvYc z^_r$_W)7jH)V7H>U*tcvZTU}L*w&Hzt7d+aE5>}@eBH!;rj69LN6?-=U5eMv;Du*^pu0=8Y%yl z?_xh#uHd-7%>2guds=q>klM~<#}V~k=65M?c1#d#_taB=u98#1Tsg&Q5PtgFF@dsV zvt&)RdH3a!D;eu;Vx&v*fWj^PGAmiHx$iNNtaF&*?2(Y#2qt zlnYT7-d}sBdoHgfzxrHpQV?Y+Aho^HJy+0DnCFZfG@Xu8i=kE`rAwCL7B@BmO9@L! zODRif^Ck=B=qpw&A4S*fZq~*LGc(`X*&NBgQ1l)Tlwz)J??pP8twupDn8A;MGZ2 zn*jeI?ZW~B*c2N0b9Y-_R3P0`&DGnfv*TSC2S8Dr7 ztzV3#z9?*AC-e=oNbLYy=<3N=+s-7zM(XKYfybM94YW4r5_>-{fBzwl=Nq=|XrDl+ z&8EC*+qz_be`q|Ido!vR?KBP;=ocIqpkCTj--mbhkP!PhATAfM?Wrxzxk;p@g{7s` z_Lo|JZW5_pMc1f)SSYu>Rqs!(j?IEK3pVv=`7 zTGc)^%5%~=?VgVntEl(vR!1jO-@nA;ZaWa(__V(Dt>X6bI} zA+_JyMn$mHhDdFw)P_mzK&c%hwS!kOLOd!{5;`n$@qhW83ff@QVT(y=Mg zd?r&k{By_govp0u4j|=SO+8MtU+zOCzD#{K-98}Q5`oUGL^;t>gz(LaVE(t9@a2Df z_*eZdMu_Nd`>sZiDCa2xX7K3WeS_ogpGo;nN6H%cc8BOB8fN;d+6RBTivelpia&Dk zkY%f7TSwc@gzJX{R}cwdL1C0Z71RV*^L*|JD}pf;<1iI7@g3%1Ar@m9qOl#f@I(mb zY{(7;w8PK02&g+96D zM^$`{*65Cb7!3O1G90|tB^;wM7UMAylR+O{A}|99ScCQ0ge{KE3`&iv_}VYLKk#H5A;HB^nnlh zq94A2KLQYhV1!~I24g6OVSc*tQBNi(Vk5yQW zwOEgh*o-aMh8@_AL>$0j9K{Ko#yMQTC0xY~+{QipghzOSXLyNU@jKq)y%45s&>#nL zArD-j2Op@J@}d9=q6mtk6v~3_%Ty6;U#99{`!dx9+n1>k*uG3H@HN_kacb&>uAn9+ z_6a8HVX}f+nEHb{m>9PvYG4`!@^2aea&HXZLrIi@J1U?u*rqHsQ3v(V5KYh=t$NKX<1$E2c59A~NAPfOH$^TA> z0=e)RK8Fh?Vh-kkd=ywD#1}4LOJe;pI}U+ZD# z7|Ru7xnei*GuRG_QL|z%geV@2QD9sZ9|PhqQ4h3Vq7B-?1A9Q6B~Icr&I(boJv`wB zZ&-yWMKVj3g*(W1sfr*6rN{xBizrPFN|S@qAqdB4jKz46(=z0=j0ReKidbyGCVUUZ zZQ0_eges_p8c-iU2*z;PBVa7Kjl>j8!*t99ZMf5hJ8ihrhC6MzGmhLDGwzcy6%j&| za|YwJ9Q`R*2t^QuwOEghU^^-wgb^Tz<;h|BF+x;uLLRV=3OeY)7_1PFRagzyQ<3K@ z(ndwvs7M=>R%H9FxD=6y7NQdCsKhdrSf&!oR4N8uUuh?HV=wjzQJH*HZh%H; zf@WZu%H*Rm`KWvXrmOTrw~<#V-m<=RdQIB*s8t~q8k0H z_6f*gHF8)j5G-4bd{?8U)u?Ip`e==|XpatH{8VRqs(uC6a6^b1jI$by)fzp}3&d69 z2i(Jb5Lb;yOtD!{&7Sat7rce2l?!I%MSgq%YFuk6$XzXRS1VSC+Mj`CYO_pjmZ@D3 z^riMJ6yZ%$pC&qFL$fVi5k5~4*}5JwB*Xh9q;z5?;KAf6TnaTrI0 zXjv2Fq$N3NNlsca9$OM)%R9J-`*rG?&t}|U@I?>yHE!v}l5FTtZ9^}@8ZN}pZur813 zV4LwE9uMO2Af67jLGC(`yAI^8LmQmL6#06Z?t0!8q8DSo*K)*R zB~}aJ>4uu12A*|6d!Dr6NgJND;Yk~wtfMz=_okiRozWFNK#h7|0qyiwm$@y3mp90} z7kT$0w_byU=u;iU-=`^>gPeMk8}HBI0&?q3PP~cFoA|tm&ztzXiO;7Ls)BX+5T{Qa zsE=>QPV7da5Y~3+h29_+Rx60lN_X z>wW2iFMaT3eE1F#qMsA;z!^FiFb}a8leeT)_)rgAqlL@|AY_& z==T7&j{($a0DT+~CPYAKR6`BaLS0@v{(t>p{)~X*-a%1Bo+;*n--l13H26 z5%dG@;XWSVu@K)5#yCvCBuo_|I5#ZFhXN=F##}J334R3H3}(9up{5~$V0#J)0W}GE zB}AwbK7j@~Fboqh8LU5)yoXV*FxDORB?_S^Zi01(v0nLW$xCiz{KYRoBGXohr z1L^xf;ve_~EIWuk4)TT-zF^rwmqA|#5%(bC9>lVP8H?rg+xw6+IEM>D46TC}Xoc2bd=Djtp}*k|yv2JVhLO`@fmk zKSt7zk@R!qYtWaG^kpRRj2erX_zrV0Ux;um^f1DVe3*?W#9%q%g^1!f?FRM(qicgPI=Vh~;~0{05!7PzHBjTx#5tP0jixW7>C5O>Am%YT z)Id|vuQB9t4DpX4mt)Ay7-Ao@7T<&Iam;C4!d2YBZ7{yaQ0Fm>i7||yF~5Rbj3F0e zO(4Fptq_V4AopYG`&jxub`{oOJvM>d7)8SjT+jKoAx@9|4P-^Rxx4)k$6eH%~T#&5?i(8uxgar|{5CS(UOOrV|< z8iHI+pkEXEz>0q8j{pq9P>{z7;TVJQpuGv?YQjal6JjFcZK59JYGN5wMm5mJ#5$;l z=Af;KhEWlzcLo}8n9tS`^C;leHq=G1gN+6$;XloK} zOrniRv@xkWdchapfci}eLI|kiB5-axoKrU{L{$KG-@!7+)oR~ zBoNHB>6it^^t7dj0%Lj_{g}22Yp@0TaRQfd2S4Hg9)mtkqmR?*<23phK_4UNV}t_w z7(w46sAGgXDu8hsK^-HgV+8e!pnegIorqRw1IADUV<*Cj05C=)7^4vrFd2-|2*zjx z`Hmnz5scA@Xe>uO4&V`f6JmNnlmdC3PFvGyV>)e2r;X{1)9GD6Zl?Rd7vyL<<8(UX zbovx*L?Yoz?nL&MKP?s5zSPAMdV=t)1j6*nr<2a8Wz&Mz}IGAw@ckxb$nZ-an zGs)*n`ZzNXLqRTQlEaydv6*v0E@zUsRe$Ap^v*_0>+L=YaX3?)%^lKLVnnk~6#e%qJF_yk_LQWV_5N@ana`zp%`;Odw z*8nZi8tu>lozV?pAnxy0;T*2wAzleFn|04--LpS~Gh9JCv%f@Pkek^hQ3md44(dL8 zBvxP@wt;-lrvI}qf%VV6f!nx;CwPXJ_!Yn7tq^lGpv^gX!MK=H9@JqDeVaqy=Fqn} zjnNGBZ4P~#L*M4mw>drGhY*mvIpk~(V`0v8%mQO#&Qe5yT+WFD{hzZ2TabvOxQLs$ zgCFq#k3nwcyuly%ONhAwpWq7+(_9Y>!&uC~BE(|@He)MxU^fnfw&tDyIhsoi=3W3f zn)?W}HIF*XqYm?^!#r{_&lN^chk4XtUNKOIdDLMZb(mKTjIDWJgBs8CMqiMVdHx8* zU=ZWHk&qzPd5r0K#5<38=TX0To3IOeK@H~}!V#RsdHjGYxQ<)+Q;7M*Grv68FUhpD6JmiD z1{4ChSU@fo)I=TB19@4{3T@CH9YL%Mx?>=gAOXp^2HILcTMHPI3pL1rT*w0#R zZ7rg$Mdd(Si>jbHYN0Ngq8+-y7eNRCeOxpI!$D0JO~e#Xn?*B0Z5EM(Mbu-_7Et>| z)P51QUqtN}9S5~vMC}({!F5oVMbu>x`CnWNl|Vih`+)u}reBL0UyG-K@wNCn%*6sk zV>#lHfVJ3w9iaY;&w_Rq)6QbrSxh^NsmWq;v-kz5|6+2q_)pOO66(Li6M{;dd|wmb@2YX*Ot(2QJXVguEyK z>avuYEd2`2&=RfD4js@Fz2S|%@B`cB(g~pdOLyTOp5ToT%LLf=mlRkMuV85w&ErpfcB!uP4uVG!2mPzfw2}{0;NHF(d9v& zqN{>DMbl<|$b%y>)!ZNyB+EG)uOL?IS&ScOg4jl-aw7}g&{ zPGauhN06JC=XeFR-9PY`5UfJPlB-w~ih!KN)&OHCmYl>k0AnYX?IM=36HA=2ozV@% z8`~Fw7>sdJS;>ER$wJogFMA<1bK=*1jc&oRouf*c!Vc-2F7|U^^AQl#PV#= zAO~EK4<$hjms7*##J!xjmlOAL;$HqW+QI|Wb$M6xfG7Mg7UXpKcH9Q-E+;?B$xobu z&rt}p5mx~<(G=t%t{13P+&35iY8DrQ;TVO{ARloP!S)nKKH}Jh;;2>JRwUv8s8`%k zoWKQK0=bC00b+_HCvoH=?pGn=KS6E~S3F}op0OQo1~JALMG2IK8>nME`G{`;MnZyo#81FvEC(^gUlC#@d0&|eMtq5~sDkRKg}SJZ79i&TPt zUrEkalJk|JSOn_7@+{PK-p32P7h)ClT*dlVelag+k>t|I@d0zjTu z#bOPp-zsvs>I^R98gAkae#9?$4r;rK+OGNojQs=!&ai+s63U?>=vxAPOQ3HFjX;|T z^eutDCD6A7`j)^rN+6dBVW8Ft)HopmGeNBr82bs-J0S)uK;IKqV;#0(KThKku7Y|e zQ166$c!Fnm3F@BkJKhShnz6q+4@@WuHX@0ub*S;#@6nE%n2$w>MI2UP4c225c7gn^JqO0_+6Q=yU+^4^-L;I_bpoG2!KcU# z0}8?ojDvNIgLSp>6&MfeTB0==2kSbZGZ+u+yx|YxT{jxzFcDJ_fq7VnC5S`}7|ZJj zV%<(0#93Uyb=<;T+y{AHN1oS_=XJl~Pmu5Rvj1MzMk-VMaNfp|9%?*`)CK)f4>cf+@s4|2BQ6n+5hZTJOm z@CT^rMryi|nr@_)8$So_ZKS3f&B%wMC2Q!iNzp48_CZ`^0SfrY$QJ$w_rPVVK2zj#zQy)>bvp05Sthyn?_?g7Jxo&S_gvP z^gXs=Cm0i(l5h+saR$k_2FArE^1JCR-V3og8_4hG9B_diCgeo{Fs3(?bseIZ>GMRsqbd;{XOIFduO=92n+I~7)qiH+))9QQ3uV? z5xw9AANb-MgkT`Z&-cSI3gqegB_J2yp9Ae~p}t!_1O3}l6mBSwN~nq&Xn@9`y)7+4 zowu|D_1!{!w~&J^w6leFw$RQN+SxJ=5txbDn1_X+{VmjJ%O>mw_1Kb(i@1zyxQPdN zj9>5^ukc0)(kr&+1U1=O2&F;HTZwrqF>fX2tzUtdw-WPKV%|#3TZwsVXOO3@0T_g# z7=dt%!BjAgw$8#FP}i-C5Q`099Bn; ziE}$~ZYR#|jQj13`|XUe?bLHSx!F#v+tnD~3$Y^`h;;|C?jXh;#JIzRydc&c1yKsb zyMz7Mj+W?v&gh1o=nX&kBM`v|!(d2E0rlGv1?smW4y&*RTd*CwuowGr2)BgT$#%HY zfI4V`cA(9jY*#yj5Q2dig5em4iJ-lm5txbDSb`PU1lrk2J3DD-C++M!g0nb}A8-ZN zp|<}J)RdQqU7x`S3-aSj6h;}iqXNj$u4<@>hM=yy$kQ$#3;;3jBIaGhyo;E3jRrCA zBIaGhyo;E35%aEvAWyr<&#oPyj=QMiF6y|8akuL<*njO}|Fw(#*RI>R2gc$q#^SEG zLhM%H3S!+&th~E=H0}+o0xYK^KN3^{RHHA_j@7s+@MJj7r< zwu2(?*^B*PTF1S#hxE<1&oV5_wf>c39&aPTww&`VlTPg`z6TnUdF{<#>HN8 zy_a0?CD(h&@!qe|89pG^y~MhgSoad^UdF^;V%=~vF;_-y^M*yjETK**nmAq z!ZDo086@KxZsHDp!~;CWE4&jTF$c(RB6&?DuZcxb0^~Qb63A;Jc}=X1uh0N3L4Fg- zZzB0kB<4h7P9)|;Von?dVooIHL}E@P=0svnB)^GKSc|P-94GDuV~5 zUrJ#A3u50#?E3~|7)C;3EGA$wzQbH0_Op)tZO|Q7F#h-Rn*F?HKd;%(YxeV+{WHL8 z_N%X1fW=sbcx(jy-G2iMu2)Ang!~2i25B$z*=m;W>CvRi8z46I10w_p$oVR;yv_Mh{GD>KrZBg z3-Y1>sORA#D2`I72x@q^89JgDyx;?0e1i}S#1IU}D2&Dw%t17W^)Rs>Cf38mdUz{{ z^)Rs>Cf38mdYD)bp9c9o{3D3>F!3f4ZxZn)5pNRlCJ}EE@g@;(67ePxZxZn)5pNRl zCNb`k7;j1K&<#D&8{X)PKm;QUgE0&vL4K2nHz^9lnna9AJ3wBOh&72=lZY{i7?aN7 z0*E!~D(>M0{u1H{^L+5s9%N#v_c|Bh$dPePjV*u@1X%2uE-nr*IZma2>aB7x(cH#Cznu5Jx`+u^uJH zqlHln#Cnuij}qfiVmw+CbwI2~8-jR`67SL87=VGG{zs|*QR;t``X8Nw2+YK6%)>&& zU_Hp~(IlKfGA`mWu7Ua=eSpXK1<&yc^C&r_=99#Hl9*2t^T{pPizB#z8z6rt@8Ksr!b|*$-|-gjg*cTBxnKnKJXIFuP!Ux? zJx|p~BQ!+|e2uo~3Lh{APYnfQ@Dy>MBG;!FgQtl56mg#-?o;IY)FKf7DdIl08N_?) z1c>+4C0qq@pCay4#Cz%qo`JYe5%($LKCMSBGzaaTrrp!DcbYt%UVvyUM?4a+7F)3c zyOD?kIE>Sv&C@^P1^&c4AfI5)&{ROAv_|tiVca#P`^So!EnYIEM2eKWE6#8S-<6{G1^_ zXUNYP>UoxWp4A`+sO#B0Frf(CP!kQ&1my5+E3`oubVo0Efx4dcMG%H#JifzXECYEy zOP?&ywe}M?r1R-o(#%jo(0?&yweJG*JSdV>;gT=Z*oDDMkUk(xlJaw$;6#Z+{wh9 zOm36OZ8C8u6L&IkClhz_K#ajOECgdAnX!<}SV&%tbzm$c@5CPL!$BnB3@+n7p5g__ zb252OCeP=yLyMgF4CMK|EApclDxwzZqCOg-DcZsVozN9M;E8?+#YjxSe30YwOF@p$ z$081^z<4;%csS2^IL~-Ee*lNUxHx|T#C`rM$oKhMLR?_nUeJM@UNFJ};=0fhUxQp; zXpcb{i}9EU;Ue?tTsVk_pney~#f3lcmk<{jR~O5nJSw0v==a42V7s{3 z1oZo22T-$%U0_9D_=1{Ur2UJ7F$BXg36nt_7b8GEF2;i#TwDWUySNeGV;c_P2#(_v z&f+|Nz!m%iV!!wpzX&hp{4f1oPD9Fc^njjxn*jBGl_bb%>N*ge~u2AO=XixT_(OFcK3m8%q$07?8tjE3pxb-D}&h6MI12ublufU3($Kb#i;1{$8h_*K2~@UZF4#&yB;liJyeHNv>|@feZ9t9Nx?e+PPT+)a54ixXDwaiT@_~yEz%LI1a}DP1?G74{CeV>*f>uCd92zK%Z{W z_AMP4C%4Gktzw{$x9H<7`gn^z-l_|7c#A&XqK~&mgRysO24;eK-D0fVqTO3@ScNrM zkKNb{>U8U%5V!NA6w0F#s)D}WX8pIR(QW#CyEzz(x9QvM2yDO(u%6rdaR^6n7UysQ zH$dNRzrtTa+!3IUcNBaH`gErXYJ+~<=>~FmXEBx`8p{!n1gr(^-r0<;p#3}a<4|hM_%tGgYoktHTscQek5l7o zyI&Uc=RUQ)&+G2bMGVO6{Wvf#esV?uu>4PjP!yxVc=~B3z5}oO>7@`4sNsWb$PO*& z+XMRcfWAGTZx86(gKMB)59rqe>i^)G5D!~}+&t_F`t`66j)3|+`~jE2>mJny%RXug z^7@FpKB8Zbl0a=A9mgpl9@F>7%{E`bS|I6plAqXQd3KC=ShY(N6&(oY> z*{9BMg%K4|3w1$%pHjo8^z&%|27}i>rR}GaF%2{DGhXA35YMQ=Givp$I2wbzKI@16 zU>(oCMJTAtvv7>Tcuc}VEI}j~2hUar@%$6yh6VKhIqQC27;F>IOQHfQqZ-KL^Om4S z&&mDs4(N;>An(u5AQ=}yO`l)GO+3J3{DS8~ykHEy&>#oM=Zicb{ujjkf*ige2QSFM z3v%#+9K0Y0FBX8>y;z25Y{C|7$1dy@;w3S^bO-r;Nq%3F-+~J?pMV9ihR8yU$1EU75REq1`(KtSj1r! z)?ht|`xWuNBHmZ~aR?W28P{+VcZ7J|4CMHAFL=QRzW4^j{hD}R6YuNc81?@&b)Vr; zmf0VG-0&P+px96; z_5zAn7GZTkS?lVeu8N4MB-z{lr+=>N{=zkRo^yWZyzhs67?9Dgi@Ad(+=D%AGT)|r zdQ(JS2B7XH^){)uNoGyv+;lL9;qIoRnZRQ_%WG`lEjIHWTTpkCx|`J9r0ynpH8s)7 zKDvUS`3(Mm{cgUD1(TOYP%h&AUd-l?d+*&$pk4hLoDM7oLN?P_h8P5WpL!d>mMX+M#Zkxjd7 z+Rxx4WYO*&)BY3AZTGHeZ^8NddXP>QIh0aHIYTjzeb;g;_wgW0S3*g=#WK+EIOuf7P9D&MaM;5hck{-IE|^C$#gdG9v|~BKIbdG;am3bD=oAKVc3g2+#MFuhnu*QrL1HX>ICy^@EA|<@`{)Y79^L3kZ-#Ib$8##vIG>A{%O6?5 zLayQ(uH{x9K^{F;^Bn7Vn{BA2hgy25rH5L2%A)5K&Sn-vxvrO9_gz4!dH~{CR zAHv~`V?54EpNTxuFW_S4A&2zqP-pth+|Hfc#l4tM`pbODPsl%A{^@PVKSTZ*^3TX1 zf*E8CLvI<4j6e+;YRH(#ah$;8tlCQ}fX38>C|C##F)L-VU+{R+=;9*wrB&&Ijb-cy~-okT`>6y#if?duu z_slQ&cMxWkQbR57&2n$nx!A8PbIH1#D|jAfWxb95vh^nPGk{(<8JQbL6)+dH+UC!_S(vad`CwR=A`4?oL)FPC!gL7 zq=6$ChkkP=a1wgVnSp)H(N~W7<=o2}+>^6|kNJd8(NoTk*qa=?nqyaU+JZ1wPr3c6 zM83JBu`9Xy%RP)Eac{1BbM=~g24`~)vpA1AT*O@FBkSC&xrLRyihgtTo9DU6b6;M9 z3-I~8KXV;=$kRjK1K7p9M|hm4cm}=Yt>?c%m@l(@`Q%q2qx|96jr;=`!y(x7e6z_v zh0~ad-160(ukL(x=c_wk-TC+P9%da;VDh)I~=p`H-+DEI@36dbC|^+ z`4fNUFIBZElVktxsI~uO=CFum=&8S+`ajEBHn4-8e8!i2%`QCa{eR?V z%(8!T5Dw@?9uW%A^MHPoFp$CMe?S#6^giGirgH}?*^WB~v;<*^nU{dy85SHqr zw1FdWZs}CcM7^amITz=b-pNvyW9FrgV~BJPdqBdU+6KBD@F>LaR;s6L|lh{`a!gnPK3hgil69>aX2FYp%b zjWz}0!2L)tnkk&k`CP!o%;Qq7KMr=%yZDuOkfhHGmW!22mKDZhU>Wzy$<@7&LA9YMuYp}%)uitm%%ew%vwI@2Y%vb z_R~p#Kmz#gN`Ino2xqHg(wC_9(%VkzBvvPHoU(OX= ziTRY9L-}URx7;&Y{v+xrS4TxiKD{YI9~E+{h%$%@)Ka0A3bj-mz!(nUaKH{H_WTrJ=N~0mQA%eRojv33M#2#B=({D1WxA<%;6&DB8%z;EJP;N>Z`sJbye%X z`Vm&LhV{J2E4IYdjMlNn4_7%B-CE3=30AOdjo4Qi`uXGE(qiDjXNtY+xTFH zAmexpI~d;|XUCl#_r8c9i@k_X;de|$7V+uKWES=$eg#)^EsHRR_+n%dmr48~WD)mV z$6w%OUSk916E~muHa=npJLw9-VWre@9KXj5hRxkiDvzxl9WkuA)eW!x|6qICP_0%nnhCGNp&afWpX2%c!%w%JNYU0GWl;j zyUD#Y(?&-S)&+FOPSy3Mh`tOUiu&u+U#I@MMn*7-BRLv7TW4qMCZmVCv$%kZna8DE z&J|pVovKrRo%-wSRNXz?kKL+U#;bgcI_vXrcYTrrISlvKySLuG^(Qa|bFVk|`l-mR zeie4G{xkGlukU)#P5lo+*pSIkQXIn^)YqV{26Z*4t3h22>S|C|gSr~j)v$ucco{q2 zumOA0U{4zCNy8Sl;ogQF>_pCu*~qamj+r;AwQ(+saCW0J8`axrmW}IJ&x@F4_$B`e$H3y<`Tz${a;O^wA2Q*unrVm23I z7gJ`Kl2OVGQ)Za5hpD?*j@nadPpxJx&+`)Im{M~}t*Nis#rLQ=wFmP}$!ECwh7V^e eG8_IQdK&KU-oO3$yXOD>^!4}l|MwFPZ~q@j*8MI3 literal 106450 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 Date: Sat, 26 Mar 2016 20:16:12 +0800 Subject: [PATCH 115/276] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDAutoLayout.podspec | 6 +++--- .../UserInterfaceState.xcuserstate | Bin 106239 -> 105850 bytes .../Vender/SDPhotoBrowser/SDPhotoBrowser.m | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/SDAutoLayout.podspec b/SDAutoLayout.podspec index b204010..d6261b3 100644 --- a/SDAutoLayout.podspec +++ b/SDAutoLayout.podspec @@ -1,8 +1,8 @@ Pod::Spec.new do |s| s.name = "SDAutoLayout" - s.version = "1.31" - s.summary = "The most easy way for autoLayout. Based Runtime. 1.31版本更新内容:1.增加label对attributedString的内容自适应;2.实现tableview局部刷新cell高度缓存的自动管理。" + s.version = "1.4" + s.summary = "The most easy way for autoLayout. Based Runtime. 1.4版本更新内容:升级了缓存机制,新版本在tableview滑动cell时候流畅度和性能提升20%以上" s.homepage = "https://github.com/gsdios/SDAutoLayout" # s.screenshots = "https://camo.githubusercontent.com/5d9e879c7006297b3d6e12c20c6cd1e15bf83016/687474703a2f2f7777332e73696e61696d672e636e2f626d6964646c652f39623831343665646777316578346d756b69787236673230396730376c6864742e676966" @@ -14,7 +14,7 @@ Pod::Spec.new do |s| s.platform = :ios s.platform = :ios, "7.0" - s.source = { :git => "https://github.com/gsdios/SDAutoLayout.git", :tag => "1.31"} + s.source = { :git => "https://github.com/gsdios/SDAutoLayout.git", :tag => "1.4"} s.source_files = "SDAutoLayoutDemo/SDAutoLayout/**/*.{h,m}" diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index d377a7f123f2277b8793ed496a431c521c3f107b..3b230d4cc613cfbecb3702bd89b1b83c6df0ec9a 100644 GIT binary patch literal 105850 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℘E`uU8~TsW%D;?dQ>N3 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%0DD3h{=R-{b}PeM5fVkl#1t_f2I~ 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 diff --git a/SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDPhotoBrowser.m b/SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDPhotoBrowser.m index 0b0953b..6b8f6b5 100755 --- a/SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDPhotoBrowser.m +++ b/SDAutoLayoutDemo/Vender/SDPhotoBrowser/SDPhotoBrowser.m @@ -141,7 +141,6 @@ - (void)setupScrollView // 双击放大图片 UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewDoubleTaped:)]; doubleTap.numberOfTapsRequired = 2; - [self addGestureRecognizer:doubleTap]; [singleTap requireGestureRecognizerToFail:doubleTap]; From 93c2007817886b4ca897de846e3fc3051ae7893c Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 28 Mar 2016 15:18:40 +0800 Subject: [PATCH 116/276] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDAutoLayout.podspec | 6 +-- .../UserInterfaceState.xcuserstate | Bin 105850 -> 109422 bytes .../TimeLine/Views/Cell/SDTimeLineCell.m | 4 +- .../SDWeiXinPhotoContainerView.m | 2 +- .../SDAutoLayout/UIView+SDAutoLayout.h | 2 +- .../SDAutoLayout/UIView+SDAutoLayout.m | 44 +++++++++--------- 6 files changed, 29 insertions(+), 29 deletions(-) diff --git a/SDAutoLayout.podspec b/SDAutoLayout.podspec index d6261b3..1970a91 100644 --- a/SDAutoLayout.podspec +++ b/SDAutoLayout.podspec @@ -1,8 +1,8 @@ Pod::Spec.new do |s| s.name = "SDAutoLayout" - s.version = "1.4" - s.summary = "The most easy way for autoLayout. Based Runtime. 1.4版本更新内容:升级了缓存机制,新版本在tableview滑动cell时候流畅度和性能提升20%以上" + s.version = "1.50" + s.summary = "The most easy way for autoLayout. Based Runtime. 1.50版本更新内容:升级了缓存机制,新版本在tableview滑动cell时候流畅度和性能提升20%以上" s.homepage = "https://github.com/gsdios/SDAutoLayout" # s.screenshots = "https://camo.githubusercontent.com/5d9e879c7006297b3d6e12c20c6cd1e15bf83016/687474703a2f2f7777332e73696e61696d672e636e2f626d6964646c652f39623831343665646777316578346d756b69787236673230396730376c6864742e676966" @@ -14,7 +14,7 @@ Pod::Spec.new do |s| s.platform = :ios s.platform = :ios, "7.0" - s.source = { :git => "https://github.com/gsdios/SDAutoLayout.git", :tag => "1.4"} + s.source = { :git => "https://github.com/gsdios/SDAutoLayout.git", :tag => "1.50"} s.source_files = "SDAutoLayoutDemo/SDAutoLayout/**/*.{h,m}" diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 3b230d4cc613cfbecb3702bd89b1b83c6df0ec9a..110581780a0558c8848b1ce93222d56cb0826518 100644 GIT binary patch literal 109422 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 literal 105850 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℘E`uU8~TsW%D;?dQ>N3 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%0DD3h{=R-{b}PeM5fVkl#1t_f2I~ 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 X|NAF7>EC}Ato`?&|Nrl> width) { From 97888bb0ee931cc53ca08caa6806a434fd409ec0 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 28 Mar 2016 15:47:31 +0800 Subject: [PATCH 117/276] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 109422 -> 109011 bytes .../SDAutoLayout/UIView+SDAutoLayout.h | 3 +-- .../SDAutoLayout/UIView+SDAutoLayout.m | 3 +++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 110581780a0558c8848b1ce93222d56cb0826518..8897559cf535590540bb71c11db201ded799d455 100644 GIT binary patch literal 109011 zcmdRX2Y3|a*6_U3c4zC%)@%esnh;8|sT)v`PUsMNF{CUINWm0Z1okLJQ7lwJ6bPZI zC{64XD~bXt7K(z3sMrfu(Eq$MyGa%n^uJ$7)aO2zWV3VT^#0CdP0GtHE{Tgf%n*iU zIEH5gMvPt+y?R)a$^N3^+`@ukO$xIn__Irjhd0SA${wGK9}j9$QaH)Rkh!ZLQ*;Ly z9iwOLjDvA9t(i7VEEC6gnRq6FNo10kWG032F+-T4%rIs+GlCh(jABMJH!>N_7$%d+ zVzS9W@(y{I949BqN90p-nw%kDl5fd(B!f0Dmgj^$ZBE3szQ!rE9n>t>_a zdTf368nzMJjJ=j^$+lwSSTCEzCbMnXc5Das2DS^^l}%%NvVGZpY&tuL9mWo4N3%Dw zS!^~tjvdeDvH9#xY!N$|ox+x}H?sj2*g5Q6c0PLtdpCOzyO>?VE@xM;53;M+wQL2u zk=?{@W*=p@vD?`v*eBU%+2`23?DOo)>?`bk_I36U`zHGi`!0KwJ;t73PqL@jPuVZn zGwe6)x9pGXPwcPkZ|r&YPmbj{PRHpv6KCcW&c?YoH+L0Rk88+X!!_laaWPy=E|!bq z61gNUm21nj=Q?nmxh`A}E{*HM_2mX~>D*9m7&nR=&1G^~+*ocLH<8QZCUG}$rQBq0 zI#dcaS^89p>KQj&Mi054jWEC)_FSbM6c7YwjEF2kuAi7w%W?9Cw~4 zJj;u`jyLiqUgj0v$-DSy{wn@zz9HX)Z_2meWB4|FET6z9@;*M5zn*W;cj7zq-T5AT zZ@v#dfFH;Y;fL}g`BD5BK9l$JWBCdEM81%p#Fy};{4{<#Ka-!u-^$PCZ{u(07w~uS z3;9L-GX6e(CI0}whA-#W^Beew`A7II{8s*PekcDl{|vvI-^0Jizr?@Fzs4Wn5AtvG zhxzyUBm4*ahy2I_;Ie`&~APAyh5R8IVkOha}6g)z- z&_K9aXe=}lnhPz2)z2fG}7XB8(753gd+F zLas1Dm?-24`9gtEC=?5`gn$6TEyAtBY+;TtS6C=45*71StHNu-e&KcD4dIAzR5&Ia7d{X^6ix^yg|CFKg>Qs! zh3|y#g&%|;g}+2bBqA$vA}P7_p_8BKpKs zv8&ik>@M~Y)5M-)FL9_iOdKwb5J!rm#L?o7;skM`m?!3o1!AE%NxWH{AWZWbREpBA4HpB0}IcZs{jJ>p*R4e@|@P&_6c7e5d` z6wioXieHIei{FUfir&EJebj7+7U8!!eZi;TI zZkle6Zmw>g?l#?G-4fkW-7?);U4?F)ZoO`sZo6)W?s45t-4nVebx-MD(!H#EMfbMu zuFs)l-l@Mv-$>tBAFGek zd-d`91bw1DNuR9mr0=ZnqVKOCpdYAD*JtR*=ri?M`fPoU-mkw&U!*VA&(a6EG8M(SNExt^Z8_x&90N8U2^~uk^p_f7AaiiIPszOOoW2T#{Rgk~~th zbd^+3YA&^qVx*Q*isX}0rM6Nxsk_ueN|OdlL!_b7Feyj!OJk)HsZ^RQO_8Qb)1(;^ zNViD0O0%VVq(jsYNDZM4V zEghELk=~U)mOhbANuNrmrO%|#r7xtj($CT_(ys>IAQ(i0&R{n<3{Jx}hDL_Qh9-tM zgVzvmNHBCT++gTv=w#??=x69}7+@G}xY3Yd7-PsYI}CRk z?lUYmtT5bf*kIUb*kpLzu+#8_;RVBshL;R48{RU!Z8&Ur$MBKiW5XwgQ-<#h-y41~ z{Au{h$QX&yY_u4yM%kzsZAQECYGXs=HO5B9HpWUjSGx-8SggUW4zb6(74FB%DCFN#<O+!pWO~XvXO(RTWP2)`C zO(mvM(`3^W)2*i2ra7j$riG?Orp2ZurZuK=(^^x7X^UyAX`5-6X}4*QX|L%G(*e^# z(;?Gw(+8#xO(#rWn!Yl9ZTijhyXg$8d(6@1X69?n&CM;$N#a(U=+giI>yIXr$)2xH7L##us+14DZ-+Gg^$XaYIu?DPQy~TQ~b+&bm zb*^=ub&++kb%}MUwcNVaT47yh-D=%t-EQ4&-DBNreZzXddeC~vdffVf^+W3k>zCHA ztY2HdvHouT!+OqoUY2BoY?MuMlq;yugC|#8vN-t%wGDI1w3{yraW0XuKUnx)ul}XA?N|92mOi`vPH!HU& zbCr3@5@o5fOu0{4uB=e*S5_+J%39?yWs9;^*`{n)b|_CNPb<$TyOo!eSC!Y41Il6L zedUPqiE>K$R5`7DseGe+ubfqWR(@Chuz77swq#pdTRU3^+YPoZwyw4`TTfeGTR&U6 zZIEr4ZMbc;?M7RcE!#HEHr|$J%eUQRE3!?tO|g~PZngz%V4Gu`YnyMo!*;jr9@}Eu z65Ddy3fqIWRkpRZ3fo58CfjD)qqZHk$8As9_S&AeyF9#NOQA+TO+_zrs`!xFu`z`ic?X&Ik?RVK1*%#ZF z*zdQmvRByG+1J}2v2U?IZr^Et!v36nul;5FEB1Z%1NMXVx9#uSkJyjePufq}zp$UN ze`){Te%AiG{SW&&2kQ_WMu*8^cGw+mM?FVnSevQu%|oGxcQXG7;T&ZbVUGs&6kZ0l_2?BKk? z*~Qt_nda={9N--69O=w(j&bHV^PH2MH#tk4lbts^XE?!myYp`6BIkY1mCkbKT4#mx zN#|3}r=8C@pLIUx+~wTu+~eHqeBSwj^F`-N&V$ZF&NrQJIgdI|IX`utc7Epk-1&v` zjPobwS?ABrUtGk+x;Pi_vbd}+yUXpm*45nA!WHAZ)78=y>xy?JxDs7HS65e>tEa24 ztDh^~HOMv0HQY7PmFLQL6}SprlUz5sid@C6DXzO+_qgtLEp#n%Ep{z&Ep;t(-RD~F zTH)H}+V0xndfc_s^@Qt5*Hf;iUC+3lbv^HT!S$-^HP>O+JFa(K@41e-zIJ`%`quTG z>wDJ^t{+`Lxz4(Yn{{(;-feMP-7a@McYSvQcO!Q*_qFbp?pSx6JJFrwPIX`JZtw2k z?(FXF?&0q19^}5!o#7ti&UE|TQ`}SC)7;bDW$v5ZGu$)X^WAs2?{qJ4FLJMNKj>cN zUhA%KZ**^RZ+1WG-sax!-r;`S{gnGT_b&Hq?)~o9-EX)LxR1JzxsSU)aDV7N<^I%t z+WnRLYxfWC-`#(>&qeW3LX;R~h?1k6QT3x5L|q+qZB+B97E#`)c2OOpdPMb(>K`>I zYFO0psL@ebQDdVfL={ApL`{o=s9U1uN8J&%JZeSM{ZT8U9*BA{>d~mjqP9eBjoKEq zJ!(hP(^1bv?Tvaq>b0o-QSU{)A9W<^v#8IbzKA*#^<~tLQ9nhUi#qQSJfg?qv3i^y zk0;vG(9_J*$`kMLc~U*;o89Bo*O-xp0S>Bo_xxVjAxf;pXUwF0neMBw>%$v zKJlFLeCj#vS>pN3^P}e{&sopUo?kq_dd_*yM;oI}(dKANv_0Ap9TnXm`s(Or(J|32 zqhq7vq7$Qi(W%jGquWJa7d>n=*;Mx=yA~#q9;X9 zj-DAkD>@K;TlDSG^P?9=FN$6qy)ycN=m!TkDJad$dz+CM17l=NjFqts?VH|aqJLWP z2>dr#*$-)wotIf$T+WyoOMne<<&4ZI0UpFfAR04dM_QMzLko*07Ej8|_ID}FF3tBB zlw`vW$?3C2COY6iGUsCJD1aDmHj$Km|S|@u`yT-+L>)1KL7Z(Qrt1SBzJOVi9aVpj_%?g zn^~Gy(lsZyq_8Nx1V1hAR#-H6VDI7#+1nqfabccc3UND?>CUv;%(P|NG1oEIGwqoU%neLOrW4bd>B4knx&@SgEnp8g0?vRd z;0{CuJb~!IRe^ee`kR>^Od8XZ>BaPB`Y?T&eoTL605gzDX9fit0DlPhPe33b)B_;_ zgcK0Eg76!Ni6Htw>d(1gj3cgy|A<>+us?#fDF9c7l-8f zr)VVmi$Z+KkdrTWNfm4=mCT~t;=%&$_7~nOt)RqTG!_-QQ)zBqj=$(aEQh6a%8*mS z?)7(9`1A3aD&npUyWs_l>rY#CA!62TW ztx}-kT0A(dO}E@Ue_B8FS52X-Q1|{biaYloTy;&mzqwssf5{YdJeRoRWtr8xa9rp< zA*;wC9;Ve}@(#w&jAh0#4%w%RU0S1^`m|L0I%p7JeGmp8Axt*EM+`-(*EMV?p?q=>`?qwD-i_A<{iFEB4MFEKAOuQ2oz9!@SG9$Gp!RVU9A#nB&X`%!kYg<|OkG^D*-YbBg(tIn8{= ze9nBqoMFCXzGA*+zG1#)zGJ>;eqerNeqzotKQq5DzcRluzcYU@=a}=%pUhu`A%w7m zBRmm^NOVL`Bw`>&Vj^Z@Ayy(2h1iIlIEa(Dh?_(Ot`0N`Gzl~dG!MiCS_Rq!;sWu3 z#6WVu7ib%}F3>)3L!eWjOQ2hzN1$h*cc5>ee_&u>P+&-4SYSk8RN%(Im_Sw_ConcJ zJ}@DW7bpl!3KRuO0+Rz%1JeUH2WAEWfm;Hz19Jnn1?C6t4BQpCC$KQEIIuKuUtmRG zW#GZU>Ogs*BCtNNG4N2}k-(#YErD%;9f6&JCj(Cho(=2@>o-aaRG?}5)GstkOn{+0%-)K36N$$ngfXe(h5i$AaOwA zfg}P+2I2$K7RYr#+5@=(NGBj&fOG@W14vIGy@B)v(jUk`AcKGm0Wu882q2??+z4b0 zkSriMK*jatB2r9BNGX|2rjV&* z8ktVY$jxL1nMr1m0725otz?5y|*T{bII(Y-gZ9o~F0eNNTLSDJK)*_*9o|;!1VyGH*o!d8wA`?;6?(M1>9KR za)B!V?k3=-0#^pyOyK4McRO$kfV&sC#lYPM+-l&~0=EIUhk<(xxb4901a22_dx3ii zxL1LD1GqPVI}F_Wz#RwfBygVq_Ze_s0{1O&KLYnNaK8a}4tNH50eA^`6Yvh;qkyjm zd_&-y0N)(=R=~#rp8$Lc@a=%_0DNcQy93_~_egp6i1OFKC+kt-q_@{y21^n~CzYP4V zz`u^!)7#__HYeXCZ;`jjVVbOGVH!CS|1I+8VcI#_A7BF41R7?@Wn(cIw~dXB9bAlw zXY9D*oLEdwC*o)>wrSU-rky%B^~E*qn%uNg$EK-qvFTkpmX;Lu&YV_QS`zk4(|GM$ zNlks7ns)Uy?bxkpY7&0f1yd6Qm|r-gbMT+k(7$c+-y-jk_sJ1*bc9wq6lCW6hiO0h ziwE~j$Mm%v|9os%-}HX!^sqWrCsYa=XUHWrL&3$EdcCoo$7f<@UQkk0n3v}-3S#c{ zw#l!K$te|+rWtaeW-$5Zyi5vWl+*|Fue@-qzEH8cwr=<{zB+%tQ88(eA0acsB3(t;cnkv3yPpT_p^XJVOA9NRa2U}nKMe>gS2s?@a3kazv(sOg4Y zs841=<~XdO!X$KFr71Q;o)x0$|K_MvGq0`?v4hhFWoG61t7%H*@16a5c|H8OT4Ed%IBmZwk_YZU^LI`6Us%TuFA>VrC(HMjsx#F;tCIkPY zs;B-X+{T)!h;_Jv8tw~5c3=37W7HdWtTDkvFs-=Q$!J=!gT@#6{TPCZO2$(!7>-7) zibm%Qx$w#hMrB0m#R(3Zs3OrdL!L3U^;Ft`YMql?j16diepcQz%xH^CGP5UUs20~D zFSE2DdwjaTnC_wt^pCwhWo&k4c3e(UYF0vAGxeKlx$n{$ETd2Ib~o5PI46Dm7^t^7xvO^2N$_nf#UQ ztlqs>hCK61-90sy65Ttuz#prs7g~Sl1FG^7RIZ1LQ=bg^i4aczg#c5T&V)PpJ}NQ& zGUR9fOT^H)UsaKXQ#4SeXh3ZS&ctxXI8?({2Hrb zFuV>rA#uSN9~X|$L=~Zt|FJB#Z*Eq&WGAU)jLwj=LV8#OrqHisJgt5&=LAaC`)1Tw zZgO$d@>Wlg=y>+x1Zld8L}raut(Q%p)4L4y=MKv)z%E2dA@z-!7}AO;kHQsemWot% z?P+>t;0ZcxOfaf9&e+*1LO8&EDx@N{?W+Fg?n`<}5l;KVHU4&$oN=|s-^!k9a?q0` zhx7L?6`|Y=dG`OEzx~qxrmclvp#7|ioPSXyx4%fmY+{C-5yGtIoCE4m7k{3A9BycY z%jZ7zrui9iZq3~EvPPMYMi?%Q2h`ga)^ctT)>$Z5QMl>f(zgo3ZG(y%ZnD%+&*5+U zcDg^iupsAR&;5vsMrnpTsTP!k;y9#ps)|JzGq$Q&Ov#XMsRb;8L6ssC!DENvwNu4w zTJ6L&jXOctmJ<5+Vv#+gB2`vnmEvXXIt(domKCWvu}8&eMr~w2VIlP;^}e$*WPi;l z4kb6p`QSg^gvuYn-Ro=Wt>Ir;PyWp;C9NRGKec~m$@p-J4yqL0T4N)$%PLkiE4*06 z5388Wsm(GeE}R!fR1D_T4KKoc(1$7}w_m~LYo)IV58$7uH@+i7UKg^h|2L6FQ}cUcF6?nYZZ&TGvu)$2G&5<_YWQN59+;ftF-pUVoBjL z_(jEF5%#NVhWg8T6OAiL)RR=jblS%cQ;TydN=q{2n?opFd5x}KAmm@@ayg=6w5-O& z6d``ahvHZKu-q)QO0LcmPE;{iUSrz|5iq!DuY_Vjhfj3f$^Mj1JVe;=@7&7p>lXO^x~42+C8v`P4192u}`N zXx7}-Di&+6V1!Hz+E94=n`@%pcwL4(uI3c<;=wFs%Ed!ju7!H@4gbpF+ogkbdN$oH zyVwo2QK{K_OfIf8?_D7vYG z)KGZSrmA70?ylmry~bkx-|E|t&fy!JTyGVF$7?5;rFT&q^__|er{KyhM*Zr)hUI76 z02Qw%GUNp{qb--^42}F*Y5BN{2+TAg_?_9QMPVM{OH1EZz=LQGDu3`l+gf zEj-wcRB!!EhJ1G|aA$}gdjwQkou_5z;fcPG*S`3Za3sg5NIqAa${juh;Ivim-5K)q z5S#wFCmmE+n3p{sTiL-~*x(_^HdC`pLVr;^{&~4sv3UBkU|eiUo47V{mE+&ylAO$< z@G%KDLFLHaI_M!*uAX1iVBrc?q+ZC7i$hHMzxn0MS{jY^)pi)d?5RXWQ7Er>RK1QmZx4h1E~x)_u4=%~Vl)^$O;;k%wvAt?G^U*H-f)OdhwX_kQEw z5TC-7b%Bc4!5Yo?gOx?_pUar+LiOfvUO`Q$Tu%#+%FEOnznvl9Rtvr&JUzG|TRCjNof@;<%X%{ET`H&0m9o+fDX29~n7XV{QG4$SN-Q*+NC(v_{sm&l9 zAFeYGs~8-+f_ZnfZAPt~M1vgaOZAn;aGbWNIDJq%n)3g(#Kt|YqIROT`Y40O=N4T& z3+A3yvG^!M-Wf9Vf1WvA>C-`%?kIHk7v}p*il&7Nd$&r8(p%jB>E7Za8LD>O3~T>*qXoEy1BTK{Jl!dFSY6T zFUY=rRx$W3Lmp6rW^&Pf9ruTNn?Guk(D2h)JfmW8{$JOSs$NU-f{Nr{8S-5S2M?*z-1x4cx*8biwugo{l?kr`<+d`WAUr5KhVIwP?kj5Gz#w%D1Ui|2a2t$}K zxi;63GS}E{@MZnNMO}^HG^8qqg(25kL(X~y8%<$T{cx3!*Y2)l$k=VU;txxSob&Q2 z8WQ#zb4;oWxS%SpwEN&AGb(?lP9gXpgfPKer(xy%FFtbOQfJcmjv7(!40(G<-v0$h zbMe|A-%X>$Q)5bVS)&eX28P>HSTyUUVRcoVOr-L1^K(mz!yR&e4WatAnK~whqcB)Q z;p%@|S{5d_5gL-$T)~>Z`gVDkr^(Rn-MBVolo~Fh91Vr0SKx^QsovChe3*bYF&-Z{ zkdTrTml*kp134*)$U0a(AC1G+Y&=6=*V_oEnQ`3u+8Lh#6;l%KwT(wxk zt!1sazkj-?#!uC-YJCNhnaW8FjoaZ$JVU#CY^~()VVZJ_c4u#Gr%_=pY@UWhLWVrQ zu44OT7ohn&H3XAt)6a$P|MB-~D5P9L6^Y#B=9g-BPOVMilfskz`!y8W)ffs9{8^~? z;H}(14>Oe28Vc8E$P51sI;uXxA<`*cew~JBhyPebeo>E6ihelV|E7%wLM?>;3V|+?Os(bAX-YWMgs`_AI812$9N~;#a zYGaTZ+6cwxC8}MTmVNMT2)XzQ1U$qO?m}PC5bX88=E+$}$^PVcUv|<(Pv%NY^rfc8 zB_<{Ll9CeQyvg2#i=WJeS7+vA<9EXH)v}BM(MS~7;FnwK58P2F~>DD2G@=&Q+vA?tomHM zXU~76AvN@0X#;EJyqY)_1`$6 z@n^_;>Z)S6^g;E%vFtAX?A-j!yuPLRSr;5u5+seRaaXe67}9b)1Q*6qi+1nae{D$+ zhOJ%0c4Cbk4gLonDfJR-zCx6SOnz;dXVvy*7*FbJXcS&a?WwBd!?mZ8cJG_&_^^L< zcO_h_;Z$6+Pgts4SF3)C?SeJ+uoO*brQuQfuUxPCJ7;y_L&XHIM$MGk42R)6D?+k{ z!n7I_>_0I6;N!Z(46dDqM_H|o0xlc^MD8sJH)y!cs7*1YgzJ4*4TV{C<)g!7)l)+T zu3-LHl{|;Jp?=z(Z>@vZrBv38T5%MH)*ub7IW=ZPf0t8MJz70XFvB%G=4Hs!LaE&U zt-BKe4{vODJky(%nHTIW&|j;5!$_vR=~EabWHPNPgweu{LWVE~$n8Mp1GxjpofSfs zkj=yhejp2g+@-!d^B(o3jZyuJFrBM<8zDV@g3njapMnma*K2E#T)q0lcLOQ ze2=2~Mw8J!a&!D0^YYS)i%b0&tD0VLQ93@_5x<-hepTa+&vu))S{b*0WEpmTysa9h zCM3+z4=+nf@TRnC7&k+G(~vMpz<_M;o8G6igud~kOD?|Nv#U5kGzBF9GcO|SYa z#Do%I8f8MMFj<%);A_to0a*-W36P}~!gQewnJ@#$G9dSzgrz{uEb9%L-u?rR9EMrSO38Ads~{DuAp5vc5uC zEv!LW@RJQdHmbC2s#{tXta@?A9N#cXL25$Ej1gtt_{3HXecpshayARwE@^Swg&j!F zP9P5hc|;{=Gm@if{?v|F_Zvx}p`3Ax0A-FpBj_qVJuB>`fS(g~3A=?oKpq3K1;|z) z+bV?Tg%>oLZwIpD-yrke`}eH6X|Bqrl;kSr91z~7G#nHT32zE-0YO$g0pv*_PgMwq zg?EsK_kcVNHfb0f>;@Mjvd?tL36rBO`JdhVuie9W+iZ(g&UoE|BWLZLT0xED)LOc?bn3#}I zouHqD-zY(6g`b6AgkOQY4CECc`+&S!A^a}cUZXjI zqd<JXn4l5y0gw+Xi9i?Gd*89So7$)z z#TQp;e_~s)17%1%@jCH(u|1HJKt2NUF_2Fx#2dtp8mv=5&@}P=;C0N94ojchJw>n5 z5Fc0R6~*4-07^q2v9H)q><{EKAfE&I0?3&PaiExvN;(+Gmq5N!Y52O1mGs9i4z?<; zisr-0Qj@BCL@`6mq122KGsP@18_2gnz60_-kRK{Uzc^Nt$d5pN`Zq|V$MQ9k#^0yK zsW@MyhTbGjrWzV4V-%-|Q&A%L>fE1!{G!r;UXlj!a{rm9KYItgt2Yrd)>JfLOx%14 z$ehZ=O$>;0E(v(9I8S5F??C>jWDW&faPpZYtyLtGQmbIyB`%_jj;Q*J#U+U3G9c)z z|5Rc9r6Jj2h$1gL*(Lr%)dhSBa~|HNX;JSztL}`3iBZSfOIb z3c!k$7}lZxFPZ*e=XbM4m3fon(Cs7Nt3>#ixP#KMMcgWG6So7a2UY^s0Iab>d|cd# z+<6jM6R>7V2WzQYqiWmjwZ6ouNhLWYg=T-r7?l&M#PYoO3MD6^Z)@>JVn8t6h9I_7V#y)ZeXK;^#B`PA$}^JMzEg)dlj(tRIv5ymgOVc zM(yop98pH?(~JAMYP3y7Mj>UvGE4kH{Dl(qqxh3}R{R;*tAT9@>@~nPst|t_e?x-) z0Jbr(O;m!K)-6H(o{w+-!=ce-@p17q2l6H-Ce0XG7Vq^YU>%uUDSVxvGaykqQK!@C zb!ZaT0^1ze7Qn_-=!`lO6Qi>L+Y;DTDp9TLmZ%o7(_eb51r|nLANo{Zaw;_qth}nJ zoi0jO9|?+>g6kUSu111TVzI!+sRVg7ZQkVC`*OcVSY~^DaVT`E&m+)I5@^v~X?415 zb*(6`n(JEVVsyxp1Yi?^O#(K#Lf2Z?20_OGn*yv)1)W;Ayc%J@>glE%v{;r*Yn24* z6yqxchOVvdlDU%Z1|8-~y3WA11NJ(Vn(H-2b;#NNgssmAY|5Zcc~fY~;EhYgf~bm1 zX}Z2t0FjzZx_-L;2p3;O-T~MfRJa{AxZUQy(RJT7DA_pboqXu(&`%{LhXEd@8;yV? zIz8Qux(o!I2`u8=MFred1HAg@8HfbFe9?Nhfxojtx#EGtJgX?`j`POA!NQjrw$Q@ZK8SyTX# z(iL4m2T0Ma!1eUChX`%up@yT z1?*^GZ>-R5);)@V@!j?rz>ZM?XV$H7SGH@}(sj?MvIOiZAW6u4WL08(Ba7&(%45dUyxEI&waW#D6B}8m+pY>AadtTV8;SG zPUX&cjqSakJ2;@-s?lXhDXA%HmX+kiz=8{W$tY56(gvfY?mgXc%KGc64cCXi4Wud?7&QoZS+C;iPb$>B2dID@Iu#;8ZOwky>$#w51 zZ>~TKO`#2_6rUGuKLt}=+ItLfU9Z#A4oAd(joz%s4u>AI!fC)_!GgA5ra>;vf!DrS zqEU~1MoN8H-$d`yUqzut@+kUx`uZC6Gk~30o%-^EpSqcwP?t{W_f?UvZ=!F3;Pg%P z&GgsmG1~|L3&7q2?5!307=24bvNf=?ft{lwIk#?Aqvh&$@4vb%q#AL^obVD!pQ67G zsfp;k^w;a#Ys|R~SRA%gv&dziU9)>a5Nc9oP}X64^u3WaeSy6L*gI9$ zEYRfFZPw{udd)`7NT9yki~SJn6(yu%?vhmL3iX5Z!zt4T>xbxv>W2Y~;=c#jdx2e8 zp&y|isiCrdBt---Lojj9;{1)PDMXfKM{$D=+E_e`h1OurNCmTTgB^@ zjTiM;fT4{RglH^rm8~aziJp#v^riaA`YHOUz%B=N1+e!6yRt$*U5}$6Ju3ABz&@yQ z8z(4r+1-3_%ccd~nGjDBs3KB%SGsfkJpG-Nn%nfZ>*woHM=)lV1G^U3iVFP#{ar{6 z3Va=~>s4xShEkW*3~aM_Y3^_}B>Avai^)a`2EF7eOIV>_h15j0gw^^rNDWf93D}2J zYH)-?lZ|fk#$<0^h3P46l%~e1^#LBjtj?uP`bQCNWOIE?zXjoL19mg8kE(DV)8KYk z+RM-)JIMRQMAg2K_tjDj{ge9VE(v#+emBD13+z^4x2bS(GDGq0u)_ZA>0T-q;!}Mn z()h4kTK|gvbt=+*`d9U@>GuQsIIuf`eFE4gEA(&Z4D|Y!hiuAl2tXHYIvfuu@2=66;a@2};p1{c-&V`VWD94%l75?gn;Gh5n@eBc$jP zV3AWeBtZ{_bCSBG=sxb_7nYbbu_s`_r9~8`1<6%j^=thPmz4UC`kyq1^b)WyQ*tWP zv1LOZb43TW3A2rmcl$$PC~qPeutX%5iII3<_W}E=${U=zP!$?DWZTO7U!h^vhkEYA z^o}O($<+&2$skz~uw;}>l3Buf{&isA0QLZ|2P-65QV=kJCqwv2L<6pg1AI)eLb}a>e@r@eg_=~e!HEh$S%>}@Mw@UQVB=K)=rQWH9c5m%U zEHo056H`JsQrzO&8MI9tX{Lm0aMsFA9PKHKYw_a%IX0|sy7oINO84jMZ5Y@E8*K?G zw9^`odQF{beDz{Wnj_6e6^z)Dk?xT0M1{Ev*dKt!u@NfvPnu%Sp0K80>c?n&@u>(o zRm~}|`B}Z!BQ2JeQ;UgI$4D!r`!(Ih&aO7dS)&0iFF1Hj#R<&}v3n78)>65&;gU#h zlr|xf4+HxfusFU!Byoa6t#9^(7Utu>A^CAhw04feArtnwe6+h?Wr16zod{XlCT*8? zNEq?Y1N$eie*wo-NKZ&lBIKumBfzl~GRGn0%NWR&-qK2I*!QVd4q&}O38GErVN{&e z$$3$Fm6G$4^s@Adv=2A|I1xA%lW1>4dS5ys9hHs&X9ms!oE12^Li#|$-iCA%I0ZPHN|L>9 zNh;s>+pi_@*nms$Vk(x3-7#FFiwm38NM|J4-iTO{OW#S@-jIF-&Iz1LCCIHQbIa9T zn{8OBIsJHVG7YI=!$ave=}&|jahFT_%fK)(1{OFEaM3E%t2C$!*8KX!`U#_OuoQ<@ z5g(6ir^!ux99lK@v4iGk&>PGMJ7Ohhuo$eWDRcFKYd~R#60em#jSY^E4hFxfs@vc) zsQrydTP}ur2JCMbt_H3laM!4aHqsC+&Hk;&Z?jatkeZUJQeWMS4NVO(h+)J+!_d;u z3W2r(t_g5BC_*!CrUC8XKYK3kJdQ9^lhk|yx605#V6&&1MHvzesR%h@I%jBWXorxm z2d+7AEmX)c8swN`x-(n;pc_7zk7J(>e@a5NPO3~&44n-X{|Qk*Qs(=oR%QQL|N+f_3RGz>++5#6p~m|-{q9tm6=a5#)X!0{U3@|^dT zMhG}DL0y8w#0mpNLfE>MA=5DSk}Mu)7>|G_0G9|{k_tFE$l^uc?^F8FPIo+Q2WWvJ zIjr4hm}DruB;d)0DF}EPa6aI0#)BBQ4FVonym!W9I1;7(IUnwa;jAGX-&uy)lo62{ zu7){=xth{m2OJJts+6|(e&y4jaSt{{3*2aEAsbj=SV+M|>IEAX85Sd!OM&YEoH}XY zItH=)v(MhE8lb>ZQYe~gjf_3!>H*lW(y-=|Ke8fwrbG20oT1c)#U|UZoOM;Stt4`8$gC94YbORnDZKT8L-MW z>;*0jxSpzDdTAt=X1i8z{Qy;orWxuEElMV=cVc+OKnv~2?&J*v7TShG!1V#HuL`%H z26ttzSEdhdi(OdSgr#dpSb2r-&l%n|9J?gG#|D;bTDv3s`E7F_?Lg)_&ObIqHjsA>KYqL((oJuTxKPnb(qV{$$R02>Ggu)0W;H}of#cQ&!w1cj5c1y z#27KqWCN$pTsXhRo|uoxvIcu;VuTE#qiS4`pcY&yLt|rOa|9dFe2p!PF&b~i0f&Q^ zDsRx?g}Z+`bxw;qRW@ey8dKCl3pMy59Cl&qiG>zUyGE-6uN&7Hea2M8vz-yW3;M)~ zsvz@#%SU8`WsdO%THMIxT1oN$Q`Jb+NrB67(QujcyyW644LVnMK>k^>Xz zmCd$3yz+gTNYg|Hd)_pWPDqHuU#b|~)kvG^5hJj%ml2!kxEIeA0*Aw=Y7AbQ(f7n> zAtk5+mTnwIHF=P6uyKfSC~!r<6$4iSTxo@IxN(FAY%*{-tqB6FLrq@ppVRB{L#meG zlQk+8*>9XcH7?S0!8p;Fr_q3sZF(gQ$m(wM`hVVDrdw61KI}iFU`i4)jAG+d3NMmp zH%>E7*Wld@+>Gk*$_v@V6T?T8Az}y(S8YPjz&Mw3_!i@>#@WU>z|8_K02}~!ONDWs z@itW7`M})@+-wSs!{JaJ77EXtocfksT8}zMBT6FGz9c$u@m6*^jf;)6*o>@wD~wvP z$;|`qw(893uyo6m6L)LHX4TxoSZ<`nW@J~f(TK&S@nPVQJ9nt8!QqhF@;ZOI?S#go z%5XA^azh)TDHLWsH0!Hm`c@+?HX}oR!idGD5sS^cfJ2=|rr#5U{N(q4BnKDN;;sZkfD=f(p@dQKo>crqR~;yD51d%!IL zZmEhR&VIB~yTJpl1XNp}m&zqhO?l&k$A>~H_krvH)OW_Sl$wYx>SyCG8q?PR zS6-dz%g68PXq}BM%(!HqR&rGKIE;UqI0P8czD>MIU}8*I##aEhPGvmKl_=xO{q@DB zM^NpOsJl>GqNsLQeO5!&WH#9-BWWEXH7f!m})ekiDR+cHV#JY0~7OQx9O zXaOe-32G+^&&UL2YN}_t20=$mjZBS9jS+NH;2r^PvkDr=JQV4e1I3HakJeNVA4G&2 zjjDo4QWe;irZ@x}(VR_QQ#^vjLSqYXTUD^zf*9vKbZ+P<%n)hf>BU-$T1s3PC)%1i zP)Zl2A2XK#5xS?Eo<0-@0Q}s1;y;X&*sfVc#0yCwVdYXEfuv&WpxF>;o z3b>~$OnpuL5J}86p8*cf(x5dzhe+08kZRxQldJ|~FhimvB3}Z{kdne02&R#yF_+|d zrYTF~&2HfKROd~Hdk!`K8dNjE6_rZ0$Tbxptcde(Q=w@RvIZmi^T6TA30d=^Ccn-r zwh!r=ff|P$TB^%9`9YVTL_JES*_o!AW+3EYod+38* zXSMj@#r6RzMk?*kRDqpmQpdTGwj@joOgPRpVfOMGaQjuTuWMjiuI~NvWUTUOcM*La zEgYz=R6$*8x*w5^Y|<-D4GAB`4_15>Y$4G=60+g#rY9+ukqTwgQ>Ld8%V&Xm z2e@}tEZ@_x?7eTp^uh)~+A(WHmeR^3zS5tWo;T68>4?>%X`ks;1iK%&BfuS1!5-7V zmgevq|Cp!hQ>vQArzTb}aZGQT-bJ91{mpx(_Yvq(;64Bjr#h%uCp4fj$Hu?>%Z(~f zJWz&W@+OA~|D@^DOLFtH=`)R+7_dGLxqd>oxl&;=%BsgHIys`Tl+nWZd^W{0^Fxm(J<2xko4Jc&-jxQ%RM>BeTh@P|%T-z-%+y5j1urzXI-S z6*SI{s3Y(FM$69Edq$P{RR4{s8Qm>NO$b|LG+$+INFhgxKIUu8jSw>S<-P;%dlm8z z8srY=UmG;wK25#iaf2FdmpZPhGTIztjzzE$U5q)-?A3(!6L4oK*pLZyUUYJ9_lHzX zz~VV%0cM~1`b!eu-rPZhg+jyACRMO{?{6? za7s}Hti#gVzwEP11BUI_N??P`!!OCa5$2J|Jgo4~1NW!OywE|Dm#&@vNq_Y9v@@8B zLPnv`^Z@5cL7O*cn{(9?7T0m6;6e_r<6sGk8#%a+gG)Ip*O@1nCnE5Ca{=%Kc$R|a zIpBE|Pq2hF;}{W3*v z(EtsV_QCDP>Rg>{k zD-4~2GQ`8yD1dmxzS;?8^IY>C6mFywKIS{k3sl|U4Zs_#>js{*dF<(jG`NXXe#X4m zOluzV67y2?GV^`Fn}N3gZv|eiFt0FU&0~H5cm;Tyiew!RMpnI5f4S)e+Q6bq9XN}m zAtOFHY!+$WV19&Zd!!QAyxIIHQnUqlC-5$nqTpntyr6UG{I6(JoX#J8I1oo?;ic{7 zDtYcSKSTK*>0q4sS@UxUcsKAK;G^RYf3VE!Up+HGw$k8UyS7vBI^yWEX;?^M=0D#d(`Hm=3@x= z1K_U#zLAP-V-4=gUN79RuqkE@+5;TahIlF+&Q{_3iTQKNgh&T+&0m<$Al$EjZwfq4 zN6^@>)!>pN-FFJXWrH}}7(=CwqoE_QazJPP!Ay_pM2yMiU(I+_$NUHIEr7?_2*Pct z!Hp^RA9`>IUFJxjt27iS9X3BB2GA>z&MWjeaT7$RfEP5u!g67g1c$|!bl6+1~f?sb;7S-elU-_9mqysQy!3tgYh42ulXSj@VPPjIm@Q z>}=q>0N+)G-A#ktZQl454-7X@p081geBKP3zmrKkEPIp1&gH!_#VKg zsep0dp{76k+D=&V2ih`KV0^kRVvLP`{JE-~ZJBDJ^-9E)%`(%1^@;_6?+tt(6);Xb zDBw+|w`R1{V^yzB#^bOu#;RVOs8sP{o`seyk$JJef+dUP9^m@}KR|^%FvN?o&ldft zRYGy<{4hQ~wR$paS!z*hmPqNEWu*mc7RxH&QG$b2utPMk9nOC?^ShgA_DY`^<4sTz zj*p`iL1p*Lvd%(_mdJ|nuth6c_+h}SgO8BKjcj+a#lfap##WUVS+-j)S+iK4vS7`E z-DZ9y@S`Y}Ay~cl?T;27R$<}6=}<0Y*=uhIv~1(V1+Ocn(?ULC=W!spVY@9`v*v0X_@(Y!zyb2DS5w!8@1jL93z# ziZ@<8$BaEhWMdWJ6BhNTXCyan`P70(JuRODKNk3LD&X-NVDeR?)U4(jy738gaU^^S zY5B%Nix$hbmhUXzTYdn30`L=o&jUWc!t#>^ix$dIOa==p8Cr+UjMZ-Gop0=_AbptQ z1(RAUV-=8wh$|3Q(W+x&tP=1y0bitYrdZ?5f(P2qd3ffivXoS>TF2ws1DbKNnoCqN z-D|+4x{9ivzO{k%l5xY@ z#ENl)a(x=`VKagbO9#i;@3|-lSzB4@Qf0*bWox_@mnyAEz~2nKIw0U@YB;Xn5!KUr z7M&x$HHS_J)U+%q%sE=yS=EKgNYTyO(TWR|R&=?T5Q9qmEgIksODkF)ZXPsT+8e>G zm1=5i?P*mPDkE~VzZDlMDe1F;$I(NT1(z4RKW%?g9B0thRZ3E24q_c<9gVa{48YbK ztr;4$dBERR9U2bNiw3+!p;4bzbymwd)=E!4MBJjX=2`LNgS8O&`M|3a06sVYSaD=r zpA)!k=SBOX#*0A!lO;TZhd!`MM@y~K5wvx(b&7SW6(xHY@E8S=)O#zeW!9S!^i1Fv z0jjYKKnT;}}&50_jxXro%iHR73tan-OMq=&-ekt%cB|swY z(-foI+@0?(IET4jd@}N#I$}(L6T&ranRO)hz*N>W~M)-oeW<3ZI%qIHM$sY}9o z+WL$JYYp(_VX$(Z955w4Xt`BSA+bJhrLD4von-4iE4Iq4`+=_jew|8gu=U?Q;rMeo zzfsGj=f`}w4Txbqo_0y9D1OsQ+hvhm!h2S1msyVjzY%z~^Unu6|LY%bmz+Nw3uJ6+ zp@8t=1-QPX9+RvBe9}r=W|1xAv=v)s)-Qm61bDUY&j1@#we!z!(M3il^=e6d3b=8++WVKrsslP49$=EHE6M)AWSZ(g}do{Q%R}acubtQP1Y0Th*5Ag9XhDNiG<*fJWv(da$k;cF+|-sQ$k;NI^MQW@_ya1%2Q`XIb2@zc=|)r? z^&mNB#nj_@=>)rqmBli~h4pfYTq;kNr^r)fj16xB|2FXN0RJBFm@FP!FPF(T%QNJe z@+=v{Ep`Du1pWl@CxQP6_>b{sZ<9lek-SOXB5%uc)MsJxZ)M1hrna7%jr;wrbNpGQ z<62M7^-n2o8ylN4HYYVRH9IRQ&R_j)AM$+d!o!!jFe^1Hdu&#=e{9%=cWW2EdzlM! z@P5f-6B5JTFCs72E`0y87iQ+9WG7_Bhuv|xcHz;>T+4q%JJ1|$$D2n+=N)OvZZ{Ji{v{G$Al{4(&Tfk%(~ zHSpg9e-`-j7bwGijowdd?CHXneai6#?`Wd0j0(OJw|C~W!czLin;-)Z$aLEvVn~(` z%eZYo?ff&~Kd)}*<=r;c8`VwSR>hJl1vBdqxa0Ci2rjZi`dI!1&GS>>&jA0WYMx(d z=2^Zz>Xy9TSaikFb}hCu&^&R39_By4l)pp35!*2G_wo-2_$T1M0sdPRFg;O&etBiD zKQ}-0nd(D)Nfaukz}4qD^6&Crm!e)_6vD(P*mB2W>_-*qPeF8hy#3jt@gvK8K6Oi5 zosuSd!v;l)q*xHJVo;2VNihTeGw{CvkCF4Y3dO3(2-pVv@4%}w2>u)buEQ*|JT3S4 z%_baBVNV9*ER`olTzpVsbzUj;luK?JD2)`{G*Ga0`6uu=1GyUnM&nh?;o>guPr;nr zmrV2UWX!oRCr?QU+Z0w>Dy^ATYm`$GnK?j1qLb*=4UTLdz06_x5h@XIfo&ja(2|eJqkDtB} zA}z;XP?9?~*I$Ikx~@*^)MHv!QEm>N4=T+rDJ}BTJ9e&oF)&7@o6>zX2nO}}z)G6Zb7y2?B^?AS2r>wYioH9nQ@_%ZJbYnO_{}n8M_Q*Yh1nA?{Mgew zv$&*JLE)5wYS#_T%_#{zgjpG`j0ktE%4h|T+^Md%@eM`aG4#I>rdi53%JFO^NAW9T zL9m110Ko}@t3nyC?f zcf|u}{+vODlY09n`}2b0=z?Ns(l2WQK7%=}%b>za>@^PeFDzCMt@X*A)VPC&8FOP9 zPO;ixPM?^N+9qj+#`Y4W`x>PbglOdbh}^z$t@9FE`zLh@kugodRHAw?QD!K!sDjS~ zq5c{r00NywR9A2V%PPz)$_Y_$n{pRU zCzack`N|#2oyr0b8iH^Q2#r8!3__E2sQ>pU_bLmOMXCif1)&)T*MiVORin!pfk%^z zCJ)s8vAN?)i!$j^!N}_0IIUB9C3=@MoJ$zV&>a8ROnlE9s>3BTJ4EmU$|@?L2SI4Q zhFXPY4}Y)T70M>6vFnue$_8a42r(eE1OXjcYpSsiD~~9fRgFcb77Ic=vgb-^EOx$Pntzn$bS8rwSGpO5;4`E8MZQeja^hrG{^DYk@<9LC>r=-1@o_&{$vL+?x2+DY!AH%f6^t!xGb!)?QFj;cQC#c8$4_W?1}h|+bsT~e2<}!OK%r;}ZXqNK z1VWNVa67oWdlKB;2?TdZf`(GLZJ|QFlu~Hl-|S>#(B6ALpK{;#{ont$!0zmv=RD_` z*)y}VvmsH@?#S+WJc_JMeC+j!tNI&ALla^P@GRV-Nz;IK zty=hZ2x!`*MTfTS1N@t|YUgJL2>qKD~g`qk?xx0X-4>%6}+I^OG7 zuirdUJ96!SlTFJ!LcgbZ`J&pL>a>#ye5mT45PCf~T15FBo_4PnUVnJ~X%t2eV-DjR z#y5=yqheHzIgPoDxs7>@d5v!w^BMCSJ&j&QqtV-FGP2iiCJoJ{;XP?+B@Jz)p`A3e zmxd0~&`BD)NJBSi=phZgB)9fA^pS>OY2Y2BzcdVxhEQn;lZFUsh?ItCX&6lVMyt_g zv>P490>*;ILdL?zBF3V|V#eae5=I|mNnnvTUt|oY+gsDforjt zxk~nyTk9>qAK=;jpKn=fv}*Pi+v_d*zuqyemc7}|db9i#+7OD#s|E%K|6uc5^VZF|X{ z+8Dh>e&q2r*X>JHG+b|)-*xQs&+i&C@07B4d5qpLKjZj%8-A(B6ZD4pp~VmWnI8Y` zxi#0%N5ArYcB&o+Kf3rDs!S`gm-ddc^cMNy#Mik2zm)L#db9jQ;_KN_z0}|my+M8q z@%1!VBYQ2c)EoTZwQs&Jz0bz!Epwvcbq?uE&2G?}9fk)Ixn`X6q! z>HBK^{I_w3aTiCK#+}kIEY`?;o(nxPpT^^)SIi*JE42y_a-F1zavePx_j3Zs$kcxX zht(;@!^R`Vqau&+F(w#~8&7EG?3y%vKPDt-V5{)(f$f-<>pu_MHQN1aV%>w&*4wc? z$2OxSKf+}gDGl6J==B{DXy?Nl{8DDSzo&2=*BQ?k&jxrF%p7X=-o_ix8P9v9{+p%v zQL-kTI%I!s+TpYDqLBl8cY?1-1J|f<0Xruzjn}m#a=d(j)_OHgLX<^Tj22Sx&eXl3auHz{NIqvu3)uS&0``7W8s=sV*gL0puC#zT?KsaB@N1r2xh9gX$bT61 z$K5K4GYsFH))Y`=3-H{$nD;aw8)o8!(vzDuW2{y+OfMLe%^1Z zN(0vg={4-4VCPTEttWVT&u`*R%g{9k;py{`LB@>h6Gpyqy^VbLvmK#>w@@;vJ#|%xS&kpZ(?x!<$9$)OgmBSr&wD;hQu!l&)p7gMXYhg2^*qbfvG2Ua-!rm_p z`(9^dWJLV?n+cEH5l{4%XepOJ>suE<~S;djOk@B1^)Te(wy(ED&k z;EXz7|4vJJf)+R_J)bS`Q{Jc30>3B?7ybu-&Y04A zGo?*R9~^B;>&=ulIa@!z@ODpWZ%RXos~@jv!jkdM|9tD|QtpVq@y?jddNZ5VzVxnd z!P;!ro7wE0Y!UzJ?ViovlZLylh+pT`hyB7kV@_*gPJ7=Swn>}QnwZn_ z5n|@e*Ob%bp3{CL4Ghg|n}nwa{7xQe|2{2XQ$AD1RMx~)_LKC0wW+L$sVv2jC1AVB zJ(c}T8vgYf19qL0aqZflhE+{)2VBIIF_Sehll>w+U~MLAVkY}ATfk*a?wKr~mp*a@ z{F-;|8FTQT%O!I+pIqAEuBnnKV=`-EGRq}!dP$qK$*hUV>^IpWuWNEoX1|q&$FIGl zGs1q@V(%7r*o{mXGg%WeS?$s~*Oq9~X0j$`vOi=CyOqg3lVvmg(G~V<+IM8U6+Ih1 zBF-Igdy_Vk)%WNoX0pGeN36|cP0VDUWQ(|`$vu;ODhfM@9IKbcm+buqJc{ZQr* zBJ~hn{G-=nWHeRLJ-jg{uC7{Z8f+S38fqFQ4Sz~SNX0`cIo6s+m`0jLnMO#AH;r(OD`U4j%ISs^MsCNjv`ic38zL~+GO^kA;W3-B!eibdN+ zItPb@$3%4qjO^!3d%0g|U=$~5U$waV8o-z44gsE}Ua|H7{jtm|clULoNt=3`CQ0SZ zSkn}#7+k&a;&hw87O{3YUW;hwAbnC|n&I_0&NS0BODc*~@^WE^do^=S3xqMwG|x0& zDymd+#+eqH7D*+SRB}rtPfu2taiL;>rzii`*4#R`>ses0kaX<8X)h)ll*(X`qWmo0*L(^{##C6#&)?D7~Yp!4>2aTlCSSo%} z(Jmd#9G!k~m{KRevu2j)f+Ax6)5tQugJjk({Zi`vw`=RuC#Y7{;7Zl{Wd72QS--AJ zY4G2!jmtgz^yNn|vU~-|tY5CBaQWeX+tWb4DbklaNVsdDnfcvpWAL82WwuA!nEASM zmT_ut_Rsc6Cvz9Aaym<;S**FMRGMcSn_hb5aN%BqEMpVqj2;pmIq<(PoydO1Eo8S7W+NfF$-)1$d zH1VxgyHPdY+SM9W_O0&Mq=sMB>P@RxsnIBN#YO8Y;hx3HKPO*37qZ)7mwB zt5t7S)3;I6Dvf+=RrjmpSDm|gG-+DdJp@C{!?e^5l}g)K^KhxOBies^8pS-CU5a^( zRNiNoa+8k)kC?|9kDAAuCwL?o2ARXnQ`qpGLn8vif?e0921SNMM0X7d3w91|7Z}}N zDjmj(oKk5imG;TzY3Au7k9mf9rg;{Zl58mn#-ILN90#LVC97T1}#3*$!fdh-VJM)M}~X7d*F zR`WKgbdySVsq~OaPpR~hN`O>)OC@lld57S;t>)e4J?6dUeWJKj`i#x5eUV2Al1i{t zoKoq_14^E*(XKhLf0LHoLZX_6hV%>R6Uqe9qCeb(d2*1mMO5dINakbO{MeNF3HPVy zOm*~!8$|~7=W80SFT5QyFwMV*Wkg?!LHzZvprp>v0szgjT=|0?OVBOGpf9Dbw6J=nWnyt z_ zJj?z4f{g=%2KqZA0{P-cIA3vk`|p?5+i-2MB^u^*%~C{=C|WXyDEc=Wz}M#QUe&Ab z%|DobluEQzVx+>&LgtoesIO7HU$kT6n2=EScVNs<&Cg%8f*0mL%p7vEqZ=j_?P`${ z4L$WWw6F6w@mLI&T(4N2SAR<$3x{eP5sZ`yHwKxT*0Uswr^sXRvKaYFSB2of=)ksK zIRg8*zL-#{Qi?~8H{LWTb?bHU8O&G9sD&;*;jV8rMRoNF)V3)e?%)$09$^$7lh$lg zbLRJS6e#FZvK+q(+R;b5^IvkV+=(tqwY^!1hNbirdcEa2Rvnv@!mhyg z5kj5*!=gC6?bt$FSz~@2EvZ!LGH-X&Lk;7FUG%>?wH0a0#FZ(_y7e!3C71WjU7=zn zV(6^xW9XSH7XOIAAZO!B!t;%>xmjJ6s_r1;s+8s5)oZX|lMvUTB->(Kb?w1gwb`v? z%8d36zL2nfadpbR@^RO1gSB)Ha|XNiZ;Zu_`VBfnhKEOw^$5U;xqAuc;w;X zp?G+CI6R7Z_;~nwRP(6k(ZZvZM;niJ9vwY;di3^idPI7}cntTL?J>_|gU2C{qaKNR zmUDRMe~Nd~{!IJBP=4_|WbsHP&)UDz_Innar3hb=Hs7~6 zECtLDEQKtET|1DmQjzRKq%uw_^>3E!z_nVgC6g@W*%Ey%6|}n7uHe!RZ!Aa8 z7N?7o^lVkKRMr#YjI&hoNDcSQFFG)w!LEb#qWqVG^)`9@n~SQV4r+RS<=R7As`Dir zk#Fo9?2PpXYI{B2EJj=EiU%eqUp@a-+^{sVG`9Hhg>!`qdW@U{)V_t@Wb9L^%#;dm z&vUgMdB%j_qJJepnemUE`p}NGDrP?Ts@SoGc6KQ1_sRQbjzRx&g2FWHANuUe6+iyy@*o_rjuVq{f|oSKeM*1e``UR_ZnNS znbva6^zZUpx>-1y*kI{y>0#+<>17G9^tJ>_Wr0){N`=!3i>0zeDodrZY=b4p5^Qmb ze3qWtv`;F_rLsaQE2%_fkv{M9nA?jjsWWr!@FC42+0}9qkO$gEG6v4z&K&JTX*<#m zfqj^HMMs8*hPuAv+(3KLE1wK#+@u!2mDjYfZxz4FHGQl3)vWH@xJu0`zO^bht=zZ~ z)2ci7$W>5YXrqqN#$9nCo7q8-Tbe&2|1hekyQhNYcd zkJ9f`!Sw%CdmH!ND=f<`-2P*;Wrby>WtC;MWsN1)5@(6GthJEa%~IiP@m8sD)U#bG zJEXExD!Zh@sj5Aj$?`@@-$(dZwpzAXwp(^scDfFC_L6q(g51$k`ADj7NYyS?hg9_w ze4bj8-QCjDqRqhdOl!v`0seF$m@iUm1E4LeKgD5CCw-o#|Jy&N&mflWmg$9_=Bz79 zTb^S^9&e(5joH<*-fYpdhuUeYWsVdU&A~*ZGm5|H*C}%d><%=2T)Tz3ZvN3B(&=;; z?J>)74%;mWQrQ=4IUyD8woCkAtR7g}82nWm?sc5DaQnts%NeO0h_#%PigtZa2kndH z?gcJct_fqj<+A09<*HN;N#(Fqj>KE8ll&y9@byWO{UOJe90_D;m}K&9O-+aObNw}a zT1Ev?8CjQgo&R?RXMg-%XZRpzbmTDo{q>Hv-QJbTu}s_TeG9j9++g|8^1$+u$=yI!U1j`*Ayu6?5H=mc`m;j%AGxGRjH}nG=!6UuDdGTv>L36$YWKlIjy;@xvhDu zd4&%<0(WHYGXcFaqSki=EHQ}E$#|F!xX$FX?dyJR#&c4+C6&ukVMO`v?dSl{imnen zDzM39NtwRR3h8@5rtkU_4Imot<}qFw0c|l?C6SAZb&6rDqQxGJK1Wr+L-=* zX?0i&bjxVDqbnxYuwRqP^}pIrdA{MAAXA|tHzcg(G~PP zfxCz+_`5!R*3M;RnzC9e>*r!`>xJ2b-IcYeRJblEHzk(oi}sbYo49K~Z0i1^y|smv zGu~-?a%(H8e9W#WZ3DNqwZ5OehqiJkp26FsXUPi2bWxJ;@5eU!yM?;$5tMcm znEr1+zO>%l8Pc!6c8f86-)UW=?{&DYM%(MWYIkK_r!Vr`U+$8C z*QF(V09Yga-Ry7oAKD4zz{rrO@GyNBlX-u#L*Jjg&))Ur5>q+Y=slF*ygH#o%s%x!htY@v~tmmbgQ>t%CHNR9n*|xg0a`tsy zlG3%kRsh-|KsSA_=$ab4X1M8d(e$~jdmFfBP0`xBZoOemvL;J4msE30HIG#Dt`%j4 zk5@fDl%V>lAww?h5S3|aflhQ=t3=nmv9#%SRQtdot`o)VeH~e!O`9M32Zd|rl8R<| zQVZ3e`<`$luesj98$GP)yC^G#;iocq2FhIp-r{r z%=*ccEsyOjdZJ(cV9O^}?P@evh1tA_+Gey7azUvU$%xu!vDve=?ywb*Y9Xl>)>`L1 zQZL>T4JYi((t1%_iEJ+E^ixgW~TR9u&?rgpu zNw$i%N}Q|J&cW&>sT~BhVR*PTR6l1}NKBO8ymqd^IW$^-#ugD7qJ1Fq(o<3`KUPS! zgj6fuvQ@EFrHyK~>b4rR<7=yJo?)wFJk^D>@S(wx&ah5woE(;Q57Jg07OkJlEE=5l z1<=2mmUQQn6!*cL)>e6`R*PIB z)zVTeBh|MvcI^73Hhm83-d$&%U8X(y>ItQ-qic7pmi@Q8<17=(EIG6FB5Spcr#zC3 z>}7nlzE&73^lA!Xe`TwvB|7aMceZ{uP8MiqZqw)T?0z#&5M>?PI9rG|wfj#Ocg-Gc z18tm8De)h)5N8{tt^Ge)G;I^Kh1)(z-vihprCK?CyNS`Zo58jrQmrD@YMHj1;kHp( z%ir|GHb%Q{N3BZvmuNV)OqQ)>ylv7;i!*m%@#?O{!`5V3e1>fv_j$9;w9T^3w#~84 zm1<3?){<&%sn(Hd-F3G4wgt9@wnetZQmrS|K2n`2)g4mhTnRh7qFLUb($5!FNI$&# z>qQy|MhEq8781tsdcnU~i)*81kLtdfGJXB-3)kEe>+~low1|p|aYnhbz1qgfq4l;k zwpd%7E#9`)woa<`rP@HM??|2=>n)LzHlOqAbZuWPSouWxT)f5+a?-pJnA?q_de zZz|OwsRm2cDb>DG?I+d#QVo&n0I3d?YN%8PZLz;=Z*Fg4f6w01-pbyZ|F#vy?e9r7 zOsWx5{XnYYq&i-z6QnxH^_LmUFnLT1%ZIHjeQ%Y%z4K9WXkbK?Gx*)e@R$f@i`v`3 z%ZvF3X`hU^?<=Zb>G1MW+I}$oQ}?vbmf7)TUSry{RXf|9{`%J1J~Y#ZndwiYN9o=> zv=1NRI^NJuN@(ZtUtW@PBB6Yo^Kum0&M$p&El_>_QYiDo>FsIH>vR1qfwt%u#{STc zyN(8UYCG-p^`*bi9jN=XV3g~GDIcLH*#kHsb;{nGPvzSOhV^s$g~x_er> z+xkeUa`c!dWh4;6r*pPBnAkpZ1h{?NS{f)nT5BRB3#8C;ci4n$)JC6l4cxxUSVD+o##b z(B5=wA^SL9?7C2bYa@8QYcgb?WuNU{XPkYOM{0_Fu6-UanD3EfUua)s{hV|%0pkv> z5mCh0i0i?^w5yg}S3qd{%*M>f2WllTR(Ns*IZ9vc68lo--RZ-YH4pLjCH7_7;JuWg z6#EMMO8Y9>Uu|DwkG02m%>k#*6aGoN?zJrbg*mv4@*>`i<;tW#hE`Lf< zzi83ZOR5v~koMa5Wvbmc`+kqqO#gOQ@qVQjBrobE>8i15dWCh>j+tB)^-_Uo^Z8Mp?k`B%lkNAIli5@3 zH|@9Vw{2_fccnT@s!X@$NR{a)bFz8s?Wy+rd^A_q{t=%|tMjG0z;$@dLVU-6wrj7f zeR9h_B50s?@`KO4v=2aBvm5PJzi9`Au1iL>gDBU|gk7JtN#l3ZcR8*jy|8F~cja0g z=MUP3g$`>U6Bfp#tZ^v!yXHmOo=!XX*Pd#j-C&wKPx5ry%iV8GwR}y(28Tq3ySAN1 z!5lS4u?N&HF=7|UJEOZtS!S65o|SpLdEj7Y3%;fk5*Qjf%>BGyyN>!Hu@-3BVW=w! z`UmE&=hDB^q}}v2BTKz14XxR?b`@uhs?`IX!IfOcVfNp=zKXR!lj?GAHT$Yh4fMI8 z{SU{R!njULg2Ti9wc`zU8dkb8v1*;e;86I`wYYR(GpD^@6p}@@d1hp%vxurfBBYwFEZs9`mREe_3an+HX<2W}AO~FqnS4 zn6@=J>N~ief0LtuZLOoBqmiSr!_U#g(bUmQs=Hjfh}}}%Bh|f9-6vHJa}G%L;3iSl z(Zcbbqa}Z~cC_KY?X-P`dPu7550AM1epIU534#X`()S@vBO}8jvma^cbFcI%9#3l% zCv86F-oW$&P3?%xbzZRXFnv~}ZKyBRW!g*ASEnt?W7>5o`tjh)%^P_xeR=l`Gt(5l zN_BoGqXs`ts9%oa=;8GhH^R~H0__OM{Et3qw}jTdf$VT*ex|?v4|mE3ItFR;^+(#t zNe9#76QoG5(hs~I$2%e&Q4VG`iBdf+)pHr=Cmcf@!?T`naEx#;*EuOwJ~C&!)-L@> z-{=y6b{>{rsE$;@Ly9ym-1}R<;+f&3a%m*Pw*7+MG|u8YF5)t-;yRL$f?K$Qd$^AW_!yt!Gkk$Z_zK_PTYQfn@iU&_DW2gu z{t&_{kOOZ*K~CgGUgU!(j4;6h8yqNz!YGR3@Ifh*L0ObX1yn*6R6`BaLLJltwP9@x zYQx$b)P}VUs10iebVfJyL~jJ4FG3IsYS|iz7!1V-j0W}1N6W%G8Ph;LS?6Fr7GWt? zU^U{f4jaMtW!;Wl*b8dVdKkxW0;g~m7jPNZkc6AK1GXV6W5P#d!peA9AA+&4J_h4p z{RvO-8_2))Pa$mN-ev%Kw?|qi53Z`Qg=3)UBV;NRr4dSsLo3It^C+xey ze!_kb>?iCANW^KdpRixV6cc^OIH(T?_2HmC9Mp${`fyMm4(h`}eK@EO-hG9G`fyMm4(h`}eK_W05td>FRwEAU zuo2XUgZgmn0`=jbJ{*TZeK@EO2le5gJ{;7CgZgk#9}eonL47!=4+r((pgtVbhlBcX zP#+HJ!$EyGs1L_ac!J;X9DfQ?AO{S{i9E;$FPLBji7!wHMNtB!@HWb$BC4P|YN0L~ zpb?tjUA%|ZXa|3ELRa)a0Q$g*{uqcbe1K>S!ElViSd7OcOvMb$#ypV60voUg`#|0b z91@~nO*91KT9EN9*bTHawa7k>#VH`yQ7^@v|suzQt_b>WtxLH%XCIpbjN*siLdb(-wE;dChW&S zkngvT3Q?9ElqCmc$w66iP?j8&eZe#;H}WDMJV8#&k<)UsF&FcNC|?0}Q6KMsx-GvG z$8a2pI3o zn&hzNZ$i{!*;?eg7GqkAF|Bn8cW@8)@j!^$)K6`;r`o~ji~gX_YE!GVzrZ69SDiqF zAp*ozCmO7$&O>~Oukl!jx(gA9wOEghLeyi7>y-hyt4HqYRls7fOg)yVr!BKti2C%U zekrhQeU`1yvh}y(5RQQQs!u)}FvbnYZG+Zmi}!H?S8xqCkj!B~cl5^qgo60rA>Ma> z#uGfnGa(w1g=kj*Wl$F7K|k9qKrG_1 z4jY7c-+~e-iPCr*n{fb#a0JJMXx|j{yFIbDXWZK}?(Hvu{KpWMsM2a%{qG1c5mA0{R#esFN6qWi~<>>K-vjp znZSW~4DudG-UG>P9}k=a@%OobWRTM!auc)^%Rz2~$Vo8q1ruK|@dXoKF!2TN!3nUA zVB!ouCxny7oqlMFckv!l@d#gmTsXfIqA&6FCBDAI*O&PE5?^2Hv+qN&{q_ACtaTKl;#*KJZe}{|!vX5-h_CtQI1q7%HF=s-QZw$G2iTc7i?(u%i^ppe%f` z3R|!ZJFr`bf$yLd+Mpf$LEi^n1Nj@64DuIR4=vCVt--RP$8i}~aUCo>s4?2&eXy=U zoj|__Jq6=5h&~SbQ;4v=NW>|e!FeIV`yd=2APR$ph^PZ{9zoj?v>id55yTd89}n;` zsE-c<5rzmvB1VYF9LNtZc*BB4h{rl?z-A$$sJSR!6BP~GjAFZrVoalc1KU&73&EK` zjK*}##B9tHBE|qCOkn*nskoI?t3;SQ+p5yUWJ9425ArV25VoQ@=?BgyGVaypVekJKJt zge9QwBiX)2k(W{AWt0glGm5;7T8j192=YFPIvhMFH2oY+os1^_G30&B z8=#+K_{SLfGKRj4A)YbMgcz$L7xEw96sdR^nD_IpLi6 zYG+a)27+;!#JEhFg6WurxmW<|VA2{e9+PNu(k5&L{h35=CNaj7$-!iDKDh=Op$$5t z8+xKQf)I*u(B5R~a`I4&07;!Z2g|^CPu>aoHhDh|fj&;AZ--m-Zf&?VuBCg;%l5q=n@v{&!3gB(Lk8U6bGd{p@5c3T3J!3p3fqc&(-!sVf z4Dvl=IaY!3p22v}I0pJP;{q;&{>?~2Djwhye1?Z$`fdo#bsA41G31;$`jZ8Sz(bU}CYLLlhltU-uC6b54$Mq)7% zK>V}F&n(7ZHo2eeje;nG;wXtSsElf;3HmX+J{qD0IwAm}h`~^dz-Z9N+4ONXeVk1n zXVb^o^l|o5(8t;IZ8qaLI}xXG4vgdMD`5O)Gk&wFo!KAZQ&2;*sh!zRg_z?3YIF`Y zI>&)Rpho9VqjSjj9P%@V8l6)ewNMwGFbdPL2S-6(=g`(1+L%Kdb7*4@bvoy3kefNb z;u*-%T_!L#lO$BYv z{Sm+84`>ylUy?-Jr&!uTz@f?K!?#&F3;_!Mm8OTNVq_!+#`Wk!2z7XW3Vld8nK+VmQ$0Z2k2&Fot0qCW8DdpN?6W3p%%aJ;=}U1W=R9FM_dHejUkRES57C z%NdL1pW_k8({l2({0|{ks4$@rilPKc;cZkwbx^A-$kB=hVEbCZn62o9Adr_8LA1xff=h?P0vg#w^nS5^jjSxH`2l9!d_Wo0w8MSFBa7j#E2 zP_HXLz-Z9UO4?aTJ1c2t<$SEbYQ$k3HiGt7?!^gQ!X12q&+rgm;V~G?mA~OR{uE+W z4j4dwR=o>iSv3liKzplJf^k^230tuPyKw{wNW^KJ!$mMIt3JXv_yte#JN^)2wFh$J zEqKBk)YED^sGrsJe>L^EdM+6M)oZa0hj9vLaRHZc4fJt!DjtBouBNZ6>FXN$w1zQW zLp`nuK!1?WH6t(utbfe{EC%hYp^t0m;~M(7hCZ&Lk89}Tnth;;YiM%~{aVA=uK5!5 zZOwQ15%h5leT$`Uv2Q{JeT=1#vGgsLyvCM8Ei^(Cyo>kH8q`{BSM&g}#`b{|VHkq3 zn2AML3dTNmH5mI?#ypmNNbD{!_OS;*u3~S3@r@&nxGJa%+Kg)t+K3|`aRWgcapWZ~ z8jN`yZN-hpBuvE&Y`|6A7b2ei#nZ2ND~h24YN8J6qamp6_*Q5O+KcaqE?{iqgF&0| zj6?hcOvW_Ozj$gbp8mztzj*o=PygcAf!dCzfAPm~4k`E$ALC#60*pyKV-e3-#8Yqa zzk@MZ%b2V!2x40MK89f&=-1kXppCWUaP4-`##(Z?mK?4|tm}sXh{9kH=em&? zgK?OS1z3sA*n|Bzgrhi)^SFeoxB>FC?l#ENy07q)5bFhUAusa72r~+!7<^C~W#Nk& zXo%Ke4A(P;>xp|kajz%t^~AkC5-}JG#&!K@NKC*iYyvr5|3HWh3TSr&`Po2zHkLy* zGy`pH?1TV>f;?;-55{WaY|H~=ws8q!u@)OZJ~nQ{PLPj{XTVr(ypPZE2#nXpZ}9`3 z;f3J7hj;_Tw27Q-A{UzqpbRR5xHeJSo2czg^+AlATA&r$qCFVLP2^+KK#+q?jMb*; zpx>M3f-&2)7;6xZ^`PNRTd@NdK}?(e6k;=Z-&_fG(FE_K8+xKQg3uS?Am^KDZ!AUdxuqrAfOfZpVm`?8mJ3J% zvLQo=N z8{@r=@!pmTMwnp(vrPZ-VFZefdKS@6aDc4qA>)+F$!Zb6$`N%#Jin1w-e{~BS--8ZYR#|#JQa~wVkN8v<30*AkH1cxnm&0K)gGMa|dzm zAkH1*F$u)GV;)vv3-;mw4&xY3-~uk=8j^4mckl_w?~Y%E*h%f~d<&lNh6U8_PHJ{% zNt8i3R6u3aK~uB`b+D5<*cpgmP!BsJKppI)4t5U1NKg+ur(iCKcjpFd#y0H49vsDS zoWvQN$0elTV|S7mlv5UIcbsE&~F6v?zb+PL@sEb|q@en`bg%G?#PJW4ed2+*1v-w}&y^Qy&e{0v$k`dj=p1jO8B2a?eOG zmU|e>J<~A@jOm^QSd2B;g#Aba`PoB$_K=@F75`#eBh>?6PXiopk^L4No7q6TWC9^OG? zP}BR!@xIAe2y(gaEUw``KF1?`jc@S-p5cWMbXV+WeD{;@{fzH^#&G;TVren2H&gjU`wP^0Pk{YeAm&p9Hzs|EmxOX!ii)d!P#F z-+>lrkB;bq?&yVn7y#Nk5CO*dz+f=G2N>T2@%_@jLzy;-ClK#9Q!$H!QHDAgIZM6~UMsY=*WV=7Yq1keCk=^TA*c z^Fd-hNX!R``5-YL90~Gta6VRGHR7-i8?g)2(ZK^a494}~30%M}P)7$J;|YGlbNng9 zp&X!w4&{RvOt8WM#`I7R5X+%?U`!5?qeI(q1gCKh7jXsGaToXT5y;UY>gf>mbci}S zM02PC^r^8**7vYFR42EI^CSWqAVJ7B)JRK%ahc|(| z98Lsr9wyGi#CbRw9T4l0rf37=J;HwMNCbvqB*tJICSn%mVgVLo8CGIFc7pLcau$r=k;}M- zB&6a2KEY>rh_8e=Y5?2e(K_gZffx+hJj!-;bRm{tIaVPSo3RbFcXSW-;}A~b67GO@ zj?&Ii+BvGV^B7O?8=m7&A&%t$?H|hr#`IW8R6$)dKqEB4yJ!c0bOJd#)&l|P561Nv zc{(-~^FYkUi1`>XA0y^t8$is*i1`>XA0y^t#C+^H$kQ?MbL=B9j>j0sV~pc5>h9Rj zVE>iC{wsm~SAv3EpcWIT#e`xghgu-k1Y%7f)`a)a8pN7FtO>-LK&%PmH^GT848=q+ zo(YU+0^^y$cqTBO3GrY&6Eq)WADvjHYOgmS}^{Anuc)7={TT=9A?4F z_zlnTrx2%ez<_*UY);eH(^fD>rwgGJ=u z6eeLRW`OPP4BOoqw!1Ur_Y65YLq5+O!&zLwWn4oNQt<$v;4?hLSNI8k2yr$i%plgY z#Cn!k&z4465bIfDJxi=-iS;b?aJDh1gR|7Y+1?n0!5D^-7=v+OEYHruTr9w1EJHjP z&$9<{28`d?8%V)z+yi5I_6tzEXTQOBpoY)>F2uQ9Al`GuQ4SSQ8P!k|?90yif$==o z0{Mp3b9xV@_U|m&z}Rao+rlhAA`J}C)V@CdY%~16XW@(_#MQ0 z!2`KrLkUo?7a02sjQs`1{z79kMH{@24(N<-=!w3F1a)wM7%$8NFh{7Oux(#Bj*Ga7Pw_Rr#Si!yzY4+A;^G@nkPCT{AH;jHBr1YfFB0R$=4c6G zy-2JViSZ&aUhIt^5bMPd5bs6ey*LT;u>y?$MaKUkOu>gy)4DncxP1uSZ*bVC8(ivPuDn7$Qd<9~^^gW3E60u(*_RGY6 z*?^oN_RED(8r4uA4dI7oXo2?Vh%V@kUZ8$24?r|VVH(KsSK$j=q>bA|j|2?hDN!kAu(0eQMI0&MG7$kP?t zyFy;BkdG_-a1i9>N&?P-0=ser*O3gy_R2^25r8ltdX+Mm;c|*V>~ax}ZB4&ujfK0D};L zC=A9JOanD|Z4IcwYs7txTwkLGuMzh(;=V@Q*U0s?L=gWq;=Xnd#Cz>WXz~6b#B~o4 z_jTgFPQ2H>VF7VpC+_RSeZ39>!FXS%-Rrb_o%XJir|ZXY9+$wNUB7`8e29EMR zvAi(@jOUGcScoN9jnQaMxrhyo}K@|;YblgV>(B~%4@PA1REG!HWOAHLj+4o8GC59;1@R^y1hFO)V=}dnOf4i6YcjDW z6Js(lCVz=f_PKjgclqrgrX>cQmBY3sE%5wiw1ZXum zYYKTyA+ITOFdyVMWi>WoH>lwha+^YKQ;0i-xKoHbh1{l)+Z5tXA?_67P9g4;Uxc`s z19?Fm+$;|2;3jo&lRCIb9o(#mI;f9^@Iy1SMHe^`h7UlVZw>)@zBwL~FcmXEo^Q^> za;(KJ9L6!6z$u)?H6-CC?jRKp@DM-Yg%G!L!wPbIs}RWXtr94Ow?RGJq8@Hh54Wg? zTaD2a)WxlqAnse;K)!DUfV#ak7v%KTLM#Ds-MWa&AeXnu<*g?|+t}%7q^FDB&e&~+pz;Xu?O_~b|Tm=Zl3}DzMTxl?DlPZhR^W@7_-}2 z`@iBTei!0SPUHe{+<6P+<4$RigFEFxYVi+XyyRi=kaRdoC2gc;?6vV2tN}6IyNMS< zq$(gksf9s4QmcV{q}D-wP#>w}K9$_3lKWJ0pGxjiX*ZR2Q^`##?WB^6)Tx+(*&r{e z3lRsloz(RpNB8riAQ*%DjKO`{yw4ciXUy-@=6%|{Pn-7{kNeF)+xHoR`;)O8dvOfp z_I@JB?foR&2DNwpYkZ3z@H42n`+o@Wp$FcCiejjR4xkSoGR_|cp)aBkjTj7t#4Iev zGOPqS{4gF{u>-rY4+p`xe|Q$e^x-!`JRr9Z=mR8na`Y#%T7?W*D>gZW3do88&7x1P6)> zL_iRpm(TO`oL75J4}9*u?|Xm0Khkq(tvPGWS$hPstewUwoQ@sV+F`97)?SW&YVERi z7WP*whuXP8P#4WmMkC8QS=OmhC(Aln)>SiwgE$nm>ZWom-mja3dFno4Ee*)3K9U&X zafkIoP^W$Z_EK*j^=_fwE!3Zg{_AHT$9gwdum5`Q*XzGte)Y3i#Fx1LdbR3nQLo;< z>NnEL-XLf&Q-j(KvAB~4xiyT$j16XNFk^!m8zv&d1~WF8vEgRiUc+4GVP6eyr9s_> zr+AhZSi;-9i#;`b6a?#1$RdwIiZSat@2|6?b!J|7Fm7?3+1B07Qr^Hj>ptLPK4S&n z@jbs_wsqU+U=L<&3>b!)8jC2$9E~RNdW@GSqK0OXGWd$R~V` z+iUy=eKhK$(H%DajD8w_L-vibZ!&k2KAJ`#<0kzy$+$_zP5F$&9W|9wfjpYz(Ik&1 zc{ItR$t^Uwg{I?h3r%jJ=~SjO1M@VwiKZ)X$4%F8JwLIp2Vpd=XHyWYKNN4Qm&5vL zoQ7=In`OOR*RRC=Y_OvZdf6be4U;(#yWJp<4R7%dcDvDR8~4XN8|`+Z-`n^APaxNg zPvI^$MKcsXziBub+>CqLG>`fCy-i!O!%aQ(20?R(*_zGPY_?{zHJhz@4d!Y#SF`;$ zZw`XZM$j|A6?WRXhPA9?J)78q8*1$fg0_Ch zvn>++x9Pi0hHWxvlR=vd+GNlsgSLmUySB$z$jiLOa^B+IAlRknUAf42mwb20cb9y3 z9mpZLm0ibk64SVVnOw@{T*YdBWh0x}$`0DtjlSFU-LCI;eYeZ2U0&^Kx67+No4a|C zMLfl`yucFl-LBtu{kDI=$E@N<*07e}gJAbT$awduOlJn?a31>Jt>4}H-F+=LAfw&$ zd4Pvmz%J~!Bbqo8*pC$S-J#zO{dUN#!=5{;nS$CKhjIkZ@e1$r5ufq}|K?lt-J$Oe zeRt@)LtY&_Xk#~BLC|>y=i|ORui<*^x${=;K<}M;@6>yz-aF;hDX-2Yyv%Ds&=rsG zsje~PkVhfKOhE5ldhgPEm)^UkaT;oOoyDK|1mCA!`t8zhmwvnISjT#{u@kv3?4nic#f2)gy#t>13nVcovx zx_$n;PsC@r+rGQ)x!az*?YVmJ z@f6SU00w|JLtS&7+?O`7t3Ju-lz9Iz4z(8Z#-p8q>9Ptzfa$NcGu^7t?zB#!}nXC z`{{E(ec$mtKhTKm`efH9yT0u~=ua?)!3-|uGOpliuH!~#F^7A&mnV3VXLz2Mf-sCF znbBmEOFrW$VG=bQz`>l%DV)xkoXto4o1geEzw!t5G}3~8!&cgZu-_n}P`lq?{NK6v zyPF4Dg#P;Jub=+?e_1wg*+`*m9<4NQ(@L#;j>wL~i^fFK{1NAacFN0(;=tR!qJT71+ zf8|Q9L7hRjF^9*I>7eh~j@~0uD4-I#L{u@Eskng%HxO|;ZXn`p18GJi_0xpU8Lkoo3`8 zDgVe_$Ujp4k@An~M}OR0)F|{4RY)-tu$L%z6m=B#6LmbN@fY+HrJpGML|w}b+>HF9 z^c6K9w-WUx?j!1R+-a20M3h^La%)k);?|<-X=Dej=rgJ#2&2n5h=b8fv|gf5M!wPV zjXoE>M9Vo^zR~iHmT$CMiI!2cTZxuU^aDJ^qu6J(T%v1HH(K48bj%)Ow=v@=!F(~^ zin$SU#h5GRUB1E$F+MjjEBJ-Am?g$6F`L;!3+^UH)-ikO4Z>Laj*TagAq*uA^<&kK zRXPRtKjt zoD4=Wh8)Hs>%rw5$mv{xc?X+!@N(1}+z^Bbqw(_z#Z1Bs31&z*0k@cN3Ntu|^DtY& zOrAhy3Gzw!6&WRL!fhmMV<)?C=ZSWc7(+aX$SqOdiTX~|ccQ)%^__S;w_?|cdQ5ze zm3TiAr*JfGFxd?zyTRmBnT|Y@ zFXl4TOI9ygy=3*0Z^3;g?|b`O%$Opl6#1kSq4yNMryRmmWR~KMl&iRz+t720o>TOi z;?`20Z{Y>g9oR0TWy_fnsb*#gkq`H&TEx41^ok2J(pg;CEEQ%QHa99HSA=_d0ILzmI zm>mrBc^Rg*zf~HhCE?c7>@`g`X|hSP*EHFrosI9%w7+l>m+)7vR+^xL?Tzi~J2Dg8T| z*vby})!iM08R}-3Bf}gS=EyKdhB-3KkztMub7YiLNi|bAh(kF7`^-3&>0E%i8TOU& zI;(JF8J$5mav*MJWFkWtN*Y=0&sYj5VmwuNf23JQUdTVm zN0Hf>$9a|)Si;M^#&SNu-pBmFMmDpR9kj8Vz97twBnJ1F?f$aeU$z}(kHLLs=TXQh zoQFHko{7G)Z{#lKG9P(lKZ72!^^pA*@A4hy&Ng?pxwGBI{^zoQ@A2R7?`HO|rx82a ze><(%QBE9gCMOG@hn%q#P{c&4n9PA3!r>f`+s$#eIk%w4oQF{}=P?$t7`L3W6!(|2 z41MS5JLf0dZmv9X&7V7o8V=xK4&zA9dFB3$O#EHjFxSp<+t^Jvy+JrOWB~Ry*1pEt*I0KtRz73pGq#*cs+qz; z9Llkr#57Lh3@+j_uHb5J;AU>)PVU9cjeVLISi;M^&YPHHtU1Q6WDOhX3BtS-N+?A? zdHTuIPu`!Hf!*Y(nfC~?$@6~RbJ$6qo#cIjT=L|SCzm|AeK^|ryi_vqw zp7UQpU-^FoVL=25n7N>ebMRJySqtP_a2-B71-CGVd3d|P+Xb>Hc#7wFiGQ(-H+Y-( zkV(NR+(?0%1;0^GBO7SOXQ!Yq2n(Z$LqCPGD3nE^EDGIAVGel|Qp^POTzDEc^Ej^} z^TOZpZea`C@qS@DopcAGzjGXpiy@vwhTty8rIAi4=W-Wj8|QAu{hOcoFTWzYapo9j zj&a^D>c>F5UF7W|Zx?yHNbf}@=(WgA6;*Q}hj2JYF_lx1ebISbz)UXXT5iCMMQ*(4 zPX2}+7ujvmlPu*GWM3rvBH0(ozUWK7W(EIYHD)L>Ls1?R_5^l`Y&F9-4!pw zEfqh@az4TB6o17xe23i@+ikJzi)(2>?Ydy z!ZP0ALsp}Q2`zNc6@;aO7|aMpGMa40;l0u-j^H>>u>pOQ>7&ff$`Y}&vUK!OW?yA`C_4=G%g*C3s9C0F z+11>~qsXJ|UF@Mu&9YUfRi;*%T4n1ncX@!E%VUvkxjD-xaxxcTj`C}m!-M=2J1$?0 z8s+Y?{2lDNT#fP{S%X^TYLu^M2YZ9C!cHsHs<6`vJFPHV#Zc_4!i*J}l%alwIV&b} zAX7Pm8JxqpT+S`r&Mfp-aS!)$KYFatV} z%7K`@=17j_1l&=LJF0O*OJ%U@wy^I4uaLM3RObP00@a_g@42Z*BYjmG;d4{pbJxdpITM Fe*g(ulW_n5 literal 109422 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 diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h index 8b8cb1b..8b1e8bb 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h @@ -235,7 +235,7 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); /** 将自身frame清零(一般在cell内部控件重用前调用) */ - (void)sd_clearViewFrameCache; -/** 将自己的需要自动布局的subviews的frame清零(一般在cell内部控件重用前调用) */ +/** 将自己的需要自动布局的subviews的frame(或者frame缓存)清零 */ - (void)sd_clearSubviewsAutoLayoutFrameCaches; /** 设置固定宽度保证宽度不在自动布局过程再做中调整 */ @@ -251,7 +251,6 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); /** cell的indexPath(目前为cell专用属性,后期会扩展到cell的其他子view) */ @property (nonatomic) NSIndexPath *sd_indexPath; - // -------------------库内部使用----------------------- - (NSMutableArray *)autoLayoutModelsArray; - (void)addAutoLayoutModel:(SDAutoLayoutModel *)model; diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m index 9da12d1..569a0fd 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m @@ -813,6 +813,9 @@ - (void)sd_clearViewFrameCache - (void)sd_clearSubviewsAutoLayoutFrameCaches { + if ([self isKindOfClass:[UITableViewCell class]] && self.sd_indexPath) { + [self.sd_tableView.cellAutoHeightManager clearHeightCacheOfIndexPaths:@[self.sd_indexPath]]; + } if (self.autoLayoutModelsArray.count == 0) return; [self.autoLayoutModelsArray enumerateObjectsUsingBlock:^(SDAutoLayoutModel *model, NSUInteger idx, BOOL *stop) { From 7a90daeb1da8eb913afdb1f193d84b2448854755 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Tue, 29 Mar 2016 16:24:14 +0800 Subject: [PATCH 118/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a39950a..0dd5b9c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # SDAutoLayout(一行代码搞定自动布局!) 一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. -支持pod: pod 'SDAutoLayout', '~> 1.31' +支持pod: pod 'SDAutoLayout', '~> 1.50' 如果发现pod search SDAutoLayout 搜索出来的不是最新版本,需要在终端执行cd转换文件路径命令退回到desktop,然后执行pod setup命令更新本地spec缓存(可能需要几分钟),然后再搜索就可以了 From 39fe922cfe60f67b10660be187450d6786f61926 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Fri, 1 Apr 2016 19:03:35 +0800 Subject: [PATCH 119/276] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E7=AE=97=E6=B3=95=EF=BC=9B=E4=BB=A3=E7=A0=81=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 109011 -> 108070 bytes SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m | 65 +++- .../SDAutoLayout/UIView+SDAutoLayout.m | 305 +++++++----------- 3 files changed, 185 insertions(+), 185 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 8897559cf535590540bb71c11db201ded799d455..fabbe9c7c52ef62e476717857f65998f996587e3 100644 GIT binary patch literal 108070 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 Fe*g(ulW_n5 diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m b/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m index 7cf7471..9f3dff7 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m @@ -24,19 +24,37 @@ #import "DemoVC1.h" @implementation DemoVC1 +{ + UILabel *_autoWidthLabel; +} - (void)viewDidLoad { [super viewDidLoad]; - /* - - 设置view1高度根据子view而自适应(在view1中加入两个子view(testLabel和testView),然后设置view1高度根据子view内容自适应) - */ + + // demo1.内容自适应view + [self setupAutoHeightView]; + // demo2.宽度自适应label + [self setupAutoWidthLabel]; + // demo3.高度自适应label + [self setupAutoHeightLabel]; + +} + + +// demo1.内容自适应view +- (void)setupAutoHeightView +{ + /* + 设置view1高度根据子view而自适应(在view1中加入两个子view(testLabel和testView) + ,然后设置view1高度根据子view内容自适应) + */ + UILabel *testLabel_subview1 = [UILabel new]; // 初始化子view1 testLabel_subview1.text = @"这个紫色的label会根据这些文字内容高度自适应;而这个灰色的父view会根据紫色的label和橙色的view具体情况实现高度自适应。\nGot it! OH YAEH!"; testLabel_subview1.backgroundColor = [UIColor purpleColor]; @@ -72,4 +90,43 @@ - (void)viewDidLoad } +// demo2.宽度自适应label +- (void)setupAutoWidthLabel +{ + UILabel *autoWidthlabel = [UILabel new]; + autoWidthlabel.backgroundColor = [[UIColor orangeColor] colorWithAlphaComponent:0.5]; + _autoWidthLabel = autoWidthlabel; + autoWidthlabel.font = [UIFont systemFontOfSize:12]; + autoWidthlabel.text = @"宽度自适应(距离父view右边距10)"; + + [self.view addSubview:autoWidthlabel]; + + autoWidthlabel.sd_layout + .rightSpaceToView(self.view, 10) + .heightIs(20) + .bottomSpaceToView(self.view, 100); + + [autoWidthlabel setSingleLineAutoResizeWithMaxWidth:180]; +} + + +// demo3.高度自适应label +- (void)setupAutoHeightLabel +{ + UILabel *autoHeightlabel = [UILabel new]; + autoHeightlabel.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:0.5]; + autoHeightlabel.font = [UIFont systemFontOfSize:12]; + autoHeightlabel.text = @"高度自适应(距离父view左边距10,底部和其右侧label相同,宽度为100)"; + + [self.view addSubview:autoHeightlabel]; + + autoHeightlabel.sd_layout + .bottomEqualToView(_autoWidthLabel) + .leftSpaceToView(self.view, 10) + .widthIs(100) + .autoHeightRatio(0); + +} + + @end diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m index 569a0fd..99bb0c0 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m @@ -917,66 +917,11 @@ - (void)sd_layoutSubviews } if (![self isKindOfClass:[UIScrollView class]] && self.sd_rightViewsArray.count && (self.ownLayoutModel.right || self.ownLayoutModel.equalRight)) { - SDAutoLayoutModel *model = self.ownLayoutModel; - UIView *view = self; - if (model.right) { - if (view.superview == model.right.refView) { - if (!view.fixedWidth) { // view.autoLeft && view.autoRight - view.width = model.right.refView.width - view.left - [model.right.value floatValue]; - } - view.right = model.right.refView.width - [model.right.value floatValue]; - } else { - if (!view.fixedWidth) { // view.autoLeft && view.autoRight - view.width = model.right.refView.left - view.left - [model.right.value floatValue]; - } - view.right = model.right.refView.left - [model.right.value floatValue]; - } - } else if (model.equalRight) { - if (!view.fixedWidth) { - if (model.equalRight.refView == view.superview) { - view.width = model.equalRight.refView.width - view.left; - } else { - view.width = model.equalRight.refView.right - view.left; - } - } - - view.right = model.equalRight.refView.right; - if (view.superview == model.equalRight.refView) { - view.right = model.equalRight.refView.width; - } - - } + [self layoutRightWithView:self model:self.ownLayoutModel]; } if (![self isKindOfClass:[UIScrollView class]] && self.sd_bottomViewsArray.count && (self.ownLayoutModel.bottom || self.ownLayoutModel.equalBottom)) { - SDAutoLayoutModel *model = self.ownLayoutModel; - UIView *view = self; - if (model.bottom) { - if (view.superview == model.bottom.refView) { - if (!view.fixedHeight) { - view.height = view.superview.height - view.top - [model.bottom.value floatValue]; - } - view.bottom = model.bottom.refView.height - [model.bottom.value floatValue]; - } else { - if (!view.fixedHeight) { - view.height = model.bottom.refView.top - view.top - [model.bottom.value floatValue]; - } - view.bottom = model.bottom.refView.top - [model.bottom.value floatValue]; - } - - } else if (model.equalBottom) { - if (view.superview == model.equalBottom.refView) { - if (!view.fixedHeight) { - view.height = view.superview.height - view.top; - } - view.bottom = model.equalBottom.refView.height; - } else { - if (!view.fixedHeight) { - view.height = model.equalBottom.refView.bottom - view.top; - } - view.bottom = model.equalBottom.refView.bottom; - } - } + [self layoutBottomWithView:self model:self.ownLayoutModel]; } if (self.didFinishAutoLayoutBlock) { @@ -991,28 +936,68 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model if (!view) return; - if (view.sd_maxWidth && (model.rightSpaceToView || model.rightEqualToView)) { // 靠右布局前提设置 - if ([view isKindOfClass:[UILabel class]]) { - UILabel *label = (UILabel *)view; - CGFloat width = [view.sd_maxWidth floatValue] > 0 ? [view.sd_maxWidth floatValue] : MAXFLOAT; - label.numberOfLines = 1; - if (label.text.length) { - if (!label.isAttributedContent) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.width = rect.size.width; - } else{ - [label sizeToFit]; - if (label.width > width) { - label.width = width; - } - } - label.fixedWidth = @(label.width); - } else { - label.width = 0; - } - } + if (view.sd_maxWidth) { + [self layoutAutoWidthWithView:view]; + } + + [self layoutWidthWithView:view model:model]; + + [self layoutHeightWithView:view model:model]; + + [self layoutLeftWithView:view model:model]; + + [self layoutRightWithView:view model:model]; + + if (model.maxWidth && [model.maxWidth floatValue] < view.width) { + view.width = [model.maxWidth floatValue]; + } + + if (model.minWidth && [model.minWidth floatValue] > view.width) { + view.width = [model.minWidth floatValue]; + } + + + if (view.autoHeightRatioValue) { + [self layoutAutoHeightWithView:view model:model]; + } + + + [self layoutTopWithView:view model:model]; + + [self layoutBottomWithView:view model:model]; + + + if (model.maxHeight && [model.maxHeight floatValue] < view.height) { + view.height = [model.maxHeight floatValue]; + } + + if (model.minHeight && [model.minHeight floatValue] > view.height) { + view.height = [model.minHeight floatValue]; + } + + if (model.widthEqualHeight) { + view.width = view.height; + } + + if (model.heightEqualWidth) { + view.height = view.width; + } + + if (view.didFinishAutoLayoutBlock) { + view.didFinishAutoLayoutBlock(view.frame); + } + + if (view.sd_bottomViewsArray.count || view.sd_rightViewsArray.count) { + [view layoutSubviews]; } + + [self setupCornerRadiusWithView:view model:model]; + +} + +- (void)layoutWidthWithView:(UIView *)view model:(SDAutoLayoutModel *)model +{ if (model.width) { view.width = [model.width.value floatValue]; view.fixedWidth = @(view.width); @@ -1020,7 +1005,10 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model view.width = model.ratio_width.refView.width * [model.ratio_width.value floatValue]; view.fixedWidth = @(view.width); } - +} + +- (void)layoutHeightWithView:(UIView *)view model:(SDAutoLayoutModel *)model +{ if (model.height) { view.height = [model.height.value floatValue]; view.fixedHeight = @(view.height); @@ -1028,7 +1016,10 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model view.height = [model.ratio_height.value floatValue] * model.ratio_height.refView.height; view.fixedHeight = @(view.height); } - +} + +- (void)layoutLeftWithView:(UIView *)view model:(SDAutoLayoutModel *)model +{ if (model.left) { if (view.superview == model.left.refView) { if (!view.fixedWidth) { // view.autoLeft && view.autoRight @@ -1060,7 +1051,10 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model } else if (model.centerX) { view.centerX = [model.centerX floatValue]; } - +} + +- (void)layoutRightWithView:(UIView *)view model:(SDAutoLayoutModel *)model +{ if (model.right) { if (view.superview == model.right.refView) { if (!view.fixedWidth) { // view.autoLeft && view.autoRight @@ -1088,36 +1082,10 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model } } - - if (view.autoHeightRatioValue && view.width > 0 && (model.bottomEqualToView || model.bottomSpaceToView)) { // 底部布局前提设置 - if ([view.autoHeightRatioValue floatValue] > 0) { - view.height = view.width * [view.autoHeightRatioValue floatValue]; - } else { - if ([view isKindOfClass:[UILabel class]]) { - UILabel *label = (UILabel *)view; - if (model.top || model.equalTop) { - model.bottom = nil; - model.equalBottom = nil; - } - label.numberOfLines = 0; - if (label.text.length) { - if (!label.isAttributedContent) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.height = rect.size.height; - } else { - [label sizeToFit]; - } - label.fixedHeight = @(label.height); - } else { - label.height = 0; - } - } else { - view.height = 0; - } - } - } - - +} + +- (void)layoutTopWithView:(UIView *)view model:(SDAutoLayoutModel *)model +{ if (model.top) { if (view.superview == model.top.refView) { if (!view.fixedHeight) { // view.autoTop && view.autoBottom && view.bottom @@ -1151,7 +1119,10 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model } else if (model.centerY) { view.centerY = [model.centerY floatValue]; } - +} + +- (void)layoutBottomWithView:(UIView *)view model:(SDAutoLayoutModel *)model +{ if (model.bottom) { if (view.superview == model.bottom.refView) { if (!view.fixedHeight) { @@ -1178,87 +1149,59 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model view.bottom = model.equalBottom.refView.bottom; } } - - if (view.sd_maxWidth) { +} + +- (void)layoutAutoWidthWithView:(UIView *)view +{ + if ([view isKindOfClass:[UILabel class]]) { + UILabel *label = (UILabel *)view; + CGFloat width = [view.sd_maxWidth floatValue] > 0 ? [view.sd_maxWidth floatValue] : MAXFLOAT; + label.numberOfLines = 1; + if (label.text.length) { + if (!label.isAttributedContent) { + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.width = rect.size.width; + } else{ + [label sizeToFit]; + if (label.width > width) { + label.width = width; + } + } + label.fixedWidth = @(label.width); + } else { + label.width = 0; + } + } +} + +- (void)layoutAutoHeightWithView:(UIView *)view model:(SDAutoLayoutModel *)model +{ + if ([view.autoHeightRatioValue floatValue] > 0) { + view.height = view.width * [view.autoHeightRatioValue floatValue]; + view.fixedHeight = @(view.height); + } else { if ([view isKindOfClass:[UILabel class]]) { UILabel *label = (UILabel *)view; - CGFloat width = [view.sd_maxWidth floatValue] > 0 ? [view.sd_maxWidth floatValue] : MAXFLOAT; - label.numberOfLines = 1; + if (model.top || model.equalTop) { + model.bottom = nil; + model.equalBottom = nil; + } + label.numberOfLines = 0; if (label.text.length) { if (!label.isAttributedContent) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.width = rect.size.width; - label.fixedWidth = @(label.width); - } else{ + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.height = rect.size.height; + } else { [label sizeToFit]; - if (label.width > width) { - label.width = width; - } } + label.fixedHeight = @(label.height); } else { - label.width = 0; + label.height = 0; } - } - } - - if (model.maxWidth && [model.maxWidth floatValue] < view.width) { - view.width = [model.maxWidth floatValue]; - } - - if (model.minWidth && [model.minWidth floatValue] > view.width) { - view.width = [model.minWidth floatValue]; - } - - if (view.autoHeightRatioValue && view.width > 0) { - if ([view.autoHeightRatioValue floatValue] > 0) { - view.height = view.width * [view.autoHeightRatioValue floatValue]; } else { - if ([view isKindOfClass:[UILabel class]]) { - UILabel *label = (UILabel *)view; - label.numberOfLines = 0; - if (label.text.length) { - if (!label.isAttributedContent) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.height = rect.size.height; - } else { - [label sizeToFit]; - } - } else { - label.height = 0; - } - } else { - view.height = 0; - } + view.height = 0; } } - - if (model.maxHeight && [model.maxHeight floatValue] < view.height) { - view.height = [model.maxHeight floatValue]; - } - - if (model.minHeight && [model.minHeight floatValue] > view.height) { - view.height = [model.minHeight floatValue]; - } - - if (model.widthEqualHeight) { - view.width = view.height; - } - - if (model.heightEqualWidth) { - view.height = view.width; - } - - if (view.didFinishAutoLayoutBlock) { - view.didFinishAutoLayoutBlock(view.frame); - } - - if (view.sd_bottomViewsArray.count || view.sd_rightViewsArray.count) { - [view layoutSubviews]; - } - - - [self setupCornerRadiusWithView:view model:model]; - } - (void)setupCornerRadiusWithView:(UIView *)view model:(SDAutoLayoutModel *)model From 582bea305605659d8e2ff4e05a32b1f261ca16ac Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Fri, 1 Apr 2016 21:07:58 +0800 Subject: [PATCH 120/276] =?UTF-8?q?=E9=87=8D=E6=9E=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 108070 -> 108915 bytes SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m | 2 +- .../Others/DemoTableViewControler.m | 6 +- .../SDAutoLayout/UIView+SDAutoLayout.m | 315 +++++++++--------- 4 files changed, 168 insertions(+), 155 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index fabbe9c7c52ef62e476717857f65998f996587e3..9491b84fdf7fadcf56392c6a3dcba94dde26cdb9 100644 GIT binary patch literal 108915 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 a@b^-G{u9;Ve}DG-`hS1^|Gz^=4g4>P+4Wuk literal 108070 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 view.width) { - view.width = [model.minWidth floatValue]; - } - - - if (view.autoHeightRatioValue) { - [self layoutAutoHeightWithView:view model:model]; - } - - - [self layoutTopWithView:view model:model]; - - [self layoutBottomWithView:view model:model]; - - - if (model.maxHeight && [model.maxHeight floatValue] < view.height) { - view.height = [model.maxHeight floatValue]; - } - - if (model.minHeight && [model.minHeight floatValue] > view.height) { - view.height = [model.minHeight floatValue]; - } - - if (model.widthEqualHeight) { - view.width = view.height; - } - - if (model.heightEqualWidth) { - view.height = view.width; - } - - if (view.didFinishAutoLayoutBlock) { - view.didFinishAutoLayoutBlock(view.frame); - } - - if (view.sd_bottomViewsArray.count || view.sd_rightViewsArray.count) { - [view layoutSubviews]; + if (view.sd_maxWidth && (model.rightSpaceToView || model.rightEqualToView)) { // 靠右布局前提设置 + if ([view isKindOfClass:[UILabel class]]) { + UILabel *label = (UILabel *)view; + CGFloat width = [view.sd_maxWidth floatValue] > 0 ? [view.sd_maxWidth floatValue] : MAXFLOAT; + label.numberOfLines = 1; + if (label.text.length) { + if (!label.isAttributedContent) { + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.width = rect.size.width; + } else{ + [label sizeToFit]; + if (label.width > width) { + label.width = width; + } + } + label.fixedWidth = @(label.width); + } else { + label.width = 0; + } + } } - - [self setupCornerRadiusWithView:view model:model]; - -} - -- (void)layoutWidthWithView:(UIView *)view model:(SDAutoLayoutModel *)model -{ if (model.width) { view.width = [model.width.value floatValue]; view.fixedWidth = @(view.width); @@ -1005,10 +965,7 @@ - (void)layoutWidthWithView:(UIView *)view model:(SDAutoLayoutModel *)model view.width = model.ratio_width.refView.width * [model.ratio_width.value floatValue]; view.fixedWidth = @(view.width); } -} - -- (void)layoutHeightWithView:(UIView *)view model:(SDAutoLayoutModel *)model -{ + if (model.height) { view.height = [model.height.value floatValue]; view.fixedHeight = @(view.height); @@ -1016,10 +973,7 @@ - (void)layoutHeightWithView:(UIView *)view model:(SDAutoLayoutModel *)model view.height = [model.ratio_height.value floatValue] * model.ratio_height.refView.height; view.fixedHeight = @(view.height); } -} - -- (void)layoutLeftWithView:(UIView *)view model:(SDAutoLayoutModel *)model -{ + if (model.left) { if (view.superview == model.left.refView) { if (!view.fixedWidth) { // view.autoLeft && view.autoRight @@ -1051,41 +1005,38 @@ - (void)layoutLeftWithView:(UIView *)view model:(SDAutoLayoutModel *)model } else if (model.centerX) { view.centerX = [model.centerX floatValue]; } -} - -- (void)layoutRightWithView:(UIView *)view model:(SDAutoLayoutModel *)model -{ - if (model.right) { - if (view.superview == model.right.refView) { - if (!view.fixedWidth) { // view.autoLeft && view.autoRight - view.width = model.right.refView.width - view.left - [model.right.value floatValue]; - } - view.right = model.right.refView.width - [model.right.value floatValue]; + + [self layoutRightWithView:view model:model]; + + if (view.autoHeightRatioValue && view.width > 0 && (model.bottomEqualToView || model.bottomSpaceToView)) { // 底部布局前提设置 + if ([view.autoHeightRatioValue floatValue] > 0) { + view.height = view.width * [view.autoHeightRatioValue floatValue]; } else { - if (!view.fixedWidth) { // view.autoLeft && view.autoRight - view.width = model.right.refView.left - view.left - [model.right.value floatValue]; - } - view.right = model.right.refView.left - [model.right.value floatValue]; - } - } else if (model.equalRight) { - if (!view.fixedWidth) { - if (model.equalRight.refView == view.superview) { - view.width = model.equalRight.refView.width - view.left; + if ([view isKindOfClass:[UILabel class]]) { + UILabel *label = (UILabel *)view; + if (model.top || model.equalTop) { + model.bottom = nil; + model.equalBottom = nil; + } + label.numberOfLines = 0; + if (label.text.length) { + if (!label.isAttributedContent) { + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.height = rect.size.height; + } else { + [label sizeToFit]; + } + label.fixedHeight = @(label.height); + } else { + label.height = 0; + } } else { - view.width = model.equalRight.refView.right - view.left; + view.height = 0; } } - - view.right = model.equalRight.refView.right; - if (view.superview == model.equalRight.refView) { - view.right = model.equalRight.refView.width; - } - } -} - -- (void)layoutTopWithView:(UIView *)view model:(SDAutoLayoutModel *)model -{ + + if (model.top) { if (view.superview == model.top.refView) { if (!view.fixedHeight) { // view.autoTop && view.autoBottom && view.bottom @@ -1119,6 +1070,120 @@ - (void)layoutTopWithView:(UIView *)view model:(SDAutoLayoutModel *)model } else if (model.centerY) { view.centerY = [model.centerY floatValue]; } + + [self layoutBottomWithView:view model:model]; + + if (view.sd_maxWidth) { + if ([view isKindOfClass:[UILabel class]]) { + UILabel *label = (UILabel *)view; + CGFloat width = [view.sd_maxWidth floatValue] > 0 ? [view.sd_maxWidth floatValue] : MAXFLOAT; + label.numberOfLines = 1; + if (label.text.length) { + if (!label.isAttributedContent) { + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.width = rect.size.width; + label.fixedWidth = @(label.width); + } else{ + [label sizeToFit]; + if (label.width > width) { + label.width = width; + } + } + } else { + label.width = 0; + } + } + } + + if (model.maxWidth && [model.maxWidth floatValue] < view.width) { + view.width = [model.maxWidth floatValue]; + } + + if (model.minWidth && [model.minWidth floatValue] > view.width) { + view.width = [model.minWidth floatValue]; + } + + if (view.autoHeightRatioValue && view.width > 0) { + if ([view.autoHeightRatioValue floatValue] > 0) { + view.height = view.width * [view.autoHeightRatioValue floatValue]; + } else { + if ([view isKindOfClass:[UILabel class]]) { + UILabel *label = (UILabel *)view; + label.numberOfLines = 0; + if (label.text.length) { + if (!label.isAttributedContent) { + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.height = rect.size.height; + } else { + [label sizeToFit]; + } + } else { + label.height = 0; + } + } else { + view.height = 0; + } + } + } + + if (model.maxHeight && [model.maxHeight floatValue] < view.height) { + view.height = [model.maxHeight floatValue]; + } + + if (model.minHeight && [model.minHeight floatValue] > view.height) { + view.height = [model.minHeight floatValue]; + } + + if (model.widthEqualHeight) { + view.width = view.height; + } + + if (model.heightEqualWidth) { + view.height = view.width; + } + + if (view.didFinishAutoLayoutBlock) { + view.didFinishAutoLayoutBlock(view.frame); + } + + if (view.sd_bottomViewsArray.count || view.sd_rightViewsArray.count) { + [view layoutSubviews]; + } + + + [self setupCornerRadiusWithView:view model:model]; + +} + +- (void)layoutRightWithView:(UIView *)view model:(SDAutoLayoutModel *)model +{ + if (model.right) { + if (view.superview == model.right.refView) { + if (!view.fixedWidth) { // view.autoLeft && view.autoRight + view.width = model.right.refView.width - view.left - [model.right.value floatValue]; + } + view.right = model.right.refView.width - [model.right.value floatValue]; + } else { + if (!view.fixedWidth) { // view.autoLeft && view.autoRight + view.width = model.right.refView.left - view.left - [model.right.value floatValue]; + } + view.right = model.right.refView.left - [model.right.value floatValue]; + } + } else if (model.equalRight) { + if (!view.fixedWidth) { + if (model.equalRight.refView == view.superview) { + view.width = model.equalRight.refView.width - view.left; + } else { + view.width = model.equalRight.refView.right - view.left; + } + } + + view.right = model.equalRight.refView.right; + if (view.superview == model.equalRight.refView) { + view.right = model.equalRight.refView.width; + } + + } } - (void)layoutBottomWithView:(UIView *)view model:(SDAutoLayoutModel *)model @@ -1151,58 +1216,6 @@ - (void)layoutBottomWithView:(UIView *)view model:(SDAutoLayoutModel *)model } } -- (void)layoutAutoWidthWithView:(UIView *)view -{ - if ([view isKindOfClass:[UILabel class]]) { - UILabel *label = (UILabel *)view; - CGFloat width = [view.sd_maxWidth floatValue] > 0 ? [view.sd_maxWidth floatValue] : MAXFLOAT; - label.numberOfLines = 1; - if (label.text.length) { - if (!label.isAttributedContent) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.width = rect.size.width; - } else{ - [label sizeToFit]; - if (label.width > width) { - label.width = width; - } - } - label.fixedWidth = @(label.width); - } else { - label.width = 0; - } - } -} - -- (void)layoutAutoHeightWithView:(UIView *)view model:(SDAutoLayoutModel *)model -{ - if ([view.autoHeightRatioValue floatValue] > 0) { - view.height = view.width * [view.autoHeightRatioValue floatValue]; - view.fixedHeight = @(view.height); - } else { - if ([view isKindOfClass:[UILabel class]]) { - UILabel *label = (UILabel *)view; - if (model.top || model.equalTop) { - model.bottom = nil; - model.equalBottom = nil; - } - label.numberOfLines = 0; - if (label.text.length) { - if (!label.isAttributedContent) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.height = rect.size.height; - } else { - [label sizeToFit]; - } - label.fixedHeight = @(label.height); - } else { - label.height = 0; - } - } else { - view.height = 0; - } - } -} - (void)setupCornerRadiusWithView:(UIView *)view model:(SDAutoLayoutModel *)model { From 1c02dd21b326ed5d78fbded6e1fafcf5011b7654 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Fri, 1 Apr 2016 21:35:39 +0800 Subject: [PATCH 121/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20label=20=E7=9A=84?= =?UTF-8?q?=20setMaxNumberOfLinesToShow=20=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 108915 -> 109788 bytes SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m | 24 +++++++++--------- .../SDAutoLayout/UIView+SDAutoLayout.h | 3 +++ .../SDAutoLayout/UIView+SDAutoLayout.m | 10 ++++++++ 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 9491b84fdf7fadcf56392c6a3dcba94dde26cdb9..b1f5f3e4788480ca6faf424f41d66b167444ba8a 100644 GIT binary patch literal 109788 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 a&B6cvr%R{*```Yt|M$QD|KFi8GyVtg^CF4> literal 108915 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 a@b^-G{u9;Ve}DG-`hS1^|Gz^=4g4>P+4Wuk diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m b/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m index 04f3595..38e6f98 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC1/DemoVC1.m @@ -55,28 +55,28 @@ - (void)setupAutoHeightView ,然后设置view1高度根据子view内容自适应) */ - UILabel *testLabel_subview1 = [UILabel new]; // 初始化子view1 - testLabel_subview1.text = @"这个紫色的label会根据这些文字内容高度自适应;而这个灰色的父view会根据紫色的label和橙色的view具体情况实现高度自适应。\nGot it! OH YAEH!"; - testLabel_subview1.backgroundColor = [UIColor purpleColor]; + UILabel *subview1 = [UILabel new]; // 初始化子view1 + subview1.text = @"这个紫色的label会根据这些文字内容高度自适应;而这个灰色的父view会根据紫色的label和橙色的view具体情况实现高度自适应。\nGot it! OH YAEH!"; + subview1.backgroundColor = [UIColor purpleColor]; - UIView *testView_subview2 = [UIView new]; // 初始化子view2 - testView_subview2.backgroundColor = [UIColor orangeColor]; + UIView *subview2 = [UIView new]; // 初始化子view2 + subview2.backgroundColor = [UIColor orangeColor]; // 将子view添加进父view - [self.view1 sd_addSubviews:@[testLabel_subview1, testView_subview2]]; + [self.view1 sd_addSubviews:@[subview1, subview2]]; - testLabel_subview1.sd_layout + subview1.sd_layout .leftSpaceToView(self.view1, 10) .rightSpaceToView(self.view1, 10) .topSpaceToView(self.view1, 10) .autoHeightRatio(0); // 设置文本内容自适应,如果这里的参数为大于0的数值则会以此数值作为view的高宽比设置view的高度 - testView_subview2.sd_layout - .topSpaceToView(testLabel_subview1, 10) - .widthRatioToView(testLabel_subview1, 1) + subview2.sd_layout + .topSpaceToView(subview1, 10) + .widthRatioToView(subview1, 1) .heightIs(30) - .leftEqualToView(testLabel_subview1); + .leftEqualToView(subview1); // view1使用高度根据子view内容自适应,所以不需要设置高度,而是设置“[self.view1 setupAutoHeightWithBottomView:testView bottomMargin:10];”实现高度根据内容自适应 @@ -86,7 +86,7 @@ - (void)setupAutoHeightView .rightSpaceToView(self.view, 10); // 设置view1高度根据子其内容自适应 - [self.view1 setupAutoHeightWithBottomView:testView_subview2 bottomMargin:10]; + [self.view1 setupAutoHeightWithBottomView:subview2 bottomMargin:10]; } diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h index 8b1e8bb..a60d0c2 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.h @@ -281,6 +281,9 @@ typedef void (^SpaceToSuperView)(UIEdgeInsets insets); /** 设置单行文本label宽度自适应 */ - (void)setSingleLineAutoResizeWithMaxWidth:(CGFloat)maxWidth; +/** 设置label最多可以显示多少行,如果传0则显示所有行文字 */ +- (void)setMaxNumberOfLinesToShow:(NSInteger)lineCount; + @end diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m index fed311f..f46ace3 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m @@ -611,6 +611,16 @@ - (void)setSingleLineAutoResizeWithMaxWidth:(CGFloat)maxWidth self.sd_maxWidth = @(maxWidth); } +- (void)setMaxNumberOfLinesToShow:(NSInteger)lineCount +{ + NSAssert(self.ownLayoutModel, @"请在布局完成之后再做此步设置!"); + if (lineCount > 0) { + self.sd_layout.maxHeightIs(self.font.lineHeight * lineCount); + } else { + self.sd_layout.maxHeightIs(MAXFLOAT); + } +} + @end From 9e28de86158ec68a30feeee83515e74f8a22b102 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sat, 2 Apr 2016 23:45:23 +0800 Subject: [PATCH 122/276] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0dd5b9c..c860e67 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # SDAutoLayout(一行代码搞定自动布局!) + +### SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3effb8 + 一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. 支持pod: pod 'SDAutoLayout', '~> 1.50' @@ -14,7 +17,7 @@ ☆☆ SDAutoLayout 原理简介视频教程:http://www.iqiyi.com/w_19rt0tec4p.html ☆☆ ## 部分SDAutoLayout的DEMO -### SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3effb8 + ### 完整微信Demo https://github.com/gsdios/GSD_WeiXin ![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3pziawg205u0a0qv5.gif)![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3lweg3g207s0dcu0x.gif)![](http://ww2.sinaimg.cn/mw690/9b8146edgw1f23irukb0qg207i0dwu0x.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) From 6b700da70400a8cd2a7b7e0d2ac6e416a4762650 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sat, 2 Apr 2016 23:50:01 +0800 Subject: [PATCH 123/276] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c860e67..185fe91 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,16 @@ # SDAutoLayout(一行代码搞定自动布局!) -### SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3effb8 +##众多公司和个人开发者已经采用 +SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3effb8 +##Pod支持 一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. 支持pod: pod 'SDAutoLayout', '~> 1.50' 如果发现pod search SDAutoLayout 搜索出来的不是最新版本,需要在终端执行cd转换文件路径命令退回到desktop,然后执行pod setup命令更新本地spec缓存(可能需要几分钟),然后再搜索就可以了 -### QQ交流群:519489682(已满)497140713 +## QQ交流群:519489682(已满)497140713 ☆☆ SDAutoLayout 基础版视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ From 19c5234f7bd53bf0b747d6bf2e8e77d16c9ce8ed Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sat, 2 Apr 2016 23:51:57 +0800 Subject: [PATCH 124/276] Update README.md --- README.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 185fe91..d7a2894 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,29 @@ # SDAutoLayout(一行代码搞定自动布局!) -##众多公司和个人开发者已经采用 +##众多公司和个人开发者已经使用本库布局: SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3effb8 -##Pod支持 +##Pod支持: 一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. 支持pod: pod 'SDAutoLayout', '~> 1.50' 如果发现pod search SDAutoLayout 搜索出来的不是最新版本,需要在终端执行cd转换文件路径命令退回到desktop,然后执行pod setup命令更新本地spec缓存(可能需要几分钟),然后再搜索就可以了 -## QQ交流群:519489682(已满)497140713 +## QQ交流群: +519489682(已满)497140713 + +## 视频教程: ☆☆ SDAutoLayout 基础版视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ ☆☆ SDAutoLayout 进阶版视频教程:http://www.letv.com/ptv/vplay/24381390.html ☆☆ ☆☆ SDAutoLayout 原理简介视频教程:http://www.iqiyi.com/w_19rt0tec4p.html ☆☆ -## 部分SDAutoLayout的DEMO +## 部分SDAutoLayout的DEMO: -### 完整微信Demo https://github.com/gsdios/GSD_WeiXin +完整微信Demo https://github.com/gsdios/GSD_WeiXin ![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3pziawg205u0a0qv5.gif)![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3lweg3g207s0dcu0x.gif)![](http://ww2.sinaimg.cn/mw690/9b8146edgw1f23irukb0qg207i0dwu0x.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) From bcde3e14dd4b86f5bdc2abc21f47aefa900603cd Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sat, 2 Apr 2016 23:53:05 +0800 Subject: [PATCH 125/276] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d7a2894..176e44f 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,10 @@ ##众多公司和个人开发者已经使用本库布局: SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3effb8 -##Pod支持: 一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. +##Pod支持: + 支持pod: pod 'SDAutoLayout', '~> 1.50' 如果发现pod search SDAutoLayout 搜索出来的不是最新版本,需要在终端执行cd转换文件路径命令退回到desktop,然后执行pod setup命令更新本地spec缓存(可能需要几分钟),然后再搜索就可以了 From f8cac3a717c5dca09300f4a307a63c7cad6f403d Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 3 Apr 2016 00:02:00 +0800 Subject: [PATCH 126/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 176e44f..2dfbc7b 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef ## QQ交流群: -519489682(已满)497140713 +497140713 519489682(已满) ## 视频教程: ☆☆ SDAutoLayout 基础版视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ From 319e795ae025d6b17078627d8fcc66c01403db91 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 3 Apr 2016 00:03:19 +0800 Subject: [PATCH 127/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2dfbc7b..408d70f 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef ## QQ交流群: -497140713 519489682(已满) +497140713(1群) 519489682(已满) ## 视频教程: ☆☆ SDAutoLayout 基础版视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ From 765e7052b2627eb9c1180006dc7fa560e16689fd Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 3 Apr 2016 00:08:23 +0800 Subject: [PATCH 128/276] Update README.md --- README.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 408d70f..835b5c9 100644 --- a/README.md +++ b/README.md @@ -54,10 +54,11 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef -# ☆新增:cell高度自适应 + label文字自适应☆ +# 用法简介 +## tableview和cell高度自适应: -## >> 普通(简化)版【推荐使用】:tableview 高度自适应设置只需要2步 +###>> 普通(简化)版【推荐使用】:tableview 高度自适应设置只需要2步 1. >> 设置cell高度自适应: // cell布局设置好之后调用此方法就可以实现高度自适应(注意:如果用高度自适应则不要再以cell的底边为参照去布局其子view) @@ -73,7 +74,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef } -## >> 升级版(适应于cell条数少于100的tableview):tableview 高度自适应设置只需要2步 +### >> 升级版(适应于cell条数少于100的tableview):tableview 高度自适应设置只需要2步 1. >> 设置cell高度自适应: // cell布局设置好之后调用此方法就可以实现高度自适应(注意:如果用高度自适应则不要再以cell的底边为参照去布局其子view) @@ -88,11 +89,9 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef } -# *********** 普通view的自动布局 *********** +## 普通view的自动布局: -## 摒弃复杂累赘的约束,利用运行时Runtime在合适的时机布局视图。 - -## 0.用法示例 +### 0.用法示例 /* 用法一 */ _view.sd_layout .leftSpaceToView(self.view, 10) @@ -130,7 +129,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef .rightSpaceToView(self.view, 10); ******************************************************************************* -## 1.用法简析 +### 1.自动布局用法简析 ![](http://ww1.sinaimg.cn/mw690/9b8146edgw1ex4or5ixkjj20k60gw3zg.jpg) From e898b83cec92ffbd16ac222ced18c071947d9aec Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 3 Apr 2016 00:10:21 +0800 Subject: [PATCH 129/276] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 835b5c9..0aaaea4 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef ## tableview和cell高度自适应: -###>> 普通(简化)版【推荐使用】:tableview 高度自适应设置只需要2步 +####>> 普通(简化)版【推荐使用】:tableview 高度自适应设置只需要2步 1. >> 设置cell高度自适应: // cell布局设置好之后调用此方法就可以实现高度自适应(注意:如果用高度自适应则不要再以cell的底边为参照去布局其子view) @@ -74,7 +74,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef } -### >> 升级版(适应于cell条数少于100的tableview):tableview 高度自适应设置只需要2步 +#### >> 升级版(适应于cell条数少于100的tableview):tableview 高度自适应设置只需要2步 1. >> 设置cell高度自适应: // cell布局设置好之后调用此方法就可以实现高度自适应(注意:如果用高度自适应则不要再以cell的底边为参照去布局其子view) @@ -91,7 +91,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef ## 普通view的自动布局: -### 0.用法示例 +#### 0.用法示例 /* 用法一 */ _view.sd_layout .leftSpaceToView(self.view, 10) @@ -129,7 +129,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef .rightSpaceToView(self.view, 10); ******************************************************************************* -### 1.自动布局用法简析 +#### 1.自动布局用法简析 ![](http://ww1.sinaimg.cn/mw690/9b8146edgw1ex4or5ixkjj20k60gw3zg.jpg) From 0452ca73b0904fcbd502630822565f6c765a2b9c Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 3 Apr 2016 00:15:29 +0800 Subject: [PATCH 130/276] Update README.md --- README.md | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 0aaaea4..83a00d0 100644 --- a/README.md +++ b/README.md @@ -5,29 +5,15 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef 一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. -##Pod支持: - -支持pod: pod 'SDAutoLayout', '~> 1.50' - -如果发现pod search SDAutoLayout 搜索出来的不是最新版本,需要在终端执行cd转换文件路径命令退回到desktop,然后执行pod setup命令更新本地spec缓存(可能需要几分钟),然后再搜索就可以了 - -## QQ交流群: +## 技术支持 & QQ交流群: 497140713(1群) 519489682(已满) -## 视频教程: -☆☆ SDAutoLayout 基础版视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ - -☆☆ SDAutoLayout 进阶版视频教程:http://www.letv.com/ptv/vplay/24381390.html ☆☆ - -☆☆ SDAutoLayout 原理简介视频教程:http://www.iqiyi.com/w_19rt0tec4p.html ☆☆ - -## 部分SDAutoLayout的DEMO: - -完整微信Demo https://github.com/gsdios/GSD_WeiXin +##Pod支持: -![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3pziawg205u0a0qv5.gif)![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3lweg3g207s0dcu0x.gif)![](http://ww2.sinaimg.cn/mw690/9b8146edgw1f23irukb0qg207i0dwu0x.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) +支持pod: pod 'SDAutoLayout', '~> 1.50' +如果发现pod search SDAutoLayout 搜索出来的不是最新版本,需要在终端执行cd转换文件路径命令退回到desktop,然后执行pod setup命令更新本地spec缓存(可能需要几分钟),然后再搜索就可以了 ## 更新记录: @@ -50,7 +36,18 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef 2015.12.08 -- 重大升级:1.支持scrollview内容自适应;2.任意添加或者修改约束不冲突;3.性能提升40%以上;4.添加最大、最小宽高约束 +## 视频教程: +☆☆ SDAutoLayout 基础版视频教程:http://www.letv.com/ptv/vplay/24038772.html ☆☆ + +☆☆ SDAutoLayout 进阶版视频教程:http://www.letv.com/ptv/vplay/24381390.html ☆☆ +☆☆ SDAutoLayout 原理简介视频教程:http://www.iqiyi.com/w_19rt0tec4p.html ☆☆ + +## 部分SDAutoLayout的DEMO: + +完整微信Demo https://github.com/gsdios/GSD_WeiXin + +![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3pziawg205u0a0qv5.gif)![](http://ww1.sinaimg.cn/bmiddle/9b8146edgw1f06aoe2umhg206e0b4u0x.gif)![](http://ww4.sinaimg.cn/bmiddle/9b8146edgw1ezal3smihcg206y0ciqv5.gif)![](http://ww3.sinaimg.cn/mw690/9b8146edgw1f1nm3lweg3g207s0dcu0x.gif)![](http://ww2.sinaimg.cn/mw690/9b8146edgw1f23irukb0qg207i0dwu0x.gif)![](http://ww2.sinaimg.cn/bmiddle/9b8146edgw1eya1jv951ig208c0etqv5.gif) From e6abc03cf8e572618c39595bbcc8739d3fc465c9 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 3 Apr 2016 00:16:37 +0800 Subject: [PATCH 131/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 83a00d0..99d10f9 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef 一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. -## 技术支持 & QQ交流群: +## 技术支持(QQ交流群): 497140713(1群) 519489682(已满) From fed0bca0a5df387ec2dffc6e9a6af5b1361a0766 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 3 Apr 2016 00:19:00 +0800 Subject: [PATCH 132/276] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 99d10f9..441d4da 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef ## tableview和cell高度自适应: -####>> 普通(简化)版【推荐使用】:tableview 高度自适应设置只需要2步 +####普通(简化)版【推荐使用】:tableview 高度自适应设置只需要2步 1. >> 设置cell高度自适应: // cell布局设置好之后调用此方法就可以实现高度自适应(注意:如果用高度自适应则不要再以cell的底边为参照去布局其子view) @@ -71,7 +71,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef } -#### >> 升级版(适应于cell条数少于100的tableview):tableview 高度自适应设置只需要2步 +####升级版(适应于cell条数少于100的tableview):tableview 高度自适应设置只需要2步 1. >> 设置cell高度自适应: // cell布局设置好之后调用此方法就可以实现高度自适应(注意:如果用高度自适应则不要再以cell的底边为参照去布局其子view) @@ -88,7 +88,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef ## 普通view的自动布局: -#### 0.用法示例 +#### 用法示例 /* 用法一 */ _view.sd_layout .leftSpaceToView(self.view, 10) @@ -126,7 +126,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef .rightSpaceToView(self.view, 10); ******************************************************************************* -#### 1.自动布局用法简析 +#### 自动布局用法简析 ![](http://ww1.sinaimg.cn/mw690/9b8146edgw1ex4or5ixkjj20k60gw3zg.jpg) From 3ccc97fb83ec99fa52ed94c9a816ae80b34c3124 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 3 Apr 2016 00:19:58 +0800 Subject: [PATCH 133/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 441d4da..bb8ce5a 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef 一行代码搞定自动布局!致力于做最简单易用的Autolayout库。The most easy way for autolayout. -## 技术支持(QQ交流群): +## 技术支持(QQ交流群): 497140713(1群) 519489682(已满) From 9d8cf65de88e65dd520a79f5987fabe601227d66 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Sun, 3 Apr 2016 22:11:12 +0800 Subject: [PATCH 134/276] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 24512 -> 34605 bytes SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5.m | 3 +-- SDAutoLayoutDemo/DemoVC/DemoVC7/DemoVC7.m | 3 +-- SDAutoLayoutDemo/DemoVC/DemoVC8/DemoVC8.m | 3 +-- SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m | 3 +-- .../SDAutoLayout/UIView+SDAutoLayout.h | 10 ++++++++- .../SDAutoLayout/UIView+SDAutoLayout.m | 20 ++++++++++++++++-- 7 files changed, 31 insertions(+), 11 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate index f64014969964c287a2b25a218f59e85d9666beec..899f4aaa63869b6ef68cf0fd37b8431dc3392522 100644 GIT binary patch literal 34605 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 literal 24512 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 Date: Mon, 4 Apr 2016 15:15:04 +0800 Subject: [PATCH 135/276] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 34605 -> 34912 bytes .../DemoVC/DemoVC5/DemoVC5CellTableViewCell.m | 2 - .../TimeLine/Views/Cell/SDTimeLineCell.m | 2 - .../SDAutoLayout/UIView+SDAutoLayout.m | 206 +++++++++++------- 4 files changed, 128 insertions(+), 82 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate index 899f4aaa63869b6ef68cf0fd37b8431dc3392522..9ecc76cafe1cb2eaf761ed2055e9b9c51dd0e9b0 100644 GIT binary patch delta 17565 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 delta 17463 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%0DP{}4R#y|htyG@3ou@WAj8 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 diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m b/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m index c2da415..afa0116 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC5/DemoVC5CellTableViewCell.m @@ -117,8 +117,6 @@ - (void)setModel:(DemoVC5Model *)model _view0.image = [UIImage imageNamed:model.iconName]; _view1.text = model.name; - // 防止单行文本label在重用时宽度计算不准的问题 - [_view1 sizeToFit]; _view2.text = model.content; diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.m index 10fd7af..472c69c 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.m @@ -163,8 +163,6 @@ - (void)setModel:(SDTimeLineCellModel *)model _iconView.image = [UIImage imageNamed:model.iconName]; _nameLable.text = model.name; - // 防止单行文本label在重用时宽度计算不准的问题 - [_nameLable sizeToFit]; _contentLabel.text = model.msgContent; _picContainerView.picPathStringsArray = model.picNamesArray; diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m index 42454ad..1af731b 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m @@ -604,6 +604,35 @@ - (void)setupAutoContentSizeWithRightView:(UIView *)rightView rightMargin:(CGFlo @implementation UILabel (SDLabelAutoResize) ++ (void)load +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + + NSArray *selStringsArray = @[@"setText:"]; + + [selStringsArray enumerateObjectsUsingBlock:^(NSString *selString, NSUInteger idx, BOOL *stop) { + NSString *mySelString = [@"sd_" stringByAppendingString:selString]; + + Method originalMethod = class_getInstanceMethod(self, NSSelectorFromString(selString)); + Method myMethod = class_getInstanceMethod(self, NSSelectorFromString(mySelString)); + method_exchangeImplementations(originalMethod, myMethod); + }]; + }); +} + +- (void)sd_setText:(NSString *)text +{ + if (self.sd_maxWidth) { + [self sizeToFit]; + } else if (self.autoHeightRatioValue) { + self.frame = CGRectZero; + } + + // 如果程序崩溃在这行代码说明是你的label在执行“setText”方法时出了问题而不是在此自动布局库内部出现了问题,请检查你的“setText”方法 + [self sd_setText:text]; +} + - (BOOL)isAttributedContent { return [objc_getAssociatedObject(self, _cmd) boolValue]; @@ -851,6 +880,7 @@ - (void)sd_clearSubviewsAutoLayoutFrameCaches - (void)sd_layoutSubviews { + // 如果程序崩溃在这行代码说明是你的view在执行“layoutSubvies”方法时出了问题而不是在此自动布局库内部出现了问题,请检查你的“layoutSubvies”方法 [self sd_layoutSubviews]; if (self.sd_equalWidthSubviews.count) { @@ -984,53 +1014,11 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model } } - if (model.width) { - view.width = [model.width.value floatValue]; - view.fixedWidth = @(view.width); - } else if (model.ratio_width) { - view.width = model.ratio_width.refView.width * [model.ratio_width.value floatValue]; - view.fixedWidth = @(view.width); - } + [self layoutWidthWithView:view model:model]; - if (model.height) { - view.height = [model.height.value floatValue]; - view.fixedHeight = @(view.height); - } else if (model.ratio_height) { - view.height = [model.ratio_height.value floatValue] * model.ratio_height.refView.height; - view.fixedHeight = @(view.height); - } + [self layoutHeightWithView:view model:model]; - if (model.left) { - if (view.superview == model.left.refView) { - if (!view.fixedWidth) { // view.autoLeft && view.autoRight - view.width = view.right - [model.left.value floatValue]; - } - view.left = [model.left.value floatValue]; - } else { - if (!view.fixedWidth) { // view.autoLeft && view.autoRight - view.width = view.right - model.left.refView.right - [model.left.value floatValue]; - } - view.left = model.left.refView.right + [model.left.value floatValue]; - } - - } else if (model.equalLeft) { - if (!view.fixedWidth) { - view.width = view.right - model.equalLeft.refView.left; - } - if (view.superview == model.equalLeft.refView) { - view.left = 0; - } else { - view.left = model.equalLeft.refView.left; - } - } else if (model.equalCenterX) { - if (view.superview == model.equalCenterX.refView) { - view.centerX = model.equalCenterX.refView.width * 0.5; - } else { - view.centerX = model.equalCenterX.refView.centerX; - } - } else if (model.centerX) { - view.centerX = [model.centerX floatValue]; - } + [self layoutLeftWithView:view model:model]; [self layoutRightWithView:view model:model]; @@ -1063,39 +1051,7 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model } - if (model.top) { - if (view.superview == model.top.refView) { - if (!view.fixedHeight) { // view.autoTop && view.autoBottom && view.bottom - view.height = view.bottom - [model.top.value floatValue]; - } - view.top = [model.top.value floatValue]; - } else { - if (!view.fixedHeight) { // view.autoTop && view.autoBottom && view.bottom - view.height = view.bottom - model.top.refView.bottom - [model.top.value floatValue]; - } - view.top = model.top.refView.bottom + [model.top.value floatValue]; - } - } else if (model.equalTop) { - if (view.superview == model.equalTop.refView) { - if (!view.fixedHeight) { - view.height = view.bottom; - } - view.top = 0; - } else { - if (!view.fixedHeight) { - view.height = view.bottom - model.equalTop.refView.top; - } - view.top = model.equalTop.refView.top; - } - } else if (model.equalCenterY) { - if (view.superview == model.equalCenterY.refView) { - view.centerY = model.equalCenterY.refView.height * 0.5; - } else { - view.centerY = model.equalCenterY.refView.centerY; - } - } else if (model.centerY) { - view.centerY = [model.centerY floatValue]; - } + [self layoutTopWithView:view model:model]; [self layoutBottomWithView:view model:model]; @@ -1181,6 +1137,63 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model } +- (void)layoutWidthWithView:(UIView *)view model:(SDAutoLayoutModel *)model +{ + if (model.width) { + view.width = [model.width.value floatValue]; + view.fixedWidth = @(view.width); + } else if (model.ratio_width) { + view.width = model.ratio_width.refView.width * [model.ratio_width.value floatValue]; + view.fixedWidth = @(view.width); + } +} + +- (void)layoutHeightWithView:(UIView *)view model:(SDAutoLayoutModel *)model +{ + if (model.height) { + view.height = [model.height.value floatValue]; + view.fixedHeight = @(view.height); + } else if (model.ratio_height) { + view.height = [model.ratio_height.value floatValue] * model.ratio_height.refView.height; + view.fixedHeight = @(view.height); + } +} + +- (void)layoutLeftWithView:(UIView *)view model:(SDAutoLayoutModel *)model +{ + if (model.left) { + if (view.superview == model.left.refView) { + if (!view.fixedWidth) { // view.autoLeft && view.autoRight + view.width = view.right - [model.left.value floatValue]; + } + view.left = [model.left.value floatValue]; + } else { + if (!view.fixedWidth) { // view.autoLeft && view.autoRight + view.width = view.right - model.left.refView.right - [model.left.value floatValue]; + } + view.left = model.left.refView.right + [model.left.value floatValue]; + } + + } else if (model.equalLeft) { + if (!view.fixedWidth) { + view.width = view.right - model.equalLeft.refView.left; + } + if (view.superview == model.equalLeft.refView) { + view.left = 0; + } else { + view.left = model.equalLeft.refView.left; + } + } else if (model.equalCenterX) { + if (view.superview == model.equalCenterX.refView) { + view.centerX = model.equalCenterX.refView.width * 0.5; + } else { + view.centerX = model.equalCenterX.refView.centerX; + } + } else if (model.centerX) { + view.centerX = [model.centerX floatValue]; + } +} + - (void)layoutRightWithView:(UIView *)view model:(SDAutoLayoutModel *)model { if (model.right) { @@ -1212,6 +1225,43 @@ - (void)layoutRightWithView:(UIView *)view model:(SDAutoLayoutModel *)model } } +- (void)layoutTopWithView:(UIView *)view model:(SDAutoLayoutModel *)model +{ + if (model.top) { + if (view.superview == model.top.refView) { + if (!view.fixedHeight) { // view.autoTop && view.autoBottom && view.bottom + view.height = view.bottom - [model.top.value floatValue]; + } + view.top = [model.top.value floatValue]; + } else { + if (!view.fixedHeight) { // view.autoTop && view.autoBottom && view.bottom + view.height = view.bottom - model.top.refView.bottom - [model.top.value floatValue]; + } + view.top = model.top.refView.bottom + [model.top.value floatValue]; + } + } else if (model.equalTop) { + if (view.superview == model.equalTop.refView) { + if (!view.fixedHeight) { + view.height = view.bottom; + } + view.top = 0; + } else { + if (!view.fixedHeight) { + view.height = view.bottom - model.equalTop.refView.top; + } + view.top = model.equalTop.refView.top; + } + } else if (model.equalCenterY) { + if (view.superview == model.equalCenterY.refView) { + view.centerY = model.equalCenterY.refView.height * 0.5; + } else { + view.centerY = model.equalCenterY.refView.centerY; + } + } else if (model.centerY) { + view.centerY = [model.centerY floatValue]; + } +} + - (void)layoutBottomWithView:(UIView *)view model:(SDAutoLayoutModel *)model { if (model.bottom) { From fbeccc5cc8566d18f7c4903771bf9136e3e96e39 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 4 Apr 2016 16:02:19 +0800 Subject: [PATCH 136/276] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 34912 -> 34931 bytes .../SDAutoLayout/UIView+SDAutoLayout.m | 135 +++++++----------- 2 files changed, 52 insertions(+), 83 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate index 9ecc76cafe1cb2eaf761ed2055e9b9c51dd0e9b0..0712e13315e7190f0b30cc7fa2dbc6010c91c41a 100644 GIT binary patch delta 1609 zcmZvbYgAQL0>|MNQKBw_dfgVea_i?-*e7B8?Pu1 zcDyc0)@W*=%N8KBm?0mHrE<%%%vYtkB2CiLG%C}I)EG2|W||((eD1$~Uw&VH-~L~0 z3f$Th*jqm-d12d`x^uxlXJzJQW@n7d$;nx{__jQhl^u;v(niLWlxr(9>V_6)#%4u} zihsH@C1yk zqKzx%((vO;!*aU8Efy~2G|U!pV_BXfsbSY$3+l1i(K(>@u0Z6A=w&h^A@;tyCL<~C zNkd<1MQ6!p2KnF)kO6W*K9~Xuzzi@86oYwyg9=ays(=qxgEe3`H~{iNNkC20M%0a}W$rD|!~SS?R0)Mje4wPNkK_5r>N55hxm5*~&}<1u(V zegIF!b8#6CVuW>UU>7SK#>?;uT!pLgHoOzJ;=}ko{60Q~&)~E8GyFNejIZKvaHk%x zr|E^drgL5BwqB`M>At>Nuh!S<4SI|2@6vbcd-Q$!A^mOrxPDSUrJvEy>L2S@^j;D} z?jiS*;UtBmk}+gF$sm)+Wb!zfL*|hZQc4z+Ao0jb@-*>Dglr(sklz^|18^E62*SrdS2mRBNuaz*=OLSx;He z(k$Jov}&w+>yUMW^<~NIJ~o1lV(Dxw%VpEp3^t1uv-zxq-98GdWL3;(YuH+!{e`V( z&$4>f%v#tE_9ENIUSY4XH`qaTlC`sQ>^!^3I@mYtJ9dNpligxH>}MXw2l6C7jNi{k z@pL|pPvANH5&jr|f*10cd^RuUL5?})7PqUCkzMmi92l-*{ zALXa`8Ge?3!awDgcqhNkyZBAs!+XV@B3|?n{Y0V|C`O1;B3+CV4~U5(Pvnb7#G|4} zK!F7nmJq@bo>(F(M5S0SHi}xYMLaJWM3ZP1e;3=uPH|fFg!+djhpf=kp{CGlp>IRo zp5((d}@*bg#I*GDh~3gXJ(e zUKU6sZRyL^vRc;2b#jAzPHvW4Wxae!?vbtXRr$JnL%t=C$Yb(dc|u;6-CmrR?2YpZ zyb{mzs=Y?<1#i2z%WL(b-hS_}cf>p9z3;X8-f8c=cfq^lb$ZvmF7Kw-TA(y#D5gTnQ%h8ZTCSc^8&#ufRxN6W+O77eR`rTH rp*~cfsmtoB`c~agU8-B%Dj!mwRbE@(QogHvPt5-ps4J`)8oTc|H8Z!h delta 1618 zcmZvUeO#5*0mt!bQoJa>>(&erX)aVm^CG4)ip-dkk1tIf=bY!fJoh>0+~+*cIaeq) zrkDGXWV%t(EjNjV)A7ME9R@m0qOH_$ZlGE%lU$?)o1_h_xXK(FaLb6 zYzp*l3hb_*ItgZwOzK%t|-e#X<6|TR#rS4h@p*t?dNMapSedBko< z{`wKo(vQI?kO4A57MKij!Tlf)>m3mgT< zz+2!nI1AnZ?}ERBe}aqP66l91a3~xON5Qf1>u@}r0CV6BI1A2(55W1b5Ej7&a2W&; zK@2Ihp$DS|mchs24`3y%hMQnLY=v!bFWe71;4APFyoQocDoR5m&}cLc-Hq-+87LD? zM>A0n<)cMt6#~dY6me9JDo`a_i>lFj6i1uU7Sw>6P#fBd_M;AT5FJL{=p;IW&Y}0w z2k0}@hpwXQR$|mjvQn)yYoe87&9G)!c~-0SJL^;HrgaM^;DI;=55>drNSuvl<3e17 zAHl`=yZC!}6$aSC6x-Ot>v0`^9`C>};yrjDK7c#%>-Y%%6Mh4qz}@%~NhLXCAz4C} zlI4UDn{W~)9?_(l)RO2k(lQcs%6PSQ%+$Ubs_bdukbW2Bc{AeYH)I*2CHBs!E1 zr=#c?I)Q$R25CN>OAF|Ow1}>xA?i?0C4GYakglOsbRB(?ZlT*~Gi{-}Xe)i0zDf_# zF8XJBoOaW&I8VTr_g!GS>P;miXGw@XPwjR zoO1rf1N;ttCr{=>cpA^((|9hwpXc#8d@e8HfD>+W&K1{DzM7Zw$N4(Gk=OD~JkIO+ z3w$fz&YO4}@8GZSSNS2{#ZU0R@KgM4exCR65BWuYLnMfSVz5XSL&PvKLZpjH;+x_= zkt1e^St3sqiATjEQ6iR$72^8>h%ylq)uKjh6t&`M(I6VdHqj(@h-i!0Ck}{C@dt5G z92VW;q&Oqai5}4_J`tD174f;aCT_?(WwIP1hslw0w45k2(@ZR>owttdSe#Pvz6HPVSdI@@jZOxFqa^Yr}3RIz5tV$J9MA?d~u<}%;TBEAeI`yRbvHFRsRl8J|dQaW-#(0_D zecn`Wx)+`4&GF`W1>S>Rkq5jwufsd!b$Lgg{@`-lbdhe*IEZzpM}I*YzLuDgCxSuiw@0>ksrNx=&x#*LA@l6@s5x%B%}I0C koHsqDHxh`XN1~Cs$mU2x!j}q+3w$+_-u$Znmyuum2N8a>ivR!s diff --git a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m index 1af731b..e20a464 100755 --- a/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m +++ b/SDAutoLayoutDemo/SDAutoLayout/UIView+SDAutoLayout.m @@ -993,25 +993,8 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model if (!view) return; if (view.sd_maxWidth && (model.rightSpaceToView || model.rightEqualToView)) { // 靠右布局前提设置 - if ([view isKindOfClass:[UILabel class]]) { - UILabel *label = (UILabel *)view; - CGFloat width = [view.sd_maxWidth floatValue] > 0 ? [view.sd_maxWidth floatValue] : MAXFLOAT; - label.numberOfLines = 1; - if (label.text.length) { - if (!label.isAttributedContent) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.width = rect.size.width; - } else{ - [label sizeToFit]; - if (label.width > width) { - label.width = width; - } - } - label.fixedWidth = @(label.width); - } else { - label.width = 0; - } - } + [self layoutAutoWidthWidthView:view model:model]; + view.fixedWidth = @(view.width); } [self layoutWidthWithView:view model:model]; @@ -1023,31 +1006,8 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model [self layoutRightWithView:view model:model]; if (view.autoHeightRatioValue && view.width > 0 && (model.bottomEqualToView || model.bottomSpaceToView)) { // 底部布局前提设置 - if ([view.autoHeightRatioValue floatValue] > 0) { - view.height = view.width * [view.autoHeightRatioValue floatValue]; - } else { - if ([view isKindOfClass:[UILabel class]]) { - UILabel *label = (UILabel *)view; - if (model.top || model.equalTop) { - model.bottom = nil; - model.equalBottom = nil; - } - label.numberOfLines = 0; - if (label.text.length) { - if (!label.isAttributedContent) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.height = rect.size.height; - } else { - [label sizeToFit]; - } - label.fixedHeight = @(label.height); - } else { - label.height = 0; - } - } else { - view.height = 0; - } - } + [self layoutAutoHeightWidthView:view model:model]; + view.fixedHeight = @(view.height); } @@ -1056,25 +1016,7 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model [self layoutBottomWithView:view model:model]; if (view.sd_maxWidth) { - if ([view isKindOfClass:[UILabel class]]) { - UILabel *label = (UILabel *)view; - CGFloat width = [view.sd_maxWidth floatValue] > 0 ? [view.sd_maxWidth floatValue] : MAXFLOAT; - label.numberOfLines = 1; - if (label.text.length) { - if (!label.isAttributedContent) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.width = rect.size.width; - label.fixedWidth = @(label.width); - } else{ - [label sizeToFit]; - if (label.width > width) { - label.width = width; - } - } - } else { - label.width = 0; - } - } + [self layoutAutoWidthWidthView:view model:model]; } if (model.maxWidth && [model.maxWidth floatValue] < view.width) { @@ -1086,26 +1028,7 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model } if (view.autoHeightRatioValue && view.width > 0) { - if ([view.autoHeightRatioValue floatValue] > 0) { - view.height = view.width * [view.autoHeightRatioValue floatValue]; - } else { - if ([view isKindOfClass:[UILabel class]]) { - UILabel *label = (UILabel *)view; - label.numberOfLines = 0; - if (label.text.length) { - if (!label.isAttributedContent) { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; - label.height = rect.size.height; - } else { - [label sizeToFit]; - } - } else { - label.height = 0; - } - } else { - view.height = 0; - } - } + [self layoutAutoHeightWidthView:view model:model]; } if (model.maxHeight && [model.maxHeight floatValue] < view.height) { @@ -1137,6 +1060,52 @@ - (void)sd_resizeWithModel:(SDAutoLayoutModel *)model } +- (void)layoutAutoHeightWidthView:(UIView *)view model:(SDAutoLayoutModel *)model +{ + if ([view.autoHeightRatioValue floatValue] > 0) { + view.height = view.width * [view.autoHeightRatioValue floatValue]; + } else { + if ([view isKindOfClass:[UILabel class]]) { + UILabel *label = (UILabel *)view; + label.numberOfLines = 0; + if (label.text.length) { + if (!label.isAttributedContent) { + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.height = rect.size.height; + } else { + [label sizeToFit]; + } + } else { + label.height = 0; + } + } else { + view.height = 0; + } + } +} + +- (void)layoutAutoWidthWidthView:(UIView *)view model:(SDAutoLayoutModel *)model +{ + if ([view isKindOfClass:[UILabel class]]) { + UILabel *label = (UILabel *)view; + CGFloat width = [view.sd_maxWidth floatValue] > 0 ? [view.sd_maxWidth floatValue] : MAXFLOAT; + label.numberOfLines = 1; + if (label.text.length) { + if (!label.isAttributedContent) { + CGRect rect = [label.text boundingRectWithSize:CGSizeMake(width, label.height) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : label.font} context:nil]; + label.width = rect.size.width; + } else{ + [label sizeToFit]; + if (label.width > width) { + label.width = width; + } + } + } else { + label.width = 0; + } + } +} + - (void)layoutWidthWithView:(UIView *)view model:(SDAutoLayoutModel *)model { if (model.width) { From f6027689ea1fc16a8d9ead98a1b2e4b2badcb9ad Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Tue, 5 Apr 2016 00:31:37 +0800 Subject: [PATCH 137/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9C=8B=E5=8F=8B?= =?UTF-8?q?=E5=9C=88demo=E8=AF=84=E8=AE=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDAutoLayoutDemo.xcodeproj/project.pbxproj | 14 ++ .../UserInterfaceState.xcuserstate | Bin 34931 -> 34870 bytes SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m | 135 +++++++++++++++++- .../TimeLine/Views/Cell/SDTimeLineCell.h | 9 ++ .../TimeLine/Views/Cell/SDTimeLineCell.m | 73 +++++++++- .../SDTimeLineCellOperationMenu.h | 19 +++ .../SDTimeLineCellOperationMenu.m | 108 ++++++++++++++ 7 files changed, 353 insertions(+), 5 deletions(-) create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/OperationMenu/SDTimeLineCellOperationMenu.h create mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/OperationMenu/SDTimeLineCellOperationMenu.m diff --git a/SDAutoLayoutDemo.xcodeproj/project.pbxproj b/SDAutoLayoutDemo.xcodeproj/project.pbxproj index 2ae827c..5c0739b 100644 --- a/SDAutoLayoutDemo.xcodeproj/project.pbxproj +++ b/SDAutoLayoutDemo.xcodeproj/project.pbxproj @@ -183,6 +183,7 @@ 48FC0EC61C4FB60A004098B8 /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E931C4FB60A004098B8 /* UIView+MJExtension.m */; }; 48FC0EC71C4FB60A004098B8 /* README.md in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0E941C4FB60A004098B8 /* README.md */; }; 48FC0ECB1C4FB7CA004098B8 /* XYString.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FC0ECA1C4FB7CA004098B8 /* XYString.m */; }; + 9997FB651CB2C26800A6FF62 /* SDTimeLineCellOperationMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = 9997FB641CB2C26800A6FF62 /* SDTimeLineCellOperationMenu.m */; }; 99A697741C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m in Sources */ = {isa = PBXBuildFile; fileRef = 99A697711C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m */; }; 99A697751C423B0D004EA699 /* UIView+SDAutoLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 99A697731C423B0D004EA699 /* UIView+SDAutoLayout.m */; }; 99D694B51C8C54D000DA97E1 /* SDTimeLineCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 99D694A01C8C54D000DA97E1 /* SDTimeLineCellModel.m */; }; @@ -526,6 +527,8 @@ 48FC0E941C4FB60A004098B8 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 48FC0EC91C4FB7CA004098B8 /* XYString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XYString.h; sourceTree = ""; }; 48FC0ECA1C4FB7CA004098B8 /* XYString.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XYString.m; sourceTree = ""; }; + 9997FB631CB2C26800A6FF62 /* SDTimeLineCellOperationMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDTimeLineCellOperationMenu.h; sourceTree = ""; }; + 9997FB641CB2C26800A6FF62 /* SDTimeLineCellOperationMenu.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDTimeLineCellOperationMenu.m; sourceTree = ""; }; 99A697701C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITableView+SDAutoTableViewCellHeight.h"; sourceTree = ""; }; 99A697711C423B0D004EA699 /* UITableView+SDAutoTableViewCellHeight.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITableView+SDAutoTableViewCellHeight.m"; sourceTree = ""; }; 99A697721C423B0D004EA699 /* UIView+SDAutoLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+SDAutoLayout.h"; sourceTree = ""; }; @@ -1335,6 +1338,15 @@ path = XYString; sourceTree = ""; }; + 9997FB621CB2C26800A6FF62 /* OperationMenu */ = { + isa = PBXGroup; + children = ( + 9997FB631CB2C26800A6FF62 /* SDTimeLineCellOperationMenu.h */, + 9997FB641CB2C26800A6FF62 /* SDTimeLineCellOperationMenu.m */, + ); + path = OperationMenu; + sourceTree = ""; + }; 99A6976F1C423B0D004EA699 /* SDAutoLayout */ = { isa = PBXGroup; children = ( @@ -1379,6 +1391,7 @@ 99D694A41C8C54D000DA97E1 /* Views */ = { isa = PBXGroup; children = ( + 9997FB621CB2C26800A6FF62 /* OperationMenu */, 99D694A51C8C54D000DA97E1 /* Cell */, 99D694A81C8C54D000DA97E1 /* CommentView */, 99D694AB1C8C54D000DA97E1 /* HeaderView */, @@ -1702,6 +1715,7 @@ 48EB73041C748E1A003A818E /* SDAnalogDataGenerator.m in Sources */, 485302F51C3F65EE004361A7 /* TAAnimatedDotView.m in Sources */, 48FC0EB21C4FB60A004098B8 /* NSString+MJExtension.m in Sources */, + 9997FB651CB2C26800A6FF62 /* SDTimeLineCellOperationMenu.m in Sources */, 485302FA1C3F65EE004361A7 /* UIView+SDExtension.m in Sources */, 485302D31C3F6490004361A7 /* UIView+SDExtension.m in Sources */, 48FC0EC01C4FB60A004098B8 /* MJRefreshNormalHeader.m in Sources */, diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate index 0712e13315e7190f0b30cc7fa2dbc6010c91c41a..4fd8c6d739be89b7bc3c447feb64f957a7f7d44f 100644 GIT binary patch delta 16917 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 diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m index 6d380b5..cd74894 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m @@ -35,15 +35,22 @@ #define kTimeLineTableViewCellId @"SDTimeLineCell" -@interface DemoVC9 () +static CGFloat textFieldH = 40; + + +@interface DemoVC9 () @end @implementation DemoVC9 + { SDTimeLineRefreshFooter *_refreshFooter; SDTimeLineRefreshHeader *_refreshHeader; CGFloat _lastScrollViewOffsetY; + UITextField *_textField; + CGFloat _totalKeybordHeight; + NSIndexPath *_currentEditingIndexthPath; } - (void)viewDidLoad @@ -75,6 +82,10 @@ - (void)viewDidLoad self.tableView.tableHeaderView = headerView; [self.tableView registerClass:[SDTimeLineCell class] forCellReuseIdentifier:kTimeLineTableViewCellId]; + + [self setupTextField]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardNotification:) name:UIKeyboardWillChangeFrameNotification object:nil]; } - (void)viewDidAppear:(BOOL)animated @@ -100,15 +111,37 @@ - (void)viewDidAppear:(BOOL)animated } } +- (void)viewWillDisappear:(BOOL)animated +{ + [_textField resignFirstResponder]; +} + - (void)dealloc { [_refreshHeader removeFromSuperview]; [_refreshFooter removeFromSuperview]; + + [_textField removeFromSuperview]; + [[NSNotificationCenter defaultCenter] removeObserver:self]; } -- (NSArray *)creatModelsWithCount:(NSInteger)count +- (void)setupTextField { + _textField = [UITextField new]; + _textField.returnKeyType = UIReturnKeyDone; + _textField.delegate = self; + _textField.layer.borderColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.8].CGColor; + _textField.layer.borderWidth = 1; + _textField.backgroundColor = [UIColor whiteColor]; + _textField.frame = CGRectMake(0, [UIScreen mainScreen].bounds.size.height, self.view.width, textFieldH); + [[UIApplication sharedApplication].keyWindow addSubview:_textField]; + [_textField becomeFirstResponder]; + [_textField resignFirstResponder]; +} + +- (NSArray *)creatModelsWithCount:(NSInteger)count +{ NSArray *iconImageNamesArray = @[@"icon0.jpg", @"icon1.jpg", @"icon2.jpg", @@ -215,6 +248,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N model.isOpening = !model.isOpening; [weakSelf.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; }]; + cell.delegate = self; } ////// 此步设置用于实现cell的frame缓存,可以让tableview滑动更加流畅 ////// @@ -227,6 +261,11 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N return cell; } +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + +} + - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // >>>>>>>>>>>>>>>>>>>>> * cell自适应 * >>>>>>>>>>>>>>>>>>>>>>>> @@ -234,6 +273,11 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPa return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:[SDTimeLineCell class] contentViewWidth:[self cellContentViewWith]]; } +- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView +{ + [_textField resignFirstResponder]; +} + @@ -248,4 +292,91 @@ - (CGFloat)cellContentViewWith return width; } + +#pragma mark - SDTimeLineCellDelegate + +- (void)didClickcCommentButtonInCell:(UITableViewCell *)cell +{ + [_textField becomeFirstResponder]; + _currentEditingIndexthPath = [self.tableView indexPathForCell:cell]; + + [self adjustTableViewToFitKeyboard]; + +} + +- (void)didClickLickButtonInCell:(UITableViewCell *)cell +{ + +} + + +- (void)adjustTableViewToFitKeyboard +{ + UIWindow *window = [UIApplication sharedApplication].keyWindow; + UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:_currentEditingIndexthPath]; + CGRect rect = [cell.superview convertRect:cell.frame toView:window]; + CGFloat delta = CGRectGetMaxY(rect) - (window.bounds.size.height - _totalKeybordHeight); + + CGPoint offset = self.tableView.contentOffset; + offset.y += delta; + if (offset.y < 0) { + offset.y = 0; + } + + [self.tableView setContentOffset:offset animated:YES]; +} + +#pragma mark - UITextFieldDelegate + +- (BOOL)textFieldShouldReturn:(UITextField *)textField +{ + if (textField.text.length) { + [_textField resignFirstResponder]; + + SDTimeLineCellModel *model = self.dataArray[_currentEditingIndexthPath.row]; + NSMutableArray *temp = [NSMutableArray new]; + [temp addObjectsFromArray:model.commentItemsArray]; + + SDTimeLineCellCommentItemModel *commentItemModel = [SDTimeLineCellCommentItemModel new]; + commentItemModel.firstUserName = @"GSD_iOS"; + commentItemModel.commentString = textField.text; + commentItemModel.firstUserId = @"GSD_iOS"; + [temp addObject:commentItemModel]; + + model.commentItemsArray = [temp copy]; + + [self.tableView reloadRowsAtIndexPaths:@[_currentEditingIndexthPath] withRowAnimation:UITableViewRowAnimationNone]; + + _textField.text = @""; + + return YES; + } + return NO; +} + + + +- (void)keyboardNotification:(NSNotification *)notification +{ + NSDictionary *dict = notification.userInfo; + CGRect rect = [dict[@"UIKeyboardFrameEndUserInfoKey"] CGRectValue]; + + + + CGRect textFieldRect = CGRectMake(0, rect.origin.y - textFieldH, rect.size.width, textFieldH); + if (rect.origin.y == [UIScreen mainScreen].bounds.size.height) { + textFieldRect = rect; + } + + [UIView animateWithDuration:0.25 animations:^{ + _textField.frame = textFieldRect; + }]; + + CGFloat h = rect.size.height + textFieldH; + if (_totalKeybordHeight != h) { + _totalKeybordHeight = h; + [self adjustTableViewToFitKeyboard]; + } +} + @end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.h index 66f1924..95d0c2a 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.h +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.h @@ -28,10 +28,19 @@ #import +@protocol SDTimeLineCellDelegate + +- (void)didClickLickButtonInCell:(UITableViewCell *)cell; +- (void)didClickcCommentButtonInCell:(UITableViewCell *)cell; + +@end + @class SDTimeLineCellModel; @interface SDTimeLineCell : UITableViewCell +@property (nonatomic, weak) id delegate; + @property (nonatomic, strong) SDTimeLineCellModel *model; @property (nonatomic, strong) NSIndexPath *indexPath; diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.m index 472c69c..d56eda7 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/Cell/SDTimeLineCell.m @@ -35,9 +35,13 @@ #import "SDWeiXinPhotoContainerView.h" +#import "SDTimeLineCellOperationMenu.h" + const CGFloat contentLabelFontSize = 15; CGFloat maxContentLabelHeight = 0; // 根据具体font而定 +NSString *const kSDTimeLineCellOperationButtonClickedNotification = @"SDTimeLineCellOperationButtonClickedNotification"; + @implementation SDTimeLineCell { @@ -50,6 +54,7 @@ @implementation SDTimeLineCell UIButton *_operationButton; SDTimeLineCellCommentView *_commentView; BOOL _shouldOpenContentLabel; + SDTimeLineCellOperationMenu *_operationMenu; } @@ -65,6 +70,8 @@ - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSStr - (void)setup { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveOperationButtonClickedNotification:) name:kSDTimeLineCellOperationButtonClickedNotification object:nil]; + _shouldOpenContentLabel = NO; _iconView = [UIImageView new]; @@ -74,8 +81,8 @@ - (void)setup _nameLable.textColor = [UIColor colorWithRed:(54 / 255.0) green:(71 / 255.0) blue:(121 / 255.0) alpha:0.9]; _contentLabel = [UILabel new]; - _contentLabel.numberOfLines = 0; _contentLabel.font = [UIFont systemFontOfSize:contentLabelFontSize]; + _contentLabel.numberOfLines = 0; if (maxContentLabelHeight == 0) { maxContentLabelHeight = _contentLabel.font.lineHeight * 3; } @@ -98,7 +105,21 @@ - (void)setup _timeLabel.font = [UIFont systemFontOfSize:13]; _timeLabel.textColor = [UIColor lightGrayColor]; - NSArray *views = @[_iconView, _nameLable, _contentLabel, _moreButton, _picContainerView, _timeLabel, _operationButton, _commentView]; + + _operationMenu = [SDTimeLineCellOperationMenu new]; + __weak typeof(self) weakSelf = self; + [_operationMenu setLikeButtonClickedOperation:^{ + if ([weakSelf.delegate respondsToSelector:@selector(didClickLickButtonInCell:)]) { + [weakSelf.delegate didClickLickButtonInCell:weakSelf]; + } + }]; + [_operationMenu setCommentButtonClickedOperation:^{ + if ([weakSelf.delegate respondsToSelector:@selector(didClickcCommentButtonInCell:)]) { + [weakSelf.delegate didClickcCommentButtonInCell:weakSelf]; + } + }]; + + NSArray *views = @[_iconView, _nameLable, _contentLabel, _moreButton, _picContainerView, _timeLabel, _operationButton, _operationMenu, _commentView]; [self.contentView sd_addSubviews:views]; @@ -149,8 +170,19 @@ - (void)setup .leftEqualToView(_contentLabel) .rightSpaceToView(self.contentView, margin) .topSpaceToView(_timeLabel, margin); // 已经在内部实现高度自适应所以不需要再设置高度 + + + _operationMenu.sd_layout + .rightSpaceToView(_operationButton, 0) + .heightIs(36) + .centerYEqualToView(_operationButton) + .widthIs(0); } +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} - (void)setModel:(SDTimeLineCellModel *)model { @@ -163,6 +195,8 @@ - (void)setModel:(SDTimeLineCellModel *)model _iconView.image = [UIImage imageNamed:model.iconName]; _nameLable.text = model.name; + // 防止单行文本label在重用时宽度计算不准的问题 + [_nameLable sizeToFit]; _contentLabel.text = model.msgContent; _picContainerView.picPathStringsArray = model.picNamesArray; @@ -190,7 +224,7 @@ - (void)setModel:(SDTimeLineCellModel *)model UIView *bottomView; if (!model.commentItemsArray.count && !model.likeItemsArray.count) { - _commentView.fixedWidth = @0; // 如果没有评论或者点赞,设置commentview的固定宽度为0(设置了fixedWidth的控件将不再在自动布局过程中调整宽度) + _commentView.fixedWidth = @0; // 如果没有评论或者点赞,设置commentview的固定宽度为0(设置了fixedWith的控件将不再在自动布局过程中调整宽度) _commentView.fixedHeight = @0; // 如果没有评论或者点赞,设置commentview的固定高度为0(设置了fixedHeight的控件将不再在自动布局过程中调整高度) _commentView.sd_layout.topSpaceToView(_timeLabel, 0); bottomView = _timeLabel; @@ -206,6 +240,14 @@ - (void)setModel:(SDTimeLineCellModel *)model _timeLabel.text = @"1分钟前"; } +- (void)setFrame:(CGRect)frame +{ + [super setFrame:frame]; + if (_operationMenu.isShowing) { + _operationMenu.show = NO; + } +} + #pragma mark - private actions - (void)moreButtonClicked @@ -217,7 +259,32 @@ - (void)moreButtonClicked - (void)operationButtonClicked { + [self postOperationButtonClickedNotification]; + _operationMenu.show = !_operationMenu.isShowing; +} + +- (void)receiveOperationButtonClickedNotification:(NSNotification *)notification +{ + UIButton *btn = [notification object]; + if (btn != _operationButton && _operationMenu.isShowing) { + _operationMenu.show = NO; + } +} + + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event +{ + [super touchesBegan:touches withEvent:event]; + [self postOperationButtonClickedNotification]; + if (_operationMenu.isShowing) { + _operationMenu.show = NO; + } +} + +- (void)postOperationButtonClickedNotification +{ + [[NSNotificationCenter defaultCenter] postNotificationName:kSDTimeLineCellOperationButtonClickedNotification object:_operationButton]; } @end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/OperationMenu/SDTimeLineCellOperationMenu.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/OperationMenu/SDTimeLineCellOperationMenu.h new file mode 100644 index 0000000..6d90913 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/OperationMenu/SDTimeLineCellOperationMenu.h @@ -0,0 +1,19 @@ +// +// SDTimeLineCellOperationMenu.h +// GSD_WeiXin(wechat) +// +// Created by aier on 16/4/2. +// Copyright © 2016年 GSD. All rights reserved. +// + +#import + +@interface SDTimeLineCellOperationMenu : UIView + +@property (nonatomic, assign, getter = isShowing) BOOL show; + +@property (nonatomic, copy) void (^likeButtonClickedOperation)(); +@property (nonatomic, copy) void (^commentButtonClickedOperation)(); + + +@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/OperationMenu/SDTimeLineCellOperationMenu.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/OperationMenu/SDTimeLineCellOperationMenu.m new file mode 100644 index 0000000..1ac1446 --- /dev/null +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/TimeLine/Views/OperationMenu/SDTimeLineCellOperationMenu.m @@ -0,0 +1,108 @@ +// +// SDTimeLineCellOperationMenu.m +// GSD_WeiXin(wechat) +// +// Created by aier on 16/4/2. +// Copyright © 2016年 GSD. All rights reserved. +// + +#import "SDTimeLineCellOperationMenu.h" +#import "UIView+SDAutoLayout.h" +#import "GlobalDefines.h" + +@implementation SDTimeLineCellOperationMenu +{ + UIButton *_likeButton; + UIButton *_commentButton; +} + +- (instancetype)initWithFrame:(CGRect)frame +{ + if (self = [super initWithFrame:frame]) { + [self setup]; + } + return self; +} + +- (void)setup +{ + self.clipsToBounds = YES; + self.layer.cornerRadius = 5; + self.backgroundColor = SDColor(69, 74, 76, 1); + + _likeButton = [self creatButtonWithTitle:@"赞" image:[UIImage imageNamed:@"AlbumLike"] selImage:[UIImage imageNamed:@""] target:self selector:@selector(likeButtonClicked)]; + _commentButton = [self creatButtonWithTitle:@"评论" image:[UIImage imageNamed:@"AlbumComment"] selImage:[UIImage imageNamed:@""] target:self selector:@selector(commentButtonClicked)]; + + UIView *centerLine = [UIView new]; + centerLine.backgroundColor = [UIColor grayColor]; + + + [self sd_addSubviews:@[_likeButton, _commentButton, centerLine]]; + + CGFloat margin = 5; + + _likeButton.sd_layout + .leftSpaceToView(self, margin) + .topEqualToView(self) + .bottomEqualToView(self) + .widthIs(80); + + centerLine.sd_layout + .leftSpaceToView(_likeButton, margin) + .topSpaceToView(self, margin) + .bottomSpaceToView(self, margin) + .widthIs(1); + + _commentButton.sd_layout + .leftSpaceToView(centerLine, margin) + .topEqualToView(_likeButton) + .bottomEqualToView(_likeButton) + .widthRatioToView(_likeButton, 1); + +} + +- (UIButton *)creatButtonWithTitle:(NSString *)title image:(UIImage *)image selImage:(UIImage *)selImage target:(id)target selector:(SEL)sel +{ + UIButton *btn = [UIButton new]; + [btn setTitle:title forState:UIControlStateNormal]; + [btn setImage:image forState:UIControlStateNormal]; + [btn setImage:selImage forState:UIControlStateSelected]; + [btn addTarget:target action:sel forControlEvents:UIControlEventTouchUpInside]; + btn.titleLabel.font = [UIFont systemFontOfSize:14]; + btn.titleEdgeInsets = UIEdgeInsetsMake(0, 3, 0, 0); + return btn; +} + +- (void)likeButtonClicked +{ + if (self.likeButtonClickedOperation) { + self.likeButtonClickedOperation(); + } +} + +- (void)commentButtonClicked +{ + if (self.commentButtonClickedOperation) { + self.commentButtonClickedOperation(); + } + self.show = NO; +} + +- (void)setShow:(BOOL)show +{ + _show = show; + + [UIView animateWithDuration:0.2 animations:^{ + if (!show) { + [self clearAutoWidthSettings]; + self.sd_layout + .widthIs(0); + } else { + self.fixedWidth = nil; + [self setupAutoWidthWithRightView:_commentButton rightMargin:5]; + } + [self updateLayoutWithCellContentView:self.superview]; + }]; +} + +@end From aed17e24992bd9985c647a655976f09e41e4f195 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Tue, 5 Apr 2016 19:59:03 +0800 Subject: [PATCH 138/276] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 109788 -> 110042 bytes SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index b1f5f3e4788480ca6faf424f41d66b167444ba8a..78281223f218e39cbb4418960dbdeb3859102b8e 100644 GIT binary patch literal 110042 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⪚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 a&B6cvr%R{*```Yt|M$QD|KFi8GyVtg^CF4> diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m index cd74894..db3831e 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/DemoVC9.m @@ -246,7 +246,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N [cell setMoreButtonClickedBlock:^(NSIndexPath *indexPath) { SDTimeLineCellModel *model = weakSelf.dataArray[indexPath.row]; model.isOpening = !model.isOpening; - [weakSelf.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + [weakSelf.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; }]; cell.delegate = self; } From a896674065d9bef7fd008fc6c6dea60d3a46e9cb Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Wed, 6 Apr 2016 20:38:15 +0800 Subject: [PATCH 139/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bb8ce5a..c70f8be 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef ## 技术支持(QQ交流群): -497140713(1群) 519489682(已满) +544793021(3群) 497140713(1群) 519489682(2群已满) ##Pod支持: From 6733555408957c9a2e4eaf92572465b8bdbd4238 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 11 Apr 2016 00:59:52 +0800 Subject: [PATCH 140/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c70f8be..4a5ea80 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef ## 技术支持(QQ交流群): -544793021(3群) 497140713(1群) 519489682(2群已满) +497140713(1群) 519489682(2群已满) ##Pod支持: From f4ece5d4530889e49564b3614dd428b5cd9868c9 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 11 Apr 2016 01:01:34 +0800 Subject: [PATCH 141/276] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4a5ea80..921eea9 100644 --- a/README.md +++ b/README.md @@ -11,13 +11,15 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef ##Pod支持: -支持pod: pod 'SDAutoLayout', '~> 1.50' +支持pod: pod 'SDAutoLayout', '~> 1.51' 如果发现pod search SDAutoLayout 搜索出来的不是最新版本,需要在终端执行cd转换文件路径命令退回到desktop,然后执行pod setup命令更新本地spec缓存(可能需要几分钟),然后再搜索就可以了 ## 更新记录: -2016.03.23 -- 升级了缓存机制,新版本在tableview滑动cell时候流畅度和性能提升20%以上 +2016.04.05 -- 修复宽度自适应label在重用时候偶尔出现的宽度计算不准确的问题(发布pod1.51版本) + +2016.03.23 -- 升级了缓存机制,新版本在tableview滑动cell时候流畅度和性能提升20%以上(发布pod1.50版本) 2016.01.23 -- 增加label对attributedString的内容自适应 From dd1de94f33b7c17747fee52df5fc5d68f3774b07 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Mon, 11 Apr 2016 01:19:08 +0800 Subject: [PATCH 142/276] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDAutoLayout.podspec | 6 +++--- .../UserInterfaceState.xcuserstate | Bin 34870 -> 35619 bytes .../UITableView+SDAutoTableViewCellHeight.m | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/SDAutoLayout.podspec b/SDAutoLayout.podspec index 1970a91..685ab33 100644 --- a/SDAutoLayout.podspec +++ b/SDAutoLayout.podspec @@ -1,8 +1,8 @@ Pod::Spec.new do |s| s.name = "SDAutoLayout" - s.version = "1.50" - s.summary = "The most easy way for autoLayout. Based Runtime. 1.50版本更新内容:升级了缓存机制,新版本在tableview滑动cell时候流畅度和性能提升20%以上" + s.version = "1.51" + s.summary = "The most easy way for autoLayout. Based Runtime. 1.51版本更新内容:修复宽度自适应label在重用时候偶尔出现的宽度计算不准确的问题" s.homepage = "https://github.com/gsdios/SDAutoLayout" # s.screenshots = "https://camo.githubusercontent.com/5d9e879c7006297b3d6e12c20c6cd1e15bf83016/687474703a2f2f7777332e73696e61696d672e636e2f626d6964646c652f39623831343665646777316578346d756b69787236673230396730376c6864742e676966" @@ -14,7 +14,7 @@ Pod::Spec.new do |s| s.platform = :ios s.platform = :ios, "7.0" - s.source = { :git => "https://github.com/gsdios/SDAutoLayout.git", :tag => "1.50"} + s.source = { :git => "https://github.com/gsdios/SDAutoLayout.git", :tag => "1.51"} s.source_files = "SDAutoLayoutDemo/SDAutoLayout/**/*.{h,m}" diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/aier.xcuserdatad/UserInterfaceState.xcuserstate index 4fd8c6d739be89b7bc3c447feb64f957a7f7d44f..5bc1c73a8afe294e200465b5041dfad73b730ec9 100644 GIT binary patch literal 35619 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 literal 34870 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 Vi?F5!j#Flq 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 *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation +- (void)sd_reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation { [self.cellAutoHeightManager clearHeightCacheOfIndexPaths:indexPaths]; [self sd_reloadRowsAtIndexPaths:indexPaths withRowAnimation:animation]; From de02f0d796ab463d56d81d9a0a7f7f74e5c46f2b Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Tue, 12 Apr 2016 21:16:09 +0800 Subject: [PATCH 143/276] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=AE=BD=E5=BA=A6=E8=87=AA=E9=80=82=E5=BA=94label=20=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E6=AC=A1=E5=87=BA=E7=8E=B0=E6=97=B6=E9=AB=98=E5=BA=A6?= =?UTF-8?q?=E4=B8=BA0=20=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 110042 -> 110665 bytes .../SDAutoLayout/UIView+SDAutoLayout.m | 7 ++++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 78281223f218e39cbb4418960dbdeb3859102b8e..bc2a41cef121d499cdd7140367cdc06fc575a745 100644 GIT binary patch literal 110665 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⪚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 Date: Wed, 13 Apr 2016 21:14:21 +0800 Subject: [PATCH 144/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 921eea9..14bee06 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ SDAutoLayout使用者开发的部分app截图 http://www.jianshu.com/p/9bc04d3ef ##Pod支持: -支持pod: pod 'SDAutoLayout', '~> 1.51' +支持pod: pod 'SDAutoLayout', '~> 1.52' 如果发现pod search SDAutoLayout 搜索出来的不是最新版本,需要在终端执行cd转换文件路径命令退回到desktop,然后执行pod setup命令更新本地spec缓存(可能需要几分钟),然后再搜索就可以了 From 19cc5ea83684edbe734de1d871bf845c97af2a04 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Fri, 15 Apr 2016 13:18:05 +0800 Subject: [PATCH 145/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=B8=B8=E8=A7=81?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDAutoLayout.podspec | 6 +++--- .../UserInterfaceState.xcuserstate | Bin 110665 -> 110725 bytes .../UITableView+SDAutoTableViewCellHeight.m | 7 +++++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/SDAutoLayout.podspec b/SDAutoLayout.podspec index 685ab33..944c8d9 100644 --- a/SDAutoLayout.podspec +++ b/SDAutoLayout.podspec @@ -1,8 +1,8 @@ Pod::Spec.new do |s| s.name = "SDAutoLayout" - s.version = "1.51" - s.summary = "The most easy way for autoLayout. Based Runtime. 1.51版本更新内容:修复宽度自适应label在重用时候偶尔出现的宽度计算不准确的问题" + s.version = "1.52" + s.summary = "The most easy way for autoLayout. 1.52版本更新内容:修复宽度自适应label在重用时候偶尔出现的宽度计算不准确的问题" s.homepage = "https://github.com/gsdios/SDAutoLayout" # s.screenshots = "https://camo.githubusercontent.com/5d9e879c7006297b3d6e12c20c6cd1e15bf83016/687474703a2f2f7777332e73696e61696d672e636e2f626d6964646c652f39623831343665646777316578346d756b69787236673230396730376c6864742e676966" @@ -14,7 +14,7 @@ Pod::Spec.new do |s| s.platform = :ios s.platform = :ios, "7.0" - s.source = { :git => "https://github.com/gsdios/SDAutoLayout.git", :tag => "1.51"} + s.source = { :git => "https://github.com/gsdios/SDAutoLayout.git", :tag => "1.52"} s.source_files = "SDAutoLayoutDemo/SDAutoLayout/**/*.{h,m}" diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index bc2a41cef121d499cdd7140367cdc06fc575a745..348545da298025a951a5ac44cbf329d2d3722aba 100644 GIT binary patch delta 40167 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

d&I|AQ}20KC1J2Ob1I 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_82@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_82@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..38a36e67632f6943ddaa91ade05cbc6292bd53bf GIT binary patch literal 2393 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 Hu0mjf7t>U7 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_85@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_85@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..d622adfc3d3275a0eed22eca87385672cbf7351c GIT binary patch literal 2320 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_88@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_88@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..a81b326363975797b125059f7c64ff02d08905a6 GIT binary patch literal 2345 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 N002ovPDHLkV1l@OS{(oY literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_90@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_90@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..35a177d8b91206b5601e103d2cdce9e1113ad529 GIT binary patch literal 2479 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 N002ovPDHLkV1g06(%Aq2 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_92@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_92@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..d43f499dfc8f6f3e76774121429ec5b6d48a77e4 GIT binary patch literal 2042 zcmVCdRYkPm3U*Fw(a&EjgT#`z; z3uJtfCvVPe(mc=ieczLF?&bfS>s&{06(AcLT7X@6utD_pCj8IiKxg6SS2{oxi2I7- zK~KI;+Whk6oy6nN*$E>f37`px0o?`v*8m!_A^Ism_^xI6%DA@{9A?5NX;-0m;04 z^XL5A=M)082Lb_9Rm}zPG#O^joI!P@hQ7W&nwy(3MhpO+xxZ$Yd0<+%b+E46+&^ts zdhZuo0K`}}gi9L^;9}s=B#dJ7m$Sq%Aw;~Qq5|8t0gzHMS-j9fp{AyW8x}64IbOl{ zH>gpiCfz7Bi8Pf)BwLeD&+nI((j>O`cF1r;Kazft^zZpo4A7Drotyw~d@RdiGK`Op zW11#Qmo4S@d-np8TfU^CR9Yw@8&nAa1;x(Fu&MaLho0fA@g9m{DkHQmcly~8%E=4j zI1ZEHz~2rsHfoScCRww3HCeJjrhPfU#0+t3kJD0YkH}GxsHRLl{)l4dZAew3T^#Eef=&I0l;$U5=LSJNnltA&LbF+U;+|B zo-ZJY0`<6r0UZeVEm!a`#0TeU%NhVU^FVD~?76Bi;|MaoF&A(EyFd=$0um6uR6xtC z*gPlhZ0UdZ_PZK3ZTy;1t`Uj@u|F9jtW^cy4TY!z@J$H6s{YBkzI=-Qp05IMtEw4n zZDVNN`dHxn@K)dnrhvkwX~E}v#whoUj`62q7vpJ}nJjAAUwjZM}S%SnzN|1gn z&j?-m1*MRh+Bzo23`&wUpHl!lIj)PeEW9cuj^kq64&~}VPbu@7zkqonk($Ey1J76~ zTq!-{w&UdFg|JKu%d!*Y3Xq@}gujI0a2OwNA57CMH0miIL*~sp4wh|WS{9kCawk7A zp29Ni{&EF)p;QMP+orCr4nfVcW*ZRoDH@cvd;%Dbw_>Q^_==#-~UrkCw3m z#bcyt8tF{N3o>KIbV||H)#aH?XO+oSU&%~{iF6w8I%P64JVq*+0q7{_U8oH(3P&iQ zX`DWNnpiAGb#*nx!0WHQ#&|l-gs<_OQYlZVOvW>PVc6ip&?r*Mj&eTC`QJbnqw6{& z7l!HX>0!>?dFaAs{hU$0TyG!{oJ|e$>hnM6)=fVJ;Vm_;D{*XxR4Sc2dC$B%aNJ-< z!#03&1?VjCIN{BHWo0F2&zxpx@MGFnm~8yE#m!$0V5L!~eWf zoJkm@z*8*9iy?E207*qoM6N<$g8hroLI3~& literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_93@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_93@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..c8a9e401f238fa1ef443e0951ed4bc4ce2fbf7e6 GIT binary patch literal 2005 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_95@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_95@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..60a5f11605501c1e2c32fcef357686f90d544f73 GIT binary patch literal 2384 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 XMXCV;3&Ui100000NkvXXu0mjf@~u?Z literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_97@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_97@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..4893d61ee0d2ed9e0d9a36d19d9fcf24b4494b63 GIT binary patch literal 2654 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 literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_98@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_98@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..6ce6c3db35305123ae5848746367afa76255a451 GIT binary patch literal 2077 zcmV+&2;%pNP)7%8b#0kNq-(AJgQR_({eR?`Y7B5@0NF+i>M+X}>Zrl#M0T`cV zfP>*0@9OGe^XAPg2HUnVO_M^QKwDcIn>KCg1cpAX06T-``}+ErnVI3hfdlN{{|e{d zf1d{*cz{}z%VqNUJh@zssi`TNo10NV`hdQr4qyP=sLW(m#B&2i<*6(%Pqxp3hEnM{VtE*MK0pf~shLqkIV%FHaID#+;QD6W)9*JWT} zJGF2e$J>ERmo9k$rl+UTG|d2dm#hzjf4HvedaF6|%VD0_y&Hg?kMHEZ`|ranmFT!_ zgSXOkG7j9nR6EceUPV_aolfD?-rkO5JKkIa4bh+uB2>XW)RYB!afKmG{l?1|_0DJh zvLt;V&OWs`}C32*fq2r*VqfUx;qp~>eF zfF?o0iWP!KdJ@PQ4b(^;j)JL3s9C*piIqI+`yrj+cRFXn*Oh64cXn7-WicnA9{@ek5IEjT$qWAO=JLQ8E8o+2XimqrSHv7-_T< z8^GCJt;>uZnP$S+l@O+cB2Yp}DghP}C(vkO2ogX-C;?4COeh69soGgg3C|UaJT^TA z@Ks=6Bb|6VU_3iN&wI8_7`>vXfH;rju66sYh_MK-mV;GOw;sK zvMfrDL!JfM1`N~_ptHt7-7^-}2fEHoEJjQzs=`DnA^f*i%d*fulBRi5;r!9NSIr}( ztaT0`zD?H~1s6wvZ0D?u*b8~WMIu;p3(|Kpc;$P?U_^58`$?w2^ zm-Wjn_|#Fxz0oh7^=(N$vng^A?_`1EQ15HE|W{vuC2d}>a12oX%h;8Ux+u3z24-tV=uX8kFoyA0yZh*TR$khTeCl(t)8 zZo(Z}RDe{Q%hf1N$CR}o- z-4W2oSpactYm{0@^sFl*gRYEqr>;w8U6D{F8^v)1Wh+9-YTjp&e(J;Hf1a={x*dzG zBiSGYh7wX!68uFer!;oM#-1FeIhbmi?iP-f%@`JQ7bO~H?0hk2ECO+4 zYl?a>?KWjBlJ&Q?VRYTVu?=8?`a%4o|0e#I(fH4DEx^A4*>T_5g!LV)00000NkvXX Hu0mjff&%1m literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_99@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_99@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..48b34be012d2ec3e358ef5a08ae0f2b44f7b2cd2 GIT binary patch literal 2233 zcmV;q2uAmbP)f!`T7XT!4nP%XNA_9^=Miz90$*QdU@>3=u!eI)a&9yN zN6unbqe6)Lfqg*q|7D;N*m1T2R8>_`Utizo^?LO^KJ5~U0!Okd=U{+HB*JU2z19Xa zos|K<-%q(1hH=i#7z_rPJb5y;wYBv0^ss;b{*}PyPa^|$z!8dY{dG;Wwzl%GfA8U; zhaMuwEw|jv*YCZTg9qPX%>xe-kH-;05RFEuuCCTu=Zztp?C0d_JGn;NT#Z zWioR7{XkgvCbu3u0K-as^=jG_(F0Nm8 z6CZx`5k+_mST)*HsF5NpU3@KGuaB);|3GtdGmk#gyxWI7$Xe z6Hml(Y=^~5mawm*llHy)Kq>a7*Y%HW&<(4ULOG7UUT%g*-9UT$K9XjVMT-_?nvvGl zZ?fy7W6PGUBoc{oMs^FZ1lS2|2D(d4q35y&^63DYP9Gl%m|E$k z^|~<4OC-~#*@$3T9tWgC;|P=~QA2LF?Qqz>+h*$S*nD#0NaY4 zdu|Pd8!M%Y92I`aufIHjw|_8&`)&wQe<293gK%f%Qd(p_dmMf3OILaLO-q!wzdwa* zr}@bzbMGtt{wT0%gy2_}?160XD~g%8(&t-$C_NU}kFR2`&(DL)#`D#AVGuepg^p`nk{muExW?<@(he8$8TfFs3;UD=2T&P_?8@mrzyb4^i{roaF!VcxuN`Wn z1fX9jo*qsz0^7=+LOHhQXTfkB9e6%2UAuz72{%3KLR8!Zp@jxYI0%VGIRb1!?C*XC z{uCq#cm%lecF+$j5BNBcGATmrZ2uoWm*D69-O;1y{N3t~@%IsW4)vA+Zv z`j1cR)U#oZes?_abnt$iJ@5b$$j_)B`0LP6@fgZF%#|3ccZ9=yqoINMy}bY^zyeYk zDZOF=PQJ;kJlWv02K0vPGz@kolRTdeKIS;Z>i@BGFp&MFp@0|L+L*U%7vYT?8CDPn zY#@5+C3q?-a1^M5REq`kaU2J0;zZ1v8se8<&W@K};@*`jIRo`T_u2LUz-Hjv`Dc_R zO-)RhIu#)V4iE>9DaBz0i+}P{F1qGw3Q(!0T$^L3c(0P3@A zddC_7NY0&mI`~v}O&mK$IS63-j2VR)uLM?&#%VMLpd5vx6sdITPiH{smH)o=HpNg% zX*qh$3Up5dLqYQB1Y)CgoZbo0-yg%aQrMvou~n;d@F_q6=D+~OupI}>wspW6X)}(a zd!g&#p~7sJf1EC(l-Rqcof~hynLr?j=l0uCGiT!3{%0Z|d_eVr`8wEKkEmSmmZc3? zj)R?*Wu-7P?+5t}4BeyoLbDBs{q2PpFouUQO;ZO_Id2|w*Z!QF{S=wSEE`7khpoMLRkfHE?mH_c`Ibfk0SH7e{L>k(`~tztuEP_I z;F1!VmL8LkYg}FLx_mOhCt?hC{)2F02gKeY;*rFM3}k<5TjE1=dpW<*iT1lDPzsNX zN2SmG+|(tWrJ5$*HSm7 z6K@~{{z{G?4l{A`04}GG#7F(Sx65p^lh%q)GL77BIY?=oP19~vO9K^dlniomzlEr!=<(=4zJRC18`p<{%jsQOu!-DI}Yqr_wYZTh^9=U zmIaOgCFyq3@+@qwi}zL3`6itNkpgQ7W%M!7l|m{*|62%)^s~r3^OKa2*nf|t6iUgc z!rkI1PqTl#zcCpnYNkT?s{^?F0#{IU^!HYF;PY<>ws9teT#jipM=MV?T0=D2hGO`X zh1WHJFQQ_}UZX>Z)OLZj`4bs<^J`u{%Sb-cj2Rd+FlOL?cfG)g3TAz%00000NkvXX Hu0mjfzgs#b literal 0 HcmV?d00001 diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_9@2x.png b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_Expression.bundle/Expression_9@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..870b98198ac7235b966a1dc9ce21d40b4148d9c8 GIT binary patch literal 2728 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 + + + + /::) + /::~ + /::B + /::| + /:8-) + /::< + /::$ + /::X + /::Z + /::'( + /::-| + /::@ + /::P + /::D + /::O + /::( + /::+ + /:--b + /::Q + /::T + /:,@P + /:,@-D + /::d + /:,@o + /::g + /:|-) + /::! + /::L + /::> + /::,@ + /:,@f + /::-S + /:? + /:,@x + /:,@@ + /::8 + /:,@! + /:!!! + /:xx + /:bye + /:wipe + /:dig + /:handclap + /:&-( + /:B-) + /:<@ + /:@> + /::-O + /:>-| + /:P-( + /::'| + /:X-) + /::* + /:@x + /:8* + /:pd + /:<W> + /:beer + /:basketb + /:oo + /:coffee + /:eat + /:pig + /:rose + /:fade + /:showlove + /:heart + /:break + /:cake + /:li + /:bome + /:kn + /:footb + /:ladybug + /:shit + /:moon + /:sun + /:gift + /:hug + /:strong + /:weak + /:share + /:v + /:@) + /:jj + /:@@ + /:bad + /:lvu + /:no + /:ok + /:love + /:<L> + /:jump + /:shake + /:<O> + /:circle + /:kotow + /:turn + /:skip + /:oY + + diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_ExpressionImage.plist b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_ExpressionImage.plist new file mode 100755 index 0000000..6cd86e0 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/MLEmoji_ExpressionImage.plist @@ -0,0 +1,206 @@ + + + + + /:!!! + Expression_38 + /:&-( + Expression_44 + /:,@! + Expression_37 + /:,@-D + Expression_22 + /:,@@ + Expression_35 + /:,@P + Expression_21 + /:,@f + Expression_31 + /:,@o + Expression_24 + /:,@x + Expression_34 + /:--b + Expression_18 + /:8* + Expression_55 + /:8-) + Expression_5 + /::! + Expression_27 + /::$ + Expression_7 + /::'( + Expression_10 + /::'| + Expression_51 + /::( + Expression_16 + /::) + Expression_1 + /::* + Expression_53 + /::+ + Expression_17 + /::,@ + Expression_30 + /::-O + Expression_48 + /::-S + Expression_32 + /::-| + Expression_11 + /::8 + Expression_36 + /::< + Expression_6 + /::> + Expression_29 + /::@ + Expression_12 + /::B + Expression_3 + /::D + Expression_14 + /::L + Expression_28 + /::O + Expression_15 + /::P + Expression_13 + /::Q + Expression_19 + /::T + Expression_20 + /::X + Expression_8 + /::Z + Expression_9 + /::d + Expression_23 + /::g + Expression_25 + /::| + Expression_4 + /::~ + Expression_2 + /:<@ + Expression_46 + /:<L> + Expression_92 + /:<O> + Expression_95 + /:<W> + Expression_57 + /:>-| + Expression_49 + /:? + Expression_33 + /:@) + Expression_84 + /:@> + Expression_47 + /:@@ + Expression_86 + /:@x + Expression_54 + /:B-) + Expression_45 + /:P-( + Expression_50 + /:X-) + Expression_52 + /:bad + Expression_87 + /:basketb + Expression_59 + /:beer + Expression_58 + /:bome + Expression_71 + /:break + Expression_68 + /:bye + Expression_40 + /:cake + Expression_69 + /:circle + Expression_96 + /:coffee + Expression_61 + /:dig + Expression_42 + /:eat + Expression_62 + /:fade + Expression_65 + /:footb + Expression_73 + /:gift + Expression_78 + /:handclap + Expression_43 + /:heart + Expression_67 + /:hug + Expression_79 + /:jj + Expression_85 + /:jump + Expression_93 + /:kn + Expression_72 + /:kotow + Expression_97 + /:ladybug + Expression_74 + /:li + Expression_70 + /:love + Expression_91 + /:lvu + Expression_88 + /:moon + Expression_76 + /:no + Expression_89 + /:oY + Expression_100 + /:ok + Expression_90 + /:oo + Expression_60 + /:pd + Expression_56 + /:pig + Expression_63 + /:rose + Expression_64 + /:shake + Expression_94 + /:share + Expression_82 + /:shit + Expression_75 + /:showlove + Expression_66 + /:skip + Expression_99 + /:strong + Expression_80 + /:sun + Expression_77 + /:turn + Expression_98 + /:v + Expression_83 + /:weak + Expression_81 + /:wipe + Expression_41 + /:xx + Expression_39 + /:|-) + Expression_26 + + diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/TTTAttributedLabel/TTTAttributedLabel.h b/SDAutoLayoutDemo/Vender/MLEmojiLabel/TTTAttributedLabel/TTTAttributedLabel.h new file mode 100755 index 0000000..7e9691e --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/TTTAttributedLabel/TTTAttributedLabel.h @@ -0,0 +1,698 @@ +// TTTAttributedLabel.h +// +// Copyright (c) 2011 Mattt Thompson (http://mattt.me) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import + +//! Project version number for TTTAttributedLabel. +FOUNDATION_EXPORT double TTTAttributedLabelVersionNumber; + +//! Project version string for TTTAttributedLabel. +FOUNDATION_EXPORT const unsigned char TTTAttributedLabelVersionString[]; + +@class TTTAttributedLabelLink; + +/** + Vertical alignment for text in a label whose bounds are larger than its text bounds + */ +typedef NS_ENUM(NSInteger, TTTAttributedLabelVerticalAlignment) { + TTTAttributedLabelVerticalAlignmentCenter = 0, + TTTAttributedLabelVerticalAlignmentTop = 1, + TTTAttributedLabelVerticalAlignmentBottom = 2, +}; + +/** + Determines whether the text to which this attribute applies has a strikeout drawn through itself. + */ +extern NSString * const kTTTStrikeOutAttributeName; + +/** + The background fill color. Value must be a `CGColorRef`. Default value is `nil` (no fill). + */ +extern NSString * const kTTTBackgroundFillColorAttributeName; + +/** + The padding for the background fill. Value must be a `UIEdgeInsets`. Default value is `UIEdgeInsetsZero` (no padding). + */ +extern NSString * const kTTTBackgroundFillPaddingAttributeName; + +/** + The background stroke color. Value must be a `CGColorRef`. Default value is `nil` (no stroke). + */ +extern NSString * const kTTTBackgroundStrokeColorAttributeName; + +/** + The background stroke line width. Value must be an `NSNumber`. Default value is `1.0f`. + */ +extern NSString * const kTTTBackgroundLineWidthAttributeName; + +/** + The background corner radius. Value must be an `NSNumber`. Default value is `5.0f`. + */ +extern NSString * const kTTTBackgroundCornerRadiusAttributeName; + +@protocol TTTAttributedLabelDelegate; + +// Override UILabel @property to accept both NSString and NSAttributedString +@protocol TTTAttributedLabel +@property (nonatomic, copy) IBInspectable id text; +@end + +IB_DESIGNABLE + +/** + `TTTAttributedLabel` is a drop-in replacement for `UILabel` that supports `NSAttributedString`, as well as automatically-detected and manually-added links to URLs, addresses, phone numbers, and dates. + + ## Differences Between `TTTAttributedLabel` and `UILabel` + + For the most part, `TTTAttributedLabel` behaves just like `UILabel`. The following are notable exceptions, in which `TTTAttributedLabel` may act differently: + + - `text` - This property now takes an `id` type argument, which can either be a kind of `NSString` or `NSAttributedString` (mutable or immutable in both cases) + - `attributedText` - Do not set this property directly. Instead, pass an `NSAttributedString` to `text`. + - `lineBreakMode` - This property displays only the first line when the value is `UILineBreakModeHeadTruncation`, `UILineBreakModeTailTruncation`, or `UILineBreakModeMiddleTruncation` + - `adjustsFontsizeToFitWidth` - Supported in iOS 5 and greater, this property is effective for any value of `numberOfLines` greater than zero. In iOS 4, setting `numberOfLines` to a value greater than 1 with `adjustsFontSizeToFitWidth` set to `YES` may cause `sizeToFit` to execute indefinitely. + - `baselineAdjustment` - This property has no affect. + - `textAlignment` - This property does not support justified alignment. + - `NSTextAttachment` - This string attribute is not supported. + + Any properties affecting text or paragraph styling, such as `firstLineIndent` will only apply when text is set with an `NSString`. If the text is set with an `NSAttributedString`, these properties will not apply. + + ### NSCoding + + `TTTAttributedLabel`, like `UILabel`, conforms to `NSCoding`. However, if the build target is set to less than iOS 6.0, `linkAttributes` and `activeLinkAttributes` will not be encoded or decoded. This is due to an runtime exception thrown when attempting to copy non-object CoreText values in dictionaries. + + @warning Any properties changed on the label after setting the text will not be reflected until a subsequent call to `setText:` or `setText:afterInheritingLabelAttributesAndConfiguringWithBlock:`. This is to say, order of operations matters in this case. For example, if the label text color is originally black when the text is set, changing the text color to red will have no effect on the display of the label until the text is set once again. + + @bug Setting `attributedText` directly is not recommended, as it may cause a crash when attempting to access any links previously set. Instead, call `setText:`, passing an `NSAttributedString`. + */ +@interface TTTAttributedLabel : UILabel + +/** + * The designated initializers are @c initWithFrame: and @c initWithCoder:. + * init will not properly initialize many required properties and other configuration. + */ +- (instancetype) init NS_UNAVAILABLE; + +///----------------------------- +/// @name Accessing the Delegate +///----------------------------- + +/** + The receiver's delegate. + + @discussion A `TTTAttributedLabel` delegate responds to messages sent by tapping on links in the label. You can use the delegate to respond to links referencing a URL, address, phone number, date, or date with a specified time zone and duration. + */ +@property (nonatomic, unsafe_unretained) IBOutlet id delegate; + +///-------------------------------------------- +/// @name Detecting, Accessing, & Styling Links +///-------------------------------------------- + +/** + @deprecated Use `enabledTextCheckingTypes` property instead. + */ +@property (nonatomic, assign) NSTextCheckingTypes dataDetectorTypes DEPRECATED_ATTRIBUTE; + +/** + A bitmask of `NSTextCheckingType` which are used to automatically detect links in the label text. + + @warning You must specify `enabledTextCheckingTypes` before setting the `text`, with either `setText:` or `setText:afterInheritingLabelAttributesAndConfiguringWithBlock:`. + */ +@property (nonatomic, assign) NSTextCheckingTypes enabledTextCheckingTypes; + +/** + An array of `NSTextCheckingResult` objects for links detected or manually added to the label text. + */ +@property (readonly, nonatomic, strong) NSArray *links; + +/** + A dictionary containing the default `NSAttributedString` attributes to be applied to links detected or manually added to the label text. The default link style is blue and underlined. + + @warning You must specify `linkAttributes` before setting autodecting or manually-adding links for these attributes to be applied. + */ +@property (nonatomic, strong) NSDictionary *linkAttributes; + +/** + A dictionary containing the default `NSAttributedString` attributes to be applied to links when they are in the active state. If `nil` or an empty `NSDictionary`, active links will not be styled. The default active link style is red and underlined. + */ +@property (nonatomic, strong) NSDictionary *activeLinkAttributes; + +/** + A dictionary containing the default `NSAttributedString` attributes to be applied to links when they are in the inactive state, which is triggered by a change in `tintColor` in iOS 7 and later. If `nil` or an empty `NSDictionary`, inactive links will not be styled. The default inactive link style is gray and unadorned. + */ +@property (nonatomic, strong) NSDictionary *inactiveLinkAttributes; + +/** + The edge inset for the background of a link. The default value is `{0, -1, 0, -1}`. + */ +@property (nonatomic, assign) UIEdgeInsets linkBackgroundEdgeInset; + +/** + Indicates if links will be detected within an extended area around the touch + to emulate the link detection behaviour of UIWebView. + Default value is YES. Disable to to improve performance on long labels. + */ +@property (nonatomic, assign) BOOL extendsLinkTouchArea; + +///--------------------------------------- +/// @name Acccessing Text Style Attributes +///--------------------------------------- + +/** + The shadow blur radius for the label. A value of 0 indicates no blur, while larger values produce correspondingly larger blurring. This value must not be negative. The default value is 0. + */ +@property (nonatomic, assign) IBInspectable CGFloat shadowRadius; + +/** + The shadow blur radius for the label when the label's `highlighted` property is `YES`. A value of 0 indicates no blur, while larger values produce correspondingly larger blurring. This value must not be negative. The default value is 0. + */ +@property (nonatomic, assign) IBInspectable CGFloat highlightedShadowRadius; +/** + The shadow offset for the label when the label's `highlighted` property is `YES`. A size of {0, 0} indicates no offset, with positive values extending down and to the right. The default size is {0, 0}. + */ +@property (nonatomic, assign) IBInspectable CGSize highlightedShadowOffset; +/** + The shadow color for the label when the label's `highlighted` property is `YES`. The default value is `nil` (no shadow color). + */ +@property (nonatomic, strong) IBInspectable UIColor *highlightedShadowColor; + +/** + The amount to kern the next character. Default is standard kerning. If this attribute is set to 0.0, no kerning is done at all. + */ +@property (nonatomic, assign) IBInspectable CGFloat kern; + +///-------------------------------------------- +/// @name Acccessing Paragraph Style Attributes +///-------------------------------------------- + +/** + The distance, in points, from the leading margin of a frame to the beginning of the paragraph's first line. This value is always nonnegative, and is 0.0 by default. + */ +@property (nonatomic, assign) IBInspectable CGFloat firstLineIndent; + +/** + @deprecated Use `lineSpacing` instead. + */ +@property (nonatomic, assign) IBInspectable CGFloat leading DEPRECATED_ATTRIBUTE; + +/** + The space in points added between lines within the paragraph. This value is always nonnegative and is 0.0 by default. + */ +@property (nonatomic, assign) IBInspectable CGFloat lineSpacing; + +/** + The minimum line height within the paragraph. If the value is 0.0, the minimum line height is set to the line height of the `font`. 0.0 by default. + */ +@property (nonatomic, assign) IBInspectable CGFloat minimumLineHeight; + +/** + The maximum line height within the paragraph. If the value is 0.0, the maximum line height is set to the line height of the `font`. 0.0 by default. + */ +@property (nonatomic, assign) IBInspectable CGFloat maximumLineHeight; + +/** + The line height multiple. This value is 1.0 by default. + */ +@property (nonatomic, assign) IBInspectable CGFloat lineHeightMultiple; + +/** + The distance, in points, from the margin to the text container. This value is `UIEdgeInsetsZero` by default. + + @discussion The `UIEdgeInset` members correspond to paragraph style properties rather than a particular geometry, and can change depending on the writing direction. + + ## `UIEdgeInset` Member Correspondence With `CTParagraphStyleSpecifier` Values: + + - `top`: `kCTParagraphStyleSpecifierParagraphSpacingBefore` + - `left`: `kCTParagraphStyleSpecifierHeadIndent` + - `bottom`: `kCTParagraphStyleSpecifierParagraphSpacing` + - `right`: `kCTParagraphStyleSpecifierTailIndent` + + */ +@property (nonatomic, assign) IBInspectable UIEdgeInsets textInsets; + +/** + The vertical text alignment for the label, for when the frame size is greater than the text rect size. The vertical alignment is `TTTAttributedLabelVerticalAlignmentCenter` by default. + */ +@property (nonatomic, assign) TTTAttributedLabelVerticalAlignment verticalAlignment; + +///-------------------------------------------- +/// @name Accessing Truncation Token Appearance +///-------------------------------------------- + +/** + @deprecated Use `attributedTruncationToken` instead. + */ +@property (nonatomic, strong) NSString *truncationTokenString DEPRECATED_ATTRIBUTE; + +/** + @deprecated Use `attributedTruncationToken` instead. + */ +@property (nonatomic, strong) NSDictionary *truncationTokenStringAttributes DEPRECATED_ATTRIBUTE; + +/** + The attributed string to apply to the truncation token at the end of a truncated line. Overrides `truncationTokenStringAttributes` and `truncationTokenString`. If unspecified, attributes will fallback to `truncationTokenStringAttributes` and `truncationTokenString`. + */ +@property (nonatomic, strong) IBInspectable NSAttributedString *attributedTruncationToken; + +///-------------------------- +/// @name Long press gestures +///-------------------------- + +/** + * The long-press gesture recognizer used internally by the label. + */ +@property (nonatomic, strong, readonly) UILongPressGestureRecognizer *longPressGestureRecognizer; + +///-------------------------------------------- +/// @name Calculating Size of Attributed String +///-------------------------------------------- + +/** + Calculate and return the size that best fits an attributed string, given the specified constraints on size and number of lines. + + @param attributedString The attributed string. + @param size The maximum dimensions used to calculate size. + @param numberOfLines The maximum number of lines in the text to draw, if the constraining size cannot accomodate the full attributed string. + + @return The size that fits the attributed string within the specified constraints. + */ ++ (CGSize)sizeThatFitsAttributedString:(NSAttributedString *)attributedString + withConstraints:(CGSize)size + limitedToNumberOfLines:(NSUInteger)numberOfLines; + +///---------------------------------- +/// @name Setting the Text Attributes +///---------------------------------- + +/** + Sets the text displayed by the label. + + @param text An `NSString` or `NSAttributedString` object to be displayed by the label. If the specified text is an `NSString`, the label will display the text like a `UILabel`, inheriting the text styles of the label. If the specified text is an `NSAttributedString`, the label text styles will be overridden by the styles specified in the attributed string. + + @discussion This method overrides `UILabel -setText:` to accept both `NSString` and `NSAttributedString` objects. This string is `nil` by default. + */ +- (void)setText:(id)text; + +/** + Sets the text displayed by the label, after configuring an attributed string containing the text attributes inherited from the label in a block. + + @param text An `NSString` or `NSAttributedString` object to be displayed by the label. + @param block A block object that returns an `NSMutableAttributedString` object and takes a single argument, which is an `NSMutableAttributedString` object with the text from the first parameter, and the text attributes inherited from the label text styles. For example, if you specified the `font` of the label to be `[UIFont boldSystemFontOfSize:14]` and `textColor` to be `[UIColor redColor]`, the `NSAttributedString` argument of the block would be contain the `NSAttributedString` attribute equivalents of those properties. In this block, you can set further attributes on particular ranges. + + @discussion This string is `nil` by default. + */ +- (void)setText:(id)text +afterInheritingLabelAttributesAndConfiguringWithBlock:(NSMutableAttributedString *(^)(NSMutableAttributedString *mutableAttributedString))block; + +///------------------------------------ +/// @name Accessing the Text Attributes +///------------------------------------ + +/** + A copy of the label's current attributedText. This returns `nil` if an attributed string has never been set on the label. + + @warning Do not set this property directly. Instead, set @c text to an @c NSAttributedString. + */ +@property (readwrite, nonatomic, copy) NSAttributedString *attributedText; + +///------------------- +/// @name Adding Links +///------------------- + +/** + Adds a link. You can customize an individual link's appearance and accessibility value by creating your own @c TTTAttributedLabelLink and passing it to this method. The other methods for adding links will use the label's default attributes. + + @warning Modifying the link's attribute dictionaries must be done before calling this method. + + @param link A @c TTTAttributedLabelLink object. + */ +- (void)addLink:(TTTAttributedLabelLink *)link; + +/** + Adds a link to an @c NSTextCheckingResult. + + @param result An @c NSTextCheckingResult representing the link's location and type. + + @return The newly added link object. + */ +- (TTTAttributedLabelLink *)addLinkWithTextCheckingResult:(NSTextCheckingResult *)result; + +/** + Adds a link to an @c NSTextCheckingResult. + + @param result An @c NSTextCheckingResult representing the link's location and type. + @param attributes The attributes to be added to the text in the range of the specified link. If set, the label's @c activeAttributes and @c inactiveAttributes will be applied to the link. If `nil`, no attributes are added to the link. + + @return The newly added link object. + */ +- (TTTAttributedLabelLink *)addLinkWithTextCheckingResult:(NSTextCheckingResult *)result + attributes:(NSDictionary *)attributes; + +/** + Adds a link to a URL for a specified range in the label text. + + @param url The url to be linked to + @param range The range in the label text of the link. The range must not exceed the bounds of the receiver. + + @return The newly added link object. + */ +- (TTTAttributedLabelLink *)addLinkToURL:(NSURL *)url + withRange:(NSRange)range; + +/** + Adds a link to an address for a specified range in the label text. + + @param addressComponents A dictionary of address components for the address to be linked to + @param range The range in the label text of the link. The range must not exceed the bounds of the receiver. + + @discussion The address component dictionary keys are described in `NSTextCheckingResult`'s "Keys for Address Components." + + @return The newly added link object. + */ +- (TTTAttributedLabelLink *)addLinkToAddress:(NSDictionary *)addressComponents + withRange:(NSRange)range; + +/** + Adds a link to a phone number for a specified range in the label text. + + @param phoneNumber The phone number to be linked to. + @param range The range in the label text of the link. The range must not exceed the bounds of the receiver. + + @return The newly added link object. + */ +- (TTTAttributedLabelLink *)addLinkToPhoneNumber:(NSString *)phoneNumber + withRange:(NSRange)range; + +/** + Adds a link to a date for a specified range in the label text. + + @param date The date to be linked to. + @param range The range in the label text of the link. The range must not exceed the bounds of the receiver. + + @return The newly added link object. + */ +- (TTTAttributedLabelLink *)addLinkToDate:(NSDate *)date + withRange:(NSRange)range; + +/** + Adds a link to a date with a particular time zone and duration for a specified range in the label text. + + @param date The date to be linked to. + @param timeZone The time zone of the specified date. + @param duration The duration, in seconds from the specified date. + @param range The range in the label text of the link. The range must not exceed the bounds of the receiver. + + @return The newly added link object. + */ +- (TTTAttributedLabelLink *)addLinkToDate:(NSDate *)date + timeZone:(NSTimeZone *)timeZone + duration:(NSTimeInterval)duration + withRange:(NSRange)range; + +/** + Adds a link to transit information for a specified range in the label text. + + @param components A dictionary containing the transit components. The currently supported keys are `NSTextCheckingAirlineKey` and `NSTextCheckingFlightKey`. + @param range The range in the label text of the link. The range must not exceed the bounds of the receiver. + + @return The newly added link object. + */ +- (TTTAttributedLabelLink *)addLinkToTransitInformation:(NSDictionary *)components + withRange:(NSRange)range; + +/** + Returns whether an @c NSTextCheckingResult is found at the give point. + + @discussion This can be used together with @c UITapGestureRecognizer to tap interactions with overlapping views. + + @param point The point inside the label. + */ +- (BOOL)containslinkAtPoint:(CGPoint)point; + +@end + +/** + The `TTTAttributedLabelDelegate` protocol defines the messages sent to an attributed label delegate when links are tapped. All of the methods of this protocol are optional. + */ +@protocol TTTAttributedLabelDelegate + +///----------------------------------- +/// @name Responding to Link Selection +///----------------------------------- +@optional + +/** + Tells the delegate that the user did select a link to a URL. + + @param label The label whose link was selected. + @param url The URL for the selected link. + */ +- (void)attributedLabel:(TTTAttributedLabel *)label + didSelectLinkWithURL:(NSURL *)url; + +/** + Tells the delegate that the user did select a link to an address. + + @param label The label whose link was selected. + @param addressComponents The components of the address for the selected link. + */ +- (void)attributedLabel:(TTTAttributedLabel *)label +didSelectLinkWithAddress:(NSDictionary *)addressComponents; + +/** + Tells the delegate that the user did select a link to a phone number. + + @param label The label whose link was selected. + @param phoneNumber The phone number for the selected link. + */ +- (void)attributedLabel:(TTTAttributedLabel *)label +didSelectLinkWithPhoneNumber:(NSString *)phoneNumber; + +/** + Tells the delegate that the user did select a link to a date. + + @param label The label whose link was selected. + @param date The datefor the selected link. + */ +- (void)attributedLabel:(TTTAttributedLabel *)label + didSelectLinkWithDate:(NSDate *)date; + +/** + Tells the delegate that the user did select a link to a date with a time zone and duration. + + @param label The label whose link was selected. + @param date The date for the selected link. + @param timeZone The time zone of the date for the selected link. + @param duration The duration, in seconds from the date for the selected link. + */ +- (void)attributedLabel:(TTTAttributedLabel *)label + didSelectLinkWithDate:(NSDate *)date + timeZone:(NSTimeZone *)timeZone + duration:(NSTimeInterval)duration; + +/** + Tells the delegate that the user did select a link to transit information + + @param label The label whose link was selected. + @param components A dictionary containing the transit components. The currently supported keys are `NSTextCheckingAirlineKey` and `NSTextCheckingFlightKey`. + */ +- (void)attributedLabel:(TTTAttributedLabel *)label +didSelectLinkWithTransitInformation:(NSDictionary *)components; + +/** + Tells the delegate that the user did select a link to a text checking result. + + @discussion This method is called if no other delegate method was called, which can occur by either now implementing the method in `TTTAttributedLabelDelegate` corresponding to a particular link, or the link was added by passing an instance of a custom `NSTextCheckingResult` subclass into `-addLinkWithTextCheckingResult:`. + + @param label The label whose link was selected. + @param result The custom text checking result. + */ +- (void)attributedLabel:(TTTAttributedLabel *)label +didSelectLinkWithTextCheckingResult:(NSTextCheckingResult *)result; + +///--------------------------------- +/// @name Responding to Long Presses +///--------------------------------- + +/** + * Long-press delegate methods include the CGPoint tapped within the label's coordinate space. + * This may be useful on iPad to present a popover from a specific origin point. + */ + +/** + Tells the delegate that the user long-pressed a link to a URL. + + @param label The label whose link was long pressed. + @param url The URL for the link. + @param point the point pressed, in the label's coordinate space + */ +- (void)attributedLabel:(TTTAttributedLabel *)label +didLongPressLinkWithURL:(NSURL *)url + atPoint:(CGPoint)point; + +/** + Tells the delegate that the user long-pressed a link to an address. + + @param label The label whose link was long pressed. + @param addressComponents The components of the address for the link. + @param point the point pressed, in the label's coordinate space + */ +- (void)attributedLabel:(TTTAttributedLabel *)label +didLongPressLinkWithAddress:(NSDictionary *)addressComponents + atPoint:(CGPoint)point; + +/** + Tells the delegate that the user long-pressed a link to a phone number. + + @param label The label whose link was long pressed. + @param phoneNumber The phone number for the link. + @param point the point pressed, in the label's coordinate space + */ +- (void)attributedLabel:(TTTAttributedLabel *)label +didLongPressLinkWithPhoneNumber:(NSString *)phoneNumber + atPoint:(CGPoint)point; + + +/** + Tells the delegate that the user long-pressed a link to a date. + + @param label The label whose link was long pressed. + @param date The date for the selected link. + @param point the point pressed, in the label's coordinate space + */ +- (void)attributedLabel:(TTTAttributedLabel *)label +didLongPressLinkWithDate:(NSDate *)date + atPoint:(CGPoint)point; + + +/** + Tells the delegate that the user long-pressed a link to a date with a time zone and duration. + + @param label The label whose link was long pressed. + @param date The date for the link. + @param timeZone The time zone of the date for the link. + @param duration The duration, in seconds from the date for the link. + @param point the point pressed, in the label's coordinate space + */ +- (void)attributedLabel:(TTTAttributedLabel *)label +didLongPressLinkWithDate:(NSDate *)date + timeZone:(NSTimeZone *)timeZone + duration:(NSTimeInterval)duration + atPoint:(CGPoint)point; + + +/** + Tells the delegate that the user long-pressed a link to transit information. + + @param label The label whose link was long pressed. + @param components A dictionary containing the transit components. The currently supported keys are `NSTextCheckingAirlineKey` and `NSTextCheckingFlightKey`. + @param point the point pressed, in the label's coordinate space + */ +- (void)attributedLabel:(TTTAttributedLabel *)label +didLongPressLinkWithTransitInformation:(NSDictionary *)components + atPoint:(CGPoint)point; + +/** + Tells the delegate that the user long-pressed a link to a text checking result. + + @discussion Similar to `-attributedLabel:didSelectLinkWithTextCheckingResult:`, this method is called if a link is long pressed and the delegate does not implement the method corresponding to this type of link. + + @param label The label whose link was long pressed. + @param result The custom text checking result. + @param point the point pressed, in the label's coordinate space + */ +- (void)attributedLabel:(TTTAttributedLabel *)label +didLongPressLinkWithTextCheckingResult:(NSTextCheckingResult *)result + atPoint:(CGPoint)point; + +@end + +@interface TTTAttributedLabelLink : NSObject + +typedef void (^TTTAttributedLabelLinkBlock) (TTTAttributedLabel *, TTTAttributedLabelLink *); + +/** + An `NSTextCheckingResult` representing the link's location and type. + */ +@property (readonly, nonatomic, strong) NSTextCheckingResult *result; + +/** + A dictionary containing the @c NSAttributedString attributes to be applied to the link. + */ +@property (readonly, nonatomic, copy) NSDictionary *attributes; + +/** + A dictionary containing the @c NSAttributedString attributes to be applied to the link when it is in the active state. + */ +@property (readonly, nonatomic, copy) NSDictionary *activeAttributes; + +/** + A dictionary containing the @c NSAttributedString attributes to be applied to the link when it is in the inactive state, which is triggered by a change in `tintColor` in iOS 7 and later. + */ +@property (readonly, nonatomic, copy) NSDictionary *inactiveAttributes; + +/** + Additional information about a link for VoiceOver users. Has default values if the link's @c result is @c NSTextCheckingTypeLink, @c NSTextCheckingTypePhoneNumber, or @c NSTextCheckingTypeDate. + */ +@property (nonatomic, copy) NSString *accessibilityValue; + +/** + A block called when this link is tapped. + If non-nil, tapping on this link will call this block instead of the + @c TTTAttributedLabelDelegate tap methods, which will not be called for this link. + */ +@property (nonatomic, copy) TTTAttributedLabelLinkBlock linkTapBlock; + +/** + A block called when this link is long-pressed. + If non-nil, long pressing on this link will call this block instead of the + @c TTTAttributedLabelDelegate long press methods, which will not be called for this link. + */ +@property (nonatomic, copy) TTTAttributedLabelLinkBlock linkLongPressBlock; + +/** + Initializes a link using the attribute dictionaries specified. + + @param attributes The @c attributes property for the link. + @param activeAttributes The @c activeAttributes property for the link. + @param inactiveAttributes The @c inactiveAttributes property for the link. + @param result An @c NSTextCheckingResult representing the link's location and type. + + @return The initialized link object. + */ +- (instancetype)initWithAttributes:(NSDictionary *)attributes + activeAttributes:(NSDictionary *)activeAttributes + inactiveAttributes:(NSDictionary *)inactiveAttributes + textCheckingResult:(NSTextCheckingResult *)result; + +/** + Initializes a link using the attribute dictionaries set on a specified label. + + @param label The attributed label from which to inherit attribute dictionaries. + @param result An @c NSTextCheckingResult representing the link's location and type. + + @return The initialized link object. + */ +- (instancetype)initWithAttributesFromLabel:(TTTAttributedLabel*)label + textCheckingResult:(NSTextCheckingResult *)result; + +@end diff --git a/SDAutoLayoutDemo/Vender/MLEmojiLabel/TTTAttributedLabel/TTTAttributedLabel.m b/SDAutoLayoutDemo/Vender/MLEmojiLabel/TTTAttributedLabel/TTTAttributedLabel.m new file mode 100755 index 0000000..264a0c3 --- /dev/null +++ b/SDAutoLayoutDemo/Vender/MLEmojiLabel/TTTAttributedLabel/TTTAttributedLabel.m @@ -0,0 +1,1887 @@ +// TTTAttributedLabel.m +// +// Copyright (c) 2011 Mattt Thompson (http://mattt.me) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "TTTAttributedLabel.h" + +#import +#import +#import + +#define kTTTLineBreakWordWrapTextWidthScalingFactor (M_PI / M_E) + +static CGFloat const TTTFLOAT_MAX = 100000; + +NSString * const kTTTStrikeOutAttributeName = @"TTTStrikeOutAttribute"; +NSString * const kTTTBackgroundFillColorAttributeName = @"TTTBackgroundFillColor"; +NSString * const kTTTBackgroundFillPaddingAttributeName = @"TTTBackgroundFillPadding"; +NSString * const kTTTBackgroundStrokeColorAttributeName = @"TTTBackgroundStrokeColor"; +NSString * const kTTTBackgroundLineWidthAttributeName = @"TTTBackgroundLineWidth"; +NSString * const kTTTBackgroundCornerRadiusAttributeName = @"TTTBackgroundCornerRadius"; + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 60000 +const NSTextAlignment TTTTextAlignmentLeft = NSTextAlignmentLeft; +const NSTextAlignment TTTTextAlignmentCenter = NSTextAlignmentCenter; +const NSTextAlignment TTTTextAlignmentRight = NSTextAlignmentRight; +const NSTextAlignment TTTTextAlignmentJustified = NSTextAlignmentJustified; +const NSTextAlignment TTTTextAlignmentNatural = NSTextAlignmentNatural; + +const NSLineBreakMode TTTLineBreakByWordWrapping = NSLineBreakByWordWrapping; +const NSLineBreakMode TTTLineBreakByCharWrapping = NSLineBreakByCharWrapping; +const NSLineBreakMode TTTLineBreakByClipping = NSLineBreakByClipping; +const NSLineBreakMode TTTLineBreakByTruncatingHead = NSLineBreakByTruncatingHead; +const NSLineBreakMode TTTLineBreakByTruncatingMiddle = NSLineBreakByTruncatingMiddle; +const NSLineBreakMode TTTLineBreakByTruncatingTail = NSLineBreakByTruncatingTail; + +typedef NSTextAlignment TTTTextAlignment; +typedef NSLineBreakMode TTTLineBreakMode; +#else +const UITextAlignment TTTTextAlignmentLeft = NSTextAlignmentLeft; +const UITextAlignment TTTTextAlignmentCenter = NSTextAlignmentCenter; +const UITextAlignment TTTTextAlignmentRight = NSTextAlignmentRight; +const UITextAlignment TTTTextAlignmentJustified = NSTextAlignmentJustified; +const UITextAlignment TTTTextAlignmentNatural = NSTextAlignmentNatural; + +const UITextAlignment TTTLineBreakByWordWrapping = NSLineBreakByWordWrapping; +const UITextAlignment TTTLineBreakByCharWrapping = NSLineBreakByCharWrapping; +const UITextAlignment TTTLineBreakByClipping = NSLineBreakByClipping; +const UITextAlignment TTTLineBreakByTruncatingHead = NSLineBreakByTruncatingHead; +const UITextAlignment TTTLineBreakByTruncatingMiddle = NSLineBreakByTruncatingMiddle; +const UITextAlignment TTTLineBreakByTruncatingTail = NSLineBreakByTruncatingTail; + +typedef UITextAlignment TTTTextAlignment; +typedef UILineBreakMode TTTLineBreakMode; +#endif + + +static inline CTTextAlignment CTTextAlignmentFromTTTTextAlignment(TTTTextAlignment alignment) { +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 60000 + switch (alignment) { + case NSTextAlignmentLeft: return kCTLeftTextAlignment; + case NSTextAlignmentCenter: return kCTCenterTextAlignment; + case NSTextAlignmentRight: return kCTRightTextAlignment; + default: return kCTNaturalTextAlignment; + } +#else + switch (alignment) { + case UITextAlignmentLeft: return kCTLeftTextAlignment; + case UITextAlignmentCenter: return kCTCenterTextAlignment; + case UITextAlignmentRight: return kCTRightTextAlignment; + default: return kCTNaturalTextAlignment; + } +#endif +} + +static inline CTLineBreakMode CTLineBreakModeFromTTTLineBreakMode(TTTLineBreakMode lineBreakMode) { +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 60000 + switch (lineBreakMode) { + case NSLineBreakByWordWrapping: return kCTLineBreakByWordWrapping; + case NSLineBreakByCharWrapping: return kCTLineBreakByCharWrapping; + case NSLineBreakByClipping: return kCTLineBreakByClipping; + case NSLineBreakByTruncatingHead: return kCTLineBreakByTruncatingHead; + case NSLineBreakByTruncatingTail: return kCTLineBreakByTruncatingTail; + case NSLineBreakByTruncatingMiddle: return kCTLineBreakByTruncatingMiddle; + default: return 0; + } +#else + return CTLineBreakModeFromUILineBreakMode(lineBreakMode); +#endif +} + +#if __IPHONE_OS_VERSION_MAX_ALLOWED < 60000 +static inline CTLineBreakMode CTLineBreakModeFromUILineBreakMode(UILineBreakMode lineBreakMode) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + switch (lineBreakMode) { + case UILineBreakModeWordWrap: return kCTLineBreakByWordWrapping; + case UILineBreakModeCharacterWrap: return kCTLineBreakByCharWrapping; + case UILineBreakModeClip: return kCTLineBreakByClipping; + case UILineBreakModeHeadTruncation: return kCTLineBreakByTruncatingHead; + case UILineBreakModeTailTruncation: return kCTLineBreakByTruncatingTail; + case UILineBreakModeMiddleTruncation: return kCTLineBreakByTruncatingMiddle; + default: return 0; + } +#pragma clang diagnostic pop +} +#endif + +static inline CGFLOAT_TYPE CGFloat_ceil(CGFLOAT_TYPE cgfloat) { +#if CGFLOAT_IS_DOUBLE + return ceil(cgfloat); +#else + return ceilf(cgfloat); +#endif +} + +static inline CGFLOAT_TYPE CGFloat_floor(CGFLOAT_TYPE cgfloat) { +#if CGFLOAT_IS_DOUBLE + return floor(cgfloat); +#else + return floorf(cgfloat); +#endif +} + +static inline CGFLOAT_TYPE CGFloat_round(CGFLOAT_TYPE cgfloat) { +#if CGFLOAT_IS_DOUBLE + return round(cgfloat); +#else + return roundf(cgfloat); +#endif +} + +static inline CGFLOAT_TYPE CGFloat_sqrt(CGFLOAT_TYPE cgfloat) { +#if CGFLOAT_IS_DOUBLE + return sqrt(cgfloat); +#else + return sqrtf(cgfloat); +#endif +} + +static inline CGFloat TTTFlushFactorForTextAlignment(NSTextAlignment textAlignment) { + switch (textAlignment) { + case TTTTextAlignmentCenter: + return 0.5f; + case TTTTextAlignmentRight: + return 1.0f; + case TTTTextAlignmentLeft: + default: + return 0.0f; + } +} + +static inline NSDictionary * NSAttributedStringAttributesFromLabel(TTTAttributedLabel *label) { + NSMutableDictionary *mutableAttributes = [NSMutableDictionary dictionary]; + + if ([NSMutableParagraphStyle class]) { + [mutableAttributes setObject:label.font forKey:(NSString *)kCTFontAttributeName]; + [mutableAttributes setObject:label.textColor forKey:(NSString *)kCTForegroundColorAttributeName]; + [mutableAttributes setObject:@(label.kern) forKey:(NSString *)kCTKernAttributeName]; + + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + paragraphStyle.alignment = label.textAlignment; + paragraphStyle.lineSpacing = label.lineSpacing; + paragraphStyle.minimumLineHeight = label.minimumLineHeight > 0 ? label.minimumLineHeight : label.font.lineHeight * label.lineHeightMultiple; + paragraphStyle.maximumLineHeight = label.maximumLineHeight > 0 ? label.maximumLineHeight : label.font.lineHeight * label.lineHeightMultiple; + paragraphStyle.lineHeightMultiple = label.lineHeightMultiple; + paragraphStyle.firstLineHeadIndent = label.firstLineIndent; + + if (label.numberOfLines == 1) { + paragraphStyle.lineBreakMode = label.lineBreakMode; + } else { + paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; + } + + [mutableAttributes setObject:paragraphStyle forKey:(NSString *)kCTParagraphStyleAttributeName]; + } else { + CTFontRef font = CTFontCreateWithName((__bridge CFStringRef)label.font.fontName, label.font.pointSize, NULL); + [mutableAttributes setObject:(__bridge id)font forKey:(NSString *)kCTFontAttributeName]; + CFRelease(font); + + [mutableAttributes setObject:(id)[label.textColor CGColor] forKey:(NSString *)kCTForegroundColorAttributeName]; + [mutableAttributes setObject:@(label.kern) forKey:(NSString *)kCTKernAttributeName]; + + CTTextAlignment alignment = CTTextAlignmentFromTTTTextAlignment(label.textAlignment); + CGFloat lineSpacing = label.lineSpacing; + CGFloat minimumLineHeight = label.minimumLineHeight * label.lineHeightMultiple; + CGFloat maximumLineHeight = label.maximumLineHeight * label.lineHeightMultiple; + CGFloat lineSpacingAdjustment = CGFloat_ceil(label.font.lineHeight - label.font.ascender + label.font.descender); + CGFloat lineHeightMultiple = label.lineHeightMultiple; + CGFloat firstLineIndent = label.firstLineIndent; + + CTLineBreakMode lineBreakMode = kCTLineBreakByWordWrapping; + if (label.numberOfLines == 1) { + lineBreakMode = CTLineBreakModeFromTTTLineBreakMode(label.lineBreakMode); + } + + CTParagraphStyleSetting paragraphStyles[12] = { + {.spec = kCTParagraphStyleSpecifierAlignment, .valueSize = sizeof(CTTextAlignment), .value = (const void *)&alignment}, + {.spec = kCTParagraphStyleSpecifierLineBreakMode, .valueSize = sizeof(CTLineBreakMode), .value = (const void *)&lineBreakMode}, + {.spec = kCTParagraphStyleSpecifierLineSpacing, .valueSize = sizeof(CGFloat), .value = (const void *)&lineSpacing}, + {.spec = kCTParagraphStyleSpecifierMinimumLineSpacing, .valueSize = sizeof(CGFloat), .value = (const void *)&minimumLineHeight}, + {.spec = kCTParagraphStyleSpecifierMaximumLineSpacing, .valueSize = sizeof(CGFloat), .value = (const void *)&maximumLineHeight}, + {.spec = kCTParagraphStyleSpecifierLineSpacingAdjustment, .valueSize = sizeof (CGFloat), .value = (const void *)&lineSpacingAdjustment}, + {.spec = kCTParagraphStyleSpecifierLineHeightMultiple, .valueSize = sizeof(CGFloat), .value = (const void *)&lineHeightMultiple}, + {.spec = kCTParagraphStyleSpecifierFirstLineHeadIndent, .valueSize = sizeof(CGFloat), .value = (const void *)&firstLineIndent}, + }; + + CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(paragraphStyles, 12); + + [mutableAttributes setObject:(__bridge id)paragraphStyle forKey:(NSString *)kCTParagraphStyleAttributeName]; + + CFRelease(paragraphStyle); + } + + return [NSDictionary dictionaryWithDictionary:mutableAttributes]; +} + +static inline NSAttributedString * NSAttributedStringByScalingFontSize(NSAttributedString *attributedString, CGFloat scale) { + NSMutableAttributedString *mutableAttributedString = [attributedString mutableCopy]; + [mutableAttributedString enumerateAttribute:(NSString *)kCTFontAttributeName inRange:NSMakeRange(0, [mutableAttributedString length]) options:0 usingBlock:^(id value, NSRange range, BOOL * __unused stop) { + UIFont *font = (UIFont *)value; + if (font) { + NSString *fontName; + CGFloat pointSize; + + if ([font isKindOfClass:[UIFont class]]) { + fontName = font.fontName; + pointSize = font.pointSize; + } else { + fontName = (NSString *)CFBridgingRelease(CTFontCopyName((__bridge CTFontRef)font, kCTFontPostScriptNameKey)); + pointSize = CTFontGetSize((__bridge CTFontRef)font); + } + + [mutableAttributedString removeAttribute:(NSString *)kCTFontAttributeName range:range]; + CTFontRef fontRef = CTFontCreateWithName((__bridge CFStringRef)fontName, CGFloat_floor(pointSize * scale), NULL); + [mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(__bridge id)fontRef range:range]; + CFRelease(fontRef); + } + }]; + + return mutableAttributedString; +} + +static inline NSAttributedString * NSAttributedStringBySettingColorFromContext(NSAttributedString *attributedString, UIColor *color) { + if (!color) { + return attributedString; + } + + NSMutableAttributedString *mutableAttributedString = [attributedString mutableCopy]; + [mutableAttributedString enumerateAttribute:(NSString *)kCTForegroundColorFromContextAttributeName inRange:NSMakeRange(0, [mutableAttributedString length]) options:0 usingBlock:^(id value, NSRange range, __unused BOOL *stop) { + BOOL usesColorFromContext = (BOOL)value; + if (usesColorFromContext) { + [mutableAttributedString setAttributes:[NSDictionary dictionaryWithObject:color forKey:(NSString *)kCTForegroundColorAttributeName] range:range]; + [mutableAttributedString removeAttribute:(NSString *)kCTForegroundColorFromContextAttributeName range:range]; + } + }]; + + return mutableAttributedString; +} + +static inline CGSize CTFramesetterSuggestFrameSizeForAttributedStringWithConstraints(CTFramesetterRef framesetter, NSAttributedString *attributedString, CGSize size, NSUInteger numberOfLines) { + CFRange rangeToSize = CFRangeMake(0, (CFIndex)[attributedString length]); + CGSize constraints = CGSizeMake(size.width, TTTFLOAT_MAX); + + if (numberOfLines == 1) { + // If there is one line, the size that fits is the full width of the line + constraints = CGSizeMake(TTTFLOAT_MAX, TTTFLOAT_MAX); + } else if (numberOfLines > 0) { + // If the line count of the label more than 1, limit the range to size to the number of lines that have been set + CGMutablePathRef path = CGPathCreateMutable(); + CGPathAddRect(path, NULL, CGRectMake(0.0f, 0.0f, constraints.width, TTTFLOAT_MAX)); + CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL); + CFArrayRef lines = CTFrameGetLines(frame); + + if (CFArrayGetCount(lines) > 0) { + NSInteger lastVisibleLineIndex = MIN((CFIndex)numberOfLines, CFArrayGetCount(lines)) - 1; + CTLineRef lastVisibleLine = CFArrayGetValueAtIndex(lines, lastVisibleLineIndex); + + CFRange rangeToLayout = CTLineGetStringRange(lastVisibleLine); + rangeToSize = CFRangeMake(0, rangeToLayout.location + rangeToLayout.length); + } + + CFRelease(frame); + CFRelease(path); + } + + CGSize suggestedSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, rangeToSize, NULL, constraints, NULL); + + return CGSizeMake(CGFloat_ceil(suggestedSize.width), CGFloat_ceil(suggestedSize.height)); +} + +@interface TTTAttributedLabel () +@property (readwrite, nonatomic, copy) NSAttributedString *inactiveAttributedText; +@property (readwrite, nonatomic, copy) NSAttributedString *renderedAttributedText; +@property (readwrite, atomic, strong) NSDataDetector *dataDetector; +@property (readwrite, nonatomic, strong) NSArray *linkModels; +@property (readwrite, nonatomic, strong) TTTAttributedLabelLink *activeLink; +@property (readwrite, nonatomic, strong) NSArray *accessibilityElements; + +- (void) longPressGestureDidFire:(UILongPressGestureRecognizer *)sender; +@end + +@implementation TTTAttributedLabel { +@private + BOOL _needsFramesetter; + CTFramesetterRef _framesetter; + CTFramesetterRef _highlightFramesetter; +} + +@dynamic text; +@synthesize attributedText = _attributedText; + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 + +#ifndef kCFCoreFoundationVersionNumber_iOS_7_0 +#define kCFCoreFoundationVersionNumber_iOS_7_0 847.2 +#endif + ++ (void)load { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + if (kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iOS_7_0) { + Class class = [self class]; + Class superclass = class_getSuperclass(class); + + NSArray *strings = @[ + NSStringFromSelector(@selector(isAccessibilityElement)), + NSStringFromSelector(@selector(accessibilityElementCount)), + NSStringFromSelector(@selector(accessibilityElementAtIndex:)), + NSStringFromSelector(@selector(indexOfAccessibilityElement:)), + ]; + + for (NSString *string in strings) { + SEL selector = NSSelectorFromString(string); + IMP superImplementation = class_getMethodImplementation(superclass, selector); + Method method = class_getInstanceMethod(class, selector); + const char *types = method_getTypeEncoding(method); + class_replaceMethod(class, selector, superImplementation, types); + } + } + }); +} +#endif + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (!self) { + return nil; + } + + [self commonInit]; + + return self; +} + +- (void)commonInit { + self.userInteractionEnabled = YES; + self.multipleTouchEnabled = NO; + + self.textInsets = UIEdgeInsetsZero; + self.lineHeightMultiple = 1.0f; + + self.linkModels = [NSArray array]; + + self.linkBackgroundEdgeInset = UIEdgeInsetsMake(0.0f, -1.0f, 0.0f, -1.0f); + + NSMutableDictionary *mutableLinkAttributes = [NSMutableDictionary dictionary]; + [mutableLinkAttributes setObject:[NSNumber numberWithBool:YES] forKey:(NSString *)kCTUnderlineStyleAttributeName]; + + NSMutableDictionary *mutableActiveLinkAttributes = [NSMutableDictionary dictionary]; + [mutableActiveLinkAttributes setObject:[NSNumber numberWithBool:NO] forKey:(NSString *)kCTUnderlineStyleAttributeName]; + + NSMutableDictionary *mutableInactiveLinkAttributes = [NSMutableDictionary dictionary]; + [mutableInactiveLinkAttributes setObject:[NSNumber numberWithBool:NO] forKey:(NSString *)kCTUnderlineStyleAttributeName]; + + if ([NSMutableParagraphStyle class]) { + [mutableLinkAttributes setObject:[UIColor blueColor] forKey:(NSString *)kCTForegroundColorAttributeName]; + [mutableActiveLinkAttributes setObject:[UIColor redColor] forKey:(NSString *)kCTForegroundColorAttributeName]; + [mutableInactiveLinkAttributes setObject:[UIColor grayColor] forKey:(NSString *)kCTForegroundColorAttributeName]; + } else { + [mutableLinkAttributes setObject:(__bridge id)[[UIColor blueColor] CGColor] forKey:(NSString *)kCTForegroundColorAttributeName]; + [mutableActiveLinkAttributes setObject:(__bridge id)[[UIColor redColor] CGColor] forKey:(NSString *)kCTForegroundColorAttributeName]; + [mutableInactiveLinkAttributes setObject:(__bridge id)[[UIColor grayColor] CGColor] forKey:(NSString *)kCTForegroundColorAttributeName]; + } + + self.linkAttributes = [NSDictionary dictionaryWithDictionary:mutableLinkAttributes]; + self.activeLinkAttributes = [NSDictionary dictionaryWithDictionary:mutableActiveLinkAttributes]; + self.inactiveLinkAttributes = [NSDictionary dictionaryWithDictionary:mutableInactiveLinkAttributes]; + _extendsLinkTouchArea = YES; + _longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self + action:@selector(longPressGestureDidFire:)]; + self.longPressGestureRecognizer.delegate = self; + [self addGestureRecognizer:self.longPressGestureRecognizer]; +} + +- (void)dealloc { + if (_framesetter) { + CFRelease(_framesetter); + } + + if (_highlightFramesetter) { + CFRelease(_highlightFramesetter); + } + + if (_longPressGestureRecognizer) { + [self removeGestureRecognizer:_longPressGestureRecognizer]; + } +} + +#pragma mark - + ++ (CGSize)sizeThatFitsAttributedString:(NSAttributedString *)attributedString + withConstraints:(CGSize)size + limitedToNumberOfLines:(NSUInteger)numberOfLines +{ + if (!attributedString || attributedString.length == 0) { + return CGSizeZero; + } + + CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attributedString); + + CGSize calculatedSize = CTFramesetterSuggestFrameSizeForAttributedStringWithConstraints(framesetter, attributedString, size, numberOfLines); + + CFRelease(framesetter); + + return calculatedSize; +} + +#pragma mark - + +- (void)setAttributedText:(NSAttributedString *)text { + if ([text isEqualToAttributedString:_attributedText]) { + return; + } + + _attributedText = [text copy]; + + [self setNeedsFramesetter]; + [self setNeedsDisplay]; + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 60000 + if ([self respondsToSelector:@selector(invalidateIntrinsicContentSize)]) { + [self invalidateIntrinsicContentSize]; + } +#endif + + [super setText:[self.attributedText string]]; +} + +- (NSAttributedString *)renderedAttributedText { + if (!_renderedAttributedText) { + self.renderedAttributedText = NSAttributedStringBySettingColorFromContext(self.attributedText, self.textColor); + } + + return _renderedAttributedText; +} + +- (NSArray *) links { + return [_linkModels valueForKey:@"result"]; +} + +- (void)setLinkModels:(NSArray *)linkModels { + _linkModels = linkModels; + + self.accessibilityElements = nil; +} + +- (void)setNeedsFramesetter { + // Reset the rendered attributed text so it has a chance to regenerate + self.renderedAttributedText = nil; + + _needsFramesetter = YES; +} + +- (CTFramesetterRef)framesetter { + if (_needsFramesetter) { + @synchronized(self) { + CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)self.renderedAttributedText); + [self setFramesetter:framesetter]; + [self setHighlightFramesetter:nil]; + _needsFramesetter = NO; + + if (framesetter) { + CFRelease(framesetter); + } + } + } + + return _framesetter; +} + +- (void)setFramesetter:(CTFramesetterRef)framesetter { + if (framesetter) { + CFRetain(framesetter); + } + + if (_framesetter) { + CFRelease(_framesetter); + } + + _framesetter = framesetter; +} + +- (CTFramesetterRef)highlightFramesetter { + return _highlightFramesetter; +} + +- (void)setHighlightFramesetter:(CTFramesetterRef)highlightFramesetter { + if (highlightFramesetter) { + CFRetain(highlightFramesetter); + } + + if (_highlightFramesetter) { + CFRelease(_highlightFramesetter); + } + + _highlightFramesetter = highlightFramesetter; +} + +- (CGFloat)leading { + return self.lineSpacing; +} + +- (void)setLeading:(CGFloat)leading { + self.lineSpacing = leading; +} + +#pragma mark - + +- (NSTextCheckingTypes)dataDetectorTypes { + return self.enabledTextCheckingTypes; +} + +- (void)setDataDetectorTypes:(NSTextCheckingTypes)dataDetectorTypes { + self.enabledTextCheckingTypes = dataDetectorTypes; +} + +- (void)setEnabledTextCheckingTypes:(NSTextCheckingTypes)enabledTextCheckingTypes { + if (self.enabledTextCheckingTypes == enabledTextCheckingTypes) { + return; + } + + _enabledTextCheckingTypes = enabledTextCheckingTypes; + + if (self.enabledTextCheckingTypes) { + self.dataDetector = [NSDataDetector dataDetectorWithTypes:self.enabledTextCheckingTypes error:nil]; + } else { + self.dataDetector = nil; + } +} + +- (void)addLink:(TTTAttributedLabelLink *)link { + [self addLinks:@[link]]; +} + +- (void)addLinks:(NSArray *)links { + NSMutableArray *mutableLinkModels = [NSMutableArray arrayWithArray:self.linkModels]; + + NSMutableAttributedString *mutableAttributedString = [self.attributedText mutableCopy]; + + for (TTTAttributedLabelLink *link in links) { + if (link.attributes) { + [mutableAttributedString addAttributes:link.attributes range:link.result.range]; + } + } + + self.attributedText = mutableAttributedString; + [self setNeedsDisplay]; + + [mutableLinkModels addObjectsFromArray:links]; + + self.linkModels = [NSArray arrayWithArray:mutableLinkModels]; +} + +- (TTTAttributedLabelLink *)addLinkWithTextCheckingResult:(NSTextCheckingResult *)result + attributes:(NSDictionary *)attributes +{ + return [self addLinksWithTextCheckingResults:@[result] attributes:attributes].firstObject; +} + +- (NSArray *)addLinksWithTextCheckingResults:(NSArray *)results + attributes:(NSDictionary *)attributes +{ + NSMutableArray *links = [NSMutableArray array]; + + for (NSTextCheckingResult *result in results) { + NSDictionary *activeAttributes = attributes ? self.activeLinkAttributes : nil; + NSDictionary *inactiveAttributes = attributes ? self.inactiveLinkAttributes : nil; + + TTTAttributedLabelLink *link = [[TTTAttributedLabelLink alloc] initWithAttributes:attributes + activeAttributes:activeAttributes + inactiveAttributes:inactiveAttributes + textCheckingResult:result]; + + [links addObject:link]; + } + + [self addLinks:links]; + + return links; +} + +- (TTTAttributedLabelLink *)addLinkWithTextCheckingResult:(NSTextCheckingResult *)result { + return [self addLinkWithTextCheckingResult:result attributes:self.linkAttributes]; +} + +- (TTTAttributedLabelLink *)addLinkToURL:(NSURL *)url + withRange:(NSRange)range +{ + return [self addLinkWithTextCheckingResult:[NSTextCheckingResult linkCheckingResultWithRange:range URL:url]]; +} + +- (TTTAttributedLabelLink *)addLinkToAddress:(NSDictionary *)addressComponents + withRange:(NSRange)range +{ + return [self addLinkWithTextCheckingResult:[NSTextCheckingResult addressCheckingResultWithRange:range components:addressComponents]]; +} + +- (TTTAttributedLabelLink *)addLinkToPhoneNumber:(NSString *)phoneNumber + withRange:(NSRange)range +{ + return [self addLinkWithTextCheckingResult:[NSTextCheckingResult phoneNumberCheckingResultWithRange:range phoneNumber:phoneNumber]]; +} + +- (TTTAttributedLabelLink *)addLinkToDate:(NSDate *)date + withRange:(NSRange)range +{ + return [self addLinkWithTextCheckingResult:[NSTextCheckingResult dateCheckingResultWithRange:range date:date]]; +} + +- (TTTAttributedLabelLink *)addLinkToDate:(NSDate *)date + timeZone:(NSTimeZone *)timeZone + duration:(NSTimeInterval)duration + withRange:(NSRange)range +{ + return [self addLinkWithTextCheckingResult:[NSTextCheckingResult dateCheckingResultWithRange:range date:date timeZone:timeZone duration:duration]]; +} + +- (TTTAttributedLabelLink *)addLinkToTransitInformation:(NSDictionary *)components + withRange:(NSRange)range +{ + return [self addLinkWithTextCheckingResult:[NSTextCheckingResult transitInformationCheckingResultWithRange:range components:components]]; +} + +#pragma mark - + +- (BOOL)containslinkAtPoint:(CGPoint)point { + return [self linkAtPoint:point] != nil; +} + +- (TTTAttributedLabelLink *)linkAtPoint:(CGPoint)point { + + // Stop quickly if none of the points to be tested are in the bounds. + if (!CGRectContainsPoint(CGRectInset(self.bounds, -15.f, -15.f), point) || self.links.count == 0) { + return nil; + } + + TTTAttributedLabelLink *result = [self linkAtCharacterIndex:[self characterIndexAtPoint:point]]; + + if (!result && self.extendsLinkTouchArea) { + result = [self linkAtRadius:2.5f aroundPoint:point] + ?: [self linkAtRadius:5.f aroundPoint:point] + ?: [self linkAtRadius:7.5f aroundPoint:point] + ?: [self linkAtRadius:12.5f aroundPoint:point] + ?: [self linkAtRadius:15.f aroundPoint:point]; + } + + return result; +} + +- (TTTAttributedLabelLink *)linkAtRadius:(const CGFloat)radius aroundPoint:(CGPoint)point { + const CGFloat diagonal = CGFloat_sqrt(2 * radius * radius); + const CGPoint deltas[] = { + CGPointMake(0, -radius), CGPointMake(0, radius), // Above and below + CGPointMake(-radius, 0), CGPointMake(radius, 0), // Beside + CGPointMake(-diagonal, -diagonal), CGPointMake(-diagonal, diagonal), + CGPointMake(diagonal, diagonal), CGPointMake(diagonal, -diagonal) // Diagonal + }; + const size_t count = sizeof(deltas) / sizeof(CGPoint); + + TTTAttributedLabelLink *link = nil; + + for (NSInteger i = 0; i < count && link.result == nil; i ++) { + CGPoint currentPoint = CGPointMake(point.x + deltas[i].x, point.y + deltas[i].y); + link = [self linkAtCharacterIndex:[self characterIndexAtPoint:currentPoint]]; + } + + return link; +} + +- (TTTAttributedLabelLink *)linkAtCharacterIndex:(CFIndex)idx { + // Do not enumerate if the index is outside of the bounds of the text. + if (!NSLocationInRange((NSUInteger)idx, NSMakeRange(0, self.attributedText.length))) { + return nil; + } + + NSEnumerator *enumerator = [self.linkModels reverseObjectEnumerator]; + TTTAttributedLabelLink *link = nil; + while ((link = [enumerator nextObject])) { + if (NSLocationInRange((NSUInteger)idx, link.result.range)) { + return link; + } + } + + return nil; +} + +- (CFIndex)characterIndexAtPoint:(CGPoint)p { + if (!CGRectContainsPoint(self.bounds, p)) { + return NSNotFound; + } + + CGRect textRect = [self textRectForBounds:self.bounds limitedToNumberOfLines:self.numberOfLines]; + if (!CGRectContainsPoint(textRect, p)) { + return NSNotFound; + } + + // Offset tap coordinates by textRect origin to make them relative to the origin of frame + p = CGPointMake(p.x - textRect.origin.x, p.y - textRect.origin.y); + // Convert tap coordinates (start at top left) to CT coordinates (start at bottom left) + p = CGPointMake(p.x, textRect.size.height - p.y); + + CGMutablePathRef path = CGPathCreateMutable(); + CGPathAddRect(path, NULL, textRect); + CTFrameRef frame = CTFramesetterCreateFrame([self framesetter], CFRangeMake(0, (CFIndex)[self.attributedText length]), path, NULL); + if (frame == NULL) { + CFRelease(path); + return NSNotFound; + } + + CFArrayRef lines = CTFrameGetLines(frame); + NSInteger numberOfLines = self.numberOfLines > 0 ? MIN(self.numberOfLines, CFArrayGetCount(lines)) : CFArrayGetCount(lines); + if (numberOfLines == 0) { + CFRelease(frame); + CFRelease(path); + return NSNotFound; + } + + CFIndex idx = NSNotFound; + + CGPoint lineOrigins[numberOfLines]; + CTFrameGetLineOrigins(frame, CFRangeMake(0, numberOfLines), lineOrigins); + + for (CFIndex lineIndex = 0; lineIndex < numberOfLines; lineIndex++) { + CGPoint lineOrigin = lineOrigins[lineIndex]; + CTLineRef line = CFArrayGetValueAtIndex(lines, lineIndex); + + // Get bounding information of line + CGFloat ascent = 0.0f, descent = 0.0f, leading = 0.0f; + CGFloat width = (CGFloat)CTLineGetTypographicBounds(line, &ascent, &descent, &leading); + CGFloat yMin = (CGFloat)floor(lineOrigin.y - descent); + CGFloat yMax = (CGFloat)ceil(lineOrigin.y + ascent); + + // Apply penOffset using flushFactor for horizontal alignment to set lineOrigin since this is the horizontal offset from drawFramesetter + CGFloat flushFactor = TTTFlushFactorForTextAlignment(self.textAlignment); + CGFloat penOffset = (CGFloat)CTLineGetPenOffsetForFlush(line, flushFactor, textRect.size.width); + lineOrigin.x = penOffset; + + // Check if we've already passed the line + if (p.y > yMax) { + break; + } + // Check if the point is within this line vertically + if (p.y >= yMin) { + // Check if the point is within this line horizontally + if (p.x >= lineOrigin.x && p.x <= lineOrigin.x + width) { + // Convert CT coordinates to line-relative coordinates + CGPoint relativePoint = CGPointMake(p.x - lineOrigin.x, p.y - lineOrigin.y); + idx = CTLineGetStringIndexForPosition(line, relativePoint); + break; + } + } + } + + CFRelease(frame); + CFRelease(path); + + return idx; +} + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 +- (CGRect)boundingRectForCharacterRange:(NSRange)range { + NSMutableAttributedString *mutableAttributedString = [self.attributedText mutableCopy]; + + NSTextStorage *textStorage = [[NSTextStorage alloc] initWithAttributedString:mutableAttributedString]; + + NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init]; + [textStorage addLayoutManager:layoutManager]; + + NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:self.bounds.size]; + [layoutManager addTextContainer:textContainer]; + + NSRange glyphRange; + [layoutManager characterRangeForGlyphRange:range actualGlyphRange:&glyphRange]; + + return [layoutManager boundingRectForGlyphRange:glyphRange inTextContainer:textContainer]; +} +#endif + +- (void)drawFramesetter:(CTFramesetterRef)framesetter + attributedString:(NSAttributedString *)attributedString + textRange:(CFRange)textRange + inRect:(CGRect)rect + context:(CGContextRef)c +{ + CGMutablePathRef path = CGPathCreateMutable(); + CGPathAddRect(path, NULL, rect); + CTFrameRef frame = CTFramesetterCreateFrame(framesetter, textRange, path, NULL); + + [self drawBackground:frame inRect:rect context:c]; + + CFArrayRef lines = CTFrameGetLines(frame); + NSInteger numberOfLines = self.numberOfLines > 0 ? MIN(self.numberOfLines, CFArrayGetCount(lines)) : CFArrayGetCount(lines); + BOOL truncateLastLine = (self.lineBreakMode == TTTLineBreakByTruncatingHead || self.lineBreakMode == TTTLineBreakByTruncatingMiddle || self.lineBreakMode == TTTLineBreakByTruncatingTail); + + CGPoint lineOrigins[numberOfLines]; + CTFrameGetLineOrigins(frame, CFRangeMake(0, numberOfLines), lineOrigins); + + for (CFIndex lineIndex = 0; lineIndex < numberOfLines; lineIndex++) { + CGPoint lineOrigin = lineOrigins[lineIndex]; + CGContextSetTextPosition(c, lineOrigin.x, lineOrigin.y); + CTLineRef line = CFArrayGetValueAtIndex(lines, lineIndex); + + CGFloat descent = 0.0f; + CTLineGetTypographicBounds((CTLineRef)line, NULL, &descent, NULL); + + // Adjust pen offset for flush depending on text alignment + CGFloat flushFactor = TTTFlushFactorForTextAlignment(self.textAlignment); + + if (lineIndex == numberOfLines - 1 && truncateLastLine) { + // Check if the range of text in the last line reaches the end of the full attributed string + CFRange lastLineRange = CTLineGetStringRange(line); + + if (!(lastLineRange.length == 0 && lastLineRange.location == 0) && lastLineRange.location + lastLineRange.length < textRange.location + textRange.length) { + // Get correct truncationType and attribute position + CTLineTruncationType truncationType; + CFIndex truncationAttributePosition = lastLineRange.location; + TTTLineBreakMode lineBreakMode = self.lineBreakMode; + + // Multiple lines, only use UILineBreakModeTailTruncation + if (numberOfLines != 1) { + lineBreakMode = TTTLineBreakByTruncatingTail; + } + + switch (lineBreakMode) { + case TTTLineBreakByTruncatingHead: + truncationType = kCTLineTruncationStart; + break; + case TTTLineBreakByTruncatingMiddle: + truncationType = kCTLineTruncationMiddle; + truncationAttributePosition += (lastLineRange.length / 2); + break; + case TTTLineBreakByTruncatingTail: + default: + truncationType = kCTLineTruncationEnd; + truncationAttributePosition += (lastLineRange.length - 1); + break; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSAttributedString *attributedTruncationString = self.attributedTruncationToken; + if (!attributedTruncationString) { + NSString *truncationTokenString = self.truncationTokenString; + if (!truncationTokenString) { + truncationTokenString = @"\u2026"; // Unicode Character 'HORIZONTAL ELLIPSIS' (U+2026) + } + + NSDictionary *truncationTokenStringAttributes = self.truncationTokenStringAttributes; + if (!truncationTokenStringAttributes) { + truncationTokenStringAttributes = [attributedString attributesAtIndex:(NSUInteger)truncationAttributePosition effectiveRange:NULL]; + } + + attributedTruncationString = [[NSAttributedString alloc] initWithString:truncationTokenString attributes:truncationTokenStringAttributes]; + } + CTLineRef truncationToken = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)attributedTruncationString); +#pragma clang diagnostic pop + + // Append truncationToken to the string + // because if string isn't too long, CT won't add the truncationToken on its own. + // There is no chance of a double truncationToken because CT only adds the + // token if it removes characters (and the one we add will go first) + NSMutableAttributedString *truncationString = [[NSMutableAttributedString alloc] initWithAttributedString: + [attributedString attributedSubstringFromRange: + NSMakeRange((NSUInteger)lastLineRange.location, + (NSUInteger)lastLineRange.length)]]; + if (lastLineRange.length > 0) { + // Remove any newline at the end (we don't want newline space between the text and the truncation token). There can only be one, because the second would be on the next line. + unichar lastCharacter = [[truncationString string] characterAtIndex:(NSUInteger)(lastLineRange.length - 1)]; + if ([[NSCharacterSet newlineCharacterSet] characterIsMember:lastCharacter]) { + [truncationString deleteCharactersInRange:NSMakeRange((NSUInteger)(lastLineRange.length - 1), 1)]; + } + } + [truncationString appendAttributedString:attributedTruncationString]; + CTLineRef truncationLine = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)truncationString); + + // Truncate the line in case it is too long. + CTLineRef truncatedLine = CTLineCreateTruncatedLine(truncationLine, rect.size.width, truncationType, truncationToken); + if (!truncatedLine) { + // If the line is not as wide as the truncationToken, truncatedLine is NULL + truncatedLine = CFRetain(truncationToken); + } + + CGFloat penOffset = (CGFloat)CTLineGetPenOffsetForFlush(truncatedLine, flushFactor, rect.size.width); + CGContextSetTextPosition(c, penOffset, lineOrigin.y - descent - self.font.descender); + + CTLineDraw(truncatedLine, c); + + NSRange linkRange; + if ([attributedTruncationString attribute:NSLinkAttributeName atIndex:0 effectiveRange:&linkRange]) { + NSRange tokenRange = [truncationString.string rangeOfString:attributedTruncationString.string]; + NSRange tokenLinkRange = NSMakeRange((NSUInteger)(lastLineRange.location+lastLineRange.length)-tokenRange.length, (NSUInteger)tokenRange.length); + + [self addLinkToURL:[attributedTruncationString attribute:NSLinkAttributeName atIndex:0 effectiveRange:&linkRange] withRange:tokenLinkRange]; + } + + CFRelease(truncatedLine); + CFRelease(truncationLine); + CFRelease(truncationToken); + } else { + CGFloat penOffset = (CGFloat)CTLineGetPenOffsetForFlush(line, flushFactor, rect.size.width); + CGContextSetTextPosition(c, penOffset, lineOrigin.y - descent - self.font.descender); + CTLineDraw(line, c); + } + } else { + CGFloat penOffset = (CGFloat)CTLineGetPenOffsetForFlush(line, flushFactor, rect.size.width); + CGContextSetTextPosition(c, penOffset, lineOrigin.y - descent - self.font.descender); + CTLineDraw(line, c); + } + } + + [self drawStrike:frame inRect:rect context:c]; + + CFRelease(frame); + CFRelease(path); +} + +- (void)drawBackground:(CTFrameRef)frame + inRect:(CGRect)rect + context:(CGContextRef)c +{ + NSArray *lines = (__bridge NSArray *)CTFrameGetLines(frame); + CGPoint origins[[lines count]]; + CTFrameGetLineOrigins(frame, CFRangeMake(0, 0), origins); + + CFIndex lineIndex = 0; + for (id line in lines) { + CGFloat ascent = 0.0f, descent = 0.0f, leading = 0.0f; + CGFloat width = (CGFloat)CTLineGetTypographicBounds((__bridge CTLineRef)line, &ascent, &descent, &leading) ; + + for (id glyphRun in (__bridge NSArray *)CTLineGetGlyphRuns((__bridge CTLineRef)line)) { + NSDictionary *attributes = (__bridge NSDictionary *)CTRunGetAttributes((__bridge CTRunRef) glyphRun); + CGColorRef strokeColor = (__bridge CGColorRef)[attributes objectForKey:kTTTBackgroundStrokeColorAttributeName]; + CGColorRef fillColor = (__bridge CGColorRef)[attributes objectForKey:kTTTBackgroundFillColorAttributeName]; + UIEdgeInsets fillPadding = [[attributes objectForKey:kTTTBackgroundFillPaddingAttributeName] UIEdgeInsetsValue]; + CGFloat cornerRadius = [[attributes objectForKey:kTTTBackgroundCornerRadiusAttributeName] floatValue]; + CGFloat lineWidth = [[attributes objectForKey:kTTTBackgroundLineWidthAttributeName] floatValue]; + + if (strokeColor || fillColor) { + CGRect runBounds = CGRectZero; + CGFloat runAscent = 0.0f; + CGFloat runDescent = 0.0f; + + runBounds.size.width = (CGFloat)CTRunGetTypographicBounds((__bridge CTRunRef)glyphRun, CFRangeMake(0, 0), &runAscent, &runDescent, NULL) + fillPadding.left + fillPadding.right; + runBounds.size.height = runAscent + runDescent + fillPadding.top + fillPadding.bottom; + + CGFloat xOffset = 0.0f; + CFRange glyphRange = CTRunGetStringRange((__bridge CTRunRef)glyphRun); + switch (CTRunGetStatus((__bridge CTRunRef)glyphRun)) { + case kCTRunStatusRightToLeft: + xOffset = CTLineGetOffsetForStringIndex((__bridge CTLineRef)line, glyphRange.location + glyphRange.length, NULL); + break; + default: + xOffset = CTLineGetOffsetForStringIndex((__bridge CTLineRef)line, glyphRange.location, NULL); + break; + } + + runBounds.origin.x = origins[lineIndex].x + rect.origin.x + xOffset - fillPadding.left - rect.origin.x; + runBounds.origin.y = origins[lineIndex].y + rect.origin.y - fillPadding.bottom - rect.origin.y; + runBounds.origin.y -= runDescent; + + // Don't draw higlightedLinkBackground too far to the right + if (CGRectGetWidth(runBounds) > width) { + runBounds.size.width = width; + } + + CGPathRef path = [[UIBezierPath bezierPathWithRoundedRect:CGRectInset(UIEdgeInsetsInsetRect(runBounds, self.linkBackgroundEdgeInset), lineWidth, lineWidth) cornerRadius:cornerRadius] CGPath]; + + CGContextSetLineJoin(c, kCGLineJoinRound); + + if (fillColor) { + CGContextSetFillColorWithColor(c, fillColor); + CGContextAddPath(c, path); + CGContextFillPath(c); + } + + if (strokeColor) { + CGContextSetStrokeColorWithColor(c, strokeColor); + CGContextAddPath(c, path); + CGContextStrokePath(c); + } + } + } + + lineIndex++; + } +} + +- (void)drawStrike:(CTFrameRef)frame + inRect:(__unused CGRect)rect + context:(CGContextRef)c +{ + NSArray *lines = (__bridge NSArray *)CTFrameGetLines(frame); + CGPoint origins[[lines count]]; + CTFrameGetLineOrigins(frame, CFRangeMake(0, 0), origins); + + CFIndex lineIndex = 0; + for (id line in lines) { + CGFloat ascent = 0.0f, descent = 0.0f, leading = 0.0f; + CGFloat width = (CGFloat)CTLineGetTypographicBounds((__bridge CTLineRef)line, &ascent, &descent, &leading) ; + + for (id glyphRun in (__bridge NSArray *)CTLineGetGlyphRuns((__bridge CTLineRef)line)) { + NSDictionary *attributes = (__bridge NSDictionary *)CTRunGetAttributes((__bridge CTRunRef) glyphRun); + BOOL strikeOut = [[attributes objectForKey:kTTTStrikeOutAttributeName] boolValue]; + NSInteger superscriptStyle = [[attributes objectForKey:(id)kCTSuperscriptAttributeName] integerValue]; + + if (strikeOut) { + CGRect runBounds = CGRectZero; + CGFloat runAscent = 0.0f; + CGFloat runDescent = 0.0f; + + runBounds.size.width = (CGFloat)CTRunGetTypographicBounds((__bridge CTRunRef)glyphRun, CFRangeMake(0, 0), &runAscent, &runDescent, NULL); + runBounds.size.height = runAscent + runDescent; + + CGFloat xOffset = 0.0f; + CFRange glyphRange = CTRunGetStringRange((__bridge CTRunRef)glyphRun); + switch (CTRunGetStatus((__bridge CTRunRef)glyphRun)) { + case kCTRunStatusRightToLeft: + xOffset = CTLineGetOffsetForStringIndex((__bridge CTLineRef)line, glyphRange.location + glyphRange.length, NULL); + break; + default: + xOffset = CTLineGetOffsetForStringIndex((__bridge CTLineRef)line, glyphRange.location, NULL); + break; + } + runBounds.origin.x = origins[lineIndex].x + xOffset; + runBounds.origin.y = origins[lineIndex].y; + runBounds.origin.y -= runDescent; + + // Don't draw strikeout too far to the right + if (CGRectGetWidth(runBounds) > width) { + runBounds.size.width = width; + } + + switch (superscriptStyle) { + case 1: + runBounds.origin.y -= runAscent * 0.47f; + break; + case -1: + runBounds.origin.y += runAscent * 0.25f; + break; + default: + break; + } + + // Use text color, or default to black + id color = [attributes objectForKey:(id)kCTForegroundColorAttributeName]; + if (color) { + if ([color isKindOfClass:[UIColor class]]) { + CGContextSetStrokeColorWithColor(c, [color CGColor]); + } else { + CGContextSetStrokeColorWithColor(c, (__bridge CGColorRef)color); + } + } else { + CGContextSetGrayStrokeColor(c, 0.0f, 1.0); + } + + CTFontRef font = CTFontCreateWithName((__bridge CFStringRef)self.font.fontName, self.font.pointSize, NULL); + CGContextSetLineWidth(c, CTFontGetUnderlineThickness(font)); + CFRelease(font); + + CGFloat y = CGFloat_round(runBounds.origin.y + runBounds.size.height / 2.0f); + CGContextMoveToPoint(c, runBounds.origin.x, y); + CGContextAddLineToPoint(c, runBounds.origin.x + runBounds.size.width, y); + + CGContextStrokePath(c); + } + } + + lineIndex++; + } +} + +#pragma mark - TTTAttributedLabel + +- (void)setText:(id)text { + NSParameterAssert(!text || [text isKindOfClass:[NSAttributedString class]] || [text isKindOfClass:[NSString class]]); + + if ([text isKindOfClass:[NSString class]]) { + [self setText:text afterInheritingLabelAttributesAndConfiguringWithBlock:nil]; + return; + } + + self.attributedText = text; + self.activeLink = nil; + + self.linkModels = [NSArray array]; + if (self.attributedText && self.enabledTextCheckingTypes) { +#if __IPHONE_OS_VERSION_MIN_REQUIRED < 50000 + __unsafe_unretained __typeof(self)weakSelf = self; +#else + __weak __typeof(self)weakSelf = self; +#endif + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + __strong __typeof(weakSelf)strongSelf = weakSelf; + + NSDataDetector *dataDetector = strongSelf.dataDetector; + if (dataDetector && [dataDetector respondsToSelector:@selector(matchesInString:options:range:)]) { + NSArray *results = [dataDetector matchesInString:[(NSAttributedString *)text string] options:0 range:NSMakeRange(0, [(NSAttributedString *)text length])]; + if ([results count] > 0) { + dispatch_sync(dispatch_get_main_queue(), ^{ + if ([[strongSelf.attributedText string] isEqualToString:[(NSAttributedString *)text string]]) { + [strongSelf addLinksWithTextCheckingResults:results attributes:strongSelf.linkAttributes]; + } + }); + } + } + }); + } + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 + if (&NSLinkAttributeName) { + [self.attributedText enumerateAttribute:NSLinkAttributeName inRange:NSMakeRange(0, self.attributedText.length) options:0 usingBlock:^(id value, __unused NSRange range, __unused BOOL *stop) { + if (value) { + NSURL *URL = [value isKindOfClass:[NSString class]] ? [NSURL URLWithString:value] : value; + [self addLinkToURL:URL withRange:range]; + } + }]; + } +#endif +} + +- (void)setText:(id)text +afterInheritingLabelAttributesAndConfiguringWithBlock:(NSMutableAttributedString * (^)(NSMutableAttributedString *mutableAttributedString))block +{ + NSMutableAttributedString *mutableAttributedString = nil; + if ([text isKindOfClass:[NSString class]]) { + mutableAttributedString = [[NSMutableAttributedString alloc] initWithString:text attributes:NSAttributedStringAttributesFromLabel(self)]; + } else { + mutableAttributedString = [[NSMutableAttributedString alloc] initWithAttributedString:text]; + [mutableAttributedString addAttributes:NSAttributedStringAttributesFromLabel(self) range:NSMakeRange(0, [mutableAttributedString length])]; + } + + if (block) { + mutableAttributedString = block(mutableAttributedString); + } + + [self setText:mutableAttributedString]; +} + +- (void)setActiveLink:(TTTAttributedLabelLink *)activeLink { + _activeLink = activeLink; + + NSDictionary *activeAttributes = activeLink.activeAttributes ?: self.activeLinkAttributes; + + if (_activeLink && activeAttributes.count > 0) { + if (!self.inactiveAttributedText) { + self.inactiveAttributedText = [self.attributedText copy]; + } + + NSMutableAttributedString *mutableAttributedString = [self.inactiveAttributedText mutableCopy]; + if (self.activeLink.result.range.length > 0 && NSLocationInRange(NSMaxRange(self.activeLink.result.range) - 1, NSMakeRange(0, [self.inactiveAttributedText length]))) { + [mutableAttributedString addAttributes:activeAttributes range:self.activeLink.result.range]; + } + + self.attributedText = mutableAttributedString; + [self setNeedsDisplay]; + + [CATransaction flush]; + } else if (self.inactiveAttributedText) { + self.attributedText = self.inactiveAttributedText; + self.inactiveAttributedText = nil; + + [self setNeedsDisplay]; + } +} + +#pragma mark - UILabel + +- (void)setHighlighted:(BOOL)highlighted { + [super setHighlighted:highlighted]; + [self setNeedsDisplay]; +} + +// Fixes crash when loading from a UIStoryboard +- (UIColor *)textColor { + UIColor *color = [super textColor]; + if (!color) { + color = [UIColor blackColor]; + } + + return color; +} + +- (void)setTextColor:(UIColor *)textColor { + UIColor *oldTextColor = self.textColor; + [super setTextColor:textColor]; + + // Redraw to allow any ColorFromContext attributes a chance to update + if (textColor != oldTextColor) { + [self setNeedsFramesetter]; + [self setNeedsDisplay]; + } +} + +- (CGRect)textRectForBounds:(CGRect)bounds + limitedToNumberOfLines:(NSInteger)numberOfLines +{ + bounds = UIEdgeInsetsInsetRect(bounds, self.textInsets); + if (!self.attributedText) { + return [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines]; + } + + CGRect textRect = bounds; + + // Calculate height with a minimum of double the font pointSize, to ensure that CTFramesetterSuggestFrameSizeWithConstraints doesn't return CGSizeZero, as it would if textRect height is insufficient. + textRect.size.height = MAX(self.font.lineHeight * MAX(2, numberOfLines), bounds.size.height); + + // Adjust the text to be in the center vertically, if the text size is smaller than bounds + CGSize textSize = CTFramesetterSuggestFrameSizeWithConstraints([self framesetter], CFRangeMake(0, (CFIndex)[self.attributedText length]), NULL, textRect.size, NULL); + textSize = CGSizeMake(CGFloat_ceil(textSize.width), CGFloat_ceil(textSize.height)); // Fix for iOS 4, CTFramesetterSuggestFrameSizeWithConstraints sometimes returns fractional sizes + + if (textSize.height < bounds.size.height) { + CGFloat yOffset = 0.0f; + switch (self.verticalAlignment) { + case TTTAttributedLabelVerticalAlignmentCenter: + yOffset = CGFloat_floor((bounds.size.height - textSize.height) / 2.0f); + break; + case TTTAttributedLabelVerticalAlignmentBottom: + yOffset = bounds.size.height - textSize.height; + break; + case TTTAttributedLabelVerticalAlignmentTop: + default: + break; + } + + textRect.origin.y += yOffset; + } + + return textRect; +} + +- (void)drawTextInRect:(CGRect)rect { + CGRect insetRect = UIEdgeInsetsInsetRect(rect, self.textInsets); + if (!self.attributedText) { + [super drawTextInRect:insetRect]; + return; + } + + NSAttributedString *originalAttributedText = nil; + + // Adjust the font size to fit width, if necessarry + if (self.adjustsFontSizeToFitWidth && self.numberOfLines > 0) { + // Use infinite width to find the max width, which will be compared to availableWidth if needed. + CGSize maxSize = (self.numberOfLines > 1) ? CGSizeMake(TTTFLOAT_MAX, TTTFLOAT_MAX) : CGSizeZero; + + CGFloat textWidth = [self sizeThatFits:maxSize].width; + CGFloat availableWidth = self.frame.size.width * self.numberOfLines; + if (self.numberOfLines > 1 && self.lineBreakMode == TTTLineBreakByWordWrapping) { + textWidth *= kTTTLineBreakWordWrapTextWidthScalingFactor; + } + + if (textWidth > availableWidth && textWidth > 0.0f) { + originalAttributedText = [self.attributedText copy]; + + CGFloat scaleFactor = availableWidth / textWidth; + if ([self respondsToSelector:@selector(minimumScaleFactor)] && self.minimumScaleFactor > scaleFactor) { + scaleFactor = self.minimumScaleFactor; + } + + self.attributedText = NSAttributedStringByScalingFontSize(self.attributedText, scaleFactor); + } + } + + CGContextRef c = UIGraphicsGetCurrentContext(); + CGContextSaveGState(c); + { + CGContextSetTextMatrix(c, CGAffineTransformIdentity); + + // Inverts the CTM to match iOS coordinates (otherwise text draws upside-down; Mac OS's system is different) + CGContextTranslateCTM(c, 0.0f, insetRect.size.height); + CGContextScaleCTM(c, 1.0f, -1.0f); + + CFRange textRange = CFRangeMake(0, (CFIndex)[self.attributedText length]); + + // First, get the text rect (which takes vertical centering into account) + CGRect textRect = [self textRectForBounds:rect limitedToNumberOfLines:self.numberOfLines]; + + // CoreText draws its text aligned to the bottom, so we move the CTM here to take our vertical offsets into account + CGContextTranslateCTM(c, insetRect.origin.x, insetRect.size.height - textRect.origin.y - textRect.size.height); + + // Second, trace the shadow before the actual text, if we have one + if (self.shadowColor && !self.highlighted) { + CGContextSetShadowWithColor(c, self.shadowOffset, self.shadowRadius, [self.shadowColor CGColor]); + } else if (self.highlightedShadowColor) { + CGContextSetShadowWithColor(c, self.highlightedShadowOffset, self.highlightedShadowRadius, [self.highlightedShadowColor CGColor]); + } + + // Finally, draw the text or highlighted text itself (on top of the shadow, if there is one) + if (self.highlightedTextColor && self.highlighted) { + NSMutableAttributedString *highlightAttributedString = [self.renderedAttributedText mutableCopy]; + [highlightAttributedString addAttribute:(__bridge NSString *)kCTForegroundColorAttributeName value:(id)[self.highlightedTextColor CGColor] range:NSMakeRange(0, highlightAttributedString.length)]; + + if (![self highlightFramesetter]) { + CTFramesetterRef highlightFramesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)highlightAttributedString); + [self setHighlightFramesetter:highlightFramesetter]; + CFRelease(highlightFramesetter); + } + + [self drawFramesetter:[self highlightFramesetter] attributedString:highlightAttributedString textRange:textRange inRect:textRect context:c]; + } else { + [self drawFramesetter:[self framesetter] attributedString:self.renderedAttributedText textRange:textRange inRect:textRect context:c]; + } + + // If we adjusted the font size, set it back to its original size + if (originalAttributedText) { + // Use ivar directly to avoid clearing out framesetter and renderedAttributedText + _attributedText = originalAttributedText; + } + } + CGContextRestoreGState(c); +} + +#pragma mark - UIAccessibilityElement + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 + +- (BOOL)isAccessibilityElement { + return NO; +} + +- (NSInteger)accessibilityElementCount { + return (NSInteger)[[self accessibilityElements] count]; +} + +- (id)accessibilityElementAtIndex:(NSInteger)index { + return [[self accessibilityElements] objectAtIndex:(NSUInteger)index]; +} + +- (NSInteger)indexOfAccessibilityElement:(id)element { + return (NSInteger)[[self accessibilityElements] indexOfObject:element]; +} + +- (NSArray *)accessibilityElements { + if (!_accessibilityElements) { + @synchronized(self) { + NSMutableArray *mutableAccessibilityItems = [NSMutableArray array]; + + for (TTTAttributedLabelLink *link in self.linkModels) { + + if (link.result.range.location == NSNotFound) { + continue; + } + + NSString *sourceText = [self.text isKindOfClass:[NSString class]] ? self.text : [(NSAttributedString *)self.text string]; + + NSString *accessibilityLabel = [sourceText substringWithRange:link.result.range]; + NSString *accessibilityValue = link.accessibilityValue; + + if (accessibilityLabel) { + UIAccessibilityElement *linkElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; + linkElement.accessibilityTraits = UIAccessibilityTraitLink; + linkElement.accessibilityFrame = [self convertRect:[self boundingRectForCharacterRange:link.result.range] toView:self.window]; + linkElement.accessibilityLabel = accessibilityLabel; + + if (![accessibilityLabel isEqualToString:accessibilityValue]) { + linkElement.accessibilityValue = accessibilityValue; + } + + [mutableAccessibilityItems addObject:linkElement]; + } + } + + UIAccessibilityElement *baseElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; + baseElement.accessibilityLabel = [super accessibilityLabel]; + baseElement.accessibilityHint = [super accessibilityHint]; + baseElement.accessibilityValue = [super accessibilityValue]; + baseElement.accessibilityFrame = [self convertRect:self.bounds toView:self.window]; + baseElement.accessibilityTraits = [super accessibilityTraits]; + + [mutableAccessibilityItems addObject:baseElement]; + + self.accessibilityElements = [NSArray arrayWithArray:mutableAccessibilityItems]; + } + } + + return _accessibilityElements; +} +#endif + +#pragma mark - UIView + +- (CGSize)sizeThatFits:(CGSize)size { + if (!self.attributedText) { + return [super sizeThatFits:size]; + } else { + NSMutableAttributedString *fullString = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText]; + + if (self.attributedTruncationToken) { + [fullString appendAttributedString:self.attributedTruncationToken]; + } + + NSAttributedString *string = [[NSAttributedString alloc] initWithAttributedString:fullString]; + + CGSize labelSize = CTFramesetterSuggestFrameSizeForAttributedStringWithConstraints([self framesetter], string, size, (NSUInteger)self.numberOfLines); + labelSize.width += self.textInsets.left + self.textInsets.right; + labelSize.height += self.textInsets.top + self.textInsets.bottom; + + return labelSize; + } +} + +- (CGSize)intrinsicContentSize { + // There's an implicit width from the original UILabel implementation + return [self sizeThatFits:[super intrinsicContentSize]]; +} + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 +- (void)tintColorDidChange { + if (!self.inactiveLinkAttributes || [self.inactiveLinkAttributes count] == 0) { + return; + } + + BOOL isInactive = (self.tintAdjustmentMode == UIViewTintAdjustmentModeDimmed); + + NSMutableAttributedString *mutableAttributedString = [self.attributedText mutableCopy]; + for (TTTAttributedLabelLink *link in self.linkModels) { + NSDictionary *attributesToRemove = isInactive ? link.attributes : link.inactiveAttributes; + NSDictionary *attributesToAdd = isInactive ? link.inactiveAttributes : link.attributes; + + [attributesToRemove enumerateKeysAndObjectsUsingBlock:^(NSString *name, __unused id value, __unused BOOL *stop) { + if (NSMaxRange(link.result.range) <= mutableAttributedString.length) { + [mutableAttributedString removeAttribute:name range:link.result.range]; + } + }]; + + if (attributesToAdd) { + if (NSMaxRange(link.result.range) <= mutableAttributedString.length) { + [mutableAttributedString addAttributes:attributesToAdd range:link.result.range]; + } + } + } + + self.attributedText = mutableAttributedString; + + [self setNeedsDisplay]; +} +#endif + +- (UIView *)hitTest:(CGPoint)point + withEvent:(UIEvent *)event +{ + if (![self linkAtPoint:point] || !self.userInteractionEnabled || self.hidden || self.alpha < 0.01) { + return [super hitTest:point withEvent:event]; + } + + return self; +} + +#pragma mark - UIResponder + +- (BOOL)canBecomeFirstResponder { + return YES; +} + +- (BOOL)canPerformAction:(SEL)action + withSender:(__unused id)sender +{ + return (action == @selector(copy:)); +} + +- (void)touchesBegan:(NSSet *)touches + withEvent:(UIEvent *)event +{ + UITouch *touch = [touches anyObject]; + + self.activeLink = [self linkAtPoint:[touch locationInView:self]]; + + if (!self.activeLink) { + [super touchesBegan:touches withEvent:event]; + } +} + +- (void)touchesMoved:(NSSet *)touches + withEvent:(UIEvent *)event +{ + if (self.activeLink) { + UITouch *touch = [touches anyObject]; + + if (self.activeLink != [self linkAtPoint:[touch locationInView:self]]) { + self.activeLink = nil; + } + } else { + [super touchesMoved:touches withEvent:event]; + } +} + +- (void)touchesEnded:(NSSet *)touches + withEvent:(UIEvent *)event +{ + if (self.activeLink) { + if (self.activeLink.linkTapBlock) { + self.activeLink.linkTapBlock(self, self.activeLink); + self.activeLink = nil; + return; + } + + NSTextCheckingResult *result = self.activeLink.result; + self.activeLink = nil; + + switch (result.resultType) { + case NSTextCheckingTypeLink: + if ([self.delegate respondsToSelector:@selector(attributedLabel:didSelectLinkWithURL:)]) { + [self.delegate attributedLabel:self didSelectLinkWithURL:result.URL]; + return; + } + break; + case NSTextCheckingTypeAddress: + if ([self.delegate respondsToSelector:@selector(attributedLabel:didSelectLinkWithAddress:)]) { + [self.delegate attributedLabel:self didSelectLinkWithAddress:result.addressComponents]; + return; + } + break; + case NSTextCheckingTypePhoneNumber: + if ([self.delegate respondsToSelector:@selector(attributedLabel:didSelectLinkWithPhoneNumber:)]) { + [self.delegate attributedLabel:self didSelectLinkWithPhoneNumber:result.phoneNumber]; + return; + } + break; + case NSTextCheckingTypeDate: + if (result.timeZone && [self.delegate respondsToSelector:@selector(attributedLabel:didSelectLinkWithDate:timeZone:duration:)]) { + [self.delegate attributedLabel:self didSelectLinkWithDate:result.date timeZone:result.timeZone duration:result.duration]; + return; + } else if ([self.delegate respondsToSelector:@selector(attributedLabel:didSelectLinkWithDate:)]) { + [self.delegate attributedLabel:self didSelectLinkWithDate:result.date]; + return; + } + break; + case NSTextCheckingTypeTransitInformation: + if ([self.delegate respondsToSelector:@selector(attributedLabel:didSelectLinkWithTransitInformation:)]) { + [self.delegate attributedLabel:self didSelectLinkWithTransitInformation:result.components]; + return; + } + default: + break; + } + + // Fallback to `attributedLabel:didSelectLinkWithTextCheckingResult:` if no other delegate method matched. + if ([self.delegate respondsToSelector:@selector(attributedLabel:didSelectLinkWithTextCheckingResult:)]) { + [self.delegate attributedLabel:self didSelectLinkWithTextCheckingResult:result]; + } + } else { + [super touchesEnded:touches withEvent:event]; + } +} + +- (void)touchesCancelled:(NSSet *)touches + withEvent:(UIEvent *)event +{ + if (self.activeLink) { + self.activeLink = nil; + } else { + [super touchesCancelled:touches withEvent:event]; + } +} + +#pragma mark - UIGestureRecognizerDelegate + +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { + return [self containslinkAtPoint:[touch locationInView:self]]; +} + +#pragma mark - UILongPressGestureRecognizer + +- (void)longPressGestureDidFire:(UILongPressGestureRecognizer *)sender { + switch (sender.state) { + case UIGestureRecognizerStateBegan: { + CGPoint touchPoint = [sender locationInView:self]; + TTTAttributedLabelLink *link = [self linkAtPoint:touchPoint]; + + if (link) { + if (link.linkLongPressBlock) { + link.linkLongPressBlock(self, link); + return; + } + + NSTextCheckingResult *result = link.result; + + if (!result) { + return; + } + + switch (result.resultType) { + case NSTextCheckingTypeLink: + if ([self.delegate respondsToSelector:@selector(attributedLabel:didLongPressLinkWithURL:atPoint:)]) { + [self.delegate attributedLabel:self didLongPressLinkWithURL:result.URL atPoint:touchPoint]; + return; + } + break; + case NSTextCheckingTypeAddress: + if ([self.delegate respondsToSelector:@selector(attributedLabel:didLongPressLinkWithAddress:atPoint:)]) { + [self.delegate attributedLabel:self didLongPressLinkWithAddress:result.addressComponents atPoint:touchPoint]; + return; + } + break; + case NSTextCheckingTypePhoneNumber: + if ([self.delegate respondsToSelector:@selector(attributedLabel:didLongPressLinkWithPhoneNumber:atPoint:)]) { + [self.delegate attributedLabel:self didLongPressLinkWithPhoneNumber:result.phoneNumber atPoint:touchPoint]; + return; + } + break; + case NSTextCheckingTypeDate: + if (result.timeZone && [self.delegate respondsToSelector:@selector(attributedLabel:didLongPressLinkWithDate:timeZone:duration:atPoint:)]) { + [self.delegate attributedLabel:self didLongPressLinkWithDate:result.date timeZone:result.timeZone duration:result.duration atPoint:touchPoint]; + return; + } else if ([self.delegate respondsToSelector:@selector(attributedLabel:didLongPressLinkWithDate:atPoint:)]) { + [self.delegate attributedLabel:self didLongPressLinkWithDate:result.date atPoint:touchPoint]; + return; + } + break; + case NSTextCheckingTypeTransitInformation: + if ([self.delegate respondsToSelector:@selector(attributedLabel:didLongPressLinkWithTransitInformation:atPoint:)]) { + [self.delegate attributedLabel:self didLongPressLinkWithTransitInformation:result.components atPoint:touchPoint]; + return; + } + default: + break; + } + + // Fallback to `attributedLabel:didLongPressLinkWithTextCheckingResult:atPoint:` if no other delegate method matched. + if ([self.delegate respondsToSelector:@selector(attributedLabel:didLongPressLinkWithTextCheckingResult:atPoint:)]) { + [self.delegate attributedLabel:self didLongPressLinkWithTextCheckingResult:result atPoint:touchPoint]; + } + } + break; + } + default: + break; + } +} + +#pragma mark - UIResponderStandardEditActions + +- (void)copy:(__unused id)sender { + [[UIPasteboard generalPasteboard] setString:self.text]; +} + +#pragma mark - NSCoding + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:@(self.enabledTextCheckingTypes) forKey:NSStringFromSelector(@selector(enabledTextCheckingTypes))]; + + [coder encodeObject:self.linkModels forKey:NSStringFromSelector(@selector(linkModels))]; + if ([NSMutableParagraphStyle class]) { + [coder encodeObject:self.linkAttributes forKey:NSStringFromSelector(@selector(linkAttributes))]; + [coder encodeObject:self.activeLinkAttributes forKey:NSStringFromSelector(@selector(activeLinkAttributes))]; + [coder encodeObject:self.inactiveLinkAttributes forKey:NSStringFromSelector(@selector(inactiveLinkAttributes))]; + } + [coder encodeObject:@(self.shadowRadius) forKey:NSStringFromSelector(@selector(shadowRadius))]; + [coder encodeObject:@(self.highlightedShadowRadius) forKey:NSStringFromSelector(@selector(highlightedShadowRadius))]; + [coder encodeCGSize:self.highlightedShadowOffset forKey:NSStringFromSelector(@selector(highlightedShadowOffset))]; + [coder encodeObject:self.highlightedShadowColor forKey:NSStringFromSelector(@selector(highlightedShadowColor))]; + [coder encodeObject:@(self.kern) forKey:NSStringFromSelector(@selector(kern))]; + [coder encodeObject:@(self.firstLineIndent) forKey:NSStringFromSelector(@selector(firstLineIndent))]; + [coder encodeObject:@(self.lineSpacing) forKey:NSStringFromSelector(@selector(lineSpacing))]; + [coder encodeObject:@(self.lineHeightMultiple) forKey:NSStringFromSelector(@selector(lineHeightMultiple))]; + [coder encodeUIEdgeInsets:self.textInsets forKey:NSStringFromSelector(@selector(textInsets))]; + [coder encodeInteger:self.verticalAlignment forKey:NSStringFromSelector(@selector(verticalAlignment))]; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + [coder encodeObject:self.truncationTokenString forKey:NSStringFromSelector(@selector(truncationTokenString))]; +#pragma clang diagnostic pop + + [coder encodeObject:NSStringFromUIEdgeInsets(self.linkBackgroundEdgeInset) forKey:NSStringFromSelector(@selector(linkBackgroundEdgeInset))]; + [coder encodeObject:self.attributedText forKey:NSStringFromSelector(@selector(attributedText))]; + [coder encodeObject:self.text forKey:NSStringFromSelector(@selector(text))]; +} + +- (id)initWithCoder:(NSCoder *)coder { + self = [super initWithCoder:coder]; + if (!self) { + return nil; + } + + [self commonInit]; + + if ([coder containsValueForKey:NSStringFromSelector(@selector(enabledTextCheckingTypes))]) { + self.enabledTextCheckingTypes = [[coder decodeObjectForKey:NSStringFromSelector(@selector(enabledTextCheckingTypes))] unsignedLongLongValue]; + } + + if ([NSMutableParagraphStyle class]) { + if ([coder containsValueForKey:NSStringFromSelector(@selector(linkAttributes))]) { + self.linkAttributes = [coder decodeObjectForKey:NSStringFromSelector(@selector(linkAttributes))]; + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(activeLinkAttributes))]) { + self.activeLinkAttributes = [coder decodeObjectForKey:NSStringFromSelector(@selector(activeLinkAttributes))]; + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(inactiveLinkAttributes))]) { + self.inactiveLinkAttributes = [coder decodeObjectForKey:NSStringFromSelector(@selector(inactiveLinkAttributes))]; + } + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(links))]) { + NSArray *oldLinks = [coder decodeObjectForKey:NSStringFromSelector(@selector(links))]; + [self addLinksWithTextCheckingResults:oldLinks attributes:nil]; + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(linkModels))]) { + self.linkModels = [coder decodeObjectForKey:NSStringFromSelector(@selector(linkModels))]; + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(shadowRadius))]) { + self.shadowRadius = [[coder decodeObjectForKey:NSStringFromSelector(@selector(shadowRadius))] floatValue]; + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(highlightedShadowRadius))]) { + self.highlightedShadowRadius = [[coder decodeObjectForKey:NSStringFromSelector(@selector(highlightedShadowRadius))] floatValue]; + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(highlightedShadowOffset))]) { + self.highlightedShadowOffset = [coder decodeCGSizeForKey:NSStringFromSelector(@selector(highlightedShadowOffset))]; + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(highlightedShadowColor))]) { + self.highlightedShadowColor = [coder decodeObjectForKey:NSStringFromSelector(@selector(highlightedShadowColor))]; + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(kern))]) { + self.kern = [[coder decodeObjectForKey:NSStringFromSelector(@selector(kern))] floatValue]; + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(firstLineIndent))]) { + self.firstLineIndent = [[coder decodeObjectForKey:NSStringFromSelector(@selector(firstLineIndent))] floatValue]; + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(lineSpacing))]) { + self.lineSpacing = [[coder decodeObjectForKey:NSStringFromSelector(@selector(lineSpacing))] floatValue]; + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(minimumLineHeight))]) { + self.minimumLineHeight = [[coder decodeObjectForKey:NSStringFromSelector(@selector(minimumLineHeight))] floatValue]; + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(maximumLineHeight))]) { + self.maximumLineHeight = [[coder decodeObjectForKey:NSStringFromSelector(@selector(maximumLineHeight))] floatValue]; + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(lineHeightMultiple))]) { + self.lineHeightMultiple = [[coder decodeObjectForKey:NSStringFromSelector(@selector(lineHeightMultiple))] floatValue]; + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(textInsets))]) { + self.textInsets = [coder decodeUIEdgeInsetsForKey:NSStringFromSelector(@selector(textInsets))]; + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(verticalAlignment))]) { + self.verticalAlignment = [coder decodeIntegerForKey:NSStringFromSelector(@selector(verticalAlignment))]; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + if ([coder containsValueForKey:NSStringFromSelector(@selector(truncationTokenString))]) { + self.truncationTokenString = [coder decodeObjectForKey:NSStringFromSelector(@selector(truncationTokenString))]; + } +#pragma clang diagnostic pop + + if ([coder containsValueForKey:NSStringFromSelector(@selector(linkBackgroundEdgeInset))]) { + self.linkBackgroundEdgeInset = UIEdgeInsetsFromString([coder decodeObjectForKey:NSStringFromSelector(@selector(linkBackgroundEdgeInset))]); + } + + if ([coder containsValueForKey:NSStringFromSelector(@selector(attributedText))]) { + self.attributedText = [coder decodeObjectForKey:NSStringFromSelector(@selector(attributedText))]; + } else { + self.text = super.text; + } + + return self; +} + +@end + +#pragma mark - TTTAttributedLabelLink + +@implementation TTTAttributedLabelLink + +- (instancetype)initWithAttributes:(NSDictionary *)attributes + activeAttributes:(NSDictionary *)activeAttributes + inactiveAttributes:(NSDictionary *)inactiveAttributes + textCheckingResult:(NSTextCheckingResult *)result { + + if ((self = [super init])) { + _result = result; + _attributes = [attributes copy]; + _activeAttributes = [activeAttributes copy]; + _inactiveAttributes = [inactiveAttributes copy]; + } + + return self; +} + +- (instancetype)initWithAttributesFromLabel:(TTTAttributedLabel*)label + textCheckingResult:(NSTextCheckingResult *)result { + + return [self initWithAttributes:label.linkAttributes + activeAttributes:label.activeLinkAttributes + inactiveAttributes:label.inactiveLinkAttributes + textCheckingResult:result]; +} + +#pragma mark - Accessibility + +- (NSString *) accessibilityValue { + if ([_accessibilityValue length] == 0) { + switch (self.result.resultType) { + case NSTextCheckingTypeLink: + _accessibilityValue = self.result.URL.absoluteString; + break; + case NSTextCheckingTypePhoneNumber: + _accessibilityValue = self.result.phoneNumber; + break; + case NSTextCheckingTypeDate: + _accessibilityValue = [NSDateFormatter localizedStringFromDate:self.result.date + dateStyle:NSDateFormatterLongStyle + timeStyle:NSDateFormatterLongStyle]; + break; + default: + break; + } + } + + return _accessibilityValue; +} + +#pragma mark - NSCoding + +- (void)encodeWithCoder:(NSCoder *)aCoder { + [aCoder encodeObject:self.result forKey:NSStringFromSelector(@selector(result))]; + [aCoder encodeObject:self.attributes forKey:NSStringFromSelector(@selector(attributes))]; + [aCoder encodeObject:self.activeAttributes forKey:NSStringFromSelector(@selector(activeAttributes))]; + [aCoder encodeObject:self.inactiveAttributes forKey:NSStringFromSelector(@selector(inactiveAttributes))]; + [aCoder encodeObject:self.accessibilityValue forKey:NSStringFromSelector(@selector(accessibilityValue))]; +} + +- (id)initWithCoder:(NSCoder *)aDecoder { + if ((self = [super init])) { + _result = [aDecoder decodeObjectForKey:NSStringFromSelector(@selector(result))]; + _attributes = [aDecoder decodeObjectForKey:NSStringFromSelector(@selector(attributes))]; + _activeAttributes = [aDecoder decodeObjectForKey:NSStringFromSelector(@selector(activeAttributes))]; + _inactiveAttributes = [aDecoder decodeObjectForKey:NSStringFromSelector(@selector(inactiveAttributes))]; + self.accessibilityValue = [aDecoder decodeObjectForKey:NSStringFromSelector(@selector(accessibilityValue))]; + } + + return self; +} + +@end From 7856dc8a7b299a94f481cda0302a1493befbbd7b Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 18 Feb 2016 10:46:57 +0800 Subject: [PATCH 081/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E8=81=8A=E5=A4=A9=E7=95=8C=E9=9D=A2demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加微信聊天界面demo --- SDAutoLayoutDemo.xcodeproj/project.pbxproj | 6 -- .../UserInterfaceState.xcuserstate | Bin 70755 -> 72938 bytes .../SDAnalogDataGenerator.h | 18 ++++ .../SDAnalogDataGenerator.m | 19 ++++ .../DemoVC/DemoVC11/ChatController/DemoVC11.h | 17 +++ .../DemoVC/DemoVC11/ChatController/DemoVC11.m | 19 ++++ .../ChatController/Models/SDChatModel.h | 19 ++++ .../ChatController/Models/SDChatModel.m | 19 ++++ .../SDChatTableViewController.h | 13 --- .../SDChatTableViewController.m | 99 ------------------ .../Views/SDChatTableViewCell.h | 19 ++++ .../Views/SDChatTableViewCell.m | 19 ++++ .../DemoVC11/GloabalDefines/GlobalDefines.h | 19 ++++ SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.h | 2 +- 14 files changed, 169 insertions(+), 119 deletions(-) delete mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/SDChatTableViewController.h delete mode 100644 SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/SDChatTableViewController.m diff --git a/SDAutoLayoutDemo.xcodeproj/project.pbxproj b/SDAutoLayoutDemo.xcodeproj/project.pbxproj index 66bb7ec..1195991 100644 --- a/SDAutoLayoutDemo.xcodeproj/project.pbxproj +++ b/SDAutoLayoutDemo.xcodeproj/project.pbxproj @@ -85,7 +85,6 @@ 48DBCD231C01E045002EC476 /* pic4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 48DBCD191C01E045002EC476 /* pic4.jpg */; }; 48EB72EF1C748D6C003A818E /* SDWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EB72E31C748D6C003A818E /* SDWebViewController.m */; }; 48EB72F01C748D6C003A818E /* SDChatModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EB72E71C748D6C003A818E /* SDChatModel.m */; }; - 48EB72F11C748D6C003A818E /* SDChatTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EB72E91C748D6C003A818E /* SDChatTableViewController.m */; }; 48EB72F21C748D6C003A818E /* SDChatTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EB72EC1C748D6C003A818E /* SDChatTableViewCell.m */; }; 48EB72FC1C748DF5003A818E /* MLEmoji_Expression.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 48EB72F41C748DF5003A818E /* MLEmoji_Expression.bundle */; }; 48EB72FD1C748DF5003A818E /* MLEmoji_Expression.plist in Resources */ = {isa = PBXBuildFile; fileRef = 48EB72F51C748DF5003A818E /* MLEmoji_Expression.plist */; }; @@ -342,8 +341,6 @@ 48EB72E31C748D6C003A818E /* SDWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebViewController.m; sourceTree = ""; }; 48EB72E61C748D6C003A818E /* SDChatModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDChatModel.h; sourceTree = ""; }; 48EB72E71C748D6C003A818E /* SDChatModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDChatModel.m; sourceTree = ""; }; - 48EB72E81C748D6C003A818E /* SDChatTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDChatTableViewController.h; sourceTree = ""; }; - 48EB72E91C748D6C003A818E /* SDChatTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDChatTableViewController.m; sourceTree = ""; }; 48EB72EB1C748D6C003A818E /* SDChatTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDChatTableViewCell.h; sourceTree = ""; }; 48EB72EC1C748D6C003A818E /* SDChatTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDChatTableViewCell.m; sourceTree = ""; }; 48EB72EE1C748D6C003A818E /* GlobalDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GlobalDefines.h; sourceTree = ""; }; @@ -902,8 +899,6 @@ isa = PBXGroup; children = ( 48EB72E51C748D6C003A818E /* Models */, - 48EB72E81C748D6C003A818E /* SDChatTableViewController.h */, - 48EB72E91C748D6C003A818E /* SDChatTableViewController.m */, 48EB72EA1C748D6C003A818E /* Views */, 48EB73411C748F26003A818E /* DemoVC11.h */, 48EB73421C748F26003A818E /* DemoVC11.m */, @@ -1443,7 +1438,6 @@ 485302F61C3F65EE004361A7 /* TADotView.m in Sources */, 485303481C3F977A004361A7 /* SDWeiXinPhotoContainerView.m in Sources */, 485302DB1C3F6490004361A7 /* SDWebImageManager.m in Sources */, - 48EB72F11C748D6C003A818E /* SDChatTableViewController.m in Sources */, 48EB73001C748DF5003A818E /* TTTAttributedLabel.m in Sources */, 48EB73041C748E1A003A818E /* SDAnalogDataGenerator.m in Sources */, 485302F51C3F65EE004361A7 /* TAAnimatedDotView.m in Sources */, diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 1e98c1dc1ccece388f82167259c2184b94375a99..1998012e18f19e8fc50c0e957fb9aca408638613 100644 GIT binary patch literal 72938 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 S#H&^@{^Elff0us0_5WXE>8afS literal 70755 zcmdR12YeL8_utu_y?(oUcPOYx2N6i`AcT;jkt(6L5=| zh#(4*Km}PawaaOjJE6xsf2b}HteMawSU%fd5w4rq!xyTU6~N15dW3_uZhncPn9B6pK*3vAcMJ*jwx;CW&ccx|l8Ihy%ov#KB^LSS*%^r;0V(Ej5t=D zC{7ZmiC(cntQ2R70kK-F5kq2~IA2^KE*6)FAf72M6PJq@h%3ZP#7o61#g*bJakY58 zxK?ZwZxA<%o5b71&ElQnUE)@8oA{vkkoc(hn7BjSDLyMcC%z!=5%-BNi?54si0_E+ ziXVs{il2&~iC>9di{Fbsh`)%xihqcIN|Hn+i)59Yk|Mb!kJMi3Aa#_Em%2*bq+Zeq zQeUZ`lq#i3SyHytUm76gOM|5%saPtNPL)PTBc(EFj5I--C{2~7N##<7G*g--RY}#- zTqz{Yljci{q{Wghfpm_vOgdk>K)P7EM7lz{Qo2T3C0!?7FRhmvrJJOU(yh{M(jC&B z(!J7F=>h3MX}k2O^rW;ydPaIydR}@#dP&+Ry(Yaby)C^X?Uz1~K9N3^zLdU_zLUO} zewKcb4oH7ckxJA|E!07s)J5I&Xxg40M?2Ckv@7jNd(l3$FHNDTG?Ql0JldZQqWQFt z7SU5^DIHEn&`ESMokFM5Y1B)nQy(p-GiZp`(J-y2^XPoKfSygyq08uUdM-VWo=-2J zSJA8KHFOodk#3+j(T#Kyy_w!ZZ>8Jlee{0%0DX`?L?5P)&}Zp$bQj%CpQkU-J@iHT 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 M=6^5zeA@DV0R26DEC2ui diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/AnalogDataGenerator/SDAnalogDataGenerator.h b/SDAutoLayoutDemo/DemoVC/DemoVC11/AnalogDataGenerator/SDAnalogDataGenerator.h index 828927b..c6321ca 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC11/AnalogDataGenerator/SDAnalogDataGenerator.h +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/AnalogDataGenerator/SDAnalogDataGenerator.h @@ -6,6 +6,24 @@ // Copyright © 2016年 GSD. All rights reserved. // +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * QQ交流群:519489682(已满)497140713 * + ********************************************************************************* + + */ + + + + #import @interface SDAnalogDataGenerator : NSObject diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/AnalogDataGenerator/SDAnalogDataGenerator.m b/SDAutoLayoutDemo/DemoVC/DemoVC11/AnalogDataGenerator/SDAnalogDataGenerator.m index fc650cf..9a165a7 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC11/AnalogDataGenerator/SDAnalogDataGenerator.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/AnalogDataGenerator/SDAnalogDataGenerator.m @@ -6,6 +6,25 @@ // Copyright © 2016年 GSD. All rights reserved. // + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * QQ交流群:519489682(已满)497140713 * + ********************************************************************************* + + */ + + + + #import "SDAnalogDataGenerator.h" static NSArray *namesArray; diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.h b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.h index e036792..831d835 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.h +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.h @@ -6,6 +6,23 @@ // Copyright © 2016年 gsd. All rights reserved. // + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * QQ交流群:519489682(已满)497140713 * + ********************************************************************************* + + */ + + #import @interface DemoVC11 : UITableViewController diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.m b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.m index 11b8591..9120259 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/DemoVC11.m @@ -6,6 +6,25 @@ // Copyright © 2016年 gsd. All rights reserved. // + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * QQ交流群:519489682(已满)497140713 * + ********************************************************************************* + + */ + + + + #import "DemoVC11.h" #import "GlobalDefines.h" diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Models/SDChatModel.h b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Models/SDChatModel.h index 0c2b7a2..15a830a 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Models/SDChatModel.h +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Models/SDChatModel.h @@ -6,6 +6,25 @@ // Copyright © 2016年 GSD. All rights reserved. // + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * QQ交流群:519489682(已满)497140713 * + ********************************************************************************* + + */ + + + + #import typedef enum : NSUInteger { diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Models/SDChatModel.m b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Models/SDChatModel.m index bfa5752..36e5b27 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Models/SDChatModel.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Models/SDChatModel.m @@ -6,6 +6,25 @@ // Copyright © 2016年 GSD. All rights reserved. // + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * QQ交流群:519489682(已满)497140713 * + ********************************************************************************* + + */ + + + + #import "SDChatModel.h" @implementation SDChatModel diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/SDChatTableViewController.h b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/SDChatTableViewController.h deleted file mode 100644 index f7fddea..0000000 --- a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/SDChatTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// SDChatTableViewController.h -// GSD_WeiXin(wechat) -// -// Created by aier on 16/2/13. -// Copyright © 2016年 GSD. All rights reserved. -// - -#import - -@interface SDChatTableViewController : UITableViewController - -@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/SDChatTableViewController.m b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/SDChatTableViewController.m deleted file mode 100644 index 2b5b33f..0000000 --- a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/SDChatTableViewController.m +++ /dev/null @@ -1,99 +0,0 @@ -// -// SDChatTableViewController.m -// GSD_WeiXin(wechat) -// -// Created by aier on 16/2/13. -// Copyright © 2016年 GSD. All rights reserved. -// - -#import "SDChatTableViewController.h" - -#import "GlobalDefines.h" - -#import "SDChatTableViewCell.h" -#import "SDAnalogDataGenerator.h" -#import "SDWebViewController.h" - -#import "UITableView+SDAutoTableViewCellHeight.h" - -#define kChatTableViewControllerCellId @"ChatTableViewController" - -@interface SDChatTableViewController () - -@property (nonatomic, strong) NSMutableArray *dataArray; - -@end - -@implementation SDChatTableViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - [self setupDataWithCount:30]; - - CGFloat rgb = 240; - self.tableView.backgroundColor = SDColor(rgb, rgb, rgb, 1); - - self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - - [self.tableView registerClass:[SDChatTableViewCell class] forCellReuseIdentifier:kChatTableViewControllerCellId]; -} - -- (void)setupDataWithCount:(NSInteger)count -{ - for (int i = 0; i < count; i++) { - SDChatModel *model = [SDChatModel new]; - model.messageType = arc4random_uniform(2); - if (model.messageType) { - model.iconName = [SDAnalogDataGenerator randomIconImageName]; - if (arc4random_uniform(10) > 5) { - int index = arc4random_uniform(5); - model.imageName = [NSString stringWithFormat:@"test%d.jpg", index]; - } - } else { - if (arc4random_uniform(10) < 5) { - int index = arc4random_uniform(5); - model.imageName = [NSString stringWithFormat:@"test%d.jpg", index]; - } - model.iconName = @"2.jpg"; - } - - - model.text = [SDAnalogDataGenerator randomMessage]; - [self.dataArray addObject:model]; - } -} - -#pragma mark - tableview delegate and datasource - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return self.dataArray.count; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - SDChatTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kChatTableViewControllerCellId]; - cell.model = self.dataArray[indexPath.row]; - - __weak typeof(self) weakSelf = self; - [cell setDidSelectLinkTextOperationBlock:^(NSString *link, MLEmojiLabelLinkType type) { - if (type == MLEmojiLabelLinkTypeURL) { - [weakSelf.navigationController pushViewController:[SDWebViewController webViewControllerWithUrlString:link] animated:YES]; - } - }]; - return cell; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - CGFloat h = [self.tableView cellHeightForIndexPath:indexPath model:self.dataArray[indexPath.row] keyPath:@"model" cellClass:[SDChatTableViewCell class] contentViewWidth:[UIScreen mainScreen].bounds.size.width]; - return h; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSLog(@">>>>> %@", [self.dataArray[indexPath.row] text]); -} - -@end diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.h b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.h index 4344763..ea88d07 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.h +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.h @@ -6,6 +6,25 @@ // Copyright © 2016年 GSD. All rights reserved. // + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * QQ交流群:519489682(已满)497140713 * + ********************************************************************************* + + */ + + + + #import #import "SDChatModel.h" diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.m b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.m index 423a200..7554860 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/ChatController/Views/SDChatTableViewCell.m @@ -6,6 +6,25 @@ // Copyright © 2016年 GSD. All rights reserved. // + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * QQ交流群:519489682(已满)497140713 * + ********************************************************************************* + + */ + + + + #import "SDChatTableViewCell.h" #import "UIView+SDAutoLayout.h" diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC11/GloabalDefines/GlobalDefines.h b/SDAutoLayoutDemo/DemoVC/DemoVC11/GloabalDefines/GlobalDefines.h index 5898464..a823759 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC11/GloabalDefines/GlobalDefines.h +++ b/SDAutoLayoutDemo/DemoVC/DemoVC11/GloabalDefines/GlobalDefines.h @@ -6,6 +6,25 @@ // Copyright © 2016年 GSD. All rights reserved. // + +/* + + ********************************************************************************* + * * + * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 * + * 帮您解决问题。 * + * 持续更新地址: https://github.com/gsdios/SDAutoLayout * + * Email : gsdios@126.com * + * GitHub: https://github.com/gsdios * + * 新浪微博:GSD_iOS * + * QQ交流群:519489682(已满)497140713 * + ********************************************************************************* + + */ + + + + #ifndef GlobalDefines_h #define GlobalDefines_h diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.h b/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.h index c8480e5..a581b97 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.h +++ b/SDAutoLayoutDemo/DemoVC/DemoVC9/Demo9Model.h @@ -17,7 +17,7 @@ * Email : gsdios@126.com * * GitHub: https://github.com/gsdios * * 新浪微博:GSD_iOS * - * * + * QQ交流群:519489682(已满)497140713 * ********************************************************************************* */ From 5309886e7fb5735ad2e1b21379be3a631ac9cb48 Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 18 Feb 2016 10:57:06 +0800 Subject: [PATCH 082/276] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E8=81=8A=E5=A4=A9=E7=95=8C=E9=9D=A2demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加微信聊天界面demo --- .../UserInterfaceState.xcuserstate | Bin 72938 -> 73140 bytes SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.m | 3 +++ 2 files changed, 3 insertions(+) diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 1998012e18f19e8fc50c0e957fb9aca408638613..8b5a141a81960d66088836d6350b4890bdb9c0c7 100644 GIT binary patch literal 73140 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%0AiT7+?>@ghKm_Xd_y;Y^M^ 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 literal 72938 zcmdR12YeL8_n+CFy?(oUcL6&hy`^0Gfs|B;gc^GByd(z%l3cvI00Ds=Q52<#2#AF) z78GpQur~x1MeJR%cd;w_e=~cR+=UDNe*Yha-_MU9lHBcn_xs+wdGF1e*_raX>Z(vU zE$tw}NI)VYNJ56B)k$l{b(-l9hN=R!<2nV(r~50yq4Ax3!HQ{B@bRcl;Xs`e;YAyE zIHcc^5t)z+C80Jb8Kt09l!n|W9c7?Ql!dZU4$4KN&}cLUjYZ?ocr*b`M3c~DbT0Cu z^YEp38D5UB!dK&U_~S^NTi z5xFPtTG7P<&Mgq}jGkS1gbS%OFCE%X!m3k5=3 zd?tJ)d@X!092R~Sei8l3hd z6*I(4F<116eZ_uazE~g*6bFf=;t+9!I8q!Vjuj`0lf?5xpXe8-h||RxVnD1D!(zSI zAkGoziwnes;zi=6;$m^BxJ+CrUMa2-*NWGQ*NGd&P2vsWHt`m5ySP)lUA$Y|CEhPS zAU-TUB0eELDLy0a6`vRPi!X@>#n;5w#ka+G#1F&|#ZSaf#V^IL#P7uK#h=8V#oxt0 z2qKtB#6T>>N))1!B+`bQLQW;^$eE-g=|sAb?j)I{kaUtka!4*YoAf1lB%c(Mfn+c# zCBw-GGMbDb6Uap3CFhY!;wM#PI+;mkk=dky%pr5h1!NwXPc9_O$a1oRTtQZnE6FOd zfovq3$Y!#IY$Z34ZRAdJ7rC44B9D>B$rI#B@)UWR>> zN|!REOesssmU5&5sZc7CMo1&2GHH}FS{fsbmBvYxl3$u4O_ioeRnl~6hBQl>Ej37U zq(#yt(xuX3=`!hZX^FH{x>{N%T_as9T_;^Ht(P`P+ofBj+oT=R1JZ8kLFpmsVd)X+ zQRy-1d1=4&g7l*Fw)BqluJoStrSz5bwe*ejt@NGrz4WK_mjM~D!ETTZia|A;ZaBlx z&Tyuor=gc2*^pxBZRle-+tAlgVmQYz*idR1XBcmoV3=r_WSDF?*D&2M!%%IgF*F$F z80H!-Fw8T|H!Lt{h9!ojhGmB3h82b@3@Z&+8rB;&7&aO<8Fm_OH{5Nw&v3ut0mE*? z9>X(+y@q{;R}HTjUN^j9_}K7?;ZwtBh93<-8GbhWVkAb%XfPU$E@P6hjj^qTT*{I@{FO)X&u4G{BT+8e$r1 z8fKbknq-=6sxnPC%`jD)W}6yJb4-_-7MqrsmYSBCmYc3IU2D3|biL_j(=Dd$rh85I zneI0|V0zlL$MlTpWz#FBS4|(94w*hOeP{aKblCKl8JV%!ZkEl8`84zC<}=LQ%{|OL z&ArUIW{TJWIZ1 zsAZUCxMhT8vgKTh*K(ev+EQbwwFE46mh&w^OUSaoqFJcrLd!DCa?1+K6_)EP*IU+G zHdwY>ZnfNI*lxPW)*jZL)?U_JtH;{gT5KI?9b_G49c>+B z9c!(yR$BemDb}DhWDQ$2E45x|U1(iyU17b#dY$!p>w4=3>vrp{*4wN*tPfasTOYJO zW8G`rXMNWCn)P+-8`h7lpIAS&erEmA`jho%>n}E9lWYc?(dM!x+1l9J+B(=e+B(@f z+uXKvTZS#umSxMf<=AptgQ|)PXw>{n7&)(lYz@BFxVjpTBW*=^! zWIxaDv-|B+?9=Tt>;Ze7J#3$Czre29m)Y0Zud!cizs`P>{bu_u_U-n2?f2R5w?ANi z+P=sBjD4^D75l69*X*y`-?e{eKV<*je%Stl{YU#x_Mh#)*^k)&wErbbvOzY=E;&hV zBe#`Ll24XTk=w~<%I)P&at}F0PL(rckK9-8Cl8WKJC(4uL^WtR3LD{HmRc=sjR&G&tC_9zAlzWxk$|K5C%3fukvR`>s zc~f~yc~5y?`9%3t`BM2o`Azv#6;-2ZS7lXEJF1=3&T1F6tJ+QNuJ%xSs=d@?HAPKT z)70K-AN6dtuUe!IQ-`Y~)RAhLI!Ya_de!q(pIWX~t2Jt^8c-Y5IqH1%LUpBjrMgPJ zO8Hq`t*%qAQ?FOos~glU>h0>?>Mr$u^#S!^^%3=e`jUE3eOY})eN}x;eO-M+{a!t+ z{-FM-{-pk_{-XY>{-*w}{-GXmhz{Z~I~)$D!{tbFv~ir_Xy-_Aq&m_ZZb!N!!;$GI zbQC#?9RnSM93_r(9K#(W9Ah2h9OE5cM}?!(G2Kz?Sme0Gaj9dm<1)wPjwOzzj%AMJ zjunn89cvxeJ2pCQacpbT8uuj4+){f>tnk2&@@o^>2_yzF?*@wVdw$H$J(9A7%V zcN}*7>@+(qPOH=Av^!;|;#8e3XGdozXJ=;@XIE!8XLo0YGt-&n%y#y6_Hmx=?Cb33 z9OWGC9OE489OoSGoZy`3oaCJBJlE-SRywCTr#ow$A!mb=IxloCbYAXU;#}&y%DLLP z#<||P!MV}7$$7u?0q1V#gU*MX4?7=mKI(kT`MC25=U(SN=Znq*&bORzJKu4>>-^C9 zqw^={&(2?*zdC<&{_gz4dBkOQSzK0^&DGX*lItv2S64SzFISq&?aFdxyL!9&xca*W zxC&iGt`gTduA#1xt}(8$u8FQmu5wp}tI8E}gD_vK* z*1I;iHo7*sZgkz`+UdH>@u2H&*L|-0T@Se)c0KNT!nMcsjBBrJpKHJCCD%dMd#?9g zAGkhr9ddo^`p)&e>#*ww*Ke-hlW>wDNlsFd)TEP>PDwg7sa;a1q|Qk_lG2khk}{Ld zPU@S~FR3_bc+!}p^O7o)rX^J;)g^_KW+z>cG%txJElRp9X<5?B(Vc4RtE*o^W@JHD zWJ3yajvZQ-GQ-~xngBl|V}>!EDyn^<&?aO@vL_JQYg8GlItniPRV{sUZD6K{(mX(%n$l~GwK3Wwc$`+MYw9FFYK@M zs;3tEr}*lt!$p-<;Xtq~44;OI1HsWFOG94uq(Xmr{nV*dwNuAd)m8>(<@=}kW>y7) zlQ@9CtYVtK#t+c?pCjvQ3;m&RRjn@!V=k|nR_Y6d3j#HD)qZ%?a5fYRg+V#`ZTY^C zzmnfr6>b>muL}f0Yf4ms`tyLo$s_$0aF0$e`fY?=UR_-=C_GeBJEW?%s*x)Yiu=1D zP#X$V`^`~pdr&dzwH@_FebCvcFY1T-qX8%n<)Z>rh>A3a=G0tTlGa9RtDU5stev8r zs-32tz8wujgHQ=N2MtE0Xb2jLhN0nT1RANGLB$uS_%;>4r^HT)gOW2T89+$`CG#k` zjFM#(Lj!afR}rZ6r+~Q(t_r8b3zSk8s1H{73*Z9K+p#VjQ{|tfOX?3s)!|jMk9A8E zHfs!DuqqU&)gSLwbK-6+sSW#sQ^1b%>#M3O{lTMHf{8Sg2Yf*=oJ{@BD3=5>4fNGd z^$+paz&%Y&yT(1RnHGk#fqazODWItl^;H!!N&|rz`iBudjkGyd#_(W(4erb8>zENW z=Nxy9SIw;m)TH?8z$Q~F!zn|mLKR#B&NVc;B&E2j+Fvq^|EU{g6Lq&v{qH0$7(Tk` zo<4u`xS{^=EN~tzJn@*yDh*7HJ|}9~KJ)|XwL@Kr%25TXM1C{{O-0jC6`GD_plVcu zYEb~yq4QA?g-{sPqnT(HnvELJ95feQfaan3XaUj?MHixl=puA6T7)h^m!ie!GITjw zf|jCXXgOMeu0Si%m1q^Z3av(K&{}jgT8FMd*P`pt^=LiXfHtB{XfxV^wxS!*HgqGp z3EhltLEF)-=r*(i?L@buJJ6lzE_65Ah3-N3qWjSO=mE4FJ%}Dc52HuWqv$d8IC=s- ziJn4Fqdn*uv={9|&!Xqh^JqVM0lkP0pqJ1=^fGz{y^3B#ucJ56o9Hd{HhKrWi{3-; zqYu!B=n(n{eT+UqpQ6vu=jaRcCHe||jlMzOqVLf6=&;sKJ4@@Rb=JCS-L;-tvX-j3 zwG1sw%h5bqAFZ#}U(3@9v?6VwR-z5ohG@gI5n7oxS{tj4*CuL{HLvE=Dm1?~Rjblw zXf;|uJ6{WF_1Y}0L7S`1(-vq{Tc};EU7{`4F4vZ7%e5=CE48b%HQLqMHQIIBdTpb& zS=*{@({9pk(QegtXt!&3YIke*X!mIkXb)-+YmaJ=YfoxVYtLx=wCA+_+Kbvt+RNIj z+Uwez+S}T@+WXpv+DF~)+IQMv?MLlr?N{x0?TGdl#h7A|Vu@lS#b%1F z6x%6QD0WcnqPPvkCsBL~#ivnx2E}Jmd=|wWDeg>hSBkq++>_#Dic=|eQ=CC@7R5Of zdnoQhabJr2Q=G?a?ML(z`WgL#enr2b-_alF2>KKKg%QSBz#=AC!Uk-_CTzwQY{fQg z$1+y1iXGUAT{sE1!ENzL_+)$vJ{6yaPseBAcKA%(9-oCf;EuQx?u@(OuDBcSj(gyq zxED^wDL56UVK+|488{PX;cT3PbFl~a#(nVFxG(O9`{MyP59i|oT!@QsF&>Bq;Szif z9*j%z5IhtQ!^80iJQA1TQFt^SgU8}=cs!nfC*nzXGCmi3@p;&X%W(y+#C|*lPsP)4 z6`qb~;A&ihYjFVA;q!42hj19zZQ2a2(PgA^);{6oA zLh&0EzeDi{6n{+d=M;ZU@sAY$N(D>>GZpMqNTR~YR5+aq?Wxd-3f-vCiwdb!$e=BCR8nCY6{@KaphAcWbEz<&3X}>LQ{hr7 zETh6oDqKZ{tEq4;71mQ>6BV{n;YKRlLWSF?a0eB3QQ>|nJV=E{sj!y{&r{(QD!f63 zcc}0I6+WiI=T!KL3g1!T2P*tRh2N?0Clv)M8mK5!(MiR&R6Lc6?Wov+ie0FfLPa+f zGpU$E#r{+*pkgrX%@ir>nLB+eNcpnvaQ}GchK0(DjRD2eq_Dgs% zvf|6|<#-8R%5uYU$XX`C&!E2=vYeTI4QcJQGrelv6o?zWQ&Uq%hak^Mof@i4gMUH`WBk6hwZw(^6+b z$WI+LE$H_bR|O%X@>f@<)EvMo@D+F^zH)+|p4R$m{Nwar{h`rA%OFMC1YfTjH?(XR zuYJdgvX;~C;8o`zAKIPMb>Xr)=jL}V%I%z2+}V=_A091^hl}MI0*MX?5zFa1&Z(1E zt!)KPqaaUZdQ6Y!u!(c%;#Dh-4~L`W&y6%|Zv2C{@dtPFs@2Em!T&;oG-I%xGw9Kp z3_K~*Vh!MS&Y+i9UDFCWi0gr)OGf$1tNkps?x}y#_%}0>LH??#)57r$wu_TZX&tg- z{I!sbgQF;DsHlcfS1?dr&B&$>_f3T{Lv0v7NF9|I^H)6C2RPX@uX<^#Xm#B1Up=h6GPh0=e)1$uZWjdMb;a~5ZN z)xh!5#^17tgu*xy?{E_Ryz12BLxLGUi+G`!|A3ngV)*Qcw$2~W7bV-b- z)svuj3ZHTc`CfJT@u6_cMrhHw9_4Q1Nq)si7JAj&qa>jmRb5rVi(jEsy;cB)hE(RD zp@J0xA2icn9jF7RI2@A4DS=>3D76Z_W39ies-_-33ItQ?BHzSZTvj;v=<7n2Gg8YM zpqy5d3Vkc+3pS({2O$My#e@)On3ZFuL_bI!gf=!6_?eR$ITU2Lt$UV3@_Jj|7u@-ZN;=Qe~2wK8R?(WH)l$DR<=Jo zJ+~q&tqZ@Bx6B}4Xjz0HQs9F3kbUEhi;^k1e958oq9Q}KwGev&r!>lm{ zM@KlJ4S)Ek<2Lr=eJieGyWOb;(|l0*=ZR@G_&Yw_W6_6we)QN+IF)l6<5e4?4f~%t zp@f_URtJ3LzG|57sH*jcQsK|0zvA2HOipKo!0J!^`T&DRc%FeeWgDYCh00td5xn0=AXh< zHU9XvOyO+L^{Nk@D7Gz!>Eb|rZ6(ha62$6b$dtilI`0I;?0CNt8#9GmPO99ihNFu9 z2l{X`zoNSxw>!R<^yN%oit0o#iB05%e9mNwSG_Z;lh*DkEgN6UIbx}=9Ex*sf(+z> zOgnBWJ(fpIjY-sw_CBSY$#k!Jaa5)MyqW27tEnc`7}(lCjdDY9J-JrEQb?mUE#uuIzudp?o-=$u4N|fJ!)=hbcY}Oswp9u=i!nOR_ zmwDBh$LHDqf{XCzHOZr0!A8zy$#LV7NDu$2Te^XBS>{!DNA=R$Hq&zc{x^fiqS+Px zI<^io-pX#_60Pv67yRcE4J-Sbay4AQ>eR=!`<4RYegHP3Sf*S98v+;|yy&m-2XAVrOKSl>{v=7tgwegqj$9WEKY1wi4rGq*KxBS9!#56nHp{QUtCou zS~#g)$1V3irf+48VTLqj91^D>g>$*LHDhl4>NGKlGr0dBjJfWFAx=DnKX~^)_~54U zUu+pjY{wt`Q0v6j_?3xJs)}8x7?=Hs9XYQ@T8G!MV}6{zx^Z5Q{eunF=72n+t;rxO-Y9Z7gFUU65;SI}Ei}s6oX}pcdf$Iv2KYDC3Vmg0yngez zIM4o%CA5t(FJ72pF3j^@_0j*nwrM##Zxp75p|Loai}iw6)uLkkXJv?gAz(*BR#x=q z(aVX%;hfch<2JK)bP4h3B~EM%6J6odq&EJlPRuesaWtoPuvMwGJbfLP@J!&;Uh%5u zw_00f>5Ugh!^>&B_7BFiM$?IpD3$!dZ?sO3kIy!mCm(S^zKZjD%d0LrKJAjwn)7OX z)$l&CFYFuWhZ#Dy78yt-_%zwqGZ8oRz!T;E5 z)nb^Wjc?<5T#iGnnQ3|Ad*+3l!N*>8>GA0Se`{ssye!3Muk~LG1G8#j`6w)+9|r69 z^(A|8jeQBH_$ibbT7jZIa?N6kqmB`3mT*d+xAqH_anAe-&f&|}SyvCOkB-b zeBD}8t8s>L4S)8xUUk;-F%0g#|DW%yh#NSW@4ag1_>ehfM>@uoinx^%`Qd~RiEEyl zIgy{d>aM6p{uip|1O0&-e>m6>@2GchS$;Wg!I+!c|D&WA=K=2Gq<(A7=#d_;mist^ zKmIG%)%?w{c%-j(YW&(X@gXkFpZ|+X5=v?-{j-NRU-%+E&LpB3wWf*0&*_PKbPB?8 z8*AdL57q%QBOy3` zW{Jr9liMA)`T1jcc1|I|c1XmfvuOWcndr4VV{nW?A30eUsY9!TOkTWc;njm!M?%if zS#^q882+C*l4CY^2GUBYv#ox|Kx zmAzP4i!5SGuwfAyrE}};RWJJYePQ#>fc`(PRq$O9f(iCNAmepvXa9qFRC*+jicgWr zx%!j)9k&KMx>x@@)9`V|RH1Vl;8j=t=MDD%+r26Ft(caZZ<kR0Ufy!hR1yUj=MR&MTpl2US)2^Qx;$LZNy;>);)Q8!& zP=!^nIewrPXl{nDU}N4%L(7^zi;BOHT*}11h+Iq-kxM8ZO7Sp?hf_Ra3t3Dq)5RZ2 zaoK-^_yy}8{9(nFzEL$$r`ejTut$4ipNkqmf~?+$Tj3z5aN1@ z$5T9k3o-G;wqcKJj%?oX`lPw;^t5b{!|l$RH-4@=H`C2pGAhxH)?KM(%cLmK@&b7g#CeJ08j5SVIMBaK;V6b?-L2KSZ~xW%*IDu-_Uq1_ z2ZE(TDSKQe*7Bj1z5zB5xy^B@5~y z*(j#4YdV)`AxH#$v&RQ`O}j^-!Lu@;!Lykq=eT3LyyTQl0$9lE zPVrKTmr=Z&;uTw@o>DK6CWYcFC|=2>x$?wH(|dKn?OVSDJ9g(l>*QoIznPvL=QpKX zsV{5wM2<%4C-nzAhCJaaidS=iSe^i_-hcJz9PR!O1pj zDTc7Mj^b;!NTt#c&<+IQYbm~tgF)~*kzQ-~u6)~sk9k{X@h%RLB{rl;NjHK>(AK*tevpgwklyb7ul#P0W5`4nBOvN|a?^Fs5eK|e zx|`|hcIgi3P6-qR`PHKoKSuH6TclmmJpc?^dV=C7Iq*{_R#*7LbH@Le8% zWLde5zUy&m57Sek3`KfI+6&^qffIWueuj&)SJzYVf{%Y5d=cm=17aS;)ik{Y7;;V{ z@&V~prl^Dw@HOdmKz@^A0Dq1nKd&Q)ud*-59X<(ikQ~suJ3XB@L1tQ96TB~d%#c5j zK9mkgA5jeFiM>ei0g7MRB7Gu#sypw46u-=oPw*gbVxRZA@9)h0ZF+i>eIAy6VR}y( zfPR&J1MU1l@v9WS#$|XtVxL#d?REAepdHw+7qpWGc;jJwkQJ*PgJ3YWglsSw%&3RK zN-?PZEsp$l1bOwAo(H={SZ08S0Jj&@oeT~`+m=*rILUA_fSyY6yA;32LEqOwC-%#| z#kt4Z?1EW436ZhDA)83k?em7a8CTBY_Gc z6$lliErv@Bmx45xQNch3BbUZ>Vx=j4u4h5tQzp&LP3NvYEtC0UPlhKpeK4#tTn!Q> z926SX8Lk0|uA_p53gCC3eQbKG_y2Rqqo=ilEIlU&f=F%}3r-pCj5t@e*>Dr;wbj77 z@D-4oz&TGcPfj2+f&Ap2t%jQow*dOB1~}$Pp@M_sJE`D;M~r8u78VDpD?)xt8|uUq$=A>__`<{4f4%_pI&|n0cW01Y2c-b!HXwX8`!)pMx|?p8$8YVff1uw9){>EymJ_{^-H_JD zqE`hCyA1chag>c!LHz~A&G7NP{7fbNZ*Y(G74M83zcb>+cv>8<*#`}ev5uP1H9l^5 z0+jj`71~gtEm!GDdXv>xytwtnpCZ{rS~mCPECXvQco?2Fyx5{C95B2DxGz)T6e>Wp z08@Y=F!Sa8kL(>aVr?Yd&dz3rz$!$Z#yX1OO~ZQ(Hc^&hc;D~=z#gK)8B}P;Vb9cI zi!V8^;@0&O=4QGfSbDgDxnW;~SZDsZ;hPrK@U7uHz&%Wbv#8L4<93Xyq3wp--<}Ay zIF_QMWw;?+X0h(k6eNB%{MjPkzl;d=FhZ~IOoc8Sw`+v&qUVbCoCQH5Egia7ZU%E6 z=~>yaz($kN&VUo84My3h0I-7!-Ko%n1NV&Rcb#kZ$Ah^sq)arJ(~9!I~!T8AYoe>dm5ouU`(Mx z8Wr4}VtQ2eU9T+t17uInh6eIvWrFPPjJVp9G1KU25xBRp4*>V2LM9cmIB<3Z_>$Rq zXAWb)Y+MNYVld!z7HS$>%UEC>#N%=Kydi6>_QI;lRCh;E99p?)7_zXll*0 z>S3yALLF%w%jhO-s&U5gx>nDoLf=@e_Fpq*N83{)sF2h|D#*t3jD7}|sLpGgVw?&T ztEkYQ3IjOBJe^{{k;BFx&I1>l3(cJlzLlrxX&`$}Q*#B3VTPP&%D`A}oC(OYsZce{5-Lvmh=@#A7g4sqJ>}KN* zCVZkosd1Bv<3la#^kL&80Q(pf z#!z7_haDHu=_daR*N=fbJO_5GVa?^voCiH37m8wF7ftf-F+RuinkXn3pEvFY@E55t zfeI5j_#_>?zH&zL+1~(M1~k4K2Iagb#QB$3jc+mBMAbv%+s1bQ_dP0{O9d~-Jx|B& zUG%wi>?^u1pmM=bS+TXr3O+V|!BmlGs?YeP@hiQx%BfJnP@`UJ*n&6u&RG{h&219> z2ji~{EMar~X8au}9-)Gt3R5`6sgdTo!-os1p%=i;KTP(VEa+ev89AV1@G}uhFo`B! zU{1u-WHv#8*<_;v^xo+ldWH@?Y(f1uv&XU~gIWY{vMk5U1u$!TI`=7dhh zbg~J`%uvS^YN${ftAze5Ug-7})l<|aA7g57V&kyHSY1po4l_YusiVUAoG9esJa(@s zDp?Q$vAG5^dB0+wHrL(gyiBPkHV!kTncSvy6CC;pl_!bwQ*Lf_BD%WydC^rhL=DmQ2Mo$W)@M`~oV>i&ObM?|;-Q7u3YO z8k;1HTE}qHXh2ICdrf0ZV|BCzRM2A4!prx(LU!sL)4}SZVCR}D7_~%E!c=MUgQBNW z;X*1b^%D;QV|@6Lw1H%rjGr@{)Zmn-xp zEWTvQ?%-jFz|2!*^1LzK69>EAw57!s+-kZ(Z^0|6uqv(v*L-r;!_y;Op((bRZZ+M( zz!C*^)19Wffa5MIKnPyLIj+??_IN(D>d0gr49=K>*v5yH*-egex9L#^o5%;79y2|z zb6iJ-YvMTGJD^0^uKTi_CN=IgwK$P%dcnjdlEDeVs1zn+nu0_Bt1fIe`{bkLea-YX zBbF#dGQDGZR|nfb1(+sj0xP)ky+s3W*3Cbs$zgwNVo@t`fB(`HiCUYfuq75NJm>m? zSIVK}oy}?q?#vjxA51K8CC2;B1c8eQdIJ@g3N8+O-)!*8nMg2L%xQD0!a-&GeSc1xo0*o& zvk53SM0}gMow*~!OEfKI?qu$adYHRXVFwjm!?OZSQhDx_&_`T-K2n2={a+nfiu2}@Syd~*Td z7E$3ID%{I)Va9;rPH^Ns{d^_l>uDZn=3Ec2edn-(eWPKU2b+htsMZnYk-AzRpu+Ar zwJxn+bl#mX5uV28eIWcab~^KTGn?&8*q6;-GtBmxA%%K~3J-Ilk3{^JrwuR~S(LlwQ+r=+Abi%*e9WwONxfB&e&#i#7dql!;poC6;_ zecQ-F7QJ|6OiyR)1R#>d=0;}Cd@-}8gbrkp`4VVxFoS(mfN3A-q|fQrG;GI{>)K~S z0^-Sp?8pP91hA*v^w{`iUT$6mz~&X^E6gj+5U2K2;RPzdaOA)i^Ht{60KAq8FHzwj z2Y&h3R`gG=>+7C6=gA%2VMyf81?{lqAuy2h#AT7@P3CPa_PZO+H-SKKdi|?Zc#R7b zng8i=@uQdBzB%g7Sf!k+tjRmvZr;UE6GbZXJ?47>^?oY6Nd-RlBShwY3f7I@wdRqD zuuKM2?oNlXF~sI{wsxWk_!0Ay0Gx1WY<|l8Gyp$Cg?Fj&9;X|b|0#X8r|;HLlc6w> zlMZNrnGJ)OjGQz#c%h8OwAH-dd=S7B)?dson_mI&*QoFz75D^@5S;+(ee$ElR>-J% zp2mk>FbxF2>5T&q^E>7bTV#F6{1E_uLIwDrPXGy@>E>9vr}y-$euu&q1BR0^!M$gD zSY`zl9}PxdnZIXxPL!&c51W6`z3>-Q&?kW+6|??-;qPCpjp@rx{-TDhy*!eM%|a&9Xi>lwe|7&0?`AEh4KHhfec* zD!{B#Q{qxz(d&%MgL>iuC8G#S%gL5An8=BeK1(~xnZOe2q(4#tW_N()&pOKL4_&vTz;M1d(ZcOzPXh1UiXHcp8JYJ(Q24gN(% z#Lz?>X`D*B_v@?lmWE;@8$)KsR8QQ0Tr&S# zBNI7;53re^%*c&%D;A$+3IJQmEftnZi=T={Dw?QhrlMtwWvXQw08gi)m5MM419a^G ze2i%OPy0!H__O`JLQNflWoOXo8oiDsY-s>#5_%oW9LrpgW*!w4Dym!>hpwj5J=^94 z+C`KP12O0p%$LDbOw>XaS}tW4l4v+rpVdRsm!8Rj1s}cT#22V7 z8!db>OQLbTWt#;SvsiAX;%QVoodcht1NX~#>%q!j0XU1}EzqrHZeAv{baP3G{t7in}WflXU8V z?N-?eeKwbh9xC>xVxKKmht-LCSd*xDHWmBw#_M-N8}EVlW*=~wZ-^FDm=DQfi#4Eb z9#OTmos|zq6U`Y}J6T~kY6a^YK*c;RPQGs86Z@a(dv+VkbXnGt3GtB4pRugBsUm1i zwzfDVwPsjhND6~+v5<;IacW=f9s2Gk5m(x@%*fiuIsmku(1Tj@tob_FKq~S%n5c!7 z?t5hY`HS?LN_JzXww73j0#?HAXB}o84kC}FB19EPci`VrUF4A|t5#Qy=UA{_kM#kz zv>3cbRFUJXlUua1bFE%L^-*ys6=4Z2pbpnj`}=?VqxuN+0Z$goEMSrZkkfP6JXfRr zTBlm88FHc|&01rv)ny0Dds+03}?TWZh zoVB#RZ-q4s)rJrUA~rR!on+%n7!pk}+Rm`S5(Zm)Dnb`sz=1U#xOeg1p*S+#nw`T}5Hjkp z@FHSXwl21w&}O!-wr;lWwjNZxkctbbco7vZ-eT)zO9oho&WotXCqBeW0rmuD9HYOS zaP^Y;tbE88dVBcvLV9l8QaYQ*)~_Xlw)M9S0Dw2Qbz*HizAm)5)YMuH1i zG_x0o?oDbMWE;Xz6WNPxsBIXaj-cW)DlX^RU!kK8dn~=%_b*IlHo_8AH(QwwEJy#ls+{RDwGTu!ULns=4hKJPqEEl zloJI9TeYnQPyaiSzr6r_CA?Y!z!@-k!EBrjFB*rlwt5>66^Uvv zwz)P470j)zqhj1NM!~wfcHMoD_ek~zPE_`VHa1d8=pt>4Z7@<{Sl3Z8ZW^O>pW~yS zpug}plAto(q{=I7t6PLyV_U1kZJ^>trpjnUEZx^`%r;3^CCooGa$9fXQ%VUnxYY(z zO12xRxS5Juc)M(kXz6QSlZk zZs)+a>cA5UFTE@IHn2+%o8iuZsdrX#$_2Y>sx#T1weeMNi3XIm12$OoW_y{6JE*vm zBS+>Y`d8lk$Jj{|=JJK^uq+=K!%F%%#&6pAvbTh|@7o|`u;#y$igz*GXnXZvz4(hE z4@G)wQz~ft%=R^ipD;w)zOj7^B)_NPE-K!`N!}Z2uhmyQy<<_NAAw_peiS$6wf$l{ z!cY@>^gnHX=@jp$;sdc1i!T}eX+M?a9K7*!n#xRegWbv+Dbea!yUlJ#J?t=cc#w(@ zah5PE!7`1~2ltQYvwrg2tQ=1c>+zW|!2$KmTzK&h+<9XLYj0ye6~Ggkmi;vQ=>Xo2 zijPte-sXT@^YMsj%_u*3`Y$Z5G3ay{ATehGHrv=0?49i08E&E?k-dk#C*USi@kuH^ z#c^S>gORSECcgQCC(=$3eE>DCdS}nD=K^ZNeB17^_XboLENX3_^2*&^F7W-KHIQw|}1S-Bx#W$$Nz-0|XJy131QwzRH}6jPmrf zh&Q*NZx5ng8#XYhkr`Q#)n0F(+3b@BJ4BDTYv$SKH~WOzFM-K5v>ok4pP?Z7TDwz& z?vXRl6zo^oVK&9SmWuCE z@jc%7@9T{}@tl=kKluYpB6`>`%blLV<_VydADcPaueWbz$cdb{eT#i7AcN=rkcx*m z@<&nR?f!TDkl?}UfA$IhiwfD9afyrlR{I?-0^e!B3xL6OeL}@gIq+vXaJcRn>$Lqm zs=|tvqeFsyx1B9HNKE%JJ1jY{L$CdUieGZnucD}zEIwca@5NSp!C00%8(68xYG6(4 zVD0_-e`ZDia)~5u^ovYx=2OX$htN5eb4uW{3+FS!NBy?A+UEAEU^y+8_EN| zU}ev!c>l@*FRfm2bOvern z24=z@9YL?!u_V8&kshp;udfK#2l+{lO=rn?)wU)11-{yuzEJ$WaR+#x{l)$(q)318 zT{`T)+y59lv@9{ zMp>i;>#~;mLgB%+u&;m2&10)7!_ztr2!4y$e^CIF%*Il(S+>Yl*+vOq5K1IU3|nMb zR%BInP-3LSM2VRa8^BMP5D3&1!^S0n;KTxWf59Id9;m8iTy-su3e=VQXZoundM*V0 zb{bYb9X2m1DI67OWTvZTcp${5x`+7cI`-F@A*g1t*Re8SO)b}ze5(D|P4a2->6BO~ zv4YknluT(z9y}|#p~O95$}nH@*s|o2nSrQCXUQGnU7g%n?#i^(g%WwA+>H`7-qK}$ z;uj@~SM41Q8E_K9l;j%Nh&I>&AtUIo3k1Xct9|vg71PT6p%9qENdJ_+IaB=Up7iqU zO31mQk57}`%^sgAXS2s=QR3Vv=THJO0#9&V%B;U!fO>6~2grGHJ|%4^X-mmTo9$o9MRGCgGUQ}R*nEOlZC6rQ!aL7q zc{J-j`nBWavW@b1O3r{Apff`Ms;e6n^wow~QVs9`1|4a#d@gK+6WJrD%pcw? zPnNxS)##yR@JCd8KABC5$>nl|Tq*l0X-`Q9N;*-}Ws5vjo+ekx(2*_Me7GFeAKS5Y4kO^3J%&>2s$dCAb0!Ts zlg|IF0^H3XJ70fn*VZ{OC#rz*sho$NpUG5S$ol_N_tU}`p-51x4@3@V$T(aF8r;Xiu4Y)MqcYx zPmg8XTTj-sy{rnyjB0*ww1-|RU(fV>9VPCK@_I_xTR|~_zxizuJ#S`u z-a<)6GdK1bs zljLqnU{Wm3V(ydgk4Vy+63;(w0=y406Ij{jg4~@^+7HW+Bu5+PF-p#Er2QnL{S+mA zo6+7Y?~BmxPf0&cyERU4i#CAXhq?OaztirOs2nfIFnzp9eo;O^NggEyo8*J?%ajyR z!X_+YeeWB(>w)dGdU1VWI%hTl8XT7UGtFTq})okJrRmunQCoDF8C?AqPl0T-T zn392%45FlDi~Onlnf$r@1tsTDGKP||l=yhR>^6=`k^xyY%MDrX7zn0>0`s_ zDIv&R!fed$ReL44ba>D|vno&@8U=gh`Xjd&RQp1ZZYH`sn*AT;1iWgO1n6G$=KmdW=#|SI$t{DQAuk@huA>RiFYddY~w>~OsSeezVcgDbXl_)c&F^${J;@a<#IKl0_7@O(mC7vbY($^*Xx+UNt91Yf8T{NhGluv;Pvx+#h+jO*x|9v!HR$BU$ z%*J}Ra=QXG+t^yRa<{Up*(diY_c#0GLFJ)lpFFC-;*O09q@I^=RGy$@X|uL@MrXXl ztM-d)n_7Q(Rv;$704ZzQ*y;7<)HF1C0A0it{Is~?zqCM zrbo%Z5w>6>9+)}H$ji)5F3w3WOwRP=WhQ$v^W4c<1%=rK8CgYH>DhU){UMSV!ho?E zPMs@P6&2Zd9$5z@T;HWPl#(tMTjmuOvu6BJH87>M6*1qv}wds!L5$+o)~T zlT=80lATqn<%-N zl3U;dGID&FC(~txgC|slimI!ovTdqCWc}kpNVqHfC84oZK}hUaqMa1`MO0JZ`}L3W zf)&%Ctj=rWjUVbD#lD)V>ISdcCKiC7!@>63IqHc}Rj&y8!|;W(s%~1K)*q^>sjp_| zID1mu&|fQOhATO_kcMqm)71pS{dgR$s%m2iM!S%s-V?WvJ^jL{5#Ludm0j68KyQX7qE z(x#J6)(o0ivyK^B#tzbkD+>bEf#AV2+MQ`>e^!T%@OfF)96vmDN^!MsY6$*j-mK$* zF1iXGc2zTKaHL_|6n2=7zpNnyjAeCqnS!wXPbJ%VLJ&v=No4Y_BZ$|xqpMUc(HH4QNchUtYKtA4s}q{%0WeF zFdB&_qH;)b&qpChbQhpSXc@X1U5lUQ|!36xh=uxx>y@*~z@1sNLWArJ; z*nl1QRD2fhgp+Y5J{y;1WAg;%A@N&EoZ^QTD-S|;m%L3MaqW+Pe zkstVRN*?ENPFs~!$(jU06nw6qJD3odKv0<1GtWh)kSKFda1gYJCG+S zfnwcVlsrwzo*TfEEK!%L%i!N7+@Cx{$zDpHr38L?hC7xH$MyiD8tTBY|IJ0f3ohz< zY$SG3S-63PtiQRE?e5O6JfNQ&(Hbl-cWFLKAYD8yCcjhf(zDhB z|0M^J#Gb9F^23QKIrv|~E%uNUl^-=s39Q)(AD@AA!m~#Truo86O9CQC$++EcAdx;b zq&})XgL-XKA5$M!pHQDvpHiPz_fYa0C9hNR1|@G&@)jj;Q}WI>b+5WleHO{;<1Cq@ z#!Apqw#ZkWUCNADgSbdwBnOBgU zU698zqs)TjyiArOr4?spWM^e%XBQMhkr4of1!2*HzcMinZ>evq@2Kyp@2T&rAE+Oyhg2BQyidsolzd3ZAxhv+s9=9W z$)}WjM#<+lqfV%U`kDH<`i1(X`V}P7->Bchyb#Nnp{o5QB|lMV5|yU1j9Qvbr5W7o zwatT70&oCKZKO6G($7``&j8YuO$*E#>YG_LmE}ki;R9%!QeU~h+N&lr;S)C5=x`O( zmmBheeqUq3SBGnaV&64ukhoSagv@zrZ5+ZRR#q-#3*@GHQxfa2IP6eZb66cVNpZv^cEm^BR4K+@>e!Kzhy}MFrug$vK(hKHDo(-9JvmU zqqn0EC4W-#7nKl|FqH%?E-M&P7WRefLyg}R)iO&2EiunE z(q93itmsg_`8CY4BYp)g3`1ha5F^Jdv1df(9_$zbV|7OvFhdw}l$` zE|1^k9tMD2{fV}olHz4uEdy<^j_mwLF=+)|Ah;AK#;_;f?Fy8a}x}^+e*d&z5yGz z1(%OY1@|k!72+~LX1dWyw=+QrjJ7Sol`fS^#+3jsE3O=5s95QWtHM=-W&|rFh#A$^ z12wz=m^Dp||FH&ob2sZ6MgdgZD-c7u+ylQqb0m(6dyRF`f3!v`t`1j^YXJ9Z#5LiX zaV?;E{%bRw3C!=kD1@1}|7nOb>e7yT^Rt!7xONawx6*5+H?9-c1+dw21^+(yBXQlh z9;}N0F7l5Cbt|q9RNfocj~l=Z0*dz|Xso4y4Tc$m;AMqSh@Vl7Vcf_sqmqmpUFrMF z_h$Mi9mj>DkN_BqO9K&{qQbhYac6NfOj*vM&|wm89)*tlm-_r2?)~4?=O-AT8Vc?+ z?hEcK?i=n;+;<#U1COE5aTGd%LV_rC5`|8o&}j--2zjudO{~l_@H(&xT5rOBFrOfZ zw}h}DK@c4a=D0L{?fz?m1AK^KXb=buC?H8qj4Q=(^FN4*gVVz?RtQL73iKZ&meC}m z9Bg6y2Pt~&gwoG@ZTUq;1H*k_;nigDB8-*w?*;r^H5r$I+QeYwZ%a7c+J$k9_|2cn z0LH_d08qdLm%00^y1~^2FDs3q%pKH zy*SVVSbIqsXleq;aZz1MK@DWW6gdXov7{?l>@$eG1j#?Mv#wftvVHJDKnTM7;R7%~ z3W=hS7z$mAgauacz=u)jG8h8T6?*3rmg@IgYss@72G_-(7%E)>;U20_)YVOv(nW5{ zFwi=7TNOZQ>MDVrS*AzCj6q~8Mj(r68mj7Q(bdcaMIfXH76}YIVXFj2MZkhAH%TxU zsNx{H7IfI(LmeI+G8R-;c=F`DHH zL7}@SBuoE%4~6JE+aWo6dt!YjrmL%^``@BH9FSbbAV3;h?Xhc14b8y57)ZoAT<@X@ zV=2cvY-#;v3?G0ue`Z}S4ig2}FhiDsLH}MGpb0_RviuSR`n8R*qpMGVcYH7+qG5TK zo4~ijh=Yco{`y7fXHYb~S5H$qyd)XR;bx`cJT#U#;Sf52Y5;lMhVIvfJ zghEeHNbxW83pRxxQR40DwUBQ@YfWgb0ws@*P~UWXZ#ka569%;3zm6 zj)5s~EF1^N!wGOAoP7ft+o(Az?(x!su2F3#X63&FP z;A|M|3I*ER5L*Z7wgMD|La$M%AB6y;HA$bwtXQiru@VfX0dt2jmeE$|zFuHja=4Q@vvGZZpMA&W@312ldY z3V~P^V4(ruFtA?t{&r*f0wN6vDa~i}kIOz1KmY+R?eDTb*ZRL-zpSLCp`@?-b9EU2 z&VP6i1+TSR{cWjsBk&BsP4Fl@29LuN@FYA1Pot1E3ZW=ugF?0_1dK_06mp=zv+x{D zgXh7|B5Mo^Iiipg3b~<>7yTazW5-usdw^+e%wvJ6TRBE0e=da_4Cf5S1^nJ!n2|## z-arb*Jz&-VP}EBt!9S#NE~SYXgWkvdaeqZv$}OdV7<*8Pw!u?%RfV5^GvKDv+bjX2lFn^{Xn~^ODC$bgUhHxR&0ojWH8waC_{u&Gn z3`8&F<`Y$2GO{1DSpG|ypH)Hlv8tdD2-d;wEQ2ipdP`|X;H_AiA03~1Kf)MM3=(3@ zg_7=)kl+elOelap3%zAAhru0@!-toW&oIgeVw7=*k-U_6fsr?ak@p|q+LGWUhG5vg z3u4|{ zJ_pH&3|8F#Sbix)dx`R7%=D#EdQh4kGmZt0Fh-dyP(28Mh2YePZ(xA@MVo;$Jisn9 zL2v-U5^sh)MC5@+MF8fBCLxbeD2BfJ{BLPxL=gcS!+vUIcV^;8@Pz4I*(Y0hQ=-K~MEg8@JISNTY5|JbX^g})h6`@cG3YGn(7C|qh zW2ywSd?7;%%3Q(p(f(hJIN*h0C{ZMfp%aQ3I^n^uLQ5j~43W}*R~tXeDq#qg|GOYV zzaW)#{Q_0e^@}{~|D|wcx|j9W2N3wjCkN&gzn-Ez1BC$$Xox9mdDauls}|;e`Byc9 zu?SCeRrP=oP2ZLBi@zPIr2E^UN`|Uw#3oe}3cdOdRYUhb0=xMyRnvxafyiN`9eIOv zAe|_9BPs-dTs;akL?PWs577R7DAb5TZS)1;4VX@{*OZj$`$_IesXkMof4a{=iVU8D zZi+7LIa!9ROT&H?nZoWjhKwT<$RrAZY64~7fhdk?+-&2<;9|bKeeq+aPiP&J22HR|bzmXo+sig~ApY1mh zdg&N&TdMDS$(G`Ca}Ha6c~&hgOu5!_%mGh-ynw^h+SN=*syznQT7Rirhif6_*-}>26{%J z_b4>840ah~>Mnq;cv<{C{C&I}{sI0W9zcd!6q-XJ8Vb#$&;klAq7XPG?|10Bj8vBt z?e8dZ>FV$Jap~&sfN|;S?>KSk>hA#Y=T*E3Lt6u1`a$|S@gFQ-%RiyP-#P(r1G?b` zi{DCD765NQVvY9+07i^#!aD->hZn_q?&nDscvrj|Blv3B1o$of;P=5o#=B!U5R29N zpNP|;Cf*Ydg5oiz`@hRV#(QI>|4&32PvZlgh7~Mq;AA0y8^P-_e~9vbcZ^cwQ_% zEdF3Kbtp?X3z;RFrGC>&uv<)jQ^KaUO$)61S(RCXSvzp6aGT&0@JaYIdFS@6rTg^1iQd)um|h~zkq#Ve>e~hhC^W@908L7a})zuqjR61WVmfUDpd_!SH|4!99+1{_8^+yQsNJ#Zg901v?H~2fU0$Byj=e5XsirheMA-9pc$bDc7JVq1{WkeN#buB~}F+hwFGdvj|jgQ4A;FIxb_?P%> zd>+0KUxF{kSK+DnT6_b(8Q+HQz<1;O@Pqgf{5XCJKZ~Eozr}yRf5v~q{~)X)K!o*# zjRY0~j({hy6Sfex5q1!E68H#v2?q!Qgd>FGgp&jz!a2ePf+*oKL4t6daFZZSxI?%{ zctDURJS8X*R0wJWO@agl2*ZRi!X#maKqD*?-V;6%z7oE( ztz=unwvO!&HfA@Y`fU@u=vc+JF z(H4^}W}F009!_3PKF&Ry8Js1YWt-nu0wx(_^+*-V~bZhyxBiqhz zyRc1Uo7lFzZPnYT+g@+0;}Yh&&Lzopi%XiTlB=1km8+erWBbMJlG|@>m)ff= z_SWs~+dFnV-(j@FWQW-f3+}_*=eUKrFLH}=S8=y+w{gGW?&P_|Bh4ejbC>5HPbbe9 z&jimD&&*D_ohmz@?^NHZxwCiY)Xtfmb35mGqj}SLU-D-0=Ir9xC9v!8uA{q-@5Oq^)4!(7@rj1ZN58vvV47f(|oghG`@x13cIy;>+aUyZMX-whilJ{Jv@7O_l)jY z-1BbFhdrP6n(lSn>%7->ulv3=`*8b^eT04N`#koA>A<84wxTsKHz%5{eUMwGyfL;t^8d4JNN_mqxfU^WBKFxzaQLqkon-IgSdkU z2XhYQ9V|FlBydSUT0lnNuE0HkVu4zLdVxlP=0jqKqz>Iabmx%lVdU_R!#sz15Az+) zK3s9Q>Tu2BSK!c_OGm_yNF2F#B>zawkyl4*kJKM^KI(ro@M!SS&|_PU?LM~m*#2Yu z$MTLPP%;j%JH(}4ab{~w;XRfapQ#CiHBhC#S_6Dg8YI4g5ZdK z!F0i5!BW9;!OD|&Pb!{NKB;o@`N@fs?@xX_`T6A6Qx8u)Kc#+3^OW|fo>P;jrcceD zqMg2d`pId9(@LkGoo+upe0ucs_~}U@Ss^8%XF{q%YC=syeL@35Lqa2Go}SSGL`+0VduiGCIR zQ}l<}O0j2R`eKG+#$u*olVTslK8bx1`*um~lJOFMYeb;qu1I%$GM^eto&) za@Xaa%YEX3;?d$1@i_5>D_U2~uUKBOzG5Q*Nx%|#2{s81i3o`#i4=)6iHxg4SH-VN zT)lSn#?`W`4Og44wp?wyCUi~wn#8qh*KS;Exi)ZZ=-SA&vFlpb&97Ttx4v$3W6cfR z4de#l2Kx=y8-X{1Z-m|;N=i#UmV7FyD5)&jCOITIA~_~Gantyw{Y}T4&Np3eZM?;C zYs;;zx43S3-U_`%ycKbaEJcvwk>Zu&liDNYEk%@ykRnS(Npnf>m*$rikUlI;k$x$i zC7mOkcl*%ov$xORzHnRQ_BWXgG8<)>Wj4up%MfKEWXLj6caS?f?(p2rW&33ZWrt3g5< zeYyAT-jDmL_YLnG-#5K)asP)LlN^g2s~jR%E!Qg7F4rN~{XpWu-3Rv`$US)UpzcA} zgPsR{4+bCJe)!~}!b7EpDi0?get7ul;g^ShK2mvP@W|+q$s_YeU*y-xZ;;<8&mvEi zZhtT)9!XS-DmD&9h6-q@T$=yZh|^v#w|3&nBNuKbuoA zRIydDS8-HvQN^ipsqRqaQQf8Lsv4*otQx8s{(SfIW6w`KKlxnfdE@im=l#zIpO2_% zsF|wSsyV1RtGTIpss*Zrs1emjYEfzwwKBCywU6rC)%U0$RzISCO8ug`th&59a7wG& zsN1VMsk^Fss0XMAtB0vas7I>DsF$iwsDIGl(%7wWSmT_=Weo|9>l!yTq%|IB$ZI?W zhia*4sA)K8Bx&Sp3~S72eAZm8$*Q?obF1cdO&-l%ng=xxYaY`S)I66)FI<64`vIJ9ZVmwF%lB+ML>4+Pk&)Y4d9z(mtwvLi?7s zv9^PDvUaw1xptj)m-evsnD(Uhj5baCllE8b?>Z}W*66I$;nBIGb63Yo$4SReCtN2{ zCsQX!Cts&Xr&Q;aPMuDpPK!>vPN&Y0&aBP{-PO8Gx|?)iU4kx$F1IeP?rzRRi@>Za-D=~n1A>2~S%>JI1*>yGKtbQg8s>wePxs{37Uv!1Zt4Lw6WD?L{| zKRvQuf?l#-n%+yjY`qe_a=j`&s$Q*LgINH@qd$T282cx}*XFlaDkFl#Vx@Ydji!4Jb#hLGWU z!;OY4hIP z1TtYU!I|Jq*iE*W>@?vs*=usZM8M>TiI9o7iIj=FiHeDuiKdB;iN1-2iM5HXiGzu= ziJJ+k6fHC?v@P^33@uD7%q;>eiY#g^-dX%`^a+@Wem zt#zzTt!=H{to^LX)(O_h)@jx+t+TC5tjn#dtf|(u)(zGj)*zihHR5!lVg)_Q)E+WQ(;qQ(`eIT({9sg(_=Gg zGjH>!?ONLnwoJC0Y++kYTP|B}TVC7Uw)zHQKe~ zIC462IdVJlI`TUnay;sI!ts>j8AmZkNk>^nB}Yw19Y=jfBS%w5TSo^+XGb?jPsbOI zA&$|G>5lo1MUJJ86^_-8jgBpj?T(#}J&yg36OQklRyZ*`u{mva+Um63iN|Tb(?O@h zPRE=ColZN6INfr3==9u4&&klq#L3*r%E`&e)yc!j+sW4{z$wBh&MC{O*s08^(y7Mj zwNtCp8>cR(UZ(-4VW%0VkIt){H#u`Sb2@W5b35}o^E)4MKI(kJ`IPe+=ey39&Th^x zoeQ0-og1BdoyVLfooAeB&Wp}poxi)RbXnuF&gBmm#D&XczsoTfL6_4mXI+F{uDD!t zk#v!Ak#UiAdE%nxV(fyt*ts~mxVX5x_`3wTgt~;gkX@o(l3ns#%3T^=I$e5P`dx-x zMqTDy7F^!Be02HZ@~7)s*G;ZlU3a_gbLDqEZ@NmmK6F)f zRdr)=V|U|qJLo3lChB(CO~UQE+fBE7ZV%k#-JZHBxv9A6xS6@xyS;D=aU;5s+@jnl zZmDh=Zdq=*ZUt_|ZZ&SrZvAc(ZqsgaZVPVj-2QZ5;lA2^t@{RdCU=7ScK5yRC*04w zUvw997k9tve%t-7`+fI^?vLFS+|}I;+-=-l-96mB-F@8y+#}p0-DBM2+!NhX+;iN^ z+#B3G+`HZT+y~u9+-KeA-QT)@aR2Q7%>(ja@!<5}_1NvP&x7CNkjE*HGalzXE_#T0 zhbjVd`PwVeR4U;pXA#@xsH;BhZ87k>HWzQR-3QQSI@{qt2tI$=m}k6ahG&*%u4jQ~v1g6vYtMSmCeK#SH=YBYQ=ad=R(Wmo zV)4Rx;l0?sc6jad;`7?;b-+u&>!g>c*9|W@FGa6sUeCQWytKVcyv)6)@UL9V8UejLhy;pfNd$W2Y-fZ5Ry|;Sr_TJ~s z?|sPosP_r)Q{K0|pL#ocr+Mdj7rv-{(e`5K#mtM(KC65npY=W)eOP?heYW^)^V#9E z(}&MTz(>eO%ty*c&gYTO6CXvNXFl3KdOn6eCO+mqRzAT#r9KTlAAMK&GWoLk?({w2 zE8u&?_qgv#-wVE?zL$L^e6Rc7^u6b+;H&Oy;%nn;@9X62>g(Yf;2Z24<{RM~=^Nvl z;+yYV>D%nv?c3)&=sV&&?mO@M*7t+&XWwtWKm6AFvH9`%3HY7#6Y@Lfcfn88@4DYj zKWV=^e)s$y_$m2m`K`UUs}`-S<%_{I4p`la}#`(^qS`BD8^{RaJ}{AT^; z{oeY0@cZGv${+Gy@4wNX#h=}u+y9`yp#N$Av;M;VBL3I>CHb^Oiz zo&3H1efC)BQ93i~OtoTm5_e2mFWq$NVS#7yaM+fAat8|2<%3 zz#jpG0PcW;0fGUi1I`8r2Z#h*3y=(u3Xlnq4Uh{^4A2g+2yh5+4sZ+b40sU`57!^nfEDM|r{1~)7 zXiw0QAfX`fpj$z=gYE|14|*7+9Hbhg9;6kd8)Oh<8RQi7A}Bm4HYgz|IVdgYWl&*I zNlAgJ zScae>b|K**RUxe*-$J2KTqtMgp3uXg$3g`|Pluijy%c&S^jfH7s8py-=%Y}zP~%WE z)GpL9)FsqC)IT&RG&D3klpGoznjD%NS{2$5+8o*z+7a3vIube_Iu$w_Iv@Hr^jp}v zFnrjyupMDL!}!AXh8+nz9(FQJDC}I=g|G)xh34nTf2#&BR^AL&UShOT;V0YeY$+6j6@&i1>u4NPI?oPShh>5M78qM1Nus zF_aiij3p)zlZk1>m&9yh36V-{C-xJEh@->_;xzFc@gwmI@z3xT;j6=$!U^Hq!w-ZX z4?h_$6n-xJLbycu_3)eF(&2Z)?}a}N*9tcYcL?_ke-Z8%9vB`H9u-arj}K1@PYurq zF9@#;Zw~Jc?+YIc9|<21pAUZ<{vrHx__y#M5$hvx5nCd5M;wYc8gU}xRK%GGu?X>q zs}VOMZbjUVco^|K!YINz!ZyMo!a2e%!Y?8)A|!$sL5hfqNQ%gdsEBBa=!)o#7>F2- z7>l4qEJnPK_!RLq;yY;_iIudO#77b!9U&bjog@j7L`j!P5~S;-n_+w^zaaaO1IZ+E zJUN40LZ*^y$qnRYavQmiJV+iPkCUg!v*Ztvt0I{qH%IbB?uy(Kxj*t?q+sOf$g`2c zks^_oA|)f`B9$U_Bh4Z$Bhg5^NXJO8NS{dm$e_s3$neP6$n?m9NNQwrWLsoMWOrm= z5xpuJie`z%MdPE{qqjtFi{^_y7A+ioJ^D`cz32zg^3hMD)uJ_{ zb)xm7jiODXZKK_z{i7qJ6Qfh2)1xz^bD~S5E268TUq#nNH%50xk44W%{~5D3WXgVy?tU#mL0S#>mAyig_0EJVql%J4P?YFvcpzH6}2I z6cZIgiHVO%iph$}jVXvJjwy?&jH!?5h#8HUi&=ZQnD#|ltM}g zrJPbr>7Wc#<|&^k-zYy~SH(iHEU~y)d@OtHme_5ve6fdPg<{2HZ^hn@y&HQ!_F=4Y ztZJ-!tX8aUtU;`0tW&ICEHRc88x>25jgQTU&5F&9Er>0SEsK2}+ZNjwJ01Hj_G9dq z*gxY|#BGRUirW+i#}VQ<;<)1u#tFrV#$Aq+h`SzlGwxp8gE;xPr*TSgDseh-R&lOz zfpMg`s5nYod|XmoR$OjeL0oZMSzKjYeOy=EaNK;{=eTciKjK%#L-8!}xOjX#d;FI8 zZSj2ZhvHAgUy7HEmx`B(myMT;SB!ra|2$qJUOQed-aOtV-akGvJ~2KeK0Q7&J}163 zz9POl{#ATkd}DlP{BZnC{O5#K2~fiNgpCO-3G4}561FAmNZ6UcmvA)Uc!FTU=>+)% z^#siX?F7Aqz=Y@oN+5~~wmCDtXjCk`jhCVoj;owPP-LlRTcrX-Fe&LplR?j+u%-ARX%&Lmw*l1_S% zB%ky&NhwJsNhe7^$tcM*$s)-*$vNpoQfN|KQhHKmQchBSQc+TM(yOGpq{gI{r1qr# zq?x2o$xt#&GAqOyNr5PT@`2ow6_Gc*@BXp_Fqe7g9u1E~hA@Sf%)+b_L|)I+I9QzcVnQm>1yek={o89 z>3-=s>7D5d>0i=+WUR`7GS+9{GT;nC23H1u#<7gE8NwMN8J9BTGgLARGR!k0ArK~Gi*RmwDq_Q%z zin2pPiLRa7S4Wz^BvOUxzZ#^lE3Cg!H(7UUM?mgJV_apvvG+n0ABPauz& zmyq`|FFP+UuQ0D9kD6DT*O1qo*Ou3jzdHX&{*!!{{DA!6{IL9p{K)*6{Ji|~{F?mN z`Stlt`F;7r`D6K$`E&UT`S0>S7C;3Y1!oGx3T_lg7d$RdDo`m>_Ej&_qzEHIAa-l?_WT8}{OrdO{e4%ooS)oT^ zKw)-aQDI--{JHhrKtGu^-sC=}1qI|miQ~8(jZ{O; zrA+1hO65weN~cQC%Gk=H%GZ^(m35VkmA#b%mBW=|m6Me-m0zlutF~0_uR2(DxawGy zVAbiWvsJ=XB2~Am?pEEadQc@_^|VT6&*nU#ToqPAU&|7j+MHKlKRpIQ1k|hUsp?ccsv*^cYEHGHI#FGzL}~&xotjC_q2^P|sFlT7B}wT;?G9jm=s zd!zPltx~OetzNBlt$VFktxv6gZBT7!ZFp^BZAxu=ZDwswZGLT0ZE5XT-Nw4(b@Fv8 zb=q|%b>?;Ub#8Uubua6(>ZobmNN>psC$n7LBCF#>T}amZrT;7n>xT6q}wkJ#W%z(r(ggGHfzw zGH8=9M&$C_!)@0ve0e`)@+<&Tz4EpQ8=WlPJpmK`lSTMoB~wurUdXpw7q z+@jE;+@jW^*`m{;-(u0?(h|@T+!EFj(GuAb(-PN`)sov%&{Et|)>7G0)AG7yt`*mM zxb?&jw$`>bv^KX+wsEuxw#l_UZ!>Rm zZgXq%Y*B00o-y|}%see%twH$rc2zp;Fi^rqs?$eTYq4t5B3h<04=xY?oDq1Iv5 z;nES%5z&#atC z^G@fZ&L^FUoywi6o$8%>oerHoogtmX&WO&)&cx1_ow=P=olTv+o&B9dog~`vQ?sn@A>W=MB=uYlV>wejt z-JRE6*j?M*(B0JC(%shG(cRtM*FD&?zGq+0%^v+8@1D$_nx3Yf=AO2mp&nY#V$b`Y zPd#6IzW1)|W$DHB;(OV9xAbo7-O;?O zpv0i$pwytu;Qhe|gO3KE3|bA6hOCF&hsZ5sneg5v~#L5x$Y5Bd15sjtGy4j7W@JAGtXqJ#uHnW+ZqdeI$RRXry$cVx(zg zU}Sh?Y-Dm|W`s7fIP!jU&FH$(KSr5HSx1pkw$aU_TSxbf9v{6qsyJ#rN*s+Jtr~3^ z?HTPK9U2`SofusheK-1X^vmdqac*}VEc<1=gIBk4!{QdZ+@gEaR6PqUB3BtsliQ^L|Cxj->P28Gz zH1T9YaYA`QYr=lQWg=oCZlZOfb8^ij|Ky3uQIfEQ`S?qQw~#pQ-M<ATbS zryou$PpeL=PisxHPPZZk~2~>@-yl)S~I#c1~X1GelvkHAv468w3(ur(wT~xs@W5>S7+^J zy=Q%9{bmDaNwZP2l-c;%ve|~&j@jNc3C`SbJQ z^D^`I=O4~Lo>!VznOB?FoVT8Lo)4Z+nWxT=%#Y7c&dA<7OySJFRCwUE$S}n zFS;*!ExuUvTMSr?Sd3hZS&UmuU+h^Ne7o^2{_W|v=ie&5)qJb-R{yQhTj#ePZ+#hI S#H&^@{^Elff0us0_5WXE>8afS diff --git a/SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.m b/SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.m index d7242e5..682dc53 100644 --- a/SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.m +++ b/SDAutoLayoutDemo/DemoVC/DemoVC0/DemoVC0.m @@ -97,6 +97,9 @@ - (void)animation .widthRatioToView(self.view, _widthRatio); [self.view0 updateLayout]; // 调用此方法开启view0动画效果 [self.view5 updateLayout]; // 调用此方法开启view5动画效果 + /* + 调用[self.view0 updateLayout]就可以实现view0和其它兄弟view一起动画,view0和view5是父子关系,如果view0需要动画要再主动调用一次[self.view5 updateLayout] + */ }]; From 2a5cf02674a59c5ddf210ab61cb243bc753c72ae Mon Sep 17 00:00:00 2001 From: GSD_iOS Date: Thu, 18 Feb 2016 19:29:23 +0800 Subject: [PATCH 083/276] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDAutoLayoutDemo.xcodeproj/project.pbxproj | 2 +- .../UserInterfaceState.xcuserstate | Bin 73140 -> 73351 bytes .../SDAutoLayout/UIView+SDAutoLayout.h | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SDAutoLayoutDemo.xcodeproj/project.pbxproj b/SDAutoLayoutDemo.xcodeproj/project.pbxproj index 1195991..108e181 100644 --- a/SDAutoLayoutDemo.xcodeproj/project.pbxproj +++ b/SDAutoLayoutDemo.xcodeproj/project.pbxproj @@ -1325,7 +1325,7 @@ TargetAttributes = { 487D3EB01BCB9EC700A66173 = { CreatedOnToolsVersion = 6.4; - DevelopmentTeam = V4Q779DR3D; + DevelopmentTeam = L6X9DMN9D4; }; 487D3EC91BCB9EC700A66173 = { CreatedOnToolsVersion = 6.4; diff --git a/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate b/SDAutoLayoutDemo.xcodeproj/project.xcworkspace/xcuserdata/gsd.xcuserdatad/UserInterfaceState.xcuserstate index 8b5a141a81960d66088836d6350b4890bdb9c0c7..b97935a05d58c6cc5825b4f9f509157a71dd1e82 100644 GIT binary patch delta 17442 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 delta 17350 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�WyI-`B&;Thet+s__2D|S}=?2)sy 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