From e2cf60c6ee831444d89fb55f2e4d4462722a8b14 Mon Sep 17 00:00:00 2001 From: wangyp2018 Date: Wed, 29 Mar 2017 16:51:39 +0800 Subject: [PATCH 01/14] =?UTF-8?q?=E4=BB=8Edev=E5=90=88=E5=B9=B6=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=88=B0master?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 28686 -> 27486 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate b/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate index 5d5f05362935167396b1dae2877a418488ec0e4c..9a82be5cc6a77f7b7e6421ab9dfebd6daa91fd5c 100644 GIT binary patch delta 12915 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 Date: Thu, 30 Mar 2017 12:44:14 +0800 Subject: [PATCH 02/14] =?UTF-8?q?1.=20=E5=B0=861.1.2=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=B0pod=E4=BB=93=E5=BA=93=202.=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9README=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JCFrameLayout.podspec | 6 +-- .../UserInterfaceState.xcuserstate | Bin 36844 -> 38502 bytes README.md | 49 +++++++++++++++++- 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/JCFrameLayout.podspec b/JCFrameLayout.podspec index 47b8f34..f1f98cd 100644 --- a/JCFrameLayout.podspec +++ b/JCFrameLayout.podspec @@ -16,8 +16,8 @@ Pod::Spec.new do |s| # s.name = "JCFrameLayout" - s.version = "1.0.0" - s.summary = "完成了left,top,right,bottom,width,height,centerX,centerY这几个属性进行组合布局." + s.version = "1.1.2" + s.summary = "一款采用链式语法为视图做Frame布局的工具" # This description is used to generate tags and improve search results. # * Think: What does it do? Why did you write it? What is the focus? @@ -25,7 +25,7 @@ Pod::Spec.new do |s| # * Write the description between the DESC delimiters below. # * Finally, don't worry about the indent, CocoaPods strips it! s.description = <<-DESC - 这是详细描述,完成了left,top,right,bottom,width,height,centerX,centerY这几个属性进行组合布局. + 这是详情,一款采用链式语法为视图做Frame布局的工具 DESC s.homepage = "https://github.com/devjackcat/JCFrameLayout" diff --git a/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate b/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate index d54e11869cfe44f647a4ef120fd4aaf0e477e95a..a87f5620b67d77f48c4750750c6eea0e1fe47156 100644 GIT binary patch delta 14847 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 Date: Fri, 31 Mar 2017 10:46:34 +0800 Subject: [PATCH 03/14] =?UTF-8?q?=E5=AF=B9=E4=BB=A3=E7=A0=81=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E4=BA=86=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JCFrameLayout.xcodeproj/project.pbxproj | 6 + .../UserInterfaceState.xcuserstate | Bin 38502 -> 49232 bytes JCFrameLayout/JCFrameLayout/JCFrame.h | 32 +- JCFrameLayout/JCFrameLayout/JCFrame.m | 115 ++-- .../JCFrameLayout/JCFrameAttribute.h | 35 ++ .../JCFrameLayout/JCFrameAttribute.m | 42 ++ JCFrameLayout/JCFrameLayout/JCFrameExecutor.h | 1 - JCFrameLayout/JCFrameLayout/JCFrameExecutor.m | 555 +++++++++++++++--- JCFrameLayout/JCFrameLayout/JCFrameLayout.h | 1 + JCFrameLayout/JCFrameLayout/JCFrameMake.m | 32 +- JCFrameLayout/JCFrameLayout/UIView+JCFrame.h | 18 + JCFrameLayout/JCFrameLayout/UIView+JCFrame.m | 43 ++ .../JCFrameLayout/UIView+JCFrameLayout.h | 2 - .../JCFrameLayout/UIView+JCFrameLayout.m | 5 + JCFrameLayout/SecondViewController.m | 159 +---- 15 files changed, 767 insertions(+), 279 deletions(-) create mode 100644 JCFrameLayout/JCFrameLayout/JCFrameAttribute.h create mode 100644 JCFrameLayout/JCFrameLayout/JCFrameAttribute.m diff --git a/JCFrameLayout.xcodeproj/project.pbxproj b/JCFrameLayout.xcodeproj/project.pbxproj index 36a8987..fcb0ddf 100644 --- a/JCFrameLayout.xcodeproj/project.pbxproj +++ b/JCFrameLayout.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ 282FD7E91E895B6400E17BFB /* UIView+JCFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7E41E895B6400E17BFB /* UIView+JCFrame.m */; }; 282FD7EA1E895B6400E17BFB /* UIView+JCFrameLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7E61E895B6400E17BFB /* UIView+JCFrameLayout.m */; }; 282FD7ED1E895B6D00E17BFB /* SecondViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7EC1E895B6D00E17BFB /* SecondViewController.m */; }; + 2836F33C1E8CE49400C9BE35 /* JCFrameAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 2836F33B1E8CE49400C9BE35 /* JCFrameAttribute.m */; }; 28D22AE21E8911C9002245F9 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D22AE11E8911C9002245F9 /* main.m */; }; 28D22AE51E8911C9002245F9 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D22AE41E8911C9002245F9 /* AppDelegate.m */; }; 28D22AE81E8911C9002245F9 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D22AE71E8911C9002245F9 /* ViewController.m */; }; @@ -65,6 +66,8 @@ 282FD7E61E895B6400E17BFB /* UIView+JCFrameLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+JCFrameLayout.m"; sourceTree = ""; }; 282FD7EB1E895B6D00E17BFB /* SecondViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecondViewController.h; sourceTree = ""; }; 282FD7EC1E895B6D00E17BFB /* SecondViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SecondViewController.m; sourceTree = ""; }; + 2836F33A1E8CE49400C9BE35 /* JCFrameAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JCFrameAttribute.h; sourceTree = ""; }; + 2836F33B1E8CE49400C9BE35 /* JCFrameAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JCFrameAttribute.m; sourceTree = ""; }; 28D22ADD1E8911C9002245F9 /* JCFrameLayout.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JCFrameLayout.app; sourceTree = BUILT_PRODUCTS_DIR; }; 28D22AE11E8911C9002245F9 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 28D22AE31E8911C9002245F9 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -131,6 +134,8 @@ 282FD7E01E895B6400E17BFB /* JCFrameMake.m */, 282FD7E11E895B6400E17BFB /* JCFrame.h */, 282FD7E21E895B6400E17BFB /* JCFrame.m */, + 2836F33A1E8CE49400C9BE35 /* JCFrameAttribute.h */, + 2836F33B1E8CE49400C9BE35 /* JCFrameAttribute.m */, 28E5EAD31E8B84A000701A93 /* JCFrameExecutor.h */, 28E5EAD41E8B84A000701A93 /* JCFrameExecutor.m */, 28E5EAD61E8BB16700701A93 /* JCFrameUtilities.h */, @@ -264,6 +269,7 @@ 282FD7DA1E895B5E00E17BFB /* NSArray+MASAdditions.m in Sources */, 28D22AE81E8911C9002245F9 /* ViewController.m in Sources */, 28D22AE51E8911C9002245F9 /* AppDelegate.m in Sources */, + 2836F33C1E8CE49400C9BE35 /* JCFrameAttribute.m in Sources */, 282FD7D71E895B5E00E17BFB /* MASLayoutConstraint.m in Sources */, 28D22AE21E8911C9002245F9 /* main.m in Sources */, 282FD7E91E895B6400E17BFB /* UIView+JCFrame.m in Sources */, diff --git a/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate b/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate index a87f5620b67d77f48c4750750c6eea0e1fe47156..4c65e6dfb34a48e6f59fd3fca999f6d2ed4d6dbb 100644 GIT binary patch literal 49232 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 RSp4fG?^+bn^=HA?{~s)Wh4BCY diff --git a/JCFrameLayout/JCFrameLayout/JCFrame.h b/JCFrameLayout/JCFrameLayout/JCFrame.h index dea8c2a..100e692 100644 --- a/JCFrameLayout/JCFrameLayout/JCFrame.h +++ b/JCFrameLayout/JCFrameLayout/JCFrame.h @@ -9,6 +9,7 @@ #import #import "JCFrameLayoutConst.h" #import "JCFrameUtilities.h" +#import "JCFrameAttribute.h" @class JCFrame; @@ -22,21 +23,35 @@ @property (nonatomic,weak) id delegate; -/** - * 布局类型 - **/ -@property (nonatomic,assign,readonly) JCFrameType frameType; /** * 当前属性的值 **/ @property (nonatomic,strong,readonly) id value; +/** + * 当前属性的偏移值,只在相对布局的时候生效 + **/ +@property (nonatomic,strong,readonly) id offset; +/** + * 当前属性的倍数,只在相对布局的时候生效 + **/ +@property (nonatomic,assign,readonly) CGFloat multiplier; /** - * 布局的对象UIView + * 是否生效,便于调试,没其他用处 **/ -@property (nonatomic,weak,readonly) UIView *view; +@property (nonatomic,assign) BOOL actived; +/** + * 是否有相对属性 + **/ +@property (nonatomic,assign,readonly) BOOL hasRelateAttr; + +/** + * 布局属性 + **/ +@property (nonatomic,strong,strong) JCFrameAttribute *frameAttr; + -- (instancetype)initWithView:(UIView*)view frameType:(JCFrameType)frameType; +- (instancetype)initWithFrameAttribute:(JCFrameAttribute*)frameAttribute; - (JCFrame*)left; @@ -51,8 +66,11 @@ - (JCFrame*)size; #define jc_equalTo(...) equalTo(JCBoxValue((__VA_ARGS__))) +#define jc_offset(...) jc_offset(JCBoxValue((__VA_ARGS__))) - (JCFrame*(^)(id))jc_equalTo; - (JCFrame*(^)(id))equalTo; +- (JCFrame*(^)(CGFloat))multipliedBy; +- (JCFrame*(^)(id))jc_offset; @end diff --git a/JCFrameLayout/JCFrameLayout/JCFrame.m b/JCFrameLayout/JCFrameLayout/JCFrame.m index 1d0bf85..1d55c14 100644 --- a/JCFrameLayout/JCFrameLayout/JCFrame.m +++ b/JCFrameLayout/JCFrameLayout/JCFrame.m @@ -13,39 +13,98 @@ @interface JCFrame () /** - * <#注释#> + * 链表前驱 + * e.g. + * make.left.top.jc_equal(100); + * 当前对象为top时,chainPreviousFrame为left **/ -@property (nonatomic,weak) JCFrame *chainParentFrame; +@property (nonatomic,weak) JCFrame *chainPreviousFrame; + +/** + * 给UIView设置一个key值,用于方便调试 + * UIView+JCFrame中已经定义了一个,这里的冗余是因为在delloc中获取不到UIView.jc_debug_key,UIView已经被释放 + **/ +@property (nonatomic,copy) NSString *jc_debug_key; @end @implementation JCFrame -- (instancetype)initWithView:(UIView*)view frameType:(JCFrameType)frameType{ +- (instancetype)initWithFrameAttribute:(JCFrameAttribute*)frameAttribute{ self = [super init]; if (self) { - self->_frameType = frameType; - self->_view = view; - [self.view.jc_frames addObject:self]; + self->_frameAttr = frameAttribute; + self->_multiplier = 1; + self.jc_debug_key = frameAttribute.currentView.jc_debug_key; } return self; } - (JCFrame*(^)(id))equalTo{ return ^id(id value){ - self->_value = value; + + //NSValue(CGFloat\CGSize\CGPoint) + //UIView + //JCFrame + + /* + make.left.equal(redView); + + */ + if([value isKindOfClass:NSNumber.class] //CGFloat + || [value isKindOfClass:NSValue.class]) { //CGSize,CGPoint + + self->_value = value; + + }else if([value isKindOfClass:UIView.class]){ + self->_hasRelateAttr = YES; + //如果传入UIView,则相对布局属性采用与本类相同的属性 + self.frameAttr.relateView = (UIView*)value; + self.frameAttr.relateFrameType = self.frameAttr.currentFrameType; + + }else if([value isKindOfClass:JCFrameAttribute.class]){ + self->_hasRelateAttr = YES; + //如果传入JCFrame,则相对布局属性采用与本类相同的属性 + self.frameAttr.relateView = ((JCFrameAttribute*)value).currentView; + self.frameAttr.relateFrameType = ((JCFrameAttribute*)value).currentFrameType; + + } + JCFrame *currentFrame = self; - while (currentFrame.chainParentFrame) { - currentFrame.chainParentFrame->_value = value; - currentFrame = currentFrame.chainParentFrame; + while (currentFrame.chainPreviousFrame) { + currentFrame = currentFrame.chainPreviousFrame; + currentFrame.equalTo(value); } return self; }; } - - (JCFrame*(^)(id))jc_equalTo{ return self.equalTo; } +- (JCFrame*(^)(id))jc_offset{ + return ^id(id value){ + self->_offset = value; + + JCFrame *currentFrame = self; + while (currentFrame.chainPreviousFrame) { + currentFrame = currentFrame.chainPreviousFrame; + currentFrame->_offset=value; + } + return self; + }; +} +- (JCFrame*(^)(CGFloat))multipliedBy{ + return ^id(CGFloat value){ + self->_multiplier = value; + + JCFrame *currentFrame = self; + while (currentFrame.chainPreviousFrame) { + currentFrame = currentFrame.chainPreviousFrame; + currentFrame->_multiplier = value; + } + return self; + }; +} #pragma mark - support chainable syntax - (JCFrame *)left{ @@ -79,43 +138,25 @@ - (JCFrame*)size{ return [self createJCLayoutFrame:JCFrameTypeSize]; } +#pragma mark - private Method +/** + 通过代理(即JCFrameMake)创建JCFrame对象 + */ - (JCFrame *)createJCLayoutFrame:(JCFrameType)frameType{ if (self.delegate && [self.delegate respondsToSelector:@selector(jcFrame:createFrameWithframeType:)]) { JCFrame *frame = [self.delegate jcFrame:self createFrameWithframeType:frameType]; - - frame.chainParentFrame = self; - + //把self设为链表前驱 + frame.chainPreviousFrame = self; return frame; } return nil; } - (NSString *)description{ - - return [NSString stringWithFormat:@"[JCFrame: %p type=%@]",self,self. typeString]; - + return [NSString stringWithFormat:@"[JCFrame: %@,%@,%@,%@]",self.jc_debug_key,self.frameAttr.currentTypeString,self.value,(self.actived?@"actived":@"ignored")]; } - - (void)dealloc{ - JCLog(@"---JCFrame dealloc %@ , %@",self.typeString,self.value); -} - -- (NSString*)typeString{ - - switch (self.frameType) { - case JCFrameTypeLeft:return @"Left"; break; - case JCFrameTypeRight:return @"Right"; break; - case JCFrameTypeTop:return @"Top"; break; - case JCFrameTypeBottom:return @"Bottom"; break; - case JCFrameTypeWidth:return @"Width"; break; - case JCFrameTypeHeight:return @"Height"; break; - case JCFrameTypeCenterX:return @"CenterX"; break; - case JCFrameTypeCenterY:return @"CenterY"; break; - case JCFrameTypeCenter:return @"Center"; break; - case JCFrameTypeSize:return @"Size"; break; - - default:return @"UnKnow";break; - } + JCLog(@"---JCFrame dealloc %@,%@,%@,%@",self.jc_debug_key,self.frameAttr.currentTypeString,self.value,(self.actived?@"actived":@"ignored")); } @end diff --git a/JCFrameLayout/JCFrameLayout/JCFrameAttribute.h b/JCFrameLayout/JCFrameLayout/JCFrameAttribute.h new file mode 100644 index 0000000..4c2d79d --- /dev/null +++ b/JCFrameLayout/JCFrameLayout/JCFrameAttribute.h @@ -0,0 +1,35 @@ +// +// JCFrameAttribute.h +// JCFrameLayout +// +// Created by abc on 17/3/30. +// Copyright © 2017年 jackcat. All rights reserved. +// + +#import + +#import "JCFrameLayoutConst.h" + +@interface JCFrameAttribute : NSObject + +/** + * 当前需要布局的UIView + **/ +@property (nonatomic,weak) UIView *currentView; +/** + * 当前需要布局的属性 + **/ +@property (nonatomic,assign) JCFrameType currentFrameType; +/** + * 相对于哪个UIView进行布局 + **/ +@property (nonatomic,weak) UIView *relateView; +/** + * 相对于哪个UIView的哪个属性进行布局 + **/ +@property (nonatomic,assign) JCFrameType relateFrameType; + +- (instancetype)initWithView:(UIView*)currentView frameType:(JCFrameType)currentFrameType; + +- (NSString*)currentTypeString; +@end diff --git a/JCFrameLayout/JCFrameLayout/JCFrameAttribute.m b/JCFrameLayout/JCFrameLayout/JCFrameAttribute.m new file mode 100644 index 0000000..ace2c91 --- /dev/null +++ b/JCFrameLayout/JCFrameLayout/JCFrameAttribute.m @@ -0,0 +1,42 @@ +// +// JCFrameAttribute.m +// JCFrameLayout +// +// Created by abc on 17/3/30. +// Copyright © 2017年 jackcat. All rights reserved. +// + +#import "JCFrameAttribute.h" + +@implementation JCFrameAttribute + +- (instancetype)initWithView:(UIView*)currentView frameType:(JCFrameType)currentFrameType{ + self = [super init]; + if (self) { + self.currentView = currentView; + self.currentFrameType = currentFrameType; + } + return self; + +} + + +- (NSString*)currentTypeString{ + + switch (self.currentFrameType) { + case JCFrameTypeLeft:return @"Left"; break; + case JCFrameTypeRight:return @"Right"; break; + case JCFrameTypeTop:return @"Top"; break; + case JCFrameTypeBottom:return @"Bottom"; break; + case JCFrameTypeWidth:return @"Width"; break; + case JCFrameTypeHeight:return @"Height"; break; + case JCFrameTypeCenterX:return @"CenterX"; break; + case JCFrameTypeCenterY:return @"CenterY"; break; + case JCFrameTypeCenter:return @"Center"; break; + case JCFrameTypeSize:return @"Size"; break; + + default:return @"UnKnow";break; + } +} + +@end diff --git a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.h b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.h index 7167213..f4a62df 100644 --- a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.h +++ b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.h @@ -14,7 +14,6 @@ @interface JCFrameExecutor : NSObject + (void)executeWithView:(UIView*)view - frames:(NSArray*)frames frameTypes:(JCFrameType)frameTypes; @end diff --git a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m index 2978c5c..5d6bf43 100644 --- a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m +++ b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m @@ -10,6 +10,29 @@ #import "UIView+JCFrame.h" + +/** + 根据relateCenter、multiplier、offset计算新的CGPoint + */ +CGPoint transToNewCenter(CGPoint relateCenter,CGFloat multiplier,id offset){ + CGFloat offsetX = [offset CGPointValue].x; + CGFloat offsetY = [offset CGPointValue].y; + CGFloat newCenterX = relateCenter.x * multiplier + offsetX; + CGFloat newCenterY = relateCenter.y * multiplier + offsetY; + return CGPointMake(newCenterX, newCenterY); +} + +/** + 根据relateCenter、multiplier、offset计算新的CGSize + */ +CGSize transToNewSize(CGSize relateSize,CGFloat multiplier,id offset){ + CGFloat offsetWidth = [offset CGSizeValue].width; + CGFloat offsetHeight = [offset CGSizeValue].height; + CGFloat newWidth = relateSize.width * multiplier + offsetWidth; + CGFloat newHeight = relateSize.height * multiplier + offsetHeight; + return CGSizeMake(newWidth, newHeight); +} + @implementation JCFrameExecutor //### 属性优先级设定 @@ -28,19 +51,26 @@ @implementation JCFrameExecutor // 4. Top > Bottom // // ####可能的情况 +// 含有 center 和 size // 1. center and size +// +// 只有 center // 2. center and width and height +// +// 只有 size 和 (centerX 或 centerY) // 3. centerX and centerY and size // 4. centerX and top and size // 5. centerX and bottom and size // 6. centerY and left and size // 7. centerY and right and size +// +// 只有 size // 8. left and top and size // 9. left and bottom and size // 10. right and top and size // 11. right and bottom and size -// -------- +// 含有centerX 或 centerY // 12. centerX and centerY and width and height // 13. centerX and top and width and height // 14. centerX and bottom and width and height @@ -48,67 +78,299 @@ @implementation JCFrameExecutor // 16. centerY and right and width and height // 含有2条边界值,2个尺寸 -// 22. left and top and width and height -// 23. left and bottom and width and height -// 24. right and top and width and height -// 25. right and bottom and width and height +// 17. left and top and width and height +// 18. left and bottom and width and height +// 19. right and top and width and height +// 20. right and bottom and width and height // 含有3条边距值,1个尺寸值 -// 18. left and right and top and height -// 19. left and right and bottom and height -// 20. left and top and bottom and width -// 21. right and top and bottom and width +// 21. left and right and top and height +// 22. left and right and bottom and height +// 23. left and top and bottom and width +// 24. right and top and bottom and width // 含有4条边距值 -// 17. left and right and top and bottom +// 25. left and right and top and bottom -+ (void)executeWithView:(UIView*)view - frames:(NSArray*)frames - frameTypes:(JCFrameType)frameTypes{ ++ (void)executeWithView:(UIView*)view frameTypes:(JCFrameType)frameTypes{ // 1. center and size + if ([self layoutByCenterAndSize:view frameTypes:frameTypes]) { + return; + } + + // 2. center and width and height + if ([self layoutByCenterAndWidthAndHeight:view frameTypes:frameTypes]) { + return; + } + + // 3. centerX and centerY and size + if ([self layoutByCenterXAndCenterYAndSize:view frameTypes:frameTypes]) { + return; + } + + // 4. centerX and top and size + if ([self layoutByCenterXAndTopAndSize:view frameTypes:frameTypes]) { + return; + } + + // 5. centerX and bottom and size + if ([self layoutByCenterXAndBottomAndSize:view frameTypes:frameTypes]) { + return; + } + + // 6. centerY and left and size + if ([self layoutByCenterYAndLeftAndSize:view frameTypes:frameTypes]) { + return; + } + + + // 7. centerY and right and size + if ([self layoutByCenterYAndRightAndSize:view frameTypes:frameTypes]) { + return; + } + + // 8. left and top and size + if ([self layoutByLeftAndTopAndSize:view frameTypes:frameTypes]) { + return; + } + + + // 9. left and bottom and size + if ([self layoutByLeftAndBottomAndSize:view frameTypes:frameTypes]) { + return; + } + + // 10. right and top and size + if ([self layoutByRightAndTopAndSize:view frameTypes:frameTypes]) { + return; + } + + + // 11. right and bottom and size + if ([self layoutByRightAndBottomAndSize:view frameTypes:frameTypes]) { + return; + } + + // 12. centerX and centerY and width and height + if ([self layoutByCenterXAndCenterYAndWidthAndHeight:view frameTypes:frameTypes]) { + return; + } + + // 13. centerX and top and width and height + if ([self layoutByCenterXAndTopAndWidthAndHeight:view frameTypes:frameTypes]) { + return; + } + + // 14. centerX and bottom and width and height + if ([self layoutByCenterXAndBottomAndWidthAndHeight:view frameTypes:frameTypes]) { + return; + } + + // 15. centerY and left and width and height + if ([self layoutByCenterYAndLeftAndWidthAndHeight:view frameTypes:frameTypes]) { + return; + } + + // 16. centerY and right and width and height + if ([self layoutByCenterYAndRightAndWidthAndHeight:view frameTypes:frameTypes]) { + return; + } + + // 含有2条边界值,2个尺寸 + // 17. left and top and width and height + if ([self layoutByLeftAndTopAndWidthAndHeight:view frameTypes:frameTypes]) { + return; + } + + // 18. left and bottom and width and height + if ([self layoutByLeftAndBottomAndWidthAndHeight:view frameTypes:frameTypes ]) { + return; + } + + // 19. right and top and width and height + if ([self layoutByRightAndTopAndWidthAndHeight:view frameTypes:frameTypes]) { + return; + } + + // 20. right and bottom and width and height + if ([self layoutByRightAndBottomAndWidthAndHeight:view frameTypes:frameTypes]) { + return; + } + + // 含有3条边距值,1个尺寸值 + // 21. left and right and top and height + if ([self layoutByLeftAndRightAndTopAndHeight:view frameTypes:frameTypes]) { + return; + } + + // 22. left and right and bottom and height + if ([self layoutByLeftAndRightAndBottomAndHeight:view frameTypes:frameTypes]) { + return; + } + + // 23. left and top and bottom and width + if ([self layoutByLeftAndTopAndBottomAndWidth:view frameTypes:frameTypes]) { + return; + } + + // 24. right and top and bottom and width + if ([self layoutByRightAndTopAndBottomAndWidth:view frameTypes:frameTypes]) { + + return; + } + + // 含有4条边距值 + // 25. left and right and top and bottom + if ([self layoutByLeftAndRightAndTopAndBottom:view frameTypes:frameTypes]) { + + return; + } +} + +#pragma mark - 含有 center 和 size +// 1. center and size ++ (BOOL)layoutByCenterAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + if ((frameTypes & JCFrameTypeCenter) &&(frameTypes & JCFrameTypeSize)) { + NSArray*frames = view.jc_frames; + + JCLog(@"--view = %@",view.jc_debug_key); + JCFrame *center = [self filterFrameIn:frames frameType:(JCFrameTypeCenter)]; JCFrame *size = [self filterFrameIn:frames frameType:(JCFrameTypeSize)]; - view.jc_size_value = ((NSValue*)size.value).CGSizeValue; - view.jc_center_value = ((NSValue*)center.value).CGPointValue; - return; + + //1. 先size + if (size.hasRelateAttr) { + //size的相对值只能是size + if (size.frameAttr.relateFrameType == JCFrameTypeSize) { + //1.1 计算新的size + CGSize newSize = transToNewSize(size.frameAttr.relateView.jc_size_value,size.multiplier,size.offset); + //2. 新值回填 + view.jc_size_value = newSize; + //3. 设置新值 + size.jc_equalTo(newSize); + } + }else{ + view.jc_size_value = ((NSValue*)size.value).CGSizeValue; + } + + //2. 后Center + if (center.hasRelateAttr) { + //center的相对值只能是center + if(center.frameAttr.relateFrameType == JCFrameTypeCenter){ + //1. 根据multiplier和offset获取新的center + CGPoint newCenter = transToNewCenter(center.frameAttr.relateView.jc_center_value,center.multiplier,center.offset); + //2. 将新的值回填回去,因为center的value属性赋值 + center.jc_equalTo(newCenter); + //3. 设置新值 + view.jc_center_value = newCenter; + + } + }else{ + view.jc_center_value = ((NSValue*)center.value).CGPointValue; + } + + return YES; } - // 2. center and width and height + return NO; +} + +#pragma mark - 只有 center +// 2. center and width and height ++ (BOOL)layoutByCenterAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + if ((frameTypes & JCFrameTypeCenter) &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { - JCFrame *center = [self filterFrameIn:frames frameType:(JCFrameTypeCenter)]; + NSArray*frames = view.jc_frames; + + //1. 设置宽度 JCFrame *width = [self filterFrameIn:frames frameType:(JCFrameTypeWidth)]; + if (width.hasRelateAttr) { + if(width.frameAttr.relateFrameType == JCFrameTypeWidth){ + //view2.width * 倍数 + 偏移量 + CGFloat newWidth = width.frameAttr.relateView.jc_width_value * width.multiplier + ((NSNumber*)width.offset).doubleValue; + //回填 + width.jc_equalTo(newWidth); + //设置 + view.jc_width_value = newWidth; + } + }else{ + view.jc_width_value = ((NSNumber*)width.value).doubleValue; + } + + //2. 设置高度 JCFrame *height = [self filterFrameIn:frames frameType:(JCFrameTypeHeight)]; - view.jc_width_value = ((NSNumber*)width.value).doubleValue; - view.jc_height_value = ((NSNumber*)height.value).doubleValue; - view.jc_center_value = ((NSValue*)center.value).CGPointValue; - return; + if (height.hasRelateAttr) { + //height只能相对height + if(height.frameAttr.relateFrameType == JCFrameTypeHeight){ + //计算新值 + CGFloat newHeight = height.frameAttr.relateView.jc_height_value * height.multiplier + ((NSNumber*)height.offset).doubleValue; + //回填 + height.jc_equalTo(newHeight); + //设置 + view.jc_height_value = newHeight; + } + }else{ + view.jc_height_value = ((NSNumber*)height.value).doubleValue; + } + + //3. 设置center + JCFrame *center = [self filterFrameIn:frames frameType:(JCFrameTypeCenter)]; + if (center.hasRelateAttr) { + if (center.frameAttr.relateFrameType == JCFrameTypeCenter) { + //计算新值 + CGPoint newCenter = transToNewCenter(center.frameAttr.relateView.jc_center_value, center.multiplier, center.offset); + //回填 + center.jc_equalTo(newCenter); + //设置 + view.jc_center_value = newCenter; + } + }else{ + view.jc_center_value = ((NSValue*)center.value).CGPointValue; + } + + return YES; } + return NO; + +} + +#pragma mark - 只有 size 和 (centerX 或 centerY) +// 3. centerX and centerY and size ++ (BOOL)layoutByCenterXAndCenterYAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{ - // 3. centerX and centerY and size if ((frameTypes & JCFrameTypeCenterX) &&(frameTypes & JCFrameTypeCenterY) &&(frameTypes & JCFrameTypeSize)) { + + NSArray*frames = view.jc_frames; + JCFrame *centerX = [self filterFrameIn:frames frameType:(JCFrameTypeCenterX)]; JCFrame *centerY = [self filterFrameIn:frames frameType:(JCFrameTypeCenterY)]; JCFrame *size = [self filterFrameIn:frames frameType:(JCFrameTypeSize)]; view.jc_centerX_value = ((NSNumber*)centerX.value).doubleValue; view.jc_centerY_value = ((NSNumber*)centerY.value).doubleValue; view.jc_size_value = ((NSValue*)size.value).CGSizeValue; - return; + return YES; } - // 4. centerX and top and size + return NO; +} + +// 4. centerX and top and size ++ (BOOL)layoutByCenterXAndTopAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{ if ((frameTypes & JCFrameTypeCenterX) &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeSize)) { + NSArray*frames = view.jc_frames; + JCFrame *centerX = [self filterFrameIn:frames frameType:(JCFrameTypeCenterX)]; JCFrame *top = [self filterFrameIn:frames frameType:(JCFrameTypeTop)]; JCFrame *size = [self filterFrameIn:frames frameType:(JCFrameTypeSize)]; @@ -116,11 +378,15 @@ + (void)executeWithView:(UIView*)view view.jc_size_value = ((NSValue*)size.value).CGSizeValue; view.jc_y_value = ((NSNumber*)top.value).doubleValue; view.jc_centerX_value = ((NSNumber*)centerX.value).doubleValue; - - return; + + return YES; } - - // 5. centerX and bottom and size + + return NO; +} + +// 5. centerX and bottom and size ++ (BOOL)layoutByCenterXAndBottomAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{NSArray*frames = view.jc_frames; if ((frameTypes & JCFrameTypeCenterX) &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeSize)) { @@ -133,10 +399,13 @@ + (void)executeWithView:(UIView*)view view.jc_centerX_value = ((NSNumber*)centerX.value).doubleValue; view.jc_y_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_height_value/*高度*/ + ((NSNumber*)bottom.value).doubleValue/*距离父容器底边距,一般为负数*/; - return; + return NO; } - - // 6. centerY and left and size + return NO; +} + +// 6. centerY and left and size ++ (BOOL)layoutByCenterYAndLeftAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{NSArray*frames = view.jc_frames; if ((frameTypes & JCFrameTypeCenterY) &&(frameTypes & JCFrameTypeLeft) &&(frameTypes & JCFrameTypeSize)) { @@ -149,10 +418,14 @@ + (void)executeWithView:(UIView*)view view.jc_x_value = ((NSNumber*)left.value).doubleValue; view.jc_y_value = ((NSNumber*)centerY.value).doubleValue - view.jc_height_value/2; - return; + return YES; } + return NO; +} + +// 7. centerY and right and size ++ (BOOL)layoutByCenterYAndRightAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{NSArray*frames = view.jc_frames; - // 7. centerY and right and size if ((frameTypes & JCFrameTypeCenterY) &&(frameTypes & JCFrameTypeRight) &&(frameTypes & JCFrameTypeSize)) { @@ -165,10 +438,15 @@ + (void)executeWithView:(UIView*)view view.jc_y_value = ((NSNumber*)centerY.value).doubleValue - view.jc_height_value/2; view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_width_value/*宽度*/+((NSNumber*)right.value).doubleValue/*右边距,负数*/; - return; + return YES; } - // 8. left and top and size + return NO; +} + +#pragma mark - 只有 size +// 8. left and top and size ++ (BOOL)layoutByLeftAndTopAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{NSArray*frames = view.jc_frames; if ((frameTypes & JCFrameTypeLeft) &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeSize)) { @@ -181,10 +459,14 @@ + (void)executeWithView:(UIView*)view view.jc_y_value = ((NSNumber*)top.value).doubleValue; view.jc_x_value = ((NSNumber*)left.value).doubleValue; - return; + return YES; } + return NO; +} + +// 9. left and bottom and size ++ (BOOL)layoutByLeftAndBottomAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{NSArray*frames = view.jc_frames; - // 9. left and bottom and size if ((frameTypes & JCFrameTypeLeft) &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeSize)) { @@ -197,10 +479,16 @@ + (void)executeWithView:(UIView*)view view.jc_x_value = ((NSNumber*)left.value).doubleValue; view.jc_y_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_height_value/*高度*/ + ((NSNumber*)bottom.value).doubleValue/*距离父容器底边距,一般为负数*/; - return; + return YES; } + return NO; +} + +// 10. right and top and size ++ (BOOL)layoutByRightAndTopAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + + NSArray*frames = view.jc_frames; - // 10. right and top and size if ((frameTypes & JCFrameTypeRight) &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeSize)) { @@ -213,10 +501,15 @@ + (void)executeWithView:(UIView*)view view.jc_y_value = ((NSNumber*)top.value).doubleValue; view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_width_value/*宽度*/+((NSNumber*)right.value).doubleValue/*右边距,负数*/; - return; + return YES; } - // 11. right and bottom and size + return NO; +} + +// 11. right and bottom and size ++ (BOOL)layoutByRightAndBottomAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{NSArray*frames = view.jc_frames; + if ((frameTypes & JCFrameTypeRight) &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeSize)) { @@ -229,10 +522,17 @@ + (void)executeWithView:(UIView*)view view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_width_value/*宽度*/+((NSNumber*)right.value).doubleValue/*右边距,负数*/; view.jc_y_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_height_value/*高度*/ + ((NSNumber*)bottom.value).doubleValue/*距离父容器底边距,一般为负数*/; - return; + return YES; } - // 12. centerX and centerY and width and height + return NO; +} + +#pragma mark - 含有centerX 或 centerY +// 12. centerX and centerY and width and height ++ (BOOL)layoutByCenterXAndCenterYAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + NSArray*frames = view.jc_frames; + if ((frameTypes & JCFrameTypeCenterX) &&(frameTypes & JCFrameTypeCenterY) &&(frameTypes & JCFrameTypeWidth) @@ -248,10 +548,17 @@ + (void)executeWithView:(UIView*)view view.jc_centerX_value = ((NSNumber*)centerX.value).doubleValue; view.jc_centerY_value = ((NSNumber*)centerY.value).doubleValue; - return; + return YES; } + + + return NO; +} + +// 13. centerX and top and width and height ++ (BOOL)layoutByCenterXAndTopAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + NSArray*frames = view.jc_frames; - // 13. centerX and top and width and height if ((frameTypes & JCFrameTypeCenterX) &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeWidth) @@ -267,9 +574,17 @@ + (void)executeWithView:(UIView*)view view.jc_centerX_value = ((NSNumber*)centerX.value).doubleValue; view.jc_y_value = ((NSNumber*)top.value).doubleValue; - return; + return YES; } - // 14. centerX and bottom and width and height + + return NO; +} + +// 14. centerX and bottom and width and height ++ (BOOL)layoutByCenterXAndBottomAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + + NSArray*frames = view.jc_frames; + if ((frameTypes & JCFrameTypeCenterX) &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeWidth) @@ -285,9 +600,17 @@ + (void)executeWithView:(UIView*)view view.jc_centerX_value = ((NSNumber*)centerX.value).doubleValue; view.jc_y_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_height_value/*高度*/ + ((NSNumber*)bottom.value).doubleValue/*距离父容器底边距,一般为负数*/; - return; + return YES; } - // 15. centerY and left and width and height + + return NO; +} + +// 15. centerY and left and width and height ++ (BOOL)layoutByCenterYAndLeftAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + + NSArray*frames = view.jc_frames; + if ((frameTypes & JCFrameTypeCenterY) &&(frameTypes & JCFrameTypeLeft) &&(frameTypes & JCFrameTypeWidth) @@ -303,9 +626,17 @@ + (void)executeWithView:(UIView*)view view.jc_centerY_value = ((NSNumber*)centerY.value).doubleValue; view.jc_x_value = ((NSNumber*)left.value).doubleValue; - return; + return YES; } - // 16. centerY and right and width and height + + return NO; +} + +// 16. centerY and right and width and height ++ (BOOL)layoutByCenterYAndRightAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + + NSArray*frames = view.jc_frames; + if ((frameTypes & JCFrameTypeCenterY) &&(frameTypes & JCFrameTypeRight) &&(frameTypes & JCFrameTypeWidth) @@ -321,11 +652,18 @@ + (void)executeWithView:(UIView*)view view.jc_centerY_value = ((NSNumber*)centerY.value).doubleValue; view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_width_value/*宽度*/+((NSNumber*)right.value).doubleValue/*右边距,负数*/; - return; + return YES; } - // 含有2条边界值,2个尺寸 - // 17. left and top and width and height + return NO; +} + +#pragma mark - 含有2条边界值,2个尺寸的组合 +// 17. left and top and width and height ++ (BOOL)layoutByLeftAndTopAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + + NSArray*frames = view.jc_frames; + if ((frameTypes & JCFrameTypeLeft) &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeWidth) @@ -341,10 +679,16 @@ + (void)executeWithView:(UIView*)view view.jc_width_value = ((NSNumber*)width.value).doubleValue; view.jc_height_value = ((NSNumber*)height.value).doubleValue; - return; + return YES; } - // 18. left and bottom and width and height + return NO; +} + +// 18. left and bottom and width and height ++ (BOOL)layoutByLeftAndBottomAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + NSArray*frames = view.jc_frames; + if ((frameTypes & JCFrameTypeLeft) &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeWidth) @@ -360,10 +704,17 @@ + (void)executeWithView:(UIView*)view view.jc_height_value = ((NSNumber*)height.value).doubleValue; view.jc_y_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_height_value/*高度*/ + ((NSNumber*)bottom.value).doubleValue/*底部边距*/; - return; + return YES; } - // 19. right and top and width and height + return NO; +} + +// 19. right and top and width and height ++ (BOOL)layoutByRightAndTopAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + + NSArray*frames = view.jc_frames; + if ((frameTypes & JCFrameTypeRight) &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeWidth) @@ -379,10 +730,16 @@ + (void)executeWithView:(UIView*)view view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/ - view.jc_width_value/*宽度*/ + ((NSNumber*)right.value).doubleValue/*右边距*/; view.jc_y_value = ((NSNumber*)top.value).doubleValue; - return; + return YES; } - // 20. right and bottom and width and height + return NO; +} + +// 20. right and bottom and width and height ++ (BOOL)layoutByRightAndBottomAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + NSArray*frames = view.jc_frames; + if ((frameTypes & JCFrameTypeRight) &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeWidth) @@ -398,11 +755,19 @@ + (void)executeWithView:(UIView*)view view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/ - view.jc_width_value/*宽度*/ + ((NSNumber*)right.value).doubleValue/*右边距*/; view.jc_y_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_height_value/*高度*/ + ((NSNumber*)bottom.value).doubleValue/*底部边距*/; - return; + return YES; } + + return NO; - // 含有3条边距值,1个尺寸值 - // 21. left and right and top and height +} + +#pragma mark - 含有3条边距值,1个尺寸值的组合 +// 21. left and right and top and height ++ (BOOL)layoutByLeftAndRightAndTopAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + + NSArray*frames = view.jc_frames; + if ((frameTypes & JCFrameTypeLeft) &&(frameTypes & JCFrameTypeRight) &&(frameTypes & JCFrameTypeTop) @@ -418,11 +783,18 @@ + (void)executeWithView:(UIView*)view view.jc_width_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_x_value/*左边距*/+((NSNumber*)right.value).doubleValue/*右边距,负数*/; view.jc_height_value = ((NSNumber*)height.value).doubleValue; - return; + return YES; } + + return NO; + +} +// 22. left and right and bottom and height ++ (BOOL)layoutByLeftAndRightAndBottomAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + + NSArray*frames = view.jc_frames; - // 22. left and right and bottom and height if ((frameTypes & JCFrameTypeLeft) &&(frameTypes & JCFrameTypeRight) &&(frameTypes & JCFrameTypeBottom) @@ -438,10 +810,18 @@ + (void)executeWithView:(UIView*)view view.jc_width_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_x_value/*左边距*/+((NSNumber*)right.value).doubleValue/*右边距,负数*/; view.jc_y_value = view.superview.jc_height_value/*父容器高度*/-view.jc_height_value/*高度*/+((NSNumber*)bottom.value).doubleValue/*底边距,负数*/; - return; + return YES; } - // 23. left and top and bottom and width + return NO; + +} + +// 23. left and top and bottom and width ++ (BOOL)layoutByLeftAndTopAndBottomAndWidth:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + + NSArray*frames = view.jc_frames; + if ((frameTypes & JCFrameTypeLeft) &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeBottom) @@ -457,11 +837,17 @@ + (void)executeWithView:(UIView*)view view.jc_width_value = ((NSNumber*)width.value).doubleValue; view.jc_height_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_y_value/*顶边距*/ + ((NSNumber*)bottom.value).doubleValue/*底边距*/; - return; + return YES; } + + return NO; + +} +// 24. right and top and bottom and width ++ (BOOL)layoutByRightAndTopAndBottomAndWidth:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + NSArray*frames = view.jc_frames; - // 24. right and top and bottom and width if ((frameTypes & JCFrameTypeRight) &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeBottom) @@ -477,13 +863,19 @@ + (void)executeWithView:(UIView*)view view.jc_height_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_y_value/*顶边距*/ + ((NSNumber*)bottom.value).doubleValue/*底边距*/; view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/ - view.jc_width_value/*宽度*/ + ((NSNumber*)right.value).doubleValue/*右边距*/; - return; + return YES; } + + return NO; + +} + +#pragma mark - 含有4条边距值 +// 25. left and right and top and bottom ++ (BOOL)layoutByLeftAndRightAndTopAndBottom:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + NSArray*frames = view.jc_frames; - - // 含有4条边距值 - // 25. left and right and top and bottom if ((frameTypes & JCFrameTypeLeft) &&(frameTypes & JCFrameTypeRight) &&(frameTypes & JCFrameTypeTop) @@ -499,15 +891,24 @@ + (void)executeWithView:(UIView*)view view.jc_width_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_x_value/*左边距*/+((NSNumber*)right.value).doubleValue/*右边距,负数*/; view.jc_height_value = view.superview.jc_height_value/*父容器高度*/-view.jc_y_value/*顶边距*/+((NSNumber*)bottom.value).doubleValue/*右边距,负数*/; - return; + return YES; } + + return NO; + } +#pragma mark - 过滤的公共方法 + (JCFrame*)filterFrameIn:(NSArray*)collection frameType:(JCFrameType)frameType{ - NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"frameType=%zd",frameType]]; + NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(JCFrame *frame, id obj) { + return frame.frameAttr.currentFrameType == frameType; + }]; NSArray *result = [collection filteredArrayUsingPredicate:predicate]; - return (result && result.count > 0) ? result.firstObject : nil; + JCFrame *frame = (result && result.count > 0) ? result.firstObject : nil; + //将Frame的actived标记为YES + frame.actived = YES; + return frame; } @end diff --git a/JCFrameLayout/JCFrameLayout/JCFrameLayout.h b/JCFrameLayout/JCFrameLayout/JCFrameLayout.h index 2dd4381..3b6b0c2 100644 --- a/JCFrameLayout/JCFrameLayout/JCFrameLayout.h +++ b/JCFrameLayout/JCFrameLayout/JCFrameLayout.h @@ -10,5 +10,6 @@ #define JCFrameLayout_h #import "UIView+JCFrameLayout.h" +#import "UIView+JCFrame.h" #endif /* JCFrameLayout_h */ diff --git a/JCFrameLayout/JCFrameLayout/JCFrameMake.m b/JCFrameLayout/JCFrameLayout/JCFrameMake.m index 9e7394b..907b2a8 100644 --- a/JCFrameLayout/JCFrameLayout/JCFrameMake.m +++ b/JCFrameLayout/JCFrameLayout/JCFrameMake.m @@ -74,25 +74,43 @@ - (JCFrame*)jcFrame:(JCFrame *)jcFrame createFrameWithframeType:(JCFrameType)fra } - (JCFrame *)createJCLayoutFrame:(JCFrameType)frameType{ - /** - 如果这个frameType已存在,则直接返回,反之创建 - */ + if (self.frameTypes & frameType) { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"frameType=%d",frameType]; + /** + 如果这个frameType已存在,则直接返回,反之创建 + */ + NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(JCFrame *frame, id obj) { + return frame.frameAttr.currentFrameType == frameType; + }]; NSArray *filterResult = [self.view.jc_frames filteredArrayUsingPredicate:predicate]; return filterResult.firstObject; + }else{ - self.frameTypes |= frameType; //将frameType标记为已存在 - JCFrame *frame = [[JCFrame alloc]initWithView:self.view frameType:frameType]; + + //1.将frameType标记为已存在 + self.frameTypes |= frameType; + + //2.创建JCFrameAttribute + JCFrameAttribute *frameAttribute = [[JCFrameAttribute alloc]initWithView:self.view frameType:frameType]; + + //3.创建JCFrame + JCFrame *frame = [[JCFrame alloc]initWithFrameAttribute:frameAttribute]; + + //4.设置JCFrame代理 frame.delegate = self; + + //5.将JCFrame添加至UIView的jc_frames集合中 + [self.view.jc_frames addObject:frame]; + return frame; } } - (void)executeLayout{ [JCFrameExecutor executeWithView:self.view - frames:self.view.jc_frames frameTypes:self.frameTypes]; + JCLog(@"--frames = %@",self.view.jc_frames); + } - (void)dealloc{ diff --git a/JCFrameLayout/JCFrameLayout/UIView+JCFrame.h b/JCFrameLayout/JCFrameLayout/UIView+JCFrame.h index ead962a..e78c55f 100644 --- a/JCFrameLayout/JCFrameLayout/UIView+JCFrame.h +++ b/JCFrameLayout/JCFrameLayout/UIView+JCFrame.h @@ -8,6 +8,8 @@ #import +#import "JCFrameAttribute.h" + @interface UIView (JCFrame) - (void)setJc_x_value:(CGFloat)value; @@ -34,5 +36,21 @@ - (void)setJc_size_value:(CGSize)value; - (CGSize)jc_size_value; + +- (JCFrameAttribute*)jc_left; +- (JCFrameAttribute*)jc_top; +- (JCFrameAttribute*)jc_right; +- (JCFrameAttribute*)jc_bottom; +- (JCFrameAttribute*)jc_width; +- (JCFrameAttribute*)jc_height; +- (JCFrameAttribute*)jc_centerX; +- (JCFrameAttribute*)jc_centerY; +- (JCFrameAttribute*)jc_center; +- (JCFrameAttribute*)jc_size; + +//给UIView设置一个key值,用于方便调试 +@property (nonatomic,copy) NSString *jc_debug_key; + - (NSMutableArray *)jc_frames; + @end diff --git a/JCFrameLayout/JCFrameLayout/UIView+JCFrame.m b/JCFrameLayout/JCFrameLayout/UIView+JCFrame.m index 18a0dda..61da7f0 100644 --- a/JCFrameLayout/JCFrameLayout/UIView+JCFrame.m +++ b/JCFrameLayout/JCFrameLayout/UIView+JCFrame.m @@ -9,6 +9,8 @@ #import "UIView+JCFrame.h" #import +static char debugkey; + @implementation UIView (JCFrame) - (void)setJc_x_value:(CGFloat)value{ @@ -81,6 +83,47 @@ - (CGSize)jc_size_value{ return self.frame.size; } + + +- (JCFrameAttribute*)jc_left{ + return [[JCFrameAttribute alloc]initWithView:self frameType:(JCFrameTypeLeft)]; +} +- (JCFrameAttribute*)jc_top{ + return [[JCFrameAttribute alloc]initWithView:self frameType:(JCFrameTypeTop)]; +} +- (JCFrameAttribute*)jc_right{ + return [[JCFrameAttribute alloc]initWithView:self frameType:(JCFrameTypeRight)]; +} +- (JCFrameAttribute*)jc_bottom{ + return [[JCFrameAttribute alloc]initWithView:self frameType:(JCFrameTypeBottom)]; +} +- (JCFrameAttribute*)jc_width{ + return [[JCFrameAttribute alloc]initWithView:self frameType:(JCFrameTypeWidth)]; +} +- (JCFrameAttribute*)jc_height{ + return [[JCFrameAttribute alloc]initWithView:self frameType:(JCFrameTypeHeight)]; +} +- (JCFrameAttribute*)jc_centerX{ + return [[JCFrameAttribute alloc]initWithView:self frameType:(JCFrameTypeCenterX)]; +} +- (JCFrameAttribute*)jc_centerY{ + return [[JCFrameAttribute alloc]initWithView:self frameType:(JCFrameTypeCenterY)]; +} +- (JCFrameAttribute*)jc_center{ + return [[JCFrameAttribute alloc]initWithView:self frameType:(JCFrameTypeCenter)]; +} +- (JCFrameAttribute*)jc_size{ + return [[JCFrameAttribute alloc]initWithView:self frameType:(JCFrameTypeSize)]; +} + +- (void)setJc_debug_key:(NSString *)key{ + objc_setAssociatedObject(self, &debugkey, key, OBJC_ASSOCIATION_COPY_NONATOMIC); +} +- (NSString *)jc_debug_key{ + NSString *key = objc_getAssociatedObject(self, &debugkey); + return key ? key : @""; +} + - (NSMutableArray *)jc_frames{ static char key; NSMutableArray *array = (NSMutableArray*)objc_getAssociatedObject(self, &key); diff --git a/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.h b/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.h index 44eceb6..2d06c56 100644 --- a/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.h +++ b/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.h @@ -14,6 +14,4 @@ - (void)jc_makeLayout:(void(^)(JCFrameMake *make))block; - - @end diff --git a/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.m b/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.m index 698a9e3..c2bb3f3 100644 --- a/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.m +++ b/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.m @@ -7,10 +7,13 @@ // #import "UIView+JCFrameLayout.h" +#import "UIView+JCFrame.h" @implementation UIView (JCFrameLayout) - (void)jc_makeLayout:(void (^)(JCFrameMake *))block{ + //清空已存在的属性 + [self.jc_frames removeAllObjects]; //创建Frame构建器 JCFrameMake *make = [[JCFrameMake alloc]initWithView:self]; //生成frame @@ -19,4 +22,6 @@ - (void)jc_makeLayout:(void (^)(JCFrameMake *))block{ [make executeLayout]; } + + @end diff --git a/JCFrameLayout/SecondViewController.m b/JCFrameLayout/SecondViewController.m index f111a9f..fc5d218 100644 --- a/JCFrameLayout/SecondViewController.m +++ b/JCFrameLayout/SecondViewController.m @@ -39,159 +39,22 @@ - (void)viewDidLoad { self.greenView.backgroundColor = [UIColor greenColor]; [self.view addSubview:self.greenView]; + self.redView.jc_debug_key = @"redView"; [self.redView jc_makeLayout:^(JCFrameMake *make) { - -// 25. left and right and top and bottom -// make.left.jc_equalTo(50); -// make.right.jc_equalTo(-50); -// make.top.jc_equalTo(50); -// make.bottom.jc_equalTo(-50); - - make.left.top.width.height.jc_equalTo(100); - -// 24. right and top and bottom and width -// make.right.jc_equalTo(-50); -// make.top.jc_equalTo(50); -// make.bottom.jc_equalTo(-50); -// make.width.jc_equalTo(100); - -// 23. left and top and bottom and width -// make.left.jc_equalTo(50); -// make.top.jc_equalTo(50); -// make.bottom.jc_equalTo(-50); -// make.width.jc_equalTo(100); - -// 22. left and right and bottom and height -// make.left.jc_equalTo(50); -// make.right.jc_equalTo(-50); -// make.bottom.jc_equalTo(-50); -// make.height.jc_equalTo(100); - -// 21. left and right and top and height -// make.left.jc_equalTo(50); -// make.right.jc_equalTo(-50); -// make.top.jc_equalTo(50); -// make.height.jc_equalTo(100); - - -// 20. right and bottom and width and height -// make.right.jc_equalTo(-50); -// make.bottom.jc_equalTo(-50); -// make.height.jc_equalTo(100); -// make.width.jc_equalTo(100); - -// 19. right and top and width and height -// make.right.jc_equalTo(-50); -// make.top.jc_equalTo(50); -// make.height.jc_equalTo(100); -// make.width.jc_equalTo(100); - -// 18. left and bottom and width and height -// make.left.jc_equalTo(50); -// make.bottom.jc_equalTo(-50); -// make.height.jc_equalTo(100); -// make.width.jc_equalTo(100); -// -// 17. left and top and width and height -// make.left.jc_equalTo(50); -// make.top.jc_equalTo(50); -// make.height.jc_equalTo(100); -// make.width.jc_equalTo(100); - -// 16. centerY and right and width and height -// make.centerY.jc_equalTo(100); -// make.right.jc_equalTo(-100); -// make.width.jc_equalTo(100); -// make.height.jc_equalTo(100); - -// 15. centerY and left and width and height -// make.centerY.jc_equalTo(100); -// make.left.jc_equalTo(100); -// make.width.jc_equalTo(100); -// make.height.jc_equalTo(100); - -// 14. centerX and bottom and width and height -// make.centerX.jc_equalTo(100); -// make.bottom.jc_equalTo(-50); -// make.width.jc_equalTo(100); -// make.height.jc_equalTo(100); - -// 13. centerX and top and width and height -// make.centerX.jc_equalTo(100); -// make.top.jc_equalTo(100); -// make.width.jc_equalTo(100); -// make.height.jc_equalTo(100); - -// 12. centerX and centerY and width and height -// make.centerX.jc_equalTo(100); -// make.centerY.jc_equalTo(100); -// make.width.jc_equalTo(100); -// make.height.jc_equalTo(100); - -// 11. right and bottom and size -// make.right.jc_equalTo(-50); -// make.bottom.jc_equalTo(-50); -// make.size.jc_equalTo(CGSizeMake(100, 100)); - -// 10. right and top and size -// make.right.jc_equalTo(-50); -// make.top.jc_equalTo(100); -// make.size.jc_equalTo(CGSizeMake(100, 100)); - -// 9. left and bottom and size -// make.left.jc_equalTo(100); -// make.bottom.jc_equalTo(50); -// make.size.jc_equalTo(CGSizeMake(100, 100)); - -// 8. left and top and size -// make.left.jc_equalTo(100); -// make.top.jc_equalTo(100); -// make.size.jc_equalTo(CGSizeMake(100, 100)); - -// 7. centerY and right and size -// make.centerY.jc_equalTo(100); -// make.right.jc_equalTo(-50); -// make.size.jc_equalTo(CGSizeMake(100, 100)); - -// 6. centerY and left and size -// make.centerY.jc_equalTo(200); -// make.left.jc_equalTo(100); -// make.size.jc_equalTo(CGSizeMake(200, 200)); - -// 5. centerX and bottom and size -// make.centerX.jc_equalTo(100); -// make.size.jc_equalTo(CGSizeMake(100, 100)); -// make.bottom.jc_equalTo(-50); - -// 4. centerX and top and size -// make.centerX.jc_equalTo(100); -// make.top.jc_equalTo(50); -// make.size.jc_equalTo(CGSizeMake(100, 100)); - -// 3.centerX and centerY and size -// make.centerX.jc_equalTo(100); -// make.centerY.jc_equalTo(100); -// make.size.jc_equalTo(CGSizeMake(100, 100)); - -// 2. center and width and height -// make.center.jc_equalTo(CGPointMake(100, 100)); -// make.width.jc_equalTo(200); -// make.height.jc_equalTo(200); - -// 1. center and size -// make.center.jc_equalTo(CGPointMake(100, 100)); -// make.size.jc_equalTo(CGSizeMake(100, 100)); + make.center.jc_equalTo(CGPointMake(100, 100)); + make.size.jc_equalTo(CGSizeMake(100, 100)); }]; -// [self.greenView jc_makeLayout:^(JCFrameMake *make) { -// make.left.jc_equalTo(50); -// make.width.jc_equalTo(100); -// -// make.top.jc_equalTo(50); -// make.height.jc_equalTo(100); -// }]; + self.greenView.jc_debug_key = @"greenView"; + [self.greenView jc_makeLayout:^(JCFrameMake *make) { + make.center.equalTo(self.redView); + make.size.equalTo(self.redView).multipliedBy(2); + }]; + + [self.view bringSubviewToFront:self.redView]; NSLog(@"self.redView.frame = %@",[NSValue valueWithCGRect:self.redView.frame]); + NSLog(@"self.greenView.frame = %@",[NSValue valueWithCGRect:self.greenView.frame]); } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ From 4d855ac0f1fcabd6fdf4bc4bfb525af496c0171d Mon Sep 17 00:00:00 2001 From: wangyp2018 Date: Fri, 31 Mar 2017 14:40:30 +0800 Subject: [PATCH 04/14] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=A4=9A=E8=A7=86?= =?UTF-8?q?=E5=9B=BE=E4=B9=8B=E9=97=B4=E7=9A=84=E7=9B=B8=E5=AF=B9=E5=B8=83?= =?UTF-8?q?=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JCFrameLayout.xcodeproj/project.pbxproj | 4 +- .../UserInterfaceState.xcuserstate | Bin 49232 -> 61034 bytes JCFrameLayout/JCFrameLayout/JCFrameExecutor.m | 581 ++++++++++-------- .../JCFrameLayout/JCFrameExecutorMethods.h | 229 +++++++ .../JCFrameLayout/JCFrameLayoutConst.h | 2 +- JCFrameLayout/JCFrameLayout/UIView+JCFrame.h | 4 + JCFrameLayout/JCFrameLayout/UIView+JCFrame.m | 9 + JCFrameLayout/SecondViewController.m | 140 ++++- 8 files changed, 708 insertions(+), 261 deletions(-) create mode 100644 JCFrameLayout/JCFrameLayout/JCFrameExecutorMethods.h diff --git a/JCFrameLayout.xcodeproj/project.pbxproj b/JCFrameLayout.xcodeproj/project.pbxproj index fcb0ddf..7289371 100644 --- a/JCFrameLayout.xcodeproj/project.pbxproj +++ b/JCFrameLayout.xcodeproj/project.pbxproj @@ -68,6 +68,7 @@ 282FD7EC1E895B6D00E17BFB /* SecondViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SecondViewController.m; sourceTree = ""; }; 2836F33A1E8CE49400C9BE35 /* JCFrameAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JCFrameAttribute.h; sourceTree = ""; }; 2836F33B1E8CE49400C9BE35 /* JCFrameAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JCFrameAttribute.m; sourceTree = ""; }; + 2836F33D1E8E2FEA00C9BE35 /* JCFrameExecutorMethods.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JCFrameExecutorMethods.h; sourceTree = ""; }; 28D22ADD1E8911C9002245F9 /* JCFrameLayout.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JCFrameLayout.app; sourceTree = BUILT_PRODUCTS_DIR; }; 28D22AE11E8911C9002245F9 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 28D22AE31E8911C9002245F9 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -130,6 +131,7 @@ children = ( 282FD7DE1E895B6400E17BFB /* JCFrameLayout.h */, 28E5EA981E8A42F300701A93 /* JCFrameLayoutConst.h */, + 28E5EAD61E8BB16700701A93 /* JCFrameUtilities.h */, 282FD7DF1E895B6400E17BFB /* JCFrameMake.h */, 282FD7E01E895B6400E17BFB /* JCFrameMake.m */, 282FD7E11E895B6400E17BFB /* JCFrame.h */, @@ -138,7 +140,7 @@ 2836F33B1E8CE49400C9BE35 /* JCFrameAttribute.m */, 28E5EAD31E8B84A000701A93 /* JCFrameExecutor.h */, 28E5EAD41E8B84A000701A93 /* JCFrameExecutor.m */, - 28E5EAD61E8BB16700701A93 /* JCFrameUtilities.h */, + 2836F33D1E8E2FEA00C9BE35 /* JCFrameExecutorMethods.h */, 282FD7E31E895B6400E17BFB /* UIView+JCFrame.h */, 282FD7E41E895B6400E17BFB /* UIView+JCFrame.m */, 282FD7E51E895B6400E17BFB /* UIView+JCFrameLayout.h */, diff --git a/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate b/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate index 4c65e6dfb34a48e6f59fd3fca999f6d2ed4d6dbb..b3f4896304d748aa9053afbed07bddd82c97ccf7 100644 GIT binary patch literal 61034 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 delta 19985 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

Zj@# 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 = view.jc_frames; - JCLog(@"--view = %@",view.jc_debug_key); - - JCFrame *center = [self filterFrameIn:frames frameType:(JCFrameTypeCenter)]; - JCFrame *size = [self filterFrameIn:frames frameType:(JCFrameTypeSize)]; - //1. 先size - if (size.hasRelateAttr) { - //size的相对值只能是size - if (size.frameAttr.relateFrameType == JCFrameTypeSize) { - //1.1 计算新的size - CGSize newSize = transToNewSize(size.frameAttr.relateView.jc_size_value,size.multiplier,size.offset); - //2. 新值回填 - view.jc_size_value = newSize; - //3. 设置新值 - size.jc_equalTo(newSize); - } - }else{ - view.jc_size_value = ((NSValue*)size.value).CGSizeValue; - } + SET_SIZE //2. 后Center - if (center.hasRelateAttr) { - //center的相对值只能是center - if(center.frameAttr.relateFrameType == JCFrameTypeCenter){ - //1. 根据multiplier和offset获取新的center - CGPoint newCenter = transToNewCenter(center.frameAttr.relateView.jc_center_value,center.multiplier,center.offset); - //2. 将新的值回填回去,因为center的value属性赋值 - center.jc_equalTo(newCenter); - //3. 设置新值 - view.jc_center_value = newCenter; - - } - }else{ - view.jc_center_value = ((NSValue*)center.value).CGPointValue; - } + SET_CENTER return YES; } @@ -290,50 +367,14 @@ + (BOOL)layoutByCenterAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)fr NSArray*frames = view.jc_frames; //1. 设置宽度 - JCFrame *width = [self filterFrameIn:frames frameType:(JCFrameTypeWidth)]; - if (width.hasRelateAttr) { - if(width.frameAttr.relateFrameType == JCFrameTypeWidth){ - //view2.width * 倍数 + 偏移量 - CGFloat newWidth = width.frameAttr.relateView.jc_width_value * width.multiplier + ((NSNumber*)width.offset).doubleValue; - //回填 - width.jc_equalTo(newWidth); - //设置 - view.jc_width_value = newWidth; - } - }else{ - view.jc_width_value = ((NSNumber*)width.value).doubleValue; - } + SET_WIDTH //2. 设置高度 - JCFrame *height = [self filterFrameIn:frames frameType:(JCFrameTypeHeight)]; - if (height.hasRelateAttr) { - //height只能相对height - if(height.frameAttr.relateFrameType == JCFrameTypeHeight){ - //计算新值 - CGFloat newHeight = height.frameAttr.relateView.jc_height_value * height.multiplier + ((NSNumber*)height.offset).doubleValue; - //回填 - height.jc_equalTo(newHeight); - //设置 - view.jc_height_value = newHeight; - } - }else{ - view.jc_height_value = ((NSNumber*)height.value).doubleValue; - } + SET_HEIGHT + //3. 设置center - JCFrame *center = [self filterFrameIn:frames frameType:(JCFrameTypeCenter)]; - if (center.hasRelateAttr) { - if (center.frameAttr.relateFrameType == JCFrameTypeCenter) { - //计算新值 - CGPoint newCenter = transToNewCenter(center.frameAttr.relateView.jc_center_value, center.multiplier, center.offset); - //回填 - center.jc_equalTo(newCenter); - //设置 - view.jc_center_value = newCenter; - } - }else{ - view.jc_center_value = ((NSValue*)center.value).CGPointValue; - } + SET_CENTER return YES; } @@ -351,12 +392,15 @@ + (BOOL)layoutByCenterXAndCenterYAndSize:(UIView*)view frameTypes:(JCFrameType)f NSArray*frames = view.jc_frames; - JCFrame *centerX = [self filterFrameIn:frames frameType:(JCFrameTypeCenterX)]; - JCFrame *centerY = [self filterFrameIn:frames frameType:(JCFrameTypeCenterY)]; - JCFrame *size = [self filterFrameIn:frames frameType:(JCFrameTypeSize)]; - view.jc_centerX_value = ((NSNumber*)centerX.value).doubleValue; - view.jc_centerY_value = ((NSNumber*)centerY.value).doubleValue; - view.jc_size_value = ((NSValue*)size.value).CGSizeValue; + //1. 设置size + SET_SIZE + + //2. 设置centerX + SET_CENTER_X + + //3. 设置centerY + SET_CENTER_Y + return YES; } @@ -371,13 +415,15 @@ + (BOOL)layoutByCenterXAndTopAndSize:(UIView*)view frameTypes:(JCFrameType)frame NSArray*frames = view.jc_frames; - JCFrame *centerX = [self filterFrameIn:frames frameType:(JCFrameTypeCenterX)]; - JCFrame *top = [self filterFrameIn:frames frameType:(JCFrameTypeTop)]; - JCFrame *size = [self filterFrameIn:frames frameType:(JCFrameTypeSize)]; + //1. size + SET_SIZE + + //2. top + SET_TOP + + //3. centerX + SET_CENTER_X - view.jc_size_value = ((NSValue*)size.value).CGSizeValue; - view.jc_y_value = ((NSNumber*)top.value).doubleValue; - view.jc_centerX_value = ((NSNumber*)centerX.value).doubleValue; return YES; } @@ -391,13 +437,14 @@ + (BOOL)layoutByCenterXAndBottomAndSize:(UIView*)view frameTypes:(JCFrameType)fr &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeSize)) { - JCFrame *centerX = [self filterFrameIn:frames frameType:(JCFrameTypeCenterX)]; - JCFrame *bottom = [self filterFrameIn:frames frameType:(JCFrameTypeBottom)]; - JCFrame *size = [self filterFrameIn:frames frameType:(JCFrameTypeSize)]; + //1. size + SET_SIZE - view.jc_size_value = ((NSValue*)size.value).CGSizeValue; - view.jc_centerX_value = ((NSNumber*)centerX.value).doubleValue; - view.jc_y_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_height_value/*高度*/ + ((NSNumber*)bottom.value).doubleValue/*距离父容器底边距,一般为负数*/; + //2. centerX + SET_CENTER_X + + //3. bottom + SET_BOTTOM return NO; } @@ -405,18 +452,22 @@ + (BOOL)layoutByCenterXAndBottomAndSize:(UIView*)view frameTypes:(JCFrameType)fr } // 6. centerY and left and size -+ (BOOL)layoutByCenterYAndLeftAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{NSArray*frames = view.jc_frames; ++ (BOOL)layoutByCenterYAndLeftAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + if ((frameTypes & JCFrameTypeCenterY) &&(frameTypes & JCFrameTypeLeft) &&(frameTypes & JCFrameTypeSize)) { - JCFrame *centerY = [self filterFrameIn:frames frameType:(JCFrameTypeCenterY)]; - JCFrame *left = [self filterFrameIn:frames frameType:(JCFrameTypeLeft)]; - JCFrame *size = [self filterFrameIn:frames frameType:(JCFrameTypeSize)]; + NSArray*frames = view.jc_frames; + + //1. size + SET_SIZE - view.jc_size_value = ((NSValue*)size.value).CGSizeValue; - view.jc_x_value = ((NSNumber*)left.value).doubleValue; - view.jc_y_value = ((NSNumber*)centerY.value).doubleValue - view.jc_height_value/2; + //2. centerY + SET_CENTER_Y + + //3. left + SET_LEFT return YES; } @@ -430,13 +481,14 @@ + (BOOL)layoutByCenterYAndRightAndSize:(UIView*)view frameTypes:(JCFrameType)fra &&(frameTypes & JCFrameTypeRight) &&(frameTypes & JCFrameTypeSize)) { - JCFrame *centerY = [self filterFrameIn:frames frameType:(JCFrameTypeCenterY)]; - JCFrame *right = [self filterFrameIn:frames frameType:(JCFrameTypeRight)]; - JCFrame *size = [self filterFrameIn:frames frameType:(JCFrameTypeSize)]; + //1. size + SET_SIZE + + //2. centerY + SET_CENTER_Y - view.jc_size_value = ((NSValue*)size.value).CGSizeValue; - view.jc_y_value = ((NSNumber*)centerY.value).doubleValue - view.jc_height_value/2; - view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_width_value/*宽度*/+((NSNumber*)right.value).doubleValue/*右边距,负数*/; + //3. right + SET_RIGHT return YES; } @@ -451,13 +503,14 @@ + (BOOL)layoutByLeftAndTopAndSize:(UIView*)view frameTypes:(JCFrameType)frameTyp &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeSize)) { - JCFrame *left = [self filterFrameIn:frames frameType:(JCFrameTypeLeft)]; - JCFrame *top = [self filterFrameIn:frames frameType:(JCFrameTypeTop)]; - JCFrame *size = [self filterFrameIn:frames frameType:(JCFrameTypeSize)]; + //1. size + SET_SIZE - view.jc_size_value = ((NSValue*)size.value).CGSizeValue; - view.jc_y_value = ((NSNumber*)top.value).doubleValue; - view.jc_x_value = ((NSNumber*)left.value).doubleValue; + //2. left + SET_LEFT + + //3. top + SET_TOP return YES; } @@ -471,13 +524,14 @@ + (BOOL)layoutByLeftAndBottomAndSize:(UIView*)view frameTypes:(JCFrameType)frame &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeSize)) { - JCFrame *left = [self filterFrameIn:frames frameType:(JCFrameTypeLeft)]; - JCFrame *bottom = [self filterFrameIn:frames frameType:(JCFrameTypeBottom)]; - JCFrame *size = [self filterFrameIn:frames frameType:(JCFrameTypeSize)]; + //1. size + SET_SIZE + + //2. left + SET_LEFT - view.jc_size_value = ((NSValue*)size.value).CGSizeValue; - view.jc_x_value = ((NSNumber*)left.value).doubleValue; - view.jc_y_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_height_value/*高度*/ + ((NSNumber*)bottom.value).doubleValue/*距离父容器底边距,一般为负数*/; + //3. bottom + SET_BOTTOM return YES; } @@ -493,14 +547,14 @@ + (BOOL)layoutByRightAndTopAndSize:(UIView*)view frameTypes:(JCFrameType)frameTy &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeSize)) { - JCFrame *right = [self filterFrameIn:frames frameType:(JCFrameTypeRight)]; - JCFrame *top = [self filterFrameIn:frames frameType:(JCFrameTypeTop)]; - JCFrame *size = [self filterFrameIn:frames frameType:(JCFrameTypeSize)]; + //1. size + SET_SIZE - view.jc_size_value = ((NSValue*)size.value).CGSizeValue; - view.jc_y_value = ((NSNumber*)top.value).doubleValue; - view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_width_value/*宽度*/+((NSNumber*)right.value).doubleValue/*右边距,负数*/; + //2. top + SET_TOP + //3. right + SET_RIGHT return YES; } @@ -514,13 +568,14 @@ + (BOOL)layoutByRightAndBottomAndSize:(UIView*)view frameTypes:(JCFrameType)fram &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeSize)) { - JCFrame *right = [self filterFrameIn:frames frameType:(JCFrameTypeRight)]; - JCFrame *bottom = [self filterFrameIn:frames frameType:(JCFrameTypeBottom)]; - JCFrame *size = [self filterFrameIn:frames frameType:(JCFrameTypeSize)]; + //1. size + SET_SIZE - view.jc_size_value = ((NSValue*)size.value).CGSizeValue; - view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_width_value/*宽度*/+((NSNumber*)right.value).doubleValue/*右边距,负数*/; - view.jc_y_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_height_value/*高度*/ + ((NSNumber*)bottom.value).doubleValue/*距离父容器底边距,一般为负数*/; + //2. right + SET_RIGHT + + //3. bottom + SET_BOTTOM return YES; } @@ -538,15 +593,17 @@ + (BOOL)layoutByCenterXAndCenterYAndWidthAndHeight:(UIView*)view frameTypes:(JCF &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { - JCFrame *centerX = [self filterFrameIn:frames frameType:(JCFrameTypeCenterX)]; - JCFrame *centerY = [self filterFrameIn:frames frameType:(JCFrameTypeCenterY)]; - JCFrame *width = [self filterFrameIn:frames frameType:(JCFrameTypeWidth)]; - JCFrame *height = [self filterFrameIn:frames frameType:(JCFrameTypeHeight)]; + //1. width + SET_WIDTH + + //2. height + SET_HEIGHT - view.jc_width_value = ((NSNumber*)width.value).doubleValue; - view.jc_height_value = ((NSNumber*)height.value).doubleValue; - view.jc_centerX_value = ((NSNumber*)centerX.value).doubleValue; - view.jc_centerY_value = ((NSNumber*)centerY.value).doubleValue; + //3. centerX + SET_CENTER_X + + //4. centerY + SET_CENTER_Y return YES; } @@ -564,15 +621,17 @@ + (BOOL)layoutByCenterXAndTopAndWidthAndHeight:(UIView*)view frameTypes:(JCFrame &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { - JCFrame *centerX = [self filterFrameIn:frames frameType:(JCFrameTypeCenterX)]; - JCFrame *top = [self filterFrameIn:frames frameType:(JCFrameTypeTop)]; - JCFrame *width = [self filterFrameIn:frames frameType:(JCFrameTypeWidth)]; - JCFrame *height = [self filterFrameIn:frames frameType:(JCFrameTypeHeight)]; + //1. width + SET_WIDTH + + //2. height + SET_HEIGHT - view.jc_width_value = ((NSNumber*)width.value).doubleValue; - view.jc_height_value = ((NSNumber*)height.value).doubleValue; - view.jc_centerX_value = ((NSNumber*)centerX.value).doubleValue; - view.jc_y_value = ((NSNumber*)top.value).doubleValue; + //3. centerX + SET_CENTER_X + + //4. top + SET_TOP return YES; } @@ -590,15 +649,17 @@ + (BOOL)layoutByCenterXAndBottomAndWidthAndHeight:(UIView*)view frameTypes:(JCFr &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { - JCFrame *centerX = [self filterFrameIn:frames frameType:(JCFrameTypeCenterX)]; - JCFrame *bottom = [self filterFrameIn:frames frameType:(JCFrameTypeBottom)]; - JCFrame *width = [self filterFrameIn:frames frameType:(JCFrameTypeWidth)]; - JCFrame *height = [self filterFrameIn:frames frameType:(JCFrameTypeHeight)]; + //1. width + SET_WIDTH + + //2. height + SET_HEIGHT - view.jc_width_value = ((NSNumber*)width.value).doubleValue; - view.jc_height_value = ((NSNumber*)height.value).doubleValue; - view.jc_centerX_value = ((NSNumber*)centerX.value).doubleValue; - view.jc_y_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_height_value/*高度*/ + ((NSNumber*)bottom.value).doubleValue/*距离父容器底边距,一般为负数*/; + //3. centerX + SET_CENTER_X + + //4. bottom + SET_BOTTOM return YES; } @@ -616,15 +677,17 @@ + (BOOL)layoutByCenterYAndLeftAndWidthAndHeight:(UIView*)view frameTypes:(JCFram &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { - JCFrame *centerY = [self filterFrameIn:frames frameType:(JCFrameTypeCenterY)]; - JCFrame *left = [self filterFrameIn:frames frameType:(JCFrameTypeLeft)]; - JCFrame *width = [self filterFrameIn:frames frameType:(JCFrameTypeWidth)]; - JCFrame *height = [self filterFrameIn:frames frameType:(JCFrameTypeHeight)]; + //1. width + SET_WIDTH + + //2. height + SET_HEIGHT - view.jc_width_value = ((NSNumber*)width.value).doubleValue; - view.jc_height_value = ((NSNumber*)height.value).doubleValue; - view.jc_centerY_value = ((NSNumber*)centerY.value).doubleValue; - view.jc_x_value = ((NSNumber*)left.value).doubleValue; + //3. left + SET_LEFT + + //4. centerY + SET_CENTER_Y return YES; } @@ -642,15 +705,17 @@ + (BOOL)layoutByCenterYAndRightAndWidthAndHeight:(UIView*)view frameTypes:(JCFra &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { - JCFrame *centerY = [self filterFrameIn:frames frameType:(JCFrameTypeCenterY)]; - JCFrame *right = [self filterFrameIn:frames frameType:(JCFrameTypeRight)]; - JCFrame *width = [self filterFrameIn:frames frameType:(JCFrameTypeWidth)]; - JCFrame *height = [self filterFrameIn:frames frameType:(JCFrameTypeHeight)]; + //1. width + SET_WIDTH + + //2. height + SET_HEIGHT - view.jc_width_value = ((NSNumber*)width.value).doubleValue; - view.jc_height_value = ((NSNumber*)height.value).doubleValue; - view.jc_centerY_value = ((NSNumber*)centerY.value).doubleValue; - view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_width_value/*宽度*/+((NSNumber*)right.value).doubleValue/*右边距,负数*/; + //3. centerY + SET_CENTER_Y + + //4. right + SET_RIGHT return YES; } @@ -669,15 +734,17 @@ + (BOOL)layoutByLeftAndTopAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameTyp &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { - JCFrame *left = [self filterFrameIn:frames frameType:(JCFrameTypeLeft)]; - JCFrame *top = [self filterFrameIn:frames frameType:(JCFrameTypeTop)]; - JCFrame *width = [self filterFrameIn:frames frameType:(JCFrameTypeWidth)]; - JCFrame *height = [self filterFrameIn:frames frameType:(JCFrameTypeHeight)]; + //1. width + SET_WIDTH + + //2. height + SET_HEIGHT - view.jc_x_value = ((NSNumber*)left.value).doubleValue; - view.jc_y_value = ((NSNumber*)top.value).doubleValue; - view.jc_width_value = ((NSNumber*)width.value).doubleValue; - view.jc_height_value = ((NSNumber*)height.value).doubleValue; + //3. top + SET_TOP + + //4. left + SET_LEFT return YES; } @@ -694,15 +761,18 @@ + (BOOL)layoutByLeftAndBottomAndWidthAndHeight:(UIView*)view frameTypes:(JCFrame &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { - JCFrame *left = [self filterFrameIn:frames frameType:(JCFrameTypeLeft)]; - JCFrame *bottom = [self filterFrameIn:frames frameType:(JCFrameTypeBottom)]; - JCFrame *width = [self filterFrameIn:frames frameType:(JCFrameTypeWidth)]; - JCFrame *height = [self filterFrameIn:frames frameType:(JCFrameTypeHeight)]; + //1. width + SET_WIDTH + + //2. height + SET_HEIGHT + + //3. bottom + SET_BOTTOM + + //4. left + SET_LEFT - view.jc_x_value = ((NSNumber*)left.value).doubleValue; - view.jc_width_value = ((NSNumber*)width.value).doubleValue; - view.jc_height_value = ((NSNumber*)height.value).doubleValue; - view.jc_y_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_height_value/*高度*/ + ((NSNumber*)bottom.value).doubleValue/*底部边距*/; return YES; } @@ -720,15 +790,17 @@ + (BOOL)layoutByRightAndTopAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameTy &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { - JCFrame *right = [self filterFrameIn:frames frameType:(JCFrameTypeRight)]; - JCFrame *top = [self filterFrameIn:frames frameType:(JCFrameTypeTop)]; - JCFrame *width = [self filterFrameIn:frames frameType:(JCFrameTypeWidth)]; - JCFrame *height = [self filterFrameIn:frames frameType:(JCFrameTypeHeight)]; + //1. width + SET_WIDTH + + //2. height + SET_HEIGHT + + //3. right + SET_RIGHT - view.jc_width_value = ((NSNumber*)width.value).doubleValue; - view.jc_height_value = ((NSNumber*)height.value).doubleValue; - view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/ - view.jc_width_value/*宽度*/ + ((NSNumber*)right.value).doubleValue/*右边距*/; - view.jc_y_value = ((NSNumber*)top.value).doubleValue; + //4. top + SET_TOP return YES; } @@ -745,15 +817,17 @@ + (BOOL)layoutByRightAndBottomAndWidthAndHeight:(UIView*)view frameTypes:(JCFram &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { - JCFrame *right = [self filterFrameIn:frames frameType:(JCFrameTypeRight)]; - JCFrame *bottom = [self filterFrameIn:frames frameType:(JCFrameTypeBottom)]; - JCFrame *width = [self filterFrameIn:frames frameType:(JCFrameTypeWidth)]; - JCFrame *height = [self filterFrameIn:frames frameType:(JCFrameTypeHeight)]; + //1. width + SET_WIDTH - view.jc_width_value = ((NSNumber*)width.value).doubleValue; - view.jc_height_value = ((NSNumber*)height.value).doubleValue; - view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/ - view.jc_width_value/*宽度*/ + ((NSNumber*)right.value).doubleValue/*右边距*/; - view.jc_y_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_height_value/*高度*/ + ((NSNumber*)bottom.value).doubleValue/*底部边距*/; + //2. height + SET_HEIGHT + + //3. right + SET_RIGHT + + //4. bottom + SET_BOTTOM return YES; } @@ -766,6 +840,7 @@ + (BOOL)layoutByRightAndBottomAndWidthAndHeight:(UIView*)view frameTypes:(JCFram // 21. left and right and top and height + (BOOL)layoutByLeftAndRightAndTopAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ + NSArray*frames = view.jc_frames; if ((frameTypes & JCFrameTypeLeft) @@ -773,15 +848,14 @@ + (BOOL)layoutByLeftAndRightAndTopAndHeight:(UIView*)view frameTypes:(JCFrameTyp &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeHeight)) { - JCFrame *left = [self filterFrameIn:frames frameType:(JCFrameTypeLeft)]; - JCFrame *right = [self filterFrameIn:frames frameType:(JCFrameTypeRight)]; - JCFrame *top = [self filterFrameIn:frames frameType:(JCFrameTypeTop)]; - JCFrame *height = [self filterFrameIn:frames frameType:(JCFrameTypeHeight)]; + //1. height + SET_HEIGHT + + //2. top + SET_TOP - view.jc_x_value = ((NSNumber*)left.value).doubleValue; - view.jc_y_value = ((NSNumber*)top.value).doubleValue; - view.jc_width_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_x_value/*左边距*/+((NSNumber*)right.value).doubleValue/*右边距,负数*/; - view.jc_height_value = ((NSNumber*)height.value).doubleValue; + //3. left and right + SET_LEFT_RIGHT return YES; } @@ -800,15 +874,14 @@ + (BOOL)layoutByLeftAndRightAndBottomAndHeight:(UIView*)view frameTypes:(JCFrame &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeHeight)) { - JCFrame *left = [self filterFrameIn:frames frameType:(JCFrameTypeLeft)]; - JCFrame *right = [self filterFrameIn:frames frameType:(JCFrameTypeRight)]; - JCFrame *bottom = [self filterFrameIn:frames frameType:(JCFrameTypeBottom)]; - JCFrame *height = [self filterFrameIn:frames frameType:(JCFrameTypeHeight)]; + //1. height + SET_HEIGHT - view.jc_x_value = ((NSNumber*)left.value).doubleValue; - view.jc_height_value = ((NSNumber*)height.value).doubleValue; - view.jc_width_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_x_value/*左边距*/+((NSNumber*)right.value).doubleValue/*右边距,负数*/; - view.jc_y_value = view.superview.jc_height_value/*父容器高度*/-view.jc_height_value/*高度*/+((NSNumber*)bottom.value).doubleValue/*底边距,负数*/; + //2. bottom + SET_BOTTOM + + //3. left and right + SET_LEFT_RIGHT return YES; } @@ -827,15 +900,14 @@ + (BOOL)layoutByLeftAndTopAndBottomAndWidth:(UIView*)view frameTypes:(JCFrameTyp &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeWidth)) { - JCFrame *left = [self filterFrameIn:frames frameType:(JCFrameTypeLeft)]; - JCFrame *top = [self filterFrameIn:frames frameType:(JCFrameTypeTop)]; - JCFrame *bottom = [self filterFrameIn:frames frameType:(JCFrameTypeBottom)]; - JCFrame *width = [self filterFrameIn:frames frameType:(JCFrameTypeWidth)]; + //1. width + SET_WIDTH + + //2. left + SET_LEFT - view.jc_x_value = ((NSNumber*)left.value).doubleValue; - view.jc_y_value = ((NSNumber*)top.value).doubleValue; - view.jc_width_value = ((NSNumber*)width.value).doubleValue; - view.jc_height_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_y_value/*顶边距*/ + ((NSNumber*)bottom.value).doubleValue/*底边距*/; + //3. top and bottom + SET_TOP_BOTTOM return YES; } @@ -853,15 +925,14 @@ + (BOOL)layoutByRightAndTopAndBottomAndWidth:(UIView*)view frameTypes:(JCFrameTy &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeWidth)) { - JCFrame *right = [self filterFrameIn:frames frameType:(JCFrameTypeRight)]; - JCFrame *top = [self filterFrameIn:frames frameType:(JCFrameTypeTop)]; - JCFrame *bottom = [self filterFrameIn:frames frameType:(JCFrameTypeBottom)]; - JCFrame *width = [self filterFrameIn:frames frameType:(JCFrameTypeWidth)]; + //1. width + SET_WIDTH + + //2. right + SET_RIGHT - view.jc_y_value = ((NSNumber*)top.value).doubleValue; - view.jc_width_value = ((NSNumber*)width.value).doubleValue; - view.jc_height_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_y_value/*顶边距*/ + ((NSNumber*)bottom.value).doubleValue/*底边距*/; - view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/ - view.jc_width_value/*宽度*/ + ((NSNumber*)right.value).doubleValue/*右边距*/; + //3. top and bottom + SET_TOP_BOTTOM return YES; } @@ -881,15 +952,11 @@ + (BOOL)layoutByLeftAndRightAndTopAndBottom:(UIView*)view frameTypes:(JCFrameTyp &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeBottom)) { - JCFrame *left = [self filterFrameIn:frames frameType:(JCFrameTypeLeft)]; - JCFrame *right = [self filterFrameIn:frames frameType:(JCFrameTypeRight)]; - JCFrame *top = [self filterFrameIn:frames frameType:(JCFrameTypeTop)]; - JCFrame *bottom = [self filterFrameIn:frames frameType:(JCFrameTypeBottom)]; + //1. left and right + SET_LEFT_RIGHT - view.jc_x_value = ((NSNumber*)left.value).doubleValue; - view.jc_y_value = ((NSNumber*)top.value).doubleValue; - view.jc_width_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_x_value/*左边距*/+((NSNumber*)right.value).doubleValue/*右边距,负数*/; - view.jc_height_value = view.superview.jc_height_value/*父容器高度*/-view.jc_y_value/*顶边距*/+((NSNumber*)bottom.value).doubleValue/*右边距,负数*/; + //2. top and bottom + SET_TOP_BOTTOM return YES; } diff --git a/JCFrameLayout/JCFrameLayout/JCFrameExecutorMethods.h b/JCFrameLayout/JCFrameLayout/JCFrameExecutorMethods.h new file mode 100644 index 0000000..170d0d1 --- /dev/null +++ b/JCFrameLayout/JCFrameLayout/JCFrameExecutorMethods.h @@ -0,0 +1,229 @@ +// +// JCFrameExecutorMethods.h +// JCFrameLayout +// +// Created by abc on 17/3/31. +// Copyright © 2017年 jackcat. All rights reserved. +// + +#ifndef JCFrameExecutorMethods_h +#define JCFrameExecutorMethods_h + +#import + +#pragma mark - center 或 size 新值得计算 +/** + 根据relateCenter、multiplier、offset计算新的CGPoint + */ +CGPoint transToNewCenter(CGPoint relateCenter,CGFloat multiplier,id offset){ + CGFloat offsetX = [offset CGPointValue].x; + CGFloat offsetY = [offset CGPointValue].y; + CGFloat newCenterX = relateCenter.x * multiplier + offsetX; + CGFloat newCenterY = relateCenter.y * multiplier + offsetY; + return CGPointMake(newCenterX, newCenterY); +} + +/** + 根据relateCenter、multiplier、offset计算新的CGSize + */ +CGSize transToNewSize(CGSize relateSize,CGFloat multiplier,id offset){ + CGFloat offsetWidth = [offset CGSizeValue].width; + CGFloat offsetHeight = [offset CGSizeValue].height; + CGFloat newWidth = relateSize.width * multiplier + offsetWidth; + CGFloat newHeight = relateSize.height * multiplier + offsetHeight; + return CGSizeMake(newWidth, newHeight); +} + +#pragma mark - 设置布局属性 +void setLeftByLeftFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + //Left可以相对Left ,CenterX ,Right + CGFloat x = 0; + if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) { + x = frame.frameAttr.relateView.jc_x_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) { + x = frame.frameAttr.relateView.jc_centerX_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) { + x = frame.frameAttr.relateView.jc_right_value; + } + x = x * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; + frame.jc_equalTo(x); + view.jc_x_value = x; + }else{ + view.jc_x_value = ((NSNumber*)frame.value).doubleValue; + } +} + +void setRightByRightFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + //right可以相对left,centerX,right + CGFloat x = 0; + if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) { + x = frame.frameAttr.relateView.jc_x_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) { + x = frame.frameAttr.relateView.jc_centerX_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) { + x = frame.frameAttr.relateView.jc_right_value; + } + x = (x - view.jc_width_value) * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; + frame.jc_equalTo(x); + view.jc_x_value = x; + }else{ + view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_width_value/*宽度*/+((NSNumber*)frame.value).doubleValue/*右边距,负数*/; + } + +} + +void setSizeBySizeFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + //size只能相对size + if (frame.frameAttr.relateFrameType == JCFrameTypeSize) { + CGSize newSize = transToNewSize(frame.frameAttr.relateView.jc_size_value, frame.multiplier, frame.offset); + frame.jc_equalTo(newSize); + view.jc_size_value = newSize; + } + } + else{ + view.jc_size_value = ((NSValue*)frame.value).CGSizeValue; + } +} + +void setCenterByCenterFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + //center的相对值只能是center + if(frame.frameAttr.relateFrameType == JCFrameTypeCenter){ + //1. 根据multiplier和offset获取新的center + CGPoint newCenter = transToNewCenter(frame.frameAttr.relateView.jc_center_value,frame.multiplier,frame.offset); + //2. 将新的值回填回去,因为center的value属性赋值 + frame.jc_equalTo(newCenter); + //3. 设置新值 + view.jc_center_value = newCenter; + + } + }else{ + view.jc_center_value = ((NSValue*)frame.value).CGPointValue; + } +} + +void setWidthByWidthFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + if(frame.frameAttr.relateFrameType == JCFrameTypeWidth){ + //view2.width * 倍数 + 偏移量 + CGFloat newWidth = frame.frameAttr.relateView.jc_width_value * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; + //回填 + frame.jc_equalTo(newWidth); + //设置 + view.jc_width_value = newWidth; + } + }else{ + view.jc_width_value = ((NSNumber*)frame.value).doubleValue; + } +} + +void setHeightByHeightFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + //height只能相对height + if(frame.frameAttr.relateFrameType == JCFrameTypeHeight){ + //计算新值 + CGFloat newHeight = frame.frameAttr.relateView.jc_height_value * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; + //回填 + frame.jc_equalTo(newHeight); + //设置 + view.jc_height_value = newHeight; + } + }else{ + view.jc_height_value = ((NSNumber*)frame.value).doubleValue; + } +} + +void setCenterXByCenterXFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + /** + centerX相对值可以有left,centerX,right三个 + */ + CGFloat newCenterX = 0; + if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) {//Left + newCenterX = frame.frameAttr.relateView.jc_x_value; + + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) {//CenterX + newCenterX = frame.frameAttr.relateView.jc_centerX_value; + + }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) {//Right + newCenterX = frame.frameAttr.relateView.jc_right_value; + + } + + newCenterX = newCenterX * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; + frame.jc_equalTo(newCenterX); + view.jc_centerX_value = newCenterX; + }else{ + view.jc_centerX_value = ((NSNumber*)frame.value).doubleValue; + } +} + +void setCenterYByCenterYFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + /** + centerY相对值可以有top,centerY,bottom三个 + */ + CGFloat newCenterY = 0; + if (frame.frameAttr.relateFrameType == JCFrameTypeTop) {//top + newCenterY = frame.frameAttr.relateView.jc_y_value; + + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) {//CenterY + newCenterY = frame.frameAttr.relateView.jc_centerY_value; + + }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) {//bottom + newCenterY = frame.frameAttr.relateView.jc_bottom_value; + } + + newCenterY = newCenterY * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; + + frame.jc_equalTo(newCenterY); + view.jc_centerY_value = newCenterY; + }else{ + view.jc_centerY_value = ((NSNumber*)frame.value).doubleValue; + } +} + +void setTopByTopFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + //top 可以相对 top,centerY,bottom + CGFloat newTop = 0; + if (frame.frameAttr.relateFrameType == JCFrameTypeTop) { + newTop = frame.frameAttr.relateView.jc_y_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) { + newTop = frame.frameAttr.relateView.jc_centerY_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) { + newTop = frame.frameAttr.relateView.jc_bottom_value; + } + newTop = newTop * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; + //回填 + frame.jc_equalTo(newTop); + //设置 + view.jc_y_value = newTop; + }else{ + view.jc_y_value = ((NSNumber*)frame).doubleValue; + } +} + +void setBottomByBottomFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + //bottom可以相对top,centerY,bottom + CGFloat y = 0; + if (frame.frameAttr.relateFrameType == JCFrameTypeTop) { //Top + y = frame.frameAttr.relateView.jc_y_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) { //CenterY + y = frame.frameAttr.relateView.jc_centerY_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) { //Bottom + y = frame.frameAttr.relateView.jc_bottom_value; + } + y = (y - view.jc_height_value) * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; + frame.jc_equalTo(y); + view.jc_y_value = y; + }else{ + view.jc_y_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_height_value/*高度*/ + ((NSNumber*)frame.value).doubleValue/*距离父容器底边距,一般为负数*/; + } +} + +#endif /* JCFrameExecutorMethods_h */ diff --git a/JCFrameLayout/JCFrameLayout/JCFrameLayoutConst.h b/JCFrameLayout/JCFrameLayout/JCFrameLayoutConst.h index f2d07ed..e8ecf48 100644 --- a/JCFrameLayout/JCFrameLayout/JCFrameLayoutConst.h +++ b/JCFrameLayout/JCFrameLayout/JCFrameLayoutConst.h @@ -9,7 +9,7 @@ #ifndef JCFrameLayoutConst_h #define JCFrameLayoutConst_h -//#define NOLOG 1 +#define NOLOG 1 #ifdef NOLOG #define JCLog( s,...) diff --git a/JCFrameLayout/JCFrameLayout/UIView+JCFrame.h b/JCFrameLayout/JCFrameLayout/UIView+JCFrame.h index e78c55f..b77136e 100644 --- a/JCFrameLayout/JCFrameLayout/UIView+JCFrame.h +++ b/JCFrameLayout/JCFrameLayout/UIView+JCFrame.h @@ -12,6 +12,7 @@ @interface UIView (JCFrame) +#pragma mark - getter and setter - (void)setJc_x_value:(CGFloat)value; - (CGFloat)jc_x_value; @@ -36,6 +37,9 @@ - (void)setJc_size_value:(CGSize)value; - (CGSize)jc_size_value; +#pragma mark - getter only +- (CGFloat)jc_right_value; +- (CGFloat)jc_bottom_value; - (JCFrameAttribute*)jc_left; - (JCFrameAttribute*)jc_top; diff --git a/JCFrameLayout/JCFrameLayout/UIView+JCFrame.m b/JCFrameLayout/JCFrameLayout/UIView+JCFrame.m index 61da7f0..1808aaf 100644 --- a/JCFrameLayout/JCFrameLayout/UIView+JCFrame.m +++ b/JCFrameLayout/JCFrameLayout/UIView+JCFrame.m @@ -13,6 +13,7 @@ @implementation UIView (JCFrame) +#pragma mark - getter and setter - (void)setJc_x_value:(CGFloat)value{ CGRect frame = self.frame; frame.origin.x = value; @@ -83,6 +84,14 @@ - (CGSize)jc_size_value{ return self.frame.size; } +#pragma mark - getter only +- (CGFloat)jc_right_value{ + return self.jc_x_value + self.jc_width_value; +} +- (CGFloat)jc_bottom_value{ + return self.jc_y_value + self.jc_height_value; +} + - (JCFrameAttribute*)jc_left{ diff --git a/JCFrameLayout/SecondViewController.m b/JCFrameLayout/SecondViewController.m index fc5d218..fe80474 100644 --- a/JCFrameLayout/SecondViewController.m +++ b/JCFrameLayout/SecondViewController.m @@ -47,8 +47,144 @@ - (void)viewDidLoad { self.greenView.jc_debug_key = @"greenView"; [self.greenView jc_makeLayout:^(JCFrameMake *make) { - make.center.equalTo(self.redView); - make.size.equalTo(self.redView).multipliedBy(2); + +// 25. left and right and top and bottom +// make.left.top.jc_equalTo(20); +// make.right.bottom.jc_equalTo(-20); + make.left.top.equalTo(self.redView).jc_offset(-10); + make.right.bottom.equalTo(self.redView).jc_offset(10); + +// 24. right and top and bottom and width +// make.right.equalTo(self.redView); +// make.right.jc_equalTo(-50); +//// make.top.equalTo(self.redView.jc_centerY); +// make.top.jc_equalTo(20); +// make.bottom.equalTo(self.redView); +//// make.bottom.jc_equalTo(-50); +// make.width.equalTo(self.redView); + +// 23. left and top and bottom and width +// make.left.equalTo(self.redView.jc_right); +//// make.top.equalTo(self.redView.jc_centerY); +// make.top.jc_equalTo(20); +// make.bottom.equalTo(self.redView); +//// make.bottom.jc_equalTo(-50); +// make.width.equalTo(self.redView); + +// 22. left and right and bottom and height +// make.left.equalTo(self.redView); +// make.right.equalTo(self.redView.jc_centerX); +// make.bottom.equalTo(self.redView.jc_top); +// make.height.equalTo(self.redView); + +// 21. left and right and top and height +// make.left.equalTo(self.redView.jc_centerX); +// make.right.equalTo(self.redView); +// make.top.equalTo(self.redView.jc_bottom); +// make.height.equalTo(self.redView); + +// 20. right and bottom and width and height +// make.right.equalTo(self.redView.jc_centerX); +// make.bottom.equalTo(self.redView.jc_centerY); +// make.width.height.equalTo(self.redView); + +// 19. right and top and width and height +// make.right.equalTo(self.redView.jc_centerX); +// make.top.equalTo(self.redView.jc_bottom); +// make.width.height.equalTo(self.redView); + +// 18. left and bottom and width and height +// make.left.equalTo(self.redView.jc_right); +// make.bottom.equalTo(self.redView.jc_centerY); +// make.width.height.equalTo(self.redView); + +// 17. left and top and width and height +// make.left.equalTo(self.redView.jc_right); +// make.top.equalTo(self.redView.jc_bottom); +// make.width.height.equalTo(self.redView); + +// 16. centerY and right and width and height +// make.centerY.equalTo(self.redView.jc_bottom); +// make.right.equalTo(self.redView.jc_centerX); +// make.width.equalTo(self.redView); +// make.height.equalTo(self.redView); + +// 15. centerY and left and width and height +// make.centerY.equalTo(self.redView.jc_bottom); +// make.left.equalTo(self.redView.jc_right); +// make.width.equalTo(self.redView); +// make.height.equalTo(self.redView); + +// 14. centerX and bottom and width and height +// make.centerX.equalTo(self.redView.jc_bottom); +// make.bottom.equalTo(self.redView.jc_centerY); +// make.width.equalTo(self.redView); +// make.height.equalTo(self.redView); + +// 13. centerX and top and width and height +// make.centerX.equalTo(self.redView.jc_right); +// make.top.equalTo(self.redView.jc_bottom); +// make.width.equalTo(self.redView); +// make.height.equalTo(self.redView); + +// 12. centerX and centerY and width and height +// make.centerX.equalTo(self.redView.jc_left); +// make.centerY.equalTo(self.redView.jc_top); +// make.width.equalTo(self.redView).multipliedBy(1.5); +// make.height.equalTo(self.redView).multipliedBy(2); + +// 11. right and bottom and size +// make.right.equalTo(self.redView.jc_left); +// make.bottom.equalTo(self.redView.jc_top); +// make.size.equalTo(self.redView).multipliedBy(2); + +// 10. right and top and size +// make.right.equalTo(self.redView.jc_left); +// make.top.equalTo(self.redView.jc_bottom); +// make.size.equalTo(self.redView).multipliedBy(2); + +// 9. left and bottom and size +// make.left.equalTo(self.redView.jc_right); +// make.bottom.equalTo(self.redView.jc_top); +// make.size.equalTo(self.redView).multipliedBy(2); + +// 8. left and top and size +// make.left.equalTo(self.redView.jc_right); +// make.top.equalTo(self.redView.jc_bottom); +// make.size.equalTo(self.redView).multipliedBy(2); + +// 7. centerY and right and size +// make.centerY.equalTo(self.redView.jc_bottom); +// make.right.equalTo(self.redView.jc_left); +// make.size.equalTo(self.redView); + +// 6. centerY and left and size +// make.centerY.equalTo(self.redView.jc_top); +// make.left.equalTo(self.redView.jc_right); +// make.size.equalTo(self.redView).multipliedBy(2); + +// 5. centerX and bottom and size +// make.centerX.equalTo(self.redView); +// make.bottom.equalTo(self.redView); +// make.size.equalTo(self.redView).multipliedBy(1.5).jc_offset(CGSizeMake(10, 10)); + +// 4. centerX and top and size +// make.centerX.equalTo(self.redView.jc_right); +// make.top.equalTo(self.redView.jc_centerY); +// make.size.equalTo(self.redView).multipliedBy(2).jc_offset(CGSizeMake(10, 10)); + +// 3. centerX and centerY and size +// make.centerX.equalTo(self.redView.jc_right); +// make.centerY.equalTo(self.redView.jc_bottom); +// make.size.equalTo(self.redView).multipliedBy(2).jc_offset(CGSizeMake(10, 10)); + +// 2. center and width and height +// make.width.height.equalTo(self.redView).multipliedBy(2).jc_offset(10); +// make.center.equalTo(self.redView); + +// 1. center and size +// make.center.equalTo(self.redView).multipliedBy(2).jc_offset(CGPointMake(10, 10)); +// make.size.equalTo(self.redView).multipliedBy(2).jc_offset(CGSizeMake(10, 10)); }]; [self.view bringSubviewToFront:self.redView]; From 30ce65e2a63a8bea750edd45cd5c4f886d1fd92c Mon Sep 17 00:00:00 2001 From: wangyp2018 Date: Fri, 31 Mar 2017 17:39:16 +0800 Subject: [PATCH 05/14] =?UTF-8?q?1.=20=E4=BF=AE=E5=A4=8D=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=B8=AAbug=202.=20=E6=B7=BB=E5=8A=A0=E4=BA=86demo=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JCFrameLayout.xcodeproj/project.pbxproj | 138 +++--- .../UserInterfaceState.xcuserstate | Bin 61034 -> 66200 bytes JCFrameLayout/AppDelegate.m | 11 +- JCFrameLayout/Base.lproj/Main.storyboard | 26 -- JCFrameLayout/Examples/ExampleVC1.h | 13 + JCFrameLayout/Examples/ExampleVC1.m | 88 ++++ JCFrameLayout/Examples/ExampleVC2.h | 13 + JCFrameLayout/Examples/ExampleVC2.m | 54 +++ JCFrameLayout/Examples/ExampleVC3.h | 13 + JCFrameLayout/Examples/ExampleVC3.m | 72 ++++ JCFrameLayout/Examples/ExampleVC4.h | 13 + JCFrameLayout/Examples/ExampleVC4.m | 54 +++ JCFrameLayout/Examples/ExampleVC5.h | 13 + JCFrameLayout/Examples/ExampleVC5.m | 76 ++++ .../{ => Examples}/SecondViewController.h | 0 .../{ => Examples}/SecondViewController.m | 0 JCFrameLayout/Info.plist | 2 - JCFrameLayout/JCFrameLayout/JCFrameExecutor.m | 59 ++- .../JCFrameLayout/JCFrameExecutorMethods.h | 2 +- .../Masonry/MASCompositeConstraint.h | 26 -- .../Masonry/MASCompositeConstraint.m | 177 -------- JCFrameLayout/Masonry/MASConstraint+Private.h | 66 --- JCFrameLayout/Masonry/MASConstraint.h | 118 ------ JCFrameLayout/Masonry/MASConstraint.m | 281 ------------- JCFrameLayout/Masonry/MASConstraintMaker.h | 132 ------ JCFrameLayout/Masonry/MASConstraintMaker.m | 250 ----------- JCFrameLayout/Masonry/MASLayoutConstraint.h | 22 - JCFrameLayout/Masonry/MASLayoutConstraint.m | 13 - JCFrameLayout/Masonry/MASUtilities.h | 131 ------ JCFrameLayout/Masonry/MASViewAttribute.h | 39 -- JCFrameLayout/Masonry/MASViewAttribute.m | 40 -- JCFrameLayout/Masonry/MASViewConstraint.h | 48 --- JCFrameLayout/Masonry/MASViewConstraint.m | 396 ------------------ JCFrameLayout/Masonry/Masonry.h | 28 -- JCFrameLayout/Masonry/NSArray+MASAdditions.h | 47 --- JCFrameLayout/Masonry/NSArray+MASAdditions.m | 41 -- .../Masonry/NSArray+MASShorthandAdditions.h | 41 -- .../NSLayoutConstraint+MASDebugAdditions.h | 16 - .../NSLayoutConstraint+MASDebugAdditions.m | 141 ------- JCFrameLayout/Masonry/View+MASAdditions.h | 94 ----- JCFrameLayout/Masonry/View+MASAdditions.m | 155 ------- .../Masonry/View+MASShorthandAdditions.h | 101 ----- JCFrameLayout/QQ20170331-173628.png | Bin 0 -> 23106 bytes JCFrameLayout/ViewController.m | 62 ++- README.md | 81 ++++ 45 files changed, 659 insertions(+), 2534 deletions(-) delete mode 100644 JCFrameLayout/Base.lproj/Main.storyboard create mode 100644 JCFrameLayout/Examples/ExampleVC1.h create mode 100644 JCFrameLayout/Examples/ExampleVC1.m create mode 100644 JCFrameLayout/Examples/ExampleVC2.h create mode 100644 JCFrameLayout/Examples/ExampleVC2.m create mode 100644 JCFrameLayout/Examples/ExampleVC3.h create mode 100644 JCFrameLayout/Examples/ExampleVC3.m create mode 100644 JCFrameLayout/Examples/ExampleVC4.h create mode 100644 JCFrameLayout/Examples/ExampleVC4.m create mode 100644 JCFrameLayout/Examples/ExampleVC5.h create mode 100644 JCFrameLayout/Examples/ExampleVC5.m rename JCFrameLayout/{ => Examples}/SecondViewController.h (100%) rename JCFrameLayout/{ => Examples}/SecondViewController.m (100%) delete mode 100755 JCFrameLayout/Masonry/MASCompositeConstraint.h delete mode 100755 JCFrameLayout/Masonry/MASCompositeConstraint.m delete mode 100755 JCFrameLayout/Masonry/MASConstraint+Private.h delete mode 100755 JCFrameLayout/Masonry/MASConstraint.h delete mode 100755 JCFrameLayout/Masonry/MASConstraint.m delete mode 100755 JCFrameLayout/Masonry/MASConstraintMaker.h delete mode 100755 JCFrameLayout/Masonry/MASConstraintMaker.m delete mode 100755 JCFrameLayout/Masonry/MASLayoutConstraint.h delete mode 100755 JCFrameLayout/Masonry/MASLayoutConstraint.m delete mode 100755 JCFrameLayout/Masonry/MASUtilities.h delete mode 100755 JCFrameLayout/Masonry/MASViewAttribute.h delete mode 100755 JCFrameLayout/Masonry/MASViewAttribute.m delete mode 100755 JCFrameLayout/Masonry/MASViewConstraint.h delete mode 100755 JCFrameLayout/Masonry/MASViewConstraint.m delete mode 100755 JCFrameLayout/Masonry/Masonry.h delete mode 100755 JCFrameLayout/Masonry/NSArray+MASAdditions.h delete mode 100755 JCFrameLayout/Masonry/NSArray+MASAdditions.m delete mode 100755 JCFrameLayout/Masonry/NSArray+MASShorthandAdditions.h delete mode 100755 JCFrameLayout/Masonry/NSLayoutConstraint+MASDebugAdditions.h delete mode 100755 JCFrameLayout/Masonry/NSLayoutConstraint+MASDebugAdditions.m delete mode 100755 JCFrameLayout/Masonry/View+MASAdditions.h delete mode 100755 JCFrameLayout/Masonry/View+MASAdditions.m delete mode 100755 JCFrameLayout/Masonry/View+MASShorthandAdditions.h create mode 100644 JCFrameLayout/QQ20170331-173628.png diff --git a/JCFrameLayout.xcodeproj/project.pbxproj b/JCFrameLayout.xcodeproj/project.pbxproj index 7289371..485335f 100644 --- a/JCFrameLayout.xcodeproj/project.pbxproj +++ b/JCFrameLayout.xcodeproj/project.pbxproj @@ -7,54 +7,27 @@ objects = { /* Begin PBXBuildFile section */ - 282FD7D41E895B5E00E17BFB /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7BE1E895B5E00E17BFB /* MASCompositeConstraint.m */; }; - 282FD7D51E895B5E00E17BFB /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7C11E895B5E00E17BFB /* MASConstraint.m */; }; - 282FD7D61E895B5E00E17BFB /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7C31E895B5E00E17BFB /* MASConstraintMaker.m */; }; - 282FD7D71E895B5E00E17BFB /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7C51E895B5E00E17BFB /* MASLayoutConstraint.m */; }; - 282FD7D81E895B5E00E17BFB /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7C91E895B5E00E17BFB /* MASViewAttribute.m */; }; - 282FD7D91E895B5E00E17BFB /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7CB1E895B5E00E17BFB /* MASViewConstraint.m */; }; - 282FD7DA1E895B5E00E17BFB /* NSArray+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7CD1E895B5E00E17BFB /* NSArray+MASAdditions.m */; }; - 282FD7DB1E895B5E00E17BFB /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7D01E895B5E00E17BFB /* NSLayoutConstraint+MASDebugAdditions.m */; }; - 282FD7DC1E895B5E00E17BFB /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7D21E895B5E00E17BFB /* View+MASAdditions.m */; }; 282FD7E71E895B6400E17BFB /* JCFrameMake.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7E01E895B6400E17BFB /* JCFrameMake.m */; }; 282FD7E81E895B6400E17BFB /* JCFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7E21E895B6400E17BFB /* JCFrame.m */; }; 282FD7E91E895B6400E17BFB /* UIView+JCFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7E41E895B6400E17BFB /* UIView+JCFrame.m */; }; 282FD7EA1E895B6400E17BFB /* UIView+JCFrameLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7E61E895B6400E17BFB /* UIView+JCFrameLayout.m */; }; - 282FD7ED1E895B6D00E17BFB /* SecondViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 282FD7EC1E895B6D00E17BFB /* SecondViewController.m */; }; 2836F33C1E8CE49400C9BE35 /* JCFrameAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 2836F33B1E8CE49400C9BE35 /* JCFrameAttribute.m */; }; + 2836F3411E8E3DBA00C9BE35 /* SecondViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2836F3401E8E3DBA00C9BE35 /* SecondViewController.m */; }; + 2836F3441E8E3DE900C9BE35 /* ExampleVC1.m in Sources */ = {isa = PBXBuildFile; fileRef = 2836F3431E8E3DE900C9BE35 /* ExampleVC1.m */; }; + 2836F3471E8E438200C9BE35 /* ExampleVC2.m in Sources */ = {isa = PBXBuildFile; fileRef = 2836F3461E8E438200C9BE35 /* ExampleVC2.m */; }; 28D22AE21E8911C9002245F9 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D22AE11E8911C9002245F9 /* main.m */; }; 28D22AE51E8911C9002245F9 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D22AE41E8911C9002245F9 /* AppDelegate.m */; }; 28D22AE81E8911C9002245F9 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D22AE71E8911C9002245F9 /* ViewController.m */; }; - 28D22AEB1E8911C9002245F9 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 28D22AE91E8911C9002245F9 /* Main.storyboard */; }; 28D22AED1E8911C9002245F9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 28D22AEC1E8911C9002245F9 /* Assets.xcassets */; }; 28D22AF01E8911C9002245F9 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 28D22AEE1E8911C9002245F9 /* LaunchScreen.storyboard */; }; 28E5EAD51E8B84A000701A93 /* JCFrameExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 28E5EAD41E8B84A000701A93 /* JCFrameExecutor.m */; }; + 28F35D6E1E8E468C0028340C /* ExampleVC3.m in Sources */ = {isa = PBXBuildFile; fileRef = 28F35D6D1E8E468C0028340C /* ExampleVC3.m */; }; + 28F35D711E8E470D0028340C /* ExampleVC4.m in Sources */ = {isa = PBXBuildFile; fileRef = 28F35D701E8E470D0028340C /* ExampleVC4.m */; }; + 28F35D741E8E4F2F0028340C /* ExampleVC5.m in Sources */ = {isa = PBXBuildFile; fileRef = 28F35D731E8E4F2F0028340C /* ExampleVC5.m */; }; + 28F35D761E8E5AB80028340C /* QQ20170331-173628.png in Resources */ = {isa = PBXBuildFile; fileRef = 28F35D751E8E5AB80028340C /* QQ20170331-173628.png */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 282FD7BD1E895B5E00E17BFB /* MASCompositeConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASCompositeConstraint.h; sourceTree = ""; }; - 282FD7BE1E895B5E00E17BFB /* MASCompositeConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASCompositeConstraint.m; sourceTree = ""; }; - 282FD7BF1E895B5E00E17BFB /* MASConstraint+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MASConstraint+Private.h"; sourceTree = ""; }; - 282FD7C01E895B5E00E17BFB /* MASConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASConstraint.h; sourceTree = ""; }; - 282FD7C11E895B5E00E17BFB /* MASConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASConstraint.m; sourceTree = ""; }; - 282FD7C21E895B5E00E17BFB /* MASConstraintMaker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASConstraintMaker.h; sourceTree = ""; }; - 282FD7C31E895B5E00E17BFB /* MASConstraintMaker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASConstraintMaker.m; sourceTree = ""; }; - 282FD7C41E895B5E00E17BFB /* MASLayoutConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASLayoutConstraint.h; sourceTree = ""; }; - 282FD7C51E895B5E00E17BFB /* MASLayoutConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASLayoutConstraint.m; sourceTree = ""; }; - 282FD7C61E895B5E00E17BFB /* Masonry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Masonry.h; sourceTree = ""; }; - 282FD7C71E895B5E00E17BFB /* MASUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASUtilities.h; sourceTree = ""; }; - 282FD7C81E895B5E00E17BFB /* MASViewAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASViewAttribute.h; sourceTree = ""; }; - 282FD7C91E895B5E00E17BFB /* MASViewAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASViewAttribute.m; sourceTree = ""; }; - 282FD7CA1E895B5E00E17BFB /* MASViewConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASViewConstraint.h; sourceTree = ""; }; - 282FD7CB1E895B5E00E17BFB /* MASViewConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASViewConstraint.m; sourceTree = ""; }; - 282FD7CC1E895B5E00E17BFB /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+MASAdditions.h"; sourceTree = ""; }; - 282FD7CD1E895B5E00E17BFB /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+MASAdditions.m"; sourceTree = ""; }; - 282FD7CE1E895B5E00E17BFB /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+MASShorthandAdditions.h"; sourceTree = ""; }; - 282FD7CF1E895B5E00E17BFB /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = ""; }; - 282FD7D01E895B5E00E17BFB /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = ""; }; - 282FD7D11E895B5E00E17BFB /* View+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "View+MASAdditions.h"; sourceTree = ""; }; - 282FD7D21E895B5E00E17BFB /* View+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "View+MASAdditions.m"; sourceTree = ""; }; - 282FD7D31E895B5E00E17BFB /* View+MASShorthandAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "View+MASShorthandAdditions.h"; sourceTree = ""; }; 282FD7DE1E895B6400E17BFB /* JCFrameLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JCFrameLayout.h; sourceTree = ""; }; 282FD7DF1E895B6400E17BFB /* JCFrameMake.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JCFrameMake.h; sourceTree = ""; }; 282FD7E01E895B6400E17BFB /* JCFrameMake.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JCFrameMake.m; sourceTree = ""; }; @@ -64,18 +37,21 @@ 282FD7E41E895B6400E17BFB /* UIView+JCFrame.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+JCFrame.m"; sourceTree = ""; }; 282FD7E51E895B6400E17BFB /* UIView+JCFrameLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+JCFrameLayout.h"; sourceTree = ""; }; 282FD7E61E895B6400E17BFB /* UIView+JCFrameLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+JCFrameLayout.m"; sourceTree = ""; }; - 282FD7EB1E895B6D00E17BFB /* SecondViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecondViewController.h; sourceTree = ""; }; - 282FD7EC1E895B6D00E17BFB /* SecondViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SecondViewController.m; sourceTree = ""; }; 2836F33A1E8CE49400C9BE35 /* JCFrameAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JCFrameAttribute.h; sourceTree = ""; }; 2836F33B1E8CE49400C9BE35 /* JCFrameAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JCFrameAttribute.m; sourceTree = ""; }; 2836F33D1E8E2FEA00C9BE35 /* JCFrameExecutorMethods.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JCFrameExecutorMethods.h; sourceTree = ""; }; + 2836F33F1E8E3DBA00C9BE35 /* SecondViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecondViewController.h; sourceTree = ""; }; + 2836F3401E8E3DBA00C9BE35 /* SecondViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SecondViewController.m; sourceTree = ""; }; + 2836F3421E8E3DE900C9BE35 /* ExampleVC1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExampleVC1.h; sourceTree = ""; }; + 2836F3431E8E3DE900C9BE35 /* ExampleVC1.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExampleVC1.m; sourceTree = ""; }; + 2836F3451E8E438200C9BE35 /* ExampleVC2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExampleVC2.h; sourceTree = ""; }; + 2836F3461E8E438200C9BE35 /* ExampleVC2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExampleVC2.m; sourceTree = ""; }; 28D22ADD1E8911C9002245F9 /* JCFrameLayout.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JCFrameLayout.app; sourceTree = BUILT_PRODUCTS_DIR; }; 28D22AE11E8911C9002245F9 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 28D22AE31E8911C9002245F9 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 28D22AE41E8911C9002245F9 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 28D22AE61E8911C9002245F9 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 28D22AE71E8911C9002245F9 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; - 28D22AEA1E8911C9002245F9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 28D22AEC1E8911C9002245F9 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 28D22AEF1E8911C9002245F9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 28D22AF11E8911C9002245F9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -83,6 +59,13 @@ 28E5EAD31E8B84A000701A93 /* JCFrameExecutor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JCFrameExecutor.h; sourceTree = ""; }; 28E5EAD41E8B84A000701A93 /* JCFrameExecutor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JCFrameExecutor.m; sourceTree = ""; }; 28E5EAD61E8BB16700701A93 /* JCFrameUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JCFrameUtilities.h; sourceTree = ""; }; + 28F35D6C1E8E468C0028340C /* ExampleVC3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExampleVC3.h; sourceTree = ""; }; + 28F35D6D1E8E468C0028340C /* ExampleVC3.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExampleVC3.m; sourceTree = ""; }; + 28F35D6F1E8E470D0028340C /* ExampleVC4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExampleVC4.h; sourceTree = ""; }; + 28F35D701E8E470D0028340C /* ExampleVC4.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExampleVC4.m; sourceTree = ""; }; + 28F35D721E8E4F2F0028340C /* ExampleVC5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExampleVC5.h; sourceTree = ""; }; + 28F35D731E8E4F2F0028340C /* ExampleVC5.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExampleVC5.m; sourceTree = ""; }; + 28F35D751E8E5AB80028340C /* QQ20170331-173628.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "QQ20170331-173628.png"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -96,36 +79,6 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 282FD7BC1E895B5E00E17BFB /* Masonry */ = { - isa = PBXGroup; - children = ( - 282FD7BD1E895B5E00E17BFB /* MASCompositeConstraint.h */, - 282FD7BE1E895B5E00E17BFB /* MASCompositeConstraint.m */, - 282FD7BF1E895B5E00E17BFB /* MASConstraint+Private.h */, - 282FD7C01E895B5E00E17BFB /* MASConstraint.h */, - 282FD7C11E895B5E00E17BFB /* MASConstraint.m */, - 282FD7C21E895B5E00E17BFB /* MASConstraintMaker.h */, - 282FD7C31E895B5E00E17BFB /* MASConstraintMaker.m */, - 282FD7C41E895B5E00E17BFB /* MASLayoutConstraint.h */, - 282FD7C51E895B5E00E17BFB /* MASLayoutConstraint.m */, - 282FD7C61E895B5E00E17BFB /* Masonry.h */, - 282FD7C71E895B5E00E17BFB /* MASUtilities.h */, - 282FD7C81E895B5E00E17BFB /* MASViewAttribute.h */, - 282FD7C91E895B5E00E17BFB /* MASViewAttribute.m */, - 282FD7CA1E895B5E00E17BFB /* MASViewConstraint.h */, - 282FD7CB1E895B5E00E17BFB /* MASViewConstraint.m */, - 282FD7CC1E895B5E00E17BFB /* NSArray+MASAdditions.h */, - 282FD7CD1E895B5E00E17BFB /* NSArray+MASAdditions.m */, - 282FD7CE1E895B5E00E17BFB /* NSArray+MASShorthandAdditions.h */, - 282FD7CF1E895B5E00E17BFB /* NSLayoutConstraint+MASDebugAdditions.h */, - 282FD7D01E895B5E00E17BFB /* NSLayoutConstraint+MASDebugAdditions.m */, - 282FD7D11E895B5E00E17BFB /* View+MASAdditions.h */, - 282FD7D21E895B5E00E17BFB /* View+MASAdditions.m */, - 282FD7D31E895B5E00E17BFB /* View+MASShorthandAdditions.h */, - ); - path = Masonry; - sourceTree = ""; - }; 282FD7DD1E895B6400E17BFB /* JCFrameLayout */ = { isa = PBXGroup; children = ( @@ -149,6 +102,25 @@ path = JCFrameLayout; sourceTree = ""; }; + 2836F33E1E8E3DBA00C9BE35 /* Examples */ = { + isa = PBXGroup; + children = ( + 2836F33F1E8E3DBA00C9BE35 /* SecondViewController.h */, + 2836F3401E8E3DBA00C9BE35 /* SecondViewController.m */, + 2836F3421E8E3DE900C9BE35 /* ExampleVC1.h */, + 2836F3431E8E3DE900C9BE35 /* ExampleVC1.m */, + 2836F3451E8E438200C9BE35 /* ExampleVC2.h */, + 2836F3461E8E438200C9BE35 /* ExampleVC2.m */, + 28F35D6C1E8E468C0028340C /* ExampleVC3.h */, + 28F35D6D1E8E468C0028340C /* ExampleVC3.m */, + 28F35D6F1E8E470D0028340C /* ExampleVC4.h */, + 28F35D701E8E470D0028340C /* ExampleVC4.m */, + 28F35D721E8E4F2F0028340C /* ExampleVC5.h */, + 28F35D731E8E4F2F0028340C /* ExampleVC5.m */, + ); + path = Examples; + sourceTree = ""; + }; 28D22AD41E8911C9002245F9 = { isa = PBXGroup; children = ( @@ -169,17 +141,15 @@ isa = PBXGroup; children = ( 282FD7DD1E895B6400E17BFB /* JCFrameLayout */, + 2836F33E1E8E3DBA00C9BE35 /* Examples */, 28D22AE31E8911C9002245F9 /* AppDelegate.h */, 28D22AE41E8911C9002245F9 /* AppDelegate.m */, 28D22AE61E8911C9002245F9 /* ViewController.h */, 28D22AE71E8911C9002245F9 /* ViewController.m */, - 282FD7EB1E895B6D00E17BFB /* SecondViewController.h */, - 282FD7EC1E895B6D00E17BFB /* SecondViewController.m */, - 28D22AE91E8911C9002245F9 /* Main.storyboard */, 28D22AEC1E8911C9002245F9 /* Assets.xcassets */, 28D22AEE1E8911C9002245F9 /* LaunchScreen.storyboard */, 28D22AF11E8911C9002245F9 /* Info.plist */, - 282FD7BC1E895B5E00E17BFB /* Masonry */, + 28F35D751E8E5AB80028340C /* QQ20170331-173628.png */, 28D22AE01E8911C9002245F9 /* Supporting Files */, ); path = JCFrameLayout; @@ -254,7 +224,7 @@ files = ( 28D22AF01E8911C9002245F9 /* LaunchScreen.storyboard in Resources */, 28D22AED1E8911C9002245F9 /* Assets.xcassets in Resources */, - 28D22AEB1E8911C9002245F9 /* Main.storyboard in Resources */, + 28F35D761E8E5AB80028340C /* QQ20170331-173628.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -265,39 +235,27 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 282FD7DB1E895B5E00E17BFB /* NSLayoutConstraint+MASDebugAdditions.m in Sources */, - 282FD7D91E895B5E00E17BFB /* MASViewConstraint.m in Sources */, - 282FD7D41E895B5E00E17BFB /* MASCompositeConstraint.m in Sources */, - 282FD7DA1E895B5E00E17BFB /* NSArray+MASAdditions.m in Sources */, + 2836F3441E8E3DE900C9BE35 /* ExampleVC1.m in Sources */, 28D22AE81E8911C9002245F9 /* ViewController.m in Sources */, + 2836F3471E8E438200C9BE35 /* ExampleVC2.m in Sources */, 28D22AE51E8911C9002245F9 /* AppDelegate.m in Sources */, + 28F35D711E8E470D0028340C /* ExampleVC4.m in Sources */, 2836F33C1E8CE49400C9BE35 /* JCFrameAttribute.m in Sources */, - 282FD7D71E895B5E00E17BFB /* MASLayoutConstraint.m in Sources */, 28D22AE21E8911C9002245F9 /* main.m in Sources */, 282FD7E91E895B6400E17BFB /* UIView+JCFrame.m in Sources */, + 28F35D741E8E4F2F0028340C /* ExampleVC5.m in Sources */, 282FD7E71E895B6400E17BFB /* JCFrameMake.m in Sources */, - 282FD7DC1E895B5E00E17BFB /* View+MASAdditions.m in Sources */, - 282FD7ED1E895B6D00E17BFB /* SecondViewController.m in Sources */, 282FD7EA1E895B6400E17BFB /* UIView+JCFrameLayout.m in Sources */, 282FD7E81E895B6400E17BFB /* JCFrame.m in Sources */, + 28F35D6E1E8E468C0028340C /* ExampleVC3.m in Sources */, 28E5EAD51E8B84A000701A93 /* JCFrameExecutor.m in Sources */, - 282FD7D81E895B5E00E17BFB /* MASViewAttribute.m in Sources */, - 282FD7D51E895B5E00E17BFB /* MASConstraint.m in Sources */, - 282FD7D61E895B5E00E17BFB /* MASConstraintMaker.m in Sources */, + 2836F3411E8E3DBA00C9BE35 /* SecondViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ - 28D22AE91E8911C9002245F9 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 28D22AEA1E8911C9002245F9 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; 28D22AEE1E8911C9002245F9 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( diff --git a/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate b/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate index b3f4896304d748aa9053afbed07bddd82c97ccf7..7a99810f4ead5e026316bd075a31c8f7480b3ef0 100644 GIT binary patch literal 66200 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 literal 61034 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 diff --git a/JCFrameLayout/AppDelegate.m b/JCFrameLayout/AppDelegate.m index 18e79f4..d139dc2 100644 --- a/JCFrameLayout/AppDelegate.m +++ b/JCFrameLayout/AppDelegate.m @@ -7,6 +7,7 @@ // #import "AppDelegate.h" +#import "ViewController.h" @interface AppDelegate () @@ -16,7 +17,15 @@ @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - // Override point for customization after application launch. + + self.window = [[UIWindow alloc]init]; + + UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:[[ViewController alloc]init]]; + + self.window.rootViewController = nav; + + [self.window makeKeyAndVisible]; + return YES; } diff --git a/JCFrameLayout/Base.lproj/Main.storyboard b/JCFrameLayout/Base.lproj/Main.storyboard deleted file mode 100644 index 4529698..0000000 --- a/JCFrameLayout/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/JCFrameLayout/Examples/ExampleVC1.h b/JCFrameLayout/Examples/ExampleVC1.h new file mode 100644 index 0000000..5c41496 --- /dev/null +++ b/JCFrameLayout/Examples/ExampleVC1.h @@ -0,0 +1,13 @@ +// +// ExampleVC1.h +// JCFrameLayout +// +// Created by abc on 17/3/31. +// Copyright © 2017年 jackcat. All rights reserved. +// + +#import + +@interface ExampleVC1 : UIViewController + +@end diff --git a/JCFrameLayout/Examples/ExampleVC1.m b/JCFrameLayout/Examples/ExampleVC1.m new file mode 100644 index 0000000..a9d2d3e --- /dev/null +++ b/JCFrameLayout/Examples/ExampleVC1.m @@ -0,0 +1,88 @@ +// +// ExampleVC1.m +// JCFrameLayout +// +// Created by abc on 17/3/31. +// Copyright © 2017年 jackcat. All rights reserved. +// + +#import "ExampleVC1.h" + +#import "JCFrameLayout.h" + + +#define radomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1] + +@interface ExampleVC1 () + +@end + +@implementation ExampleVC1 + +- (void)viewDidLoad { + [super viewDidLoad]; + +self.view.backgroundColor = [UIColor whiteColor]; + + UIView *leftView = [[UIView alloc]init]; + leftView.backgroundColor = radomColor; + [self.view addSubview:leftView]; + leftView.jc_debug_key = @"leftView"; + [leftView jc_makeLayout:^(JCFrameMake *make) { + make.width.jc_equalTo(50); + make.top.jc_equalTo(50 + 64); + make.bottom.jc_equalTo(-50); + make.left.jc_equalTo(0); + }]; + + + UIView *rightView = [[UIView alloc]init]; + rightView.backgroundColor = radomColor; + [self.view addSubview:rightView]; + rightView.jc_debug_key = @"rightView"; + [rightView jc_makeLayout:^(JCFrameMake *make) { + make.width.jc_equalTo(50); + make.top.jc_equalTo(50 + 64); + make.bottom.jc_equalTo(-50); + make.right.jc_equalTo(0); + }]; + + UIView *topView = [[UIView alloc]init]; + topView.backgroundColor = radomColor; + [self.view addSubview:topView]; + topView.jc_debug_key = @"topView"; + [topView jc_makeLayout:^(JCFrameMake *make) { + make.top.jc_equalTo(64); + make.height.jc_equalTo(50); + make.left.jc_equalTo(50); + make.right.jc_equalTo(-50); + }]; + + UIView *bottomView = [[UIView alloc]init]; + bottomView.backgroundColor = radomColor; + [self.view addSubview:bottomView]; + bottomView.jc_debug_key = @"bottomView"; + [bottomView jc_makeLayout:^(JCFrameMake *make) { + make.height.jc_equalTo(50); + make.left.jc_equalTo(50); + make.right.jc_equalTo(-50); + make.bottom.jc_equalTo(0); + }]; + + + UIView *centerView = [[UIView alloc]init]; + centerView.backgroundColor = radomColor; + [self.view addSubview:centerView]; + centerView.jc_debug_key = @"centerView"; + [centerView jc_makeLayout:^(JCFrameMake *make) { + make.left.equalTo(leftView.jc_right); + make.top.equalTo(topView.jc_bottom); + make.right.equalTo(rightView.jc_left); + make.bottom.equalTo(bottomView.jc_top); + }]; + NSLog(@"centerView.frame = %@",[NSValue valueWithCGRect:centerView.frame]); + [self.view sendSubviewToBack:centerView]; + +} + +@end diff --git a/JCFrameLayout/Examples/ExampleVC2.h b/JCFrameLayout/Examples/ExampleVC2.h new file mode 100644 index 0000000..bf2125b --- /dev/null +++ b/JCFrameLayout/Examples/ExampleVC2.h @@ -0,0 +1,13 @@ +// +// ExampleVC2.h +// JCFrameLayout +// +// Created by abc on 17/3/31. +// Copyright © 2017年 jackcat. All rights reserved. +// + +#import + +@interface ExampleVC2 : UIViewController + +@end diff --git a/JCFrameLayout/Examples/ExampleVC2.m b/JCFrameLayout/Examples/ExampleVC2.m new file mode 100644 index 0000000..1b6cdc2 --- /dev/null +++ b/JCFrameLayout/Examples/ExampleVC2.m @@ -0,0 +1,54 @@ +// +// ExampleVC2.m +// JCFrameLayout +// +// Created by abc on 17/3/31. +// Copyright © 2017年 jackcat. All rights reserved. +// + +#import "ExampleVC2.h" + +#import "JCFrameLayout.h" + +#define radomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1] + + +@interface ExampleVC2 () + +@end + +@implementation ExampleVC2 + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor whiteColor]; + + int column = 3; + + CGFloat padding = 20; + + CGFloat width = ([UIScreen mainScreen].bounds.size.width - padding * (column + 1))/column; + CGFloat height = width; + + for (int i = 0; i<9; i++) { + int row = i / column; + int col = i % column; + + CGFloat x = col * (width + padding) + padding; + CGFloat y = row * (height + padding) + padding + 64; + + UIView *view = [[UIView alloc]init]; + [self.view addSubview:view]; + view.backgroundColor = radomColor; + [view jc_makeLayout:^(JCFrameMake *make) { + make.width.jc_equalTo(width); + make.height.jc_equalTo(height); + make.left.jc_equalTo(x); + make.top.jc_equalTo(y); + }]; + } + +} + +@end diff --git a/JCFrameLayout/Examples/ExampleVC3.h b/JCFrameLayout/Examples/ExampleVC3.h new file mode 100644 index 0000000..12efe93 --- /dev/null +++ b/JCFrameLayout/Examples/ExampleVC3.h @@ -0,0 +1,13 @@ +// +// ExampleVC3.h +// JCFrameLayout +// +// Created by abc on 17/3/31. +// Copyright © 2017年 jackcat. All rights reserved. +// + +#import + +@interface ExampleVC3 : UIViewController + +@end diff --git a/JCFrameLayout/Examples/ExampleVC3.m b/JCFrameLayout/Examples/ExampleVC3.m new file mode 100644 index 0000000..9ac8a3e --- /dev/null +++ b/JCFrameLayout/Examples/ExampleVC3.m @@ -0,0 +1,72 @@ +// +// ExampleVC3.m +// JCFrameLayout +// +// Created by abc on 17/3/31. +// Copyright © 2017年 jackcat. All rights reserved. +// + +#import "ExampleVC3.h" + +#import "JCFrameLayout.h" + +#define radomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1] + +@interface ExampleVC3 () + +@end + +@implementation ExampleVC3 + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor whiteColor]; + + int column = 3; + int count = 9; + + CGFloat padding = 20; + + CGFloat width = ([UIScreen mainScreen].bounds.size.width - padding * (column + 1))/column; + CGFloat height = width; + + for (int idx = 0; idx + +@interface ExampleVC4 : UIViewController + +@end diff --git a/JCFrameLayout/Examples/ExampleVC4.m b/JCFrameLayout/Examples/ExampleVC4.m new file mode 100644 index 0000000..9828a1c --- /dev/null +++ b/JCFrameLayout/Examples/ExampleVC4.m @@ -0,0 +1,54 @@ +// +// ExampleVC4.m +// JCFrameLayout +// +// Created by abc on 17/3/31. +// Copyright © 2017年 jackcat. All rights reserved. +// + +#import "ExampleVC4.h" + +#import "JCFrameLayout.h" + +#define radomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1] + + +@interface ExampleVC4 () + +@end + +@implementation ExampleVC4 + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor whiteColor]; + + int column = 50; + + CGFloat padding = 2; + + CGFloat width = ([UIScreen mainScreen].bounds.size.width - padding * (column + 1))/column; + CGFloat height = width; + + for (int i = 0; i<5000; i++) { + int row = i / column; + int col = i % column; + + CGFloat x = col * (width + padding) + padding; + CGFloat y = row * (height + padding) + padding + 64; + + UIView *view = [[UIView alloc]init]; + [self.view addSubview:view]; + view.backgroundColor = radomColor; + [view jc_makeLayout:^(JCFrameMake *make) { + make.width.jc_equalTo(width); + make.height.jc_equalTo(height); + make.left.jc_equalTo(x); + make.top.jc_equalTo(y); + }]; + } +} + + +@end diff --git a/JCFrameLayout/Examples/ExampleVC5.h b/JCFrameLayout/Examples/ExampleVC5.h new file mode 100644 index 0000000..7f4ec59 --- /dev/null +++ b/JCFrameLayout/Examples/ExampleVC5.h @@ -0,0 +1,13 @@ +// +// ExampleVC5.h +// JCFrameLayout +// +// Created by abc on 17/3/31. +// Copyright © 2017年 jackcat. All rights reserved. +// + +#import + +@interface ExampleVC5 : UIViewController + +@end diff --git a/JCFrameLayout/Examples/ExampleVC5.m b/JCFrameLayout/Examples/ExampleVC5.m new file mode 100644 index 0000000..240074b --- /dev/null +++ b/JCFrameLayout/Examples/ExampleVC5.m @@ -0,0 +1,76 @@ +// +// ExampleVC5.m +// JCFrameLayout +// +// Created by abc on 17/3/31. +// Copyright © 2017年 jackcat. All rights reserved. +// + +#import "ExampleVC5.h" + +#import "JCFrameLayout.h" + +#define radomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1] + + +@interface ExampleVC5 () + +@end + +@implementation ExampleVC5 + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor whiteColor]; + + int column = 50; + int count = 5000; + + CGFloat padding = 2; + + CGFloat width = ([UIScreen mainScreen].bounds.size.width - padding * (column + 1))/column; + CGFloat height = width; + + for (int idx = 0; idx UILaunchStoryboardName LaunchScreen - UIMainStoryboardFile - Main UIRequiredDeviceCapabilities armv7 diff --git a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m index 1e0d63d..6e1184b 100644 --- a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m +++ b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m @@ -56,11 +56,11 @@ JCFrame *right = [self filterFrameIn:frames frameType:(JCFrameTypeRight)];\ if (right.hasRelateAttr) {\ if (right.frameAttr.relateFrameType == JCFrameTypeLeft) {\ - rightX = right.frameAttr.relateView.jc_y_value;\ + rightX = right.frameAttr.relateView.jc_x_value;\ }else if (right.frameAttr.relateFrameType == JCFrameTypeCenterX) {\ - rightX = right.frameAttr.relateView.jc_centerY_value;\ + rightX = right.frameAttr.relateView.jc_centerX_value;\ }else if (right.frameAttr.relateFrameType == JCFrameTypeRight) {\ - rightX = right.frameAttr.relateView.jc_bottom_value;\ + rightX = right.frameAttr.relateView.jc_right_value;\ }\ rightX = rightX * right.multiplier + ((NSNumber*)right.offset).doubleValue;\ }else{\ @@ -94,7 +94,7 @@ JCFrame *bottom = [self filterFrameIn:frames frameType:(JCFrameTypeBottom)];\ if (bottom.hasRelateAttr) {\ if (bottom.frameAttr.relateFrameType == JCFrameTypeTop) {\ - bottomY = bottom.frameAttr.relateView.jc_x_value;\ + bottomY = bottom.frameAttr.relateView.jc_y_value;\ }else if (bottom.frameAttr.relateFrameType == JCFrameTypeCenterY) {\ bottomY = bottom.frameAttr.relateView.jc_centerY_value;\ }else if (bottom.frameAttr.relateFrameType == JCFrameTypeBottom) {\ @@ -344,6 +344,8 @@ + (BOOL)layoutByCenterAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{ NSArray*frames = view.jc_frames; + JCLog(@"\n---%@--layoutByCenterAndSize\n",view.jc_debug_key); + //1. 先size SET_SIZE @@ -366,6 +368,8 @@ + (BOOL)layoutByCenterAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)fr NSArray*frames = view.jc_frames; + JCLog(@"\n---%@--layoutByCenterAndWidthAndHeight\n",view.jc_debug_key); + //1. 设置宽度 SET_WIDTH @@ -392,6 +396,8 @@ + (BOOL)layoutByCenterXAndCenterYAndSize:(UIView*)view frameTypes:(JCFrameType)f NSArray*frames = view.jc_frames; + JCLog(@"\n---%@--layoutByCenterXAndCenterYAndSize\n",view.jc_debug_key); + //1. 设置size SET_SIZE @@ -415,6 +421,8 @@ + (BOOL)layoutByCenterXAndTopAndSize:(UIView*)view frameTypes:(JCFrameType)frame NSArray*frames = view.jc_frames; + JCLog(@"\n---%@--layoutByCenterXAndTopAndSize\n",view.jc_debug_key); + //1. size SET_SIZE @@ -437,6 +445,8 @@ + (BOOL)layoutByCenterXAndBottomAndSize:(UIView*)view frameTypes:(JCFrameType)fr &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeSize)) { + JCLog(@"\n---%@--layoutByCenterXAndBottomAndSize\n",view.jc_debug_key); + //1. size SET_SIZE @@ -458,6 +468,8 @@ + (BOOL)layoutByCenterYAndLeftAndSize:(UIView*)view frameTypes:(JCFrameType)fram &&(frameTypes & JCFrameTypeLeft) &&(frameTypes & JCFrameTypeSize)) { + JCLog(@"\n---%@--layoutByCenterYAndLeftAndSize\n",view.jc_debug_key); + NSArray*frames = view.jc_frames; //1. size @@ -481,6 +493,8 @@ + (BOOL)layoutByCenterYAndRightAndSize:(UIView*)view frameTypes:(JCFrameType)fra &&(frameTypes & JCFrameTypeRight) &&(frameTypes & JCFrameTypeSize)) { + JCLog(@"\n---%@--layoutByCenterYAndRightAndSize\n",view.jc_debug_key); + //1. size SET_SIZE @@ -503,6 +517,8 @@ + (BOOL)layoutByLeftAndTopAndSize:(UIView*)view frameTypes:(JCFrameType)frameTyp &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeSize)) { + JCLog(@"\n---%@--layoutByLeftAndTopAndSize\n",view.jc_debug_key); + //1. size SET_SIZE @@ -524,6 +540,8 @@ + (BOOL)layoutByLeftAndBottomAndSize:(UIView*)view frameTypes:(JCFrameType)frame &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeSize)) { + JCLog(@"\n---%@--layoutByLeftAndBottomAndSize\n",view.jc_debug_key); + //1. size SET_SIZE @@ -547,6 +565,8 @@ + (BOOL)layoutByRightAndTopAndSize:(UIView*)view frameTypes:(JCFrameType)frameTy &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeSize)) { + JCLog(@"\n---%@--layoutByRightAndTopAndSize\n",view.jc_debug_key); + //1. size SET_SIZE @@ -568,6 +588,8 @@ + (BOOL)layoutByRightAndBottomAndSize:(UIView*)view frameTypes:(JCFrameType)fram &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeSize)) { + JCLog(@"\n---%@--layoutByRightAndBottomAndSize\n",view.jc_debug_key); + //1. size SET_SIZE @@ -593,6 +615,8 @@ + (BOOL)layoutByCenterXAndCenterYAndWidthAndHeight:(UIView*)view frameTypes:(JCF &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { + JCLog(@"\n---%@--layoutByCenterXAndCenterYAndWidthAndHeight\n",view.jc_debug_key); + //1. width SET_WIDTH @@ -621,6 +645,8 @@ + (BOOL)layoutByCenterXAndTopAndWidthAndHeight:(UIView*)view frameTypes:(JCFrame &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { + JCLog(@"\n---%@--layoutByCenterXAndTopAndWidthAndHeight\n",view.jc_debug_key); + //1. width SET_WIDTH @@ -649,6 +675,8 @@ + (BOOL)layoutByCenterXAndBottomAndWidthAndHeight:(UIView*)view frameTypes:(JCFr &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { + JCLog(@"\n---%@--layoutByCenterXAndBottomAndWidthAndHeight\n",view.jc_debug_key); + //1. width SET_WIDTH @@ -677,6 +705,8 @@ + (BOOL)layoutByCenterYAndLeftAndWidthAndHeight:(UIView*)view frameTypes:(JCFram &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { + JCLog(@"\n---%@--layoutByCenterYAndLeftAndWidthAndHeight\n",view.jc_debug_key); + //1. width SET_WIDTH @@ -705,6 +735,8 @@ + (BOOL)layoutByCenterYAndRightAndWidthAndHeight:(UIView*)view frameTypes:(JCFra &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { + JCLog(@"\n---%@--layoutByCenterYAndRightAndWidthAndHeight\n",view.jc_debug_key); + //1. width SET_WIDTH @@ -734,6 +766,8 @@ + (BOOL)layoutByLeftAndTopAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameTyp &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { + JCLog(@"\n---%@--layoutByLeftAndTopAndWidthAndHeight\n",view.jc_debug_key); + //1. width SET_WIDTH @@ -761,6 +795,8 @@ + (BOOL)layoutByLeftAndBottomAndWidthAndHeight:(UIView*)view frameTypes:(JCFrame &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { + JCLog(@"\n---%@--layoutByLeftAndBottomAndWidthAndHeight\n",view.jc_debug_key); + //1. width SET_WIDTH @@ -790,6 +826,8 @@ + (BOOL)layoutByRightAndTopAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameTy &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { + JCLog(@"\n---%@--layoutByRightAndTopAndWidthAndHeight\n",view.jc_debug_key); + //1. width SET_WIDTH @@ -817,6 +855,8 @@ + (BOOL)layoutByRightAndBottomAndWidthAndHeight:(UIView*)view frameTypes:(JCFram &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { + JCLog(@"\n---%@--layoutByRightAndBottomAndWidthAndHeight\n",view.jc_debug_key); + //1. width SET_WIDTH @@ -848,6 +888,8 @@ + (BOOL)layoutByLeftAndRightAndTopAndHeight:(UIView*)view frameTypes:(JCFrameTyp &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeHeight)) { + JCLog(@"\n---%@--layoutByLeftAndRightAndTopAndHeight\n",view.jc_debug_key); + //1. height SET_HEIGHT @@ -874,6 +916,8 @@ + (BOOL)layoutByLeftAndRightAndBottomAndHeight:(UIView*)view frameTypes:(JCFrame &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeHeight)) { + JCLog(@"\n---%@--layoutByLeftAndRightAndBottomAndHeight\n",view.jc_debug_key); + //1. height SET_HEIGHT @@ -900,6 +944,8 @@ + (BOOL)layoutByLeftAndTopAndBottomAndWidth:(UIView*)view frameTypes:(JCFrameTyp &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeWidth)) { + JCLog(@"\n---%@--layoutByLeftAndTopAndBottomAndWidth\n",view.jc_debug_key); + //1. width SET_WIDTH @@ -925,6 +971,8 @@ + (BOOL)layoutByRightAndTopAndBottomAndWidth:(UIView*)view frameTypes:(JCFrameTy &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeWidth)) { + JCLog(@"\n---%@--layoutByRightAndTopAndBottomAndWidth\n",view.jc_debug_key); + //1. width SET_WIDTH @@ -952,6 +1000,8 @@ + (BOOL)layoutByLeftAndRightAndTopAndBottom:(UIView*)view frameTypes:(JCFrameTyp &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeBottom)) { + JCLog(@"\n---%@--layoutByLeftAndRightAndTopAndBottom\n",view.jc_debug_key); + //1. left and right SET_LEFT_RIGHT @@ -961,7 +1011,6 @@ + (BOOL)layoutByLeftAndRightAndTopAndBottom:(UIView*)view frameTypes:(JCFrameTyp return YES; } - return NO; } diff --git a/JCFrameLayout/JCFrameLayout/JCFrameExecutorMethods.h b/JCFrameLayout/JCFrameLayout/JCFrameExecutorMethods.h index 170d0d1..862396f 100644 --- a/JCFrameLayout/JCFrameLayout/JCFrameExecutorMethods.h +++ b/JCFrameLayout/JCFrameLayout/JCFrameExecutorMethods.h @@ -203,7 +203,7 @@ void setTopByTopFrame(UIView*view,JCFrame*frame){ //设置 view.jc_y_value = newTop; }else{ - view.jc_y_value = ((NSNumber*)frame).doubleValue; + view.jc_y_value = ((NSNumber*)frame.value).doubleValue; } } diff --git a/JCFrameLayout/Masonry/MASCompositeConstraint.h b/JCFrameLayout/Masonry/MASCompositeConstraint.h deleted file mode 100755 index 934c6f1..0000000 --- a/JCFrameLayout/Masonry/MASCompositeConstraint.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MASCompositeConstraint.h -// Masonry -// -// Created by Jonas Budelmann on 21/07/13. -// Copyright (c) 2013 cloudling. All rights reserved. -// - -#import "MASConstraint.h" -#import "MASUtilities.h" - -/** - * A group of MASConstraint objects - */ -@interface MASCompositeConstraint : MASConstraint - -/** - * Creates a composite with a predefined array of children - * - * @param children child MASConstraints - * - * @return a composite constraint - */ -- (id)initWithChildren:(NSArray *)children; - -@end diff --git a/JCFrameLayout/Masonry/MASCompositeConstraint.m b/JCFrameLayout/Masonry/MASCompositeConstraint.m deleted file mode 100755 index ac673ac..0000000 --- a/JCFrameLayout/Masonry/MASCompositeConstraint.m +++ /dev/null @@ -1,177 +0,0 @@ -// -// MASCompositeConstraint.m -// Masonry -// -// Created by Jonas Budelmann on 21/07/13. -// Copyright (c) 2013 cloudling. All rights reserved. -// - -#import "MASCompositeConstraint.h" -#import "MASConstraint+Private.h" - -@interface MASCompositeConstraint () - -@property (nonatomic, strong) id mas_key; -@property (nonatomic, strong) NSMutableArray *childConstraints; - -@end - -@implementation MASCompositeConstraint - -- (id)initWithChildren:(NSArray *)children { - self = [super init]; - if (!self) return nil; - - _childConstraints = [children mutableCopy]; - for (MASConstraint *constraint in _childConstraints) { - constraint.delegate = self; - } - - return self; -} - -#pragma mark - MASConstraintDelegate - -- (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint { - NSUInteger index = [self.childConstraints indexOfObject:constraint]; -// NSAssert(index != NSNotFound, @"Could not find constraint %@", constraint); - [self.childConstraints replaceObjectAtIndex:index withObject:replacementConstraint]; -} - -- (MASConstraint *)constraint:(MASConstraint __unused *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute { - id strongDelegate = self.delegate; - MASConstraint *newConstraint = [strongDelegate constraint:self addConstraintWithLayoutAttribute:layoutAttribute]; - newConstraint.delegate = self; - [self.childConstraints addObject:newConstraint]; - return newConstraint; -} - -#pragma mark - NSLayoutConstraint multiplier proxies - -- (MASConstraint * (^)(CGFloat))multipliedBy { - return ^id(CGFloat multiplier) { - for (MASConstraint *constraint in self.childConstraints) { - constraint.multipliedBy(multiplier); - } - return self; - }; -} - -- (MASConstraint * (^)(CGFloat))dividedBy { - return ^id(CGFloat divider) { - for (MASConstraint *constraint in self.childConstraints) { - constraint.dividedBy(divider); - } - return self; - }; -} - -#pragma mark - MASLayoutPriority proxy - -- (MASConstraint * (^)(MASLayoutPriority))priority { - return ^id(MASLayoutPriority priority) { - for (MASConstraint *constraint in self.childConstraints) { - constraint.priority(priority); - } - return self; - }; -} - -#pragma mark - NSLayoutRelation proxy - -- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation { - return ^id(id attr, NSLayoutRelation relation) { - for (MASConstraint *constraint in self.childConstraints.copy) { - constraint.equalToWithRelation(attr, relation); - } - return self; - }; -} - -#pragma mark - attribute chaining - -- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute { - [self constraint:self addConstraintWithLayoutAttribute:layoutAttribute]; - return self; -} - -#pragma mark - Animator proxy - -#if TARGET_OS_MAC && !TARGET_OS_IPHONE - -- (MASConstraint *)animator { - for (MASConstraint *constraint in self.childConstraints) { - [constraint animator]; - } - return self; -} - -#endif - -#pragma mark - debug helpers - -- (MASConstraint * (^)(id))key { - return ^id(id key) { - self.mas_key = key; - int i = 0; - for (MASConstraint *constraint in self.childConstraints) { - constraint.key([NSString stringWithFormat:@"%@[%d]", key, i++]); - } - return self; - }; -} - -#pragma mark - NSLayoutConstraint constant setters - -- (void)setInsets:(MASEdgeInsets)insets { - for (MASConstraint *constraint in self.childConstraints) { - constraint.insets = insets; - } -} - -- (void)setOffset:(CGFloat)offset { - for (MASConstraint *constraint in self.childConstraints) { - constraint.offset = offset; - } -} - -- (void)setSizeOffset:(CGSize)sizeOffset { - for (MASConstraint *constraint in self.childConstraints) { - constraint.sizeOffset = sizeOffset; - } -} - -- (void)setCenterOffset:(CGPoint)centerOffset { - for (MASConstraint *constraint in self.childConstraints) { - constraint.centerOffset = centerOffset; - } -} - -#pragma mark - MASConstraint - -- (void)activate { - for (MASConstraint *constraint in self.childConstraints) { - [constraint activate]; - } -} - -- (void)deactivate { - for (MASConstraint *constraint in self.childConstraints) { - [constraint deactivate]; - } -} - -- (void)install { - for (MASConstraint *constraint in self.childConstraints) { - constraint.updateExisting = self.updateExisting; - [constraint install]; - } -} - -- (void)uninstall { - for (MASConstraint *constraint in self.childConstraints) { - [constraint uninstall]; - } -} - -@end diff --git a/JCFrameLayout/Masonry/MASConstraint+Private.h b/JCFrameLayout/Masonry/MASConstraint+Private.h deleted file mode 100755 index ee0fd96..0000000 --- a/JCFrameLayout/Masonry/MASConstraint+Private.h +++ /dev/null @@ -1,66 +0,0 @@ -// -// MASConstraint+Private.h -// Masonry -// -// Created by Nick Tymchenko on 29/04/14. -// Copyright (c) 2014 cloudling. All rights reserved. -// - -#import "MASConstraint.h" - -@protocol MASConstraintDelegate; - - -@interface MASConstraint () - -/** - * Whether or not to check for an existing constraint instead of adding constraint - */ -@property (nonatomic, assign) BOOL updateExisting; - -/** - * Usually MASConstraintMaker but could be a parent MASConstraint - */ -@property (nonatomic, weak) id delegate; - -/** - * Based on a provided value type, is equal to calling: - * NSNumber - setOffset: - * NSValue with CGPoint - setPointOffset: - * NSValue with CGSize - setSizeOffset: - * NSValue with MASEdgeInsets - setInsets: - */ -- (void)setLayoutConstantWithValue:(NSValue *)value; - -@end - - -@interface MASConstraint (Abstract) - -/** - * Sets the constraint relation to given NSLayoutRelation - * returns a block which accepts one of the following: - * MASViewAttribute, UIView, NSValue, NSArray - * see readme for more details. - */ -- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation; - -/** - * Override to set a custom chaining behaviour - */ -- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute; - -@end - - -@protocol MASConstraintDelegate - -/** - * Notifies the delegate when the constraint needs to be replaced with another constraint. For example - * A MASViewConstraint may turn into a MASCompositeConstraint when an array is passed to one of the equality blocks - */ -- (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint; - -- (MASConstraint *)constraint:(MASConstraint *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute; - -@end diff --git a/JCFrameLayout/Masonry/MASConstraint.h b/JCFrameLayout/Masonry/MASConstraint.h deleted file mode 100755 index 8dce1fd..0000000 --- a/JCFrameLayout/Masonry/MASConstraint.h +++ /dev/null @@ -1,118 +0,0 @@ -// -// MASConstraint.h -// Masonry -// -// Created by Jonas Budelmann on 22/07/13. -// Copyright (c) 2013 cloudling. All rights reserved. -// - -#import "MASUtilities.h" - -/** - * Enables Constraints to be created with chainable syntax - * Constraint can represent single NSLayoutConstraint (MASViewConstraint) - * or a group of NSLayoutConstraints (MASComposisteConstraint) - */ -@interface MASConstraint : NSObject - -#pragma mark - NSLayoutConstraint constant proxies -- (MASConstraint * (^)(MASEdgeInsets insets))insets; -- (MASConstraint * (^)(CGSize offset))sizeOffset; -- (MASConstraint * (^)(CGPoint offset))centerOffset; -- (MASConstraint * (^)(CGFloat offset))offset; -- (MASConstraint * (^)(NSValue *value))valueOffset; -- (MASConstraint * (^)(CGFloat multiplier))multipliedBy; -- (MASConstraint * (^)(CGFloat divider))dividedBy; - -#pragma mark - MASLayoutPriority proxies -- (MASConstraint * (^)(MASLayoutPriority priority))priority; -- (MASConstraint * (^)())priorityLow; -- (MASConstraint * (^)())priorityMedium; -- (MASConstraint * (^)())priorityHigh; - -#pragma mark - NSLayoutRelation proxies -- (MASConstraint * (^)(id attr))equalTo; -- (MASConstraint * (^)(id attr))greaterThanOrEqualTo; -- (MASConstraint * (^)(id attr))lessThanOrEqualTo; - -#pragma mark - Semantic properties -- (MASConstraint *)with; -- (MASConstraint *)and; - -#pragma mark - Chaining -- (MASConstraint *)left; -- (MASConstraint *)top; -- (MASConstraint *)right; -- (MASConstraint *)bottom; -- (MASConstraint *)leading; -- (MASConstraint *)trailing; -- (MASConstraint *)width; -- (MASConstraint *)height; -- (MASConstraint *)centerX; -- (MASConstraint *)centerY; -- (MASConstraint *)baseline; -- (MASConstraint *)leftMargin; -- (MASConstraint *)rightMargin; -- (MASConstraint *)topMargin; -- (MASConstraint *)bottomMargin; -- (MASConstraint *)leadingMargin; -- (MASConstraint *)trailingMargin; -- (MASConstraint *)centerXWithinMargins; -- (MASConstraint *)centerYWithinMargins; - - -#pragma mark - Abstract -- (MASConstraint * (^)(id key))key; -- (void)setInsets:(MASEdgeInsets)insets; -- (void)setSizeOffset:(CGSize)sizeOffset; -- (void)setCenterOffset:(CGPoint)centerOffset; -- (void)setOffset:(CGFloat)offset; - -- (void)activate; -- (void)deactivate; -- (void)install; -- (void)uninstall; - -@end - - -/** - * Convenience auto-boxing macros for MASConstraint methods. - * - * Defining MAS_SHORTHAND_GLOBALS will turn on auto-boxing for default syntax. - * A potential drawback of this is that the unprefixed macros will appear in global scope. - */ -#define mas_equalTo(...) equalTo(MASBoxValue((__VA_ARGS__))) -#define mas_greaterThanOrEqualTo(...) greaterThanOrEqualTo(MASBoxValue((__VA_ARGS__))) -#define mas_lessThanOrEqualTo(...) lessThanOrEqualTo(MASBoxValue((__VA_ARGS__))) - -#define mas_offset(...) valueOffset(MASBoxValue((__VA_ARGS__))) - - -#ifdef MAS_SHORTHAND_GLOBALS - -#define equalTo(...) mas_equalTo(__VA_ARGS__) -#define greaterThanOrEqualTo(...) mas_greaterThanOrEqualTo(__VA_ARGS__) -#define lessThanOrEqualTo(...) mas_lessThanOrEqualTo(__VA_ARGS__) - -#define offset(...) mas_offset(__VA_ARGS__) - -#endif - - -@interface MASConstraint (AutoboxingSupport) - -/** - * Aliases to corresponding relation methods (for shorthand macros) - * Also needed to aid autocompletion - */ -- (MASConstraint * (^)(id attr))mas_equalTo; -- (MASConstraint * (^)(id attr))mas_greaterThanOrEqualTo; -- (MASConstraint * (^)(id attr))mas_lessThanOrEqualTo; - -/** - * A dummy method to aid autocompletion - */ -- (MASConstraint * (^)(id offset))mas_offset; - -@end diff --git a/JCFrameLayout/Masonry/MASConstraint.m b/JCFrameLayout/Masonry/MASConstraint.m deleted file mode 100755 index 5dcc97b..0000000 --- a/JCFrameLayout/Masonry/MASConstraint.m +++ /dev/null @@ -1,281 +0,0 @@ -// -// MASConstraint.m -// Masonry -// -// Created by Nick Tymchenko on 1/20/14. -// - -#import "MASConstraint.h" -#import "MASConstraint+Private.h" - -#define MASMethodNotImplemented() \ - @throw [NSException exceptionWithName:NSInternalInconsistencyException \ - reason:[NSString stringWithFormat:@"You must override %@ in a subclass.", NSStringFromSelector(_cmd)] \ - userInfo:nil] - -@implementation MASConstraint - -#pragma mark - Init - -- (id)init { -// NSAssert(![self isMemberOfClass:[MASConstraint class]], @"MASConstraint is an abstract class, you should not instantiate it directly."); - return [super init]; -} - -#pragma mark - NSLayoutRelation proxies - -- (MASConstraint * (^)(id))equalTo { - return ^id(id attribute) { - return self.equalToWithRelation(attribute, NSLayoutRelationEqual); - }; -} - -- (MASConstraint * (^)(id))mas_equalTo { - return ^id(id attribute) { - return self.equalToWithRelation(attribute, NSLayoutRelationEqual); - }; -} - -- (MASConstraint * (^)(id))greaterThanOrEqualTo { - return ^id(id attribute) { - return self.equalToWithRelation(attribute, NSLayoutRelationGreaterThanOrEqual); - }; -} - -- (MASConstraint * (^)(id))mas_greaterThanOrEqualTo { - return ^id(id attribute) { - return self.equalToWithRelation(attribute, NSLayoutRelationGreaterThanOrEqual); - }; -} - -- (MASConstraint * (^)(id))lessThanOrEqualTo { - return ^id(id attribute) { - return self.equalToWithRelation(attribute, NSLayoutRelationLessThanOrEqual); - }; -} - -- (MASConstraint * (^)(id))mas_lessThanOrEqualTo { - return ^id(id attribute) { - return self.equalToWithRelation(attribute, NSLayoutRelationLessThanOrEqual); - }; -} - -#pragma mark - MASLayoutPriority proxies - -- (MASConstraint * (^)())priorityLow { - return ^id{ - self.priority(MASLayoutPriorityDefaultLow); - return self; - }; -} - -- (MASConstraint * (^)())priorityMedium { - return ^id{ - self.priority(MASLayoutPriorityDefaultMedium); - return self; - }; -} - -- (MASConstraint * (^)())priorityHigh { - return ^id{ - self.priority(MASLayoutPriorityDefaultHigh); - return self; - }; -} - -#pragma mark - NSLayoutConstraint constant proxies - -- (MASConstraint * (^)(MASEdgeInsets))insets { - return ^id(MASEdgeInsets insets){ - self.insets = insets; - return self; - }; -} - -- (MASConstraint * (^)(CGSize))sizeOffset { - return ^id(CGSize offset) { - self.sizeOffset = offset; - return self; - }; -} - -- (MASConstraint * (^)(CGPoint))centerOffset { - return ^id(CGPoint offset) { - self.centerOffset = offset; - return self; - }; -} - -- (MASConstraint * (^)(CGFloat))offset { - return ^id(CGFloat offset){ - self.offset = offset; - return self; - }; -} - -- (MASConstraint * (^)(NSValue *value))valueOffset { - return ^id(NSValue *offset) { - NSAssert([offset isKindOfClass:NSValue.class], @"expected an NSValue offset, got: %@", offset); - [self setLayoutConstantWithValue:offset]; - return self; - }; -} - -- (MASConstraint * (^)(id offset))mas_offset { - // Will never be called due to macro - return nil; -} - -#pragma mark - NSLayoutConstraint constant setter - -- (void)setLayoutConstantWithValue:(NSValue *)value { - if ([value isKindOfClass:NSNumber.class]) { - self.offset = [(NSNumber *)value doubleValue]; - } else if (strcmp(value.objCType, @encode(CGPoint)) == 0) { - CGPoint point; - [value getValue:&point]; - self.centerOffset = point; - } else if (strcmp(value.objCType, @encode(CGSize)) == 0) { - CGSize size; - [value getValue:&size]; - self.sizeOffset = size; - } else if (strcmp(value.objCType, @encode(MASEdgeInsets)) == 0) { - MASEdgeInsets insets; - [value getValue:&insets]; - self.insets = insets; - } else { - NSAssert(NO, @"attempting to set layout constant with unsupported value: %@", value); - } -} - -#pragma mark - Semantic properties - -- (MASConstraint *)with { - return self; -} - -- (MASConstraint *)and { - return self; -} - -#pragma mark - Chaining - -- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute __unused)layoutAttribute { - MASMethodNotImplemented(); -} - -- (MASConstraint *)left { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeft]; -} - -- (MASConstraint *)top { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTop]; -} - -- (MASConstraint *)right { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRight]; -} - -- (MASConstraint *)bottom { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottom]; -} - -- (MASConstraint *)leading { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeading]; -} - -- (MASConstraint *)trailing { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailing]; -} - -- (MASConstraint *)width { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeWidth]; -} - -- (MASConstraint *)height { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeHeight]; -} - -- (MASConstraint *)centerX { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterX]; -} - -- (MASConstraint *)centerY { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterY]; -} - -- (MASConstraint *)baseline { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBaseline]; -} - -#if TARGET_OS_IPHONE - -- (MASConstraint *)leftMargin { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin]; -} - -- (MASConstraint *)rightMargin { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRightMargin]; -} - -- (MASConstraint *)topMargin { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTopMargin]; -} - -- (MASConstraint *)bottomMargin { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottomMargin]; -} - -- (MASConstraint *)leadingMargin { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeadingMargin]; -} - -- (MASConstraint *)trailingMargin { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailingMargin]; -} - -- (MASConstraint *)centerXWithinMargins { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterXWithinMargins]; -} - -- (MASConstraint *)centerYWithinMargins { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterYWithinMargins]; -} - -#endif - -#pragma mark - Abstract - -- (MASConstraint * (^)(CGFloat multiplier))multipliedBy { MASMethodNotImplemented(); } - -- (MASConstraint * (^)(CGFloat divider))dividedBy { MASMethodNotImplemented(); } - -- (MASConstraint * (^)(MASLayoutPriority priority))priority { MASMethodNotImplemented(); } - -- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation { MASMethodNotImplemented(); } - -- (MASConstraint * (^)(id key))key { MASMethodNotImplemented(); } - -- (void)setInsets:(MASEdgeInsets __unused)insets { MASMethodNotImplemented(); } - -- (void)setSizeOffset:(CGSize __unused)sizeOffset { MASMethodNotImplemented(); } - -- (void)setCenterOffset:(CGPoint __unused)centerOffset { MASMethodNotImplemented(); } - -- (void)setOffset:(CGFloat __unused)offset { MASMethodNotImplemented(); } - -#if TARGET_OS_MAC && !TARGET_OS_IPHONE - -- (MASConstraint *)animator { MASMethodNotImplemented(); } - -#endif - -- (void)activate { MASMethodNotImplemented(); } - -- (void)deactivate { MASMethodNotImplemented(); } - -- (void)install { MASMethodNotImplemented(); } - -- (void)uninstall { MASMethodNotImplemented(); } - -@end diff --git a/JCFrameLayout/Masonry/MASConstraintMaker.h b/JCFrameLayout/Masonry/MASConstraintMaker.h deleted file mode 100755 index 7e31858..0000000 --- a/JCFrameLayout/Masonry/MASConstraintMaker.h +++ /dev/null @@ -1,132 +0,0 @@ -// -// MASConstraintBuilder.h -// Masonry -// -// Created by Jonas Budelmann on 20/07/13. -// Copyright (c) 2013 cloudling. All rights reserved. -// - -#import "MASConstraint.h" -#import "MASUtilities.h" - -typedef NS_OPTIONS(NSInteger, MASAttribute) { - MASAttributeLeft = 1 << NSLayoutAttributeLeft, - MASAttributeRight = 1 << NSLayoutAttributeRight, - MASAttributeTop = 1 << NSLayoutAttributeTop, - MASAttributeBottom = 1 << NSLayoutAttributeBottom, - MASAttributeLeading = 1 << NSLayoutAttributeLeading, - MASAttributeTrailing = 1 << NSLayoutAttributeTrailing, - MASAttributeWidth = 1 << NSLayoutAttributeWidth, - MASAttributeHeight = 1 << NSLayoutAttributeHeight, - MASAttributeCenterX = 1 << NSLayoutAttributeCenterX, - MASAttributeCenterY = 1 << NSLayoutAttributeCenterY, - MASAttributeBaseline = 1 << NSLayoutAttributeBaseline, - -#if TARGET_OS_IPHONE - - MASAttributeLeftMargin = 1 << NSLayoutAttributeLeftMargin, - MASAttributeRightMargin = 1 << NSLayoutAttributeRightMargin, - MASAttributeTopMargin = 1 << NSLayoutAttributeTopMargin, - MASAttributeBottomMargin = 1 << NSLayoutAttributeBottomMargin, - MASAttributeLeadingMargin = 1 << NSLayoutAttributeLeadingMargin, - MASAttributeTrailingMargin = 1 << NSLayoutAttributeTrailingMargin, - MASAttributeCenterXWithinMargins = 1 << NSLayoutAttributeCenterXWithinMargins, - MASAttributeCenterYWithinMargins = 1 << NSLayoutAttributeCenterYWithinMargins, - -#endif - -}; - -/** - * Provides factory methods for creating MASConstraints. - * Constraints are collected until they are ready to be installed - * - */ -@interface MASConstraintMaker : NSObject - -/** - * The following properties return a new MASViewConstraint - * with the first item set to the makers associated view and the appropriate MASViewAttribute - */ -@property (nonatomic, strong, readonly) MASConstraint *left; -@property (nonatomic, strong, readonly) MASConstraint *top; -@property (nonatomic, strong, readonly) MASConstraint *right; -@property (nonatomic, strong, readonly) MASConstraint *bottom; -@property (nonatomic, strong, readonly) MASConstraint *leading; -@property (nonatomic, strong, readonly) MASConstraint *trailing; -@property (nonatomic, strong, readonly) MASConstraint *width; -@property (nonatomic, strong, readonly) MASConstraint *height; -@property (nonatomic, strong, readonly) MASConstraint *centerX; -@property (nonatomic, strong, readonly) MASConstraint *centerY; -@property (nonatomic, strong, readonly) MASConstraint *baseline; - -#if TARGET_OS_IPHONE - -@property (nonatomic, strong, readonly) MASConstraint *leftMargin; -@property (nonatomic, strong, readonly) MASConstraint *rightMargin; -@property (nonatomic, strong, readonly) MASConstraint *topMargin; -@property (nonatomic, strong, readonly) MASConstraint *bottomMargin; -@property (nonatomic, strong, readonly) MASConstraint *leadingMargin; -@property (nonatomic, strong, readonly) MASConstraint *trailingMargin; -@property (nonatomic, strong, readonly) MASConstraint *centerXWithinMargins; -@property (nonatomic, strong, readonly) MASConstraint *centerYWithinMargins; - -#endif - -/** - * Returns a block which creates a new MASCompositeConstraint with the first item set - * to the makers associated view and children corresponding to the set bits in the - * MASAttribute parameter. Combine multiple attributes via binary-or. - */ -@property (nonatomic, strong, readonly) MASConstraint *(^attributes)(MASAttribute attrs); - -/** - * Creates a MASCompositeConstraint with type MASCompositeConstraintTypeEdges - * which generates the appropriate MASViewConstraint children (top, left, bottom, right) - * with the first item set to the makers associated view - */ -@property (nonatomic, strong, readonly) MASConstraint *edges; - -/** - * Creates a MASCompositeConstraint with type MASCompositeConstraintTypeSize - * which generates the appropriate MASViewConstraint children (width, height) - * with the first item set to the makers associated view - */ -@property (nonatomic, strong, readonly) MASConstraint *size; - -/** - * Creates a MASCompositeConstraint with type MASCompositeConstraintTypeCenter - * which generates the appropriate MASViewConstraint children (centerX, centerY) - * with the first item set to the makers associated view - */ -@property (nonatomic, strong, readonly) MASConstraint *center; - -/** - * Whether or not to check for an existing constraint instead of adding constraint - */ -@property (nonatomic, assign) BOOL updateExisting; - -/** - * Whether or not to remove existing constraints prior to installing - */ -@property (nonatomic, assign) BOOL removeExisting; - -/** - * initialises the maker with a default view - * - * @param view any MASConstrait are created with this view as the first item - * - * @return a new MASConstraintMaker - */ -- (id)initWithView:(MAS_VIEW *)view; - -/** - * Calls install method on any MASConstraints which have been created by this maker - * - * @return an array of all the installed MASConstraints - */ -- (NSArray *)install; - -- (MASConstraint * (^)(dispatch_block_t))group; - -@end diff --git a/JCFrameLayout/Masonry/MASConstraintMaker.m b/JCFrameLayout/Masonry/MASConstraintMaker.m deleted file mode 100755 index 78f93ec..0000000 --- a/JCFrameLayout/Masonry/MASConstraintMaker.m +++ /dev/null @@ -1,250 +0,0 @@ -// -// MASConstraintBuilder.m -// Masonry -// -// Created by Jonas Budelmann on 20/07/13. -// Copyright (c) 2013 cloudling. All rights reserved. -// - -#import "MASConstraintMaker.h" -#import "MASViewConstraint.h" -#import "MASCompositeConstraint.h" -#import "MASConstraint+Private.h" -#import "MASViewAttribute.h" -#import "View+MASAdditions.h" - -@interface MASConstraintMaker () - -@property (nonatomic, weak) MAS_VIEW *view; -@property (nonatomic, strong) NSMutableArray *constraints; - -@end - -@implementation MASConstraintMaker - -- (id)initWithView:(MAS_VIEW *)view { - self = [super init]; - if (!self) return nil; - - self.view = view; - self.constraints = NSMutableArray.new; - - return self; -} - -- (NSArray *)install { - if (self.removeExisting) { - NSArray *installedConstraints = [MASViewConstraint installedConstraintsForView:self.view]; - for (MASConstraint *constraint in installedConstraints) { - [constraint uninstall]; - } - } - NSArray *constraints = self.constraints.copy; - for (MASConstraint *constraint in constraints) { - constraint.updateExisting = self.updateExisting; - [constraint install]; - } - [self.constraints removeAllObjects]; - return constraints; -} - -#pragma mark - MASConstraintDelegate - -- (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint { - NSUInteger index = [self.constraints indexOfObject:constraint]; - NSAssert(index != NSNotFound, @"Could not find constraint %@", constraint); - [self.constraints replaceObjectAtIndex:index withObject:replacementConstraint]; -} - -- (MASConstraint *)constraint:(MASConstraint *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute { - MASViewAttribute *viewAttribute = [[MASViewAttribute alloc] initWithView:self.view layoutAttribute:layoutAttribute]; - MASViewConstraint *newConstraint = [[MASViewConstraint alloc] initWithFirstViewAttribute:viewAttribute]; - if ([constraint isKindOfClass:MASViewConstraint.class]) { - //replace with composite constraint - NSArray *children = @[constraint, newConstraint]; - MASCompositeConstraint *compositeConstraint = [[MASCompositeConstraint alloc] initWithChildren:children]; - compositeConstraint.delegate = self; - [self constraint:constraint shouldBeReplacedWithConstraint:compositeConstraint]; - return compositeConstraint; - } - if (!constraint) { - newConstraint.delegate = self; - [self.constraints addObject:newConstraint]; - } - return newConstraint; -} - -- (MASConstraint *)addConstraintWithAttributes:(MASAttribute)attrs { - __unused MASAttribute anyAttribute = (MASAttributeLeft | MASAttributeRight | MASAttributeTop | MASAttributeBottom | MASAttributeLeading - | MASAttributeTrailing | MASAttributeWidth | MASAttributeHeight | MASAttributeCenterX - | MASAttributeCenterY | MASAttributeBaseline -#if TARGET_OS_IPHONE - | MASAttributeLeftMargin | MASAttributeRightMargin | MASAttributeTopMargin | MASAttributeBottomMargin - | MASAttributeLeadingMargin | MASAttributeTrailingMargin | MASAttributeCenterXWithinMargins - | MASAttributeCenterYWithinMargins -#endif - ); - - NSAssert((attrs & anyAttribute) != 0, @"You didn't pass any attribute to make.attributes(...)"); - - NSMutableArray *attributes = [NSMutableArray array]; - - if (attrs & MASAttributeLeft) [attributes addObject:self.view.mas_left]; - if (attrs & MASAttributeRight) [attributes addObject:self.view.mas_right]; - if (attrs & MASAttributeTop) [attributes addObject:self.view.mas_top]; - if (attrs & MASAttributeBottom) [attributes addObject:self.view.mas_bottom]; - if (attrs & MASAttributeLeading) [attributes addObject:self.view.mas_leading]; - if (attrs & MASAttributeTrailing) [attributes addObject:self.view.mas_trailing]; - if (attrs & MASAttributeWidth) [attributes addObject:self.view.mas_width]; - if (attrs & MASAttributeHeight) [attributes addObject:self.view.mas_height]; - if (attrs & MASAttributeCenterX) [attributes addObject:self.view.mas_centerX]; - if (attrs & MASAttributeCenterY) [attributes addObject:self.view.mas_centerY]; - if (attrs & MASAttributeBaseline) [attributes addObject:self.view.mas_baseline]; - -#if TARGET_OS_IPHONE - - if (attrs & MASAttributeLeftMargin) [attributes addObject:self.view.mas_leftMargin]; - if (attrs & MASAttributeRightMargin) [attributes addObject:self.view.mas_rightMargin]; - if (attrs & MASAttributeTopMargin) [attributes addObject:self.view.mas_topMargin]; - if (attrs & MASAttributeBottomMargin) [attributes addObject:self.view.mas_bottomMargin]; - if (attrs & MASAttributeLeadingMargin) [attributes addObject:self.view.mas_leadingMargin]; - if (attrs & MASAttributeTrailingMargin) [attributes addObject:self.view.mas_trailingMargin]; - if (attrs & MASAttributeCenterXWithinMargins) [attributes addObject:self.view.mas_centerXWithinMargins]; - if (attrs & MASAttributeCenterYWithinMargins) [attributes addObject:self.view.mas_centerYWithinMargins]; - -#endif - - NSMutableArray *children = [NSMutableArray arrayWithCapacity:attributes.count]; - - for (MASViewAttribute *a in attributes) { - [children addObject:[[MASViewConstraint alloc] initWithFirstViewAttribute:a]]; - } - - MASCompositeConstraint *constraint = [[MASCompositeConstraint alloc] initWithChildren:children]; - constraint.delegate = self; - [self.constraints addObject:constraint]; - return constraint; -} - -#pragma mark - standard Attributes - -- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute { - return [self constraint:nil addConstraintWithLayoutAttribute:layoutAttribute]; -} - -- (MASConstraint *)left { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeft]; -} - -- (MASConstraint *)top { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTop]; -} - -- (MASConstraint *)right { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRight]; -} - -- (MASConstraint *)bottom { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottom]; -} - -- (MASConstraint *)leading { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeading]; -} - -- (MASConstraint *)trailing { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailing]; -} - -- (MASConstraint *)width { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeWidth]; -} - -- (MASConstraint *)height { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeHeight]; -} - -- (MASConstraint *)centerX { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterX]; -} - -- (MASConstraint *)centerY { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterY]; -} - -- (MASConstraint *)baseline { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBaseline]; -} - -- (MASConstraint *(^)(MASAttribute))attributes { - return ^(MASAttribute attrs){ - return [self addConstraintWithAttributes:attrs]; - }; -} - -#if TARGET_OS_IPHONE - -- (MASConstraint *)leftMargin { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin]; -} - -- (MASConstraint *)rightMargin { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRightMargin]; -} - -- (MASConstraint *)topMargin { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTopMargin]; -} - -- (MASConstraint *)bottomMargin { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottomMargin]; -} - -- (MASConstraint *)leadingMargin { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeadingMargin]; -} - -- (MASConstraint *)trailingMargin { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailingMargin]; -} - -- (MASConstraint *)centerXWithinMargins { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterXWithinMargins]; -} - -- (MASConstraint *)centerYWithinMargins { - return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterYWithinMargins]; -} - -#endif - - -#pragma mark - composite Attributes - -- (MASConstraint *)edges { - return [self addConstraintWithAttributes:MASAttributeTop | MASAttributeLeft | MASAttributeRight | MASAttributeBottom]; -} - -- (MASConstraint *)size { - return [self addConstraintWithAttributes:MASAttributeWidth | MASAttributeHeight]; -} - -- (MASConstraint *)center { - return [self addConstraintWithAttributes:MASAttributeCenterX | MASAttributeCenterY]; -} - -#pragma mark - grouping - -- (MASConstraint *(^)(dispatch_block_t group))group { - return ^id(dispatch_block_t group) { - NSInteger previousCount = self.constraints.count; - group(); - - NSArray *children = [self.constraints subarrayWithRange:NSMakeRange(previousCount, self.constraints.count - previousCount)]; - MASCompositeConstraint *constraint = [[MASCompositeConstraint alloc] initWithChildren:children]; - constraint.delegate = self; - return constraint; - }; -} - -@end diff --git a/JCFrameLayout/Masonry/MASLayoutConstraint.h b/JCFrameLayout/Masonry/MASLayoutConstraint.h deleted file mode 100755 index 699041c..0000000 --- a/JCFrameLayout/Masonry/MASLayoutConstraint.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MASLayoutConstraint.h -// Masonry -// -// Created by Jonas Budelmann on 3/08/13. -// Copyright (c) 2013 Jonas Budelmann. All rights reserved. -// - -#import "MASUtilities.h" - -/** - * When you are debugging or printing the constraints attached to a view this subclass - * makes it easier to identify which constraints have been created via Masonry - */ -@interface MASLayoutConstraint : NSLayoutConstraint - -/** - * a key to associate with this constraint - */ -@property (nonatomic, strong) id mas_key; - -@end diff --git a/JCFrameLayout/Masonry/MASLayoutConstraint.m b/JCFrameLayout/Masonry/MASLayoutConstraint.m deleted file mode 100755 index 3483f02..0000000 --- a/JCFrameLayout/Masonry/MASLayoutConstraint.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MASLayoutConstraint.m -// Masonry -// -// Created by Jonas Budelmann on 3/08/13. -// Copyright (c) 2013 Jonas Budelmann. All rights reserved. -// - -#import "MASLayoutConstraint.h" - -@implementation MASLayoutConstraint - -@end diff --git a/JCFrameLayout/Masonry/MASUtilities.h b/JCFrameLayout/Masonry/MASUtilities.h deleted file mode 100755 index 472d7a1..0000000 --- a/JCFrameLayout/Masonry/MASUtilities.h +++ /dev/null @@ -1,131 +0,0 @@ -// -// MASUtilities.h -// Masonry -// -// Created by Jonas Budelmann on 19/08/13. -// Copyright (c) 2013 Jonas Budelmann. All rights reserved. -// - -#import - -#if TARGET_OS_IPHONE - - #import - #define MAS_VIEW UIView - #define MASEdgeInsets UIEdgeInsets - - typedef UILayoutPriority MASLayoutPriority; - static const MASLayoutPriority MASLayoutPriorityRequired = UILayoutPriorityRequired; - static const MASLayoutPriority MASLayoutPriorityDefaultHigh = UILayoutPriorityDefaultHigh; - static const MASLayoutPriority MASLayoutPriorityDefaultMedium = 500; - static const MASLayoutPriority MASLayoutPriorityDefaultLow = UILayoutPriorityDefaultLow; - static const MASLayoutPriority MASLayoutPriorityFittingSizeLevel = UILayoutPriorityFittingSizeLevel; - -#elif TARGET_OS_MAC - - #import - #define MAS_VIEW NSView - #define MASEdgeInsets NSEdgeInsets - - typedef NSLayoutPriority MASLayoutPriority; - static const MASLayoutPriority MASLayoutPriorityRequired = NSLayoutPriorityRequired; - static const MASLayoutPriority MASLayoutPriorityDefaultHigh = NSLayoutPriorityDefaultHigh; - static const MASLayoutPriority MASLayoutPriorityDragThatCanResizeWindow = NSLayoutPriorityDragThatCanResizeWindow; - static const MASLayoutPriority MASLayoutPriorityDefaultMedium = 501; - static const MASLayoutPriority MASLayoutPriorityWindowSizeStayPut = NSLayoutPriorityWindowSizeStayPut; - static const MASLayoutPriority MASLayoutPriorityDragThatCannotResizeWindow = NSLayoutPriorityDragThatCannotResizeWindow; - static const MASLayoutPriority MASLayoutPriorityDefaultLow = NSLayoutPriorityDefaultLow; - static const MASLayoutPriority MASLayoutPriorityFittingSizeCompression = NSLayoutPriorityFittingSizeCompression; - -#endif - -/** - * Allows you to attach keys to objects matching the variable names passed. - * - * view1.mas_key = @"view1", view2.mas_key = @"view2"; - * - * is equivalent to: - * - * MASAttachKeys(view1, view2); - */ -#define MASAttachKeys(...) \ - NSDictionary *keyPairs = NSDictionaryOfVariableBindings(__VA_ARGS__); \ - for (id key in keyPairs.allKeys) { \ - id obj = keyPairs[key]; \ - NSAssert([obj respondsToSelector:@selector(setMas_key:)], \ - @"Cannot attach mas_key to %@", obj); \ - [obj setMas_key:key]; \ - } - -/** - * Used to create object hashes - * Based on http://www.mikeash.com/pyblog/friday-qa-2010-06-18-implementing-equality-and-hashing.html - */ -#define MAS_NSUINT_BIT (CHAR_BIT * sizeof(NSUInteger)) -#define MAS_NSUINTROTATE(val, howmuch) ((((NSUInteger)val) << howmuch) | (((NSUInteger)val) >> (MAS_NSUINT_BIT - howmuch))) - -/** - * Given a scalar or struct value, wraps it in NSValue - * Based on EXPObjectify: https://github.com/specta/expecta - */ -static inline id _MASBoxValue(const char *type, ...) { - va_list v; - va_start(v, type); - id obj = nil; - if (strcmp(type, @encode(id)) == 0) { - id actual = va_arg(v, id); - obj = actual; - } else if (strcmp(type, @encode(CGPoint)) == 0) { - CGPoint actual = (CGPoint)va_arg(v, CGPoint); - obj = [NSValue value:&actual withObjCType:type]; - } else if (strcmp(type, @encode(CGSize)) == 0) { - CGSize actual = (CGSize)va_arg(v, CGSize); - obj = [NSValue value:&actual withObjCType:type]; - } else if (strcmp(type, @encode(MASEdgeInsets)) == 0) { - MASEdgeInsets actual = (MASEdgeInsets)va_arg(v, MASEdgeInsets); - obj = [NSValue value:&actual withObjCType:type]; - } else if (strcmp(type, @encode(double)) == 0) { - double actual = (double)va_arg(v, double); - obj = [NSNumber numberWithDouble:actual]; - } else if (strcmp(type, @encode(float)) == 0) { - float actual = (float)va_arg(v, double); - obj = [NSNumber numberWithFloat:actual]; - } else if (strcmp(type, @encode(int)) == 0) { - int actual = (int)va_arg(v, int); - obj = [NSNumber numberWithInt:actual]; - } else if (strcmp(type, @encode(long)) == 0) { - long actual = (long)va_arg(v, long); - obj = [NSNumber numberWithLong:actual]; - } else if (strcmp(type, @encode(long long)) == 0) { - long long actual = (long long)va_arg(v, long long); - obj = [NSNumber numberWithLongLong:actual]; - } else if (strcmp(type, @encode(short)) == 0) { - short actual = (short)va_arg(v, int); - obj = [NSNumber numberWithShort:actual]; - } else if (strcmp(type, @encode(char)) == 0) { - char actual = (char)va_arg(v, int); - obj = [NSNumber numberWithChar:actual]; - } else if (strcmp(type, @encode(bool)) == 0) { - bool actual = (bool)va_arg(v, int); - obj = [NSNumber numberWithBool:actual]; - } else if (strcmp(type, @encode(unsigned char)) == 0) { - unsigned char actual = (unsigned char)va_arg(v, unsigned int); - obj = [NSNumber numberWithUnsignedChar:actual]; - } else if (strcmp(type, @encode(unsigned int)) == 0) { - unsigned int actual = (unsigned int)va_arg(v, unsigned int); - obj = [NSNumber numberWithUnsignedInt:actual]; - } else if (strcmp(type, @encode(unsigned long)) == 0) { - unsigned long actual = (unsigned long)va_arg(v, unsigned long); - obj = [NSNumber numberWithUnsignedLong:actual]; - } else if (strcmp(type, @encode(unsigned long long)) == 0) { - unsigned long long actual = (unsigned long long)va_arg(v, unsigned long long); - obj = [NSNumber numberWithUnsignedLongLong:actual]; - } else if (strcmp(type, @encode(unsigned short)) == 0) { - unsigned short actual = (unsigned short)va_arg(v, unsigned int); - obj = [NSNumber numberWithUnsignedShort:actual]; - } - va_end(v); - return obj; -} - -#define MASBoxValue(value) _MASBoxValue(@encode(__typeof__((value))), (value)) diff --git a/JCFrameLayout/Masonry/MASViewAttribute.h b/JCFrameLayout/Masonry/MASViewAttribute.h deleted file mode 100755 index f594f48..0000000 --- a/JCFrameLayout/Masonry/MASViewAttribute.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// MASAttribute.h -// Masonry -// -// Created by Jonas Budelmann on 21/07/13. -// Copyright (c) 2013 cloudling. All rights reserved. -// - -#import "MASUtilities.h" - -/** - * An immutable tuple which stores the view and the related NSLayoutAttribute. - * Describes part of either the left or right hand side of a constraint equation - */ -@interface MASViewAttribute : NSObject - -/** - * The view which the reciever relates to - */ -@property (nonatomic, weak, readonly) MAS_VIEW *view; - -/** - * The attribute which the reciever relates to - */ -@property (nonatomic, assign, readonly) NSLayoutAttribute layoutAttribute; - -/** - * The designated initializer. - */ -- (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute; - -/** - * Determine whether the layoutAttribute is a size attribute - * - * @return YES if layoutAttribute is equal to NSLayoutAttributeWidth or NSLayoutAttributeHeight - */ -- (BOOL)isSizeAttribute; - -@end diff --git a/JCFrameLayout/Masonry/MASViewAttribute.m b/JCFrameLayout/Masonry/MASViewAttribute.m deleted file mode 100755 index 1032826..0000000 --- a/JCFrameLayout/Masonry/MASViewAttribute.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// MASAttribute.m -// Masonry -// -// Created by Jonas Budelmann on 21/07/13. -// Copyright (c) 2013 cloudling. All rights reserved. -// - -#import "MASViewAttribute.h" - -@implementation MASViewAttribute - -- (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute { - self = [super init]; - if (!self) return nil; - - _view = view; - _layoutAttribute = layoutAttribute; - - return self; -} - -- (BOOL)isSizeAttribute { - return self.layoutAttribute == NSLayoutAttributeWidth - || self.layoutAttribute == NSLayoutAttributeHeight; -} - -- (BOOL)isEqual:(MASViewAttribute *)viewAttribute { - if ([viewAttribute isKindOfClass:self.class]) { - return self.view == viewAttribute.view - && self.layoutAttribute == viewAttribute.layoutAttribute; - } - return [super isEqual:viewAttribute]; -} - -- (NSUInteger)hash { - return MAS_NSUINTROTATE([self.view hash], MAS_NSUINT_BIT / 2) ^ self.layoutAttribute; -} - -@end diff --git a/JCFrameLayout/Masonry/MASViewConstraint.h b/JCFrameLayout/Masonry/MASViewConstraint.h deleted file mode 100755 index 5c78f7a..0000000 --- a/JCFrameLayout/Masonry/MASViewConstraint.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// MASConstraint.h -// Masonry -// -// Created by Jonas Budelmann on 20/07/13. -// Copyright (c) 2013 cloudling. All rights reserved. -// - -#import "MASViewAttribute.h" -#import "MASConstraint.h" -#import "MASLayoutConstraint.h" -#import "MASUtilities.h" - -/** - * A single constraint. - * Contains the attributes neccessary for creating a NSLayoutConstraint and adding it to the appropriate view - */ -@interface MASViewConstraint : MASConstraint - -/** - * First item/view and first attribute of the NSLayoutConstraint - */ -@property (nonatomic, strong, readonly) MASViewAttribute *firstViewAttribute; - -/** - * Second item/view and second attribute of the NSLayoutConstraint - */ -@property (nonatomic, strong, readonly) MASViewAttribute *secondViewAttribute; - -/** - * initialises the MASViewConstraint with the first part of the equation - * - * @param firstViewAttribute view.mas_left, view.mas_width etc. - * - * @return a new view constraint - */ -- (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute; - -/** - * Returns all MASViewConstraints installed with this view as a first item. - * - * @param view A view to retrieve constraints for. - * - * @return An array of MASViewConstraints. - */ -+ (NSArray *)installedConstraintsForView:(MAS_VIEW *)view; - -@end diff --git a/JCFrameLayout/Masonry/MASViewConstraint.m b/JCFrameLayout/Masonry/MASViewConstraint.m deleted file mode 100755 index 8e3d2d6..0000000 --- a/JCFrameLayout/Masonry/MASViewConstraint.m +++ /dev/null @@ -1,396 +0,0 @@ -// -// MASConstraint.m -// Masonry -// -// Created by Jonas Budelmann on 20/07/13. -// Copyright (c) 2013 cloudling. All rights reserved. -// - -#import "MASViewConstraint.h" -#import "MASConstraint+Private.h" -#import "MASCompositeConstraint.h" -#import "MASLayoutConstraint.h" -#import "View+MASAdditions.h" -#import - -@interface MAS_VIEW (MASConstraints) - -@property (nonatomic, readonly) NSMutableSet *mas_installedConstraints; - -@end - -@implementation MAS_VIEW (MASConstraints) - -static char kInstalledConstraintsKey; - -- (NSMutableSet *)mas_installedConstraints { - NSMutableSet *constraints = objc_getAssociatedObject(self, &kInstalledConstraintsKey); - if (!constraints) { - constraints = [NSMutableSet set]; - objc_setAssociatedObject(self, &kInstalledConstraintsKey, constraints, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - return constraints; -} - -@end - - -@interface MASViewConstraint () - -@property (nonatomic, strong, readwrite) MASViewAttribute *secondViewAttribute; -@property (nonatomic, weak) MAS_VIEW *installedView; -@property (nonatomic, weak) MASLayoutConstraint *layoutConstraint; -@property (nonatomic, assign) NSLayoutRelation layoutRelation; -@property (nonatomic, assign) MASLayoutPriority layoutPriority; -@property (nonatomic, assign) CGFloat layoutMultiplier; -@property (nonatomic, assign) CGFloat layoutConstant; -@property (nonatomic, assign) BOOL hasLayoutRelation; -@property (nonatomic, strong) id mas_key; -@property (nonatomic, assign) BOOL useAnimator; - -@end - -@implementation MASViewConstraint - -- (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute { - self = [super init]; - if (!self) return nil; - - _firstViewAttribute = firstViewAttribute; - self.layoutPriority = MASLayoutPriorityRequired; - self.layoutMultiplier = 1; - - return self; -} - -#pragma mark - NSCoping - -- (id)copyWithZone:(NSZone __unused *)zone { - MASViewConstraint *constraint = [[MASViewConstraint alloc] initWithFirstViewAttribute:self.firstViewAttribute]; - constraint.layoutConstant = self.layoutConstant; - constraint.layoutRelation = self.layoutRelation; - constraint.layoutPriority = self.layoutPriority; - constraint.layoutMultiplier = self.layoutMultiplier; - constraint.delegate = self.delegate; - return constraint; -} - -#pragma mark - Public - -+ (NSArray *)installedConstraintsForView:(MAS_VIEW *)view { - return [view.mas_installedConstraints allObjects]; -} - -#pragma mark - Private - -- (void)setLayoutConstant:(CGFloat)layoutConstant { - _layoutConstant = layoutConstant; - -#if TARGET_OS_MAC && !TARGET_OS_IPHONE - if (self.useAnimator) { - [self.layoutConstraint.animator setConstant:layoutConstant]; - } else { - self.layoutConstraint.constant = layoutConstant; - } -#else - self.layoutConstraint.constant = layoutConstant; -#endif -} - -- (void)setLayoutRelation:(NSLayoutRelation)layoutRelation { - _layoutRelation = layoutRelation; - self.hasLayoutRelation = YES; -} - -- (BOOL)supportsActiveProperty { - return [self.layoutConstraint respondsToSelector:@selector(isActive)]; -} - -- (BOOL)isActive { - BOOL active = YES; - if ([self supportsActiveProperty]) { - active = [self.layoutConstraint isActive]; - } - - return active; -} - -- (BOOL)hasBeenInstalled { - return (self.layoutConstraint != nil) && [self isActive]; -} - -- (void)setSecondViewAttribute:(id)secondViewAttribute { - if ([secondViewAttribute isKindOfClass:NSValue.class]) { - [self setLayoutConstantWithValue:secondViewAttribute]; - } else if ([secondViewAttribute isKindOfClass:MAS_VIEW.class]) { - _secondViewAttribute = [[MASViewAttribute alloc] initWithView:secondViewAttribute layoutAttribute:self.firstViewAttribute.layoutAttribute]; - } else if ([secondViewAttribute isKindOfClass:MASViewAttribute.class]) { - _secondViewAttribute = secondViewAttribute; - } else { - NSAssert(NO, @"attempting to add unsupported attribute: %@", secondViewAttribute); - } -} - -#pragma mark - NSLayoutConstraint multiplier proxies - -- (MASConstraint * (^)(CGFloat))multipliedBy { - return ^id(CGFloat multiplier) { - NSAssert(!self.hasBeenInstalled, - @"Cannot modify constraint multiplier after it has been installed"); - - self.layoutMultiplier = multiplier; - return self; - }; -} - - -- (MASConstraint * (^)(CGFloat))dividedBy { - return ^id(CGFloat divider) { - NSAssert(!self.hasBeenInstalled, - @"Cannot modify constraint multiplier after it has been installed"); - - self.layoutMultiplier = 1.0/divider; - return self; - }; -} - -#pragma mark - MASLayoutPriority proxy - -- (MASConstraint * (^)(MASLayoutPriority))priority { - return ^id(MASLayoutPriority priority) { - NSAssert(!self.hasBeenInstalled, - @"Cannot modify constraint priority after it has been installed"); - - self.layoutPriority = priority; - return self; - }; -} - -#pragma mark - NSLayoutRelation proxy - -- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation { - return ^id(id attribute, NSLayoutRelation relation) { - if ([attribute isKindOfClass:NSArray.class]) { - NSAssert(!self.hasLayoutRelation, @"Redefinition of constraint relation"); - NSMutableArray *children = NSMutableArray.new; - for (id attr in attribute) { - MASViewConstraint *viewConstraint = [self copy]; - viewConstraint.secondViewAttribute = attr; - [children addObject:viewConstraint]; - } - MASCompositeConstraint *compositeConstraint = [[MASCompositeConstraint alloc] initWithChildren:children]; - compositeConstraint.delegate = self.delegate; - [self.delegate constraint:self shouldBeReplacedWithConstraint:compositeConstraint]; - return compositeConstraint; - } else { - NSAssert(!self.hasLayoutRelation || self.layoutRelation == relation && [attribute isKindOfClass:NSValue.class], @"Redefinition of constraint relation"); - self.layoutRelation = relation; - self.secondViewAttribute = attribute; - return self; - } - }; -} - -#pragma mark - Semantic properties - -- (MASConstraint *)with { - return self; -} - -- (MASConstraint *)and { - return self; -} - -#pragma mark - attribute chaining - -- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute { - NSAssert(!self.hasLayoutRelation, @"Attributes should be chained before defining the constraint relation"); - - return [self.delegate constraint:self addConstraintWithLayoutAttribute:layoutAttribute]; -} - -#pragma mark - Animator proxy - -#if TARGET_OS_MAC && !TARGET_OS_IPHONE - -- (MASConstraint *)animator { - self.useAnimator = YES; - return self; -} - -#endif - -#pragma mark - debug helpers - -- (MASConstraint * (^)(id))key { - return ^id(id key) { - self.mas_key = key; - return self; - }; -} - -#pragma mark - NSLayoutConstraint constant setters - -- (void)setInsets:(MASEdgeInsets)insets { - NSLayoutAttribute layoutAttribute = self.firstViewAttribute.layoutAttribute; - switch (layoutAttribute) { - case NSLayoutAttributeLeft: - case NSLayoutAttributeLeading: - self.layoutConstant = insets.left; - break; - case NSLayoutAttributeTop: - self.layoutConstant = insets.top; - break; - case NSLayoutAttributeBottom: - self.layoutConstant = -insets.bottom; - break; - case NSLayoutAttributeRight: - case NSLayoutAttributeTrailing: - self.layoutConstant = -insets.right; - break; - default: - break; - } -} - -- (void)setOffset:(CGFloat)offset { - self.layoutConstant = offset; -} - -- (void)setSizeOffset:(CGSize)sizeOffset { - NSLayoutAttribute layoutAttribute = self.firstViewAttribute.layoutAttribute; - switch (layoutAttribute) { - case NSLayoutAttributeWidth: - self.layoutConstant = sizeOffset.width; - break; - case NSLayoutAttributeHeight: - self.layoutConstant = sizeOffset.height; - break; - default: - break; - } -} - -- (void)setCenterOffset:(CGPoint)centerOffset { - NSLayoutAttribute layoutAttribute = self.firstViewAttribute.layoutAttribute; - switch (layoutAttribute) { - case NSLayoutAttributeCenterX: - self.layoutConstant = centerOffset.x; - break; - case NSLayoutAttributeCenterY: - self.layoutConstant = centerOffset.y; - break; - default: - break; - } -} - -#pragma mark - MASConstraint - -- (void)activate { - if ([self supportsActiveProperty] && self.layoutConstraint) { - if (self.hasBeenInstalled) { - return; - } - self.layoutConstraint.active = YES; - [self.firstViewAttribute.view.mas_installedConstraints addObject:self]; - } else { - [self install]; - } -} - -- (void)deactivate { - if ([self supportsActiveProperty]) { - self.layoutConstraint.active = NO; - [self.firstViewAttribute.view.mas_installedConstraints removeObject:self]; - } else { - [self uninstall]; - } -} - -- (void)install { - if (self.hasBeenInstalled) { - return; - } - - MAS_VIEW *firstLayoutItem = self.firstViewAttribute.view; - - NSLayoutAttribute firstLayoutAttribute = self.firstViewAttribute.layoutAttribute; - MAS_VIEW *secondLayoutItem = self.secondViewAttribute.view; - NSLayoutAttribute secondLayoutAttribute = self.secondViewAttribute.layoutAttribute; - - // alignment attributes must have a secondViewAttribute - // therefore we assume that is refering to superview - // eg make.left.equalTo(@10) - if (!self.firstViewAttribute.isSizeAttribute && !self.secondViewAttribute) { - secondLayoutItem = firstLayoutItem.superview; - secondLayoutAttribute = firstLayoutAttribute; - } - - MASLayoutConstraint *layoutConstraint - = [MASLayoutConstraint constraintWithItem:firstLayoutItem - attribute:firstLayoutAttribute - relatedBy:self.layoutRelation - toItem:secondLayoutItem - attribute:secondLayoutAttribute - multiplier:self.layoutMultiplier - constant:self.layoutConstant]; - - layoutConstraint.priority = self.layoutPriority; - layoutConstraint.mas_key = self.mas_key; - - if (secondLayoutItem) { - MAS_VIEW *closestCommonSuperview = [firstLayoutItem mas_closestCommonSuperview:secondLayoutItem]; - NSAssert(closestCommonSuperview, - @"couldn't find a common superview for %@ and %@", - firstLayoutItem, secondLayoutItem); - self.installedView = closestCommonSuperview; - } else { - self.installedView = firstLayoutItem; - } - - - MASLayoutConstraint *existingConstraint = nil; - if (self.updateExisting) { - existingConstraint = [self layoutConstraintSimilarTo:layoutConstraint]; - } - if (existingConstraint) { - // just update the constant - existingConstraint.constant = layoutConstraint.constant; - self.layoutConstraint = existingConstraint; - } else { - [self.installedView addConstraint:layoutConstraint]; - self.layoutConstraint = layoutConstraint; - [firstLayoutItem.mas_installedConstraints addObject:self]; - } -} - -- (MASLayoutConstraint *)layoutConstraintSimilarTo:(MASLayoutConstraint *)layoutConstraint { - // check if any constraints are the same apart from the only mutable property constant - - // go through constraints in reverse as we do not want to match auto-resizing or interface builder constraints - // and they are likely to be added first. - for (NSLayoutConstraint *existingConstraint in self.installedView.constraints.reverseObjectEnumerator) { - if (![existingConstraint isKindOfClass:MASLayoutConstraint.class]) continue; - if (existingConstraint.firstItem != layoutConstraint.firstItem) continue; - if (existingConstraint.secondItem != layoutConstraint.secondItem) continue; - if (existingConstraint.firstAttribute != layoutConstraint.firstAttribute) continue; - if (existingConstraint.secondAttribute != layoutConstraint.secondAttribute) continue; - if (existingConstraint.relation != layoutConstraint.relation) continue; - if (existingConstraint.multiplier != layoutConstraint.multiplier) continue; - if (existingConstraint.priority != layoutConstraint.priority) continue; - - return (id)existingConstraint; - } - return nil; -} - -- (void)uninstall { - [self.installedView removeConstraint:self.layoutConstraint]; - self.layoutConstraint = nil; - self.installedView = nil; - - [self.firstViewAttribute.view.mas_installedConstraints removeObject:self]; -} - -@end diff --git a/JCFrameLayout/Masonry/Masonry.h b/JCFrameLayout/Masonry/Masonry.h deleted file mode 100755 index 168811a..0000000 --- a/JCFrameLayout/Masonry/Masonry.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// Masonry.h -// Masonry -// -// Created by Jonas Budelmann on 20/07/13. -// Copyright (c) 2013 cloudling. All rights reserved. -// - -#import - -//! Project version number for Masonry. -FOUNDATION_EXPORT double MasonryVersionNumber; - -//! Project version string for Masonry. -FOUNDATION_EXPORT const unsigned char MasonryVersionString[]; - -#import "MASUtilities.h" -#import "View+MASAdditions.h" -#import "View+MASShorthandAdditions.h" -#import "NSArray+MASAdditions.h" -#import "NSArray+MASShorthandAdditions.h" -#import "MASConstraint.h" -#import "MASCompositeConstraint.h" -#import "MASViewAttribute.h" -#import "MASViewConstraint.h" -#import "MASConstraintMaker.h" -#import "MASLayoutConstraint.h" -#import "NSLayoutConstraint+MASDebugAdditions.h" diff --git a/JCFrameLayout/Masonry/NSArray+MASAdditions.h b/JCFrameLayout/Masonry/NSArray+MASAdditions.h deleted file mode 100755 index 189d51f..0000000 --- a/JCFrameLayout/Masonry/NSArray+MASAdditions.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// NSArray+MASAdditions.h -// -// -// Created by Daniel Hammond on 11/26/13. -// -// - -#import "MASUtilities.h" -#import "MASConstraintMaker.h" -#import "MASViewAttribute.h" - -@interface NSArray (MASAdditions) - -/** - * Creates a MASConstraintMaker with each view in the callee. - * Any constraints defined are added to the view or the appropriate superview once the block has finished executing on each view - * - * @param block scope within which you can build up the constraints which you wish to apply to each view. - * - * @return Array of created MASConstraints - */ -- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block; - -/** - * Creates a MASConstraintMaker with each view in the callee. - * Any constraints defined are added to each view or the appropriate superview once the block has finished executing on each view. - * If an existing constraint exists then it will be updated instead. - * - * @param block scope within which you can build up the constraints which you wish to apply to each view. - * - * @return Array of created/updated MASConstraints - */ -- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block; - -/** - * Creates a MASConstraintMaker with each view in the callee. - * Any constraints defined are added to each view or the appropriate superview once the block has finished executing on each view. - * All constraints previously installed for the views will be removed. - * - * @param block scope within which you can build up the constraints which you wish to apply to each view. - * - * @return Array of created/updated MASConstraints - */ -- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block; - -@end diff --git a/JCFrameLayout/Masonry/NSArray+MASAdditions.m b/JCFrameLayout/Masonry/NSArray+MASAdditions.m deleted file mode 100755 index dbbe671..0000000 --- a/JCFrameLayout/Masonry/NSArray+MASAdditions.m +++ /dev/null @@ -1,41 +0,0 @@ -// -// NSArray+MASAdditions.m -// -// -// Created by Daniel Hammond on 11/26/13. -// -// - -#import "NSArray+MASAdditions.h" -#import "View+MASAdditions.h" - -@implementation NSArray (MASAdditions) - -- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block { - NSMutableArray *constraints = [NSMutableArray array]; - for (MAS_VIEW *view in self) { - NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views"); - [constraints addObjectsFromArray:[view mas_makeConstraints:block]]; - } - return constraints; -} - -- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block { - NSMutableArray *constraints = [NSMutableArray array]; - for (MAS_VIEW *view in self) { - NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views"); - [constraints addObjectsFromArray:[view mas_updateConstraints:block]]; - } - return constraints; -} - -- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block { - NSMutableArray *constraints = [NSMutableArray array]; - for (MAS_VIEW *view in self) { - NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views"); - [constraints addObjectsFromArray:[view mas_remakeConstraints:block]]; - } - return constraints; -} - -@end diff --git a/JCFrameLayout/Masonry/NSArray+MASShorthandAdditions.h b/JCFrameLayout/Masonry/NSArray+MASShorthandAdditions.h deleted file mode 100755 index 8b47369..0000000 --- a/JCFrameLayout/Masonry/NSArray+MASShorthandAdditions.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// NSArray+MASShorthandAdditions.h -// Masonry -// -// Created by Jonas Budelmann on 22/07/13. -// Copyright (c) 2013 Jonas Budelmann. All rights reserved. -// - -#import "NSArray+MASAdditions.h" - -#ifdef MAS_SHORTHAND - -/** - * Shorthand array additions without the 'mas_' prefixes, - * only enabled if MAS_SHORTHAND is defined - */ -@interface NSArray (MASShorthandAdditions) - -- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block; -- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block; -- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block; - -@end - -@implementation NSArray (MASShorthandAdditions) - -- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block { - return [self mas_makeConstraints:block]; -} - -- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block { - return [self mas_updateConstraints:block]; -} - -- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block { - return [self mas_remakeConstraints:block]; -} - -@end - -#endif diff --git a/JCFrameLayout/Masonry/NSLayoutConstraint+MASDebugAdditions.h b/JCFrameLayout/Masonry/NSLayoutConstraint+MASDebugAdditions.h deleted file mode 100755 index 1279b4f..0000000 --- a/JCFrameLayout/Masonry/NSLayoutConstraint+MASDebugAdditions.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// NSLayoutConstraint+MASDebugAdditions.h -// Masonry -// -// Created by Jonas Budelmann on 3/08/13. -// Copyright (c) 2013 Jonas Budelmann. All rights reserved. -// - -#import "MASUtilities.h" - -/** - * makes debug and log output of NSLayoutConstraints more readable - */ -@interface NSLayoutConstraint (MASDebugAdditions) - -@end diff --git a/JCFrameLayout/Masonry/NSLayoutConstraint+MASDebugAdditions.m b/JCFrameLayout/Masonry/NSLayoutConstraint+MASDebugAdditions.m deleted file mode 100755 index 3d10ac2..0000000 --- a/JCFrameLayout/Masonry/NSLayoutConstraint+MASDebugAdditions.m +++ /dev/null @@ -1,141 +0,0 @@ -// -// NSLayoutConstraint+MASDebugAdditions.m -// Masonry -// -// Created by Jonas Budelmann on 3/08/13. -// Copyright (c) 2013 Jonas Budelmann. All rights reserved. -// - -#import "NSLayoutConstraint+MASDebugAdditions.h" -#import "MASConstraint.h" -#import "MASLayoutConstraint.h" - -@implementation NSLayoutConstraint (MASDebugAdditions) - -#pragma mark - description maps - -+ (NSDictionary *)layoutRelationDescriptionsByValue { - static dispatch_once_t once; - static NSDictionary *descriptionMap; - dispatch_once(&once, ^{ - descriptionMap = @{ - @(NSLayoutRelationEqual) : @"==", - @(NSLayoutRelationGreaterThanOrEqual) : @">=", - @(NSLayoutRelationLessThanOrEqual) : @"<=", - }; - }); - return descriptionMap; -} - -+ (NSDictionary *)layoutAttributeDescriptionsByValue { - static dispatch_once_t once; - static NSDictionary *descriptionMap; - dispatch_once(&once, ^{ - descriptionMap = @{ - @(NSLayoutAttributeTop) : @"top", - @(NSLayoutAttributeLeft) : @"left", - @(NSLayoutAttributeBottom) : @"bottom", - @(NSLayoutAttributeRight) : @"right", - @(NSLayoutAttributeLeading) : @"leading", - @(NSLayoutAttributeTrailing) : @"trailing", - @(NSLayoutAttributeWidth) : @"width", - @(NSLayoutAttributeHeight) : @"height", - @(NSLayoutAttributeCenterX) : @"centerX", - @(NSLayoutAttributeCenterY) : @"centerY", - @(NSLayoutAttributeBaseline) : @"baseline", - -#if TARGET_OS_IPHONE - @(NSLayoutAttributeLeftMargin) : @"leftMargin", - @(NSLayoutAttributeRightMargin) : @"rightMargin", - @(NSLayoutAttributeTopMargin) : @"topMargin", - @(NSLayoutAttributeBottomMargin) : @"bottomMargin", - @(NSLayoutAttributeLeadingMargin) : @"leadingMargin", - @(NSLayoutAttributeTrailingMargin) : @"trailingMargin", - @(NSLayoutAttributeCenterXWithinMargins) : @"centerXWithinMargins", - @(NSLayoutAttributeCenterYWithinMargins) : @"centerYWithinMargins", -#endif - - }; - - }); - return descriptionMap; -} - - -+ (NSDictionary *)layoutPriorityDescriptionsByValue { - static dispatch_once_t once; - static NSDictionary *descriptionMap; - dispatch_once(&once, ^{ -#if TARGET_OS_IPHONE - descriptionMap = @{ - @(MASLayoutPriorityDefaultHigh) : @"high", - @(MASLayoutPriorityDefaultLow) : @"low", - @(MASLayoutPriorityDefaultMedium) : @"medium", - @(MASLayoutPriorityRequired) : @"required", - @(MASLayoutPriorityFittingSizeLevel) : @"fitting size", - }; -#elif TARGET_OS_MAC - descriptionMap = @{ - @(MASLayoutPriorityDefaultHigh) : @"high", - @(MASLayoutPriorityDragThatCanResizeWindow) : @"drag can resize window", - @(MASLayoutPriorityDefaultMedium) : @"medium", - @(MASLayoutPriorityWindowSizeStayPut) : @"window size stay put", - @(MASLayoutPriorityDragThatCannotResizeWindow) : @"drag cannot resize window", - @(MASLayoutPriorityDefaultLow) : @"low", - @(MASLayoutPriorityFittingSizeCompression) : @"fitting size", - @(MASLayoutPriorityRequired) : @"required", - }; -#endif - }); - return descriptionMap; -} - -#pragma mark - description override - -+ (NSString *)descriptionForObject:(id)obj { - if ([obj respondsToSelector:@selector(mas_key)] && [obj mas_key]) { - return [NSString stringWithFormat:@"%@:%@", [obj class], [obj mas_key]]; - } - return [NSString stringWithFormat:@"%@:%p", [obj class], obj]; -} - -- (NSString *)description { - NSMutableString *description = [[NSMutableString alloc] initWithString:@"<"]; - - [description appendString:[self.class descriptionForObject:self]]; - - [description appendFormat:@" %@", [self.class descriptionForObject:self.firstItem]]; - if (self.firstAttribute != NSLayoutAttributeNotAnAttribute) { - [description appendFormat:@".%@", [self.class.layoutAttributeDescriptionsByValue objectForKey:@(self.firstAttribute)]]; - } - - [description appendFormat:@" %@", [self.class.layoutRelationDescriptionsByValue objectForKey:@(self.relation)]]; - - if (self.secondItem) { - [description appendFormat:@" %@", [self.class descriptionForObject:self.secondItem]]; - } - if (self.secondAttribute != NSLayoutAttributeNotAnAttribute) { - [description appendFormat:@".%@", [self.class.layoutAttributeDescriptionsByValue objectForKey:@(self.secondAttribute)]]; - } - - if (self.multiplier != 1) { - [description appendFormat:@" * %g", self.multiplier]; - } - - if (self.secondAttribute == NSLayoutAttributeNotAnAttribute) { - [description appendFormat:@" %g", self.constant]; - } else { - if (self.constant) { - [description appendFormat:@" %@ %g", (self.constant < 0 ? @"-" : @"+"), ABS(self.constant)]; - } - } - - if (self.priority != MASLayoutPriorityRequired) { - [description appendFormat:@" ^%@", [self.class.layoutPriorityDescriptionsByValue objectForKey:@(self.priority)] ?: [NSNumber numberWithDouble:self.priority]]; - } - - [description appendString:@">"]; - return description; -} - -@end diff --git a/JCFrameLayout/Masonry/View+MASAdditions.h b/JCFrameLayout/Masonry/View+MASAdditions.h deleted file mode 100755 index 94e3050..0000000 --- a/JCFrameLayout/Masonry/View+MASAdditions.h +++ /dev/null @@ -1,94 +0,0 @@ -// -// UIView+MASAdditions.h -// Masonry -// -// Created by Jonas Budelmann on 20/07/13. -// Copyright (c) 2013 cloudling. All rights reserved. -// - -#import "MASUtilities.h" -#import "MASConstraintMaker.h" -#import "MASViewAttribute.h" - -/** - * Provides constraint maker block - * and convience methods for creating MASViewAttribute which are view + NSLayoutAttribute pairs - */ -@interface MAS_VIEW (MASAdditions) - -/** - * following properties return a new MASViewAttribute with current view and appropriate NSLayoutAttribute - */ -@property (nonatomic, strong, readonly) MASViewAttribute *mas_left; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_top; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_right; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_bottom; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_leading; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_trailing; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_width; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_height; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerX; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerY; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_baseline; -@property (nonatomic, strong, readonly) MASViewAttribute *(^mas_attribute)(NSLayoutAttribute attr); - -#if TARGET_OS_IPHONE - -@property (nonatomic, strong, readonly) MASViewAttribute *mas_leftMargin; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_rightMargin; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_topMargin; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomMargin; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_leadingMargin; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_trailingMargin; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerXWithinMargins; -@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerYWithinMargins; - -#endif - -/** - * a key to associate with this view - */ -@property (nonatomic, strong) id mas_key; - -/** - * Finds the closest common superview between this view and another view - * - * @param view other view - * - * @return returns nil if common superview could not be found - */ -- (instancetype)mas_closestCommonSuperview:(MAS_VIEW *)view; - -/** - * Creates a MASConstraintMaker with the callee view. - * Any constraints defined are added to the view or the appropriate superview once the block has finished executing - * - * @param block scope within which you can build up the constraints which you wish to apply to the view. - * - * @return Array of created MASConstraints - */ -- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block; - -/** - * Creates a MASConstraintMaker with the callee view. - * Any constraints defined are added to the view or the appropriate superview once the block has finished executing. - * If an existing constraint exists then it will be updated instead. - * - * @param block scope within which you can build up the constraints which you wish to apply to the view. - * - * @return Array of created/updated MASConstraints - */ -- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block; - -/** - * Creates a MASConstraintMaker with the callee view. - * Any constraints defined are added to the view or the appropriate superview once the block has finished executing. - * All constraints previously installed for the view will be removed. - * - * @param block scope within which you can build up the constraints which you wish to apply to the view. - * - * @return Array of created/updated MASConstraints - */ -- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block; - -@end diff --git a/JCFrameLayout/Masonry/View+MASAdditions.m b/JCFrameLayout/Masonry/View+MASAdditions.m deleted file mode 100755 index acfaa52..0000000 --- a/JCFrameLayout/Masonry/View+MASAdditions.m +++ /dev/null @@ -1,155 +0,0 @@ -// -// UIView+MASAdditions.m -// Masonry -// -// Created by Jonas Budelmann on 20/07/13. -// Copyright (c) 2013 cloudling. All rights reserved. -// - -#import "View+MASAdditions.h" -#import - -@implementation MAS_VIEW (MASAdditions) - -- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block { - self.translatesAutoresizingMaskIntoConstraints = NO; - MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self]; - block(constraintMaker); - return [constraintMaker install]; -} - -- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *))block { - self.translatesAutoresizingMaskIntoConstraints = NO; - MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self]; - constraintMaker.updateExisting = YES; - block(constraintMaker); - return [constraintMaker install]; -} - -- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block { - self.translatesAutoresizingMaskIntoConstraints = NO; - MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self]; - constraintMaker.removeExisting = YES; - block(constraintMaker); - return [constraintMaker install]; -} - -#pragma mark - NSLayoutAttribute properties - -- (MASViewAttribute *)mas_left { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeft]; -} - -- (MASViewAttribute *)mas_top { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeTop]; -} - -- (MASViewAttribute *)mas_right { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeRight]; -} - -- (MASViewAttribute *)mas_bottom { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeBottom]; -} - -- (MASViewAttribute *)mas_leading { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeading]; -} - -- (MASViewAttribute *)mas_trailing { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeTrailing]; -} - -- (MASViewAttribute *)mas_width { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeWidth]; -} - -- (MASViewAttribute *)mas_height { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeHeight]; -} - -- (MASViewAttribute *)mas_centerX { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeCenterX]; -} - -- (MASViewAttribute *)mas_centerY { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeCenterY]; -} - -- (MASViewAttribute *)mas_baseline { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeBaseline]; -} - -- (MASViewAttribute *(^)(NSLayoutAttribute))mas_attribute -{ - return ^(NSLayoutAttribute attr) { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:attr]; - }; -} - -#if TARGET_OS_IPHONE - -- (MASViewAttribute *)mas_leftMargin { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeftMargin]; -} - -- (MASViewAttribute *)mas_rightMargin { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeRightMargin]; -} - -- (MASViewAttribute *)mas_topMargin { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeTopMargin]; -} - -- (MASViewAttribute *)mas_bottomMargin { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeBottomMargin]; -} - -- (MASViewAttribute *)mas_leadingMargin { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeadingMargin]; -} - -- (MASViewAttribute *)mas_trailingMargin { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeTrailingMargin]; -} - -- (MASViewAttribute *)mas_centerXWithinMargins { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeCenterXWithinMargins]; -} - -- (MASViewAttribute *)mas_centerYWithinMargins { - return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeCenterYWithinMargins]; -} - -#endif - -#pragma mark - associated properties - -- (id)mas_key { - return objc_getAssociatedObject(self, @selector(mas_key)); -} - -- (void)setMas_key:(id)key { - objc_setAssociatedObject(self, @selector(mas_key), key, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -#pragma mark - heirachy - -- (instancetype)mas_closestCommonSuperview:(MAS_VIEW *)view { - MAS_VIEW *closestCommonSuperview = nil; - - MAS_VIEW *secondViewSuperview = view; - while (!closestCommonSuperview && secondViewSuperview) { - MAS_VIEW *firstViewSuperview = self; - while (!closestCommonSuperview && firstViewSuperview) { - if (secondViewSuperview == firstViewSuperview) { - closestCommonSuperview = secondViewSuperview; - } - firstViewSuperview = firstViewSuperview.superview; - } - secondViewSuperview = secondViewSuperview.superview; - } - return closestCommonSuperview; -} - -@end diff --git a/JCFrameLayout/Masonry/View+MASShorthandAdditions.h b/JCFrameLayout/Masonry/View+MASShorthandAdditions.h deleted file mode 100755 index 5553912..0000000 --- a/JCFrameLayout/Masonry/View+MASShorthandAdditions.h +++ /dev/null @@ -1,101 +0,0 @@ -// -// UIView+MASShorthandAdditions.h -// Masonry -// -// Created by Jonas Budelmann on 22/07/13. -// Copyright (c) 2013 Jonas Budelmann. All rights reserved. -// - -#import "View+MASAdditions.h" - -#ifdef MAS_SHORTHAND - -/** - * Shorthand view additions without the 'mas_' prefixes, - * only enabled if MAS_SHORTHAND is defined - */ -@interface MAS_VIEW (MASShorthandAdditions) - -@property (nonatomic, strong, readonly) MASViewAttribute *left; -@property (nonatomic, strong, readonly) MASViewAttribute *top; -@property (nonatomic, strong, readonly) MASViewAttribute *right; -@property (nonatomic, strong, readonly) MASViewAttribute *bottom; -@property (nonatomic, strong, readonly) MASViewAttribute *leading; -@property (nonatomic, strong, readonly) MASViewAttribute *trailing; -@property (nonatomic, strong, readonly) MASViewAttribute *width; -@property (nonatomic, strong, readonly) MASViewAttribute *height; -@property (nonatomic, strong, readonly) MASViewAttribute *centerX; -@property (nonatomic, strong, readonly) MASViewAttribute *centerY; -@property (nonatomic, strong, readonly) MASViewAttribute *baseline; -@property (nonatomic, strong, readonly) MASViewAttribute *(^attribute)(NSLayoutAttribute attr); - -#if TARGET_OS_IPHONE - -@property (nonatomic, strong, readonly) MASViewAttribute *leftMargin; -@property (nonatomic, strong, readonly) MASViewAttribute *rightMargin; -@property (nonatomic, strong, readonly) MASViewAttribute *topMargin; -@property (nonatomic, strong, readonly) MASViewAttribute *bottomMargin; -@property (nonatomic, strong, readonly) MASViewAttribute *leadingMargin; -@property (nonatomic, strong, readonly) MASViewAttribute *trailingMargin; -@property (nonatomic, strong, readonly) MASViewAttribute *centerXWithinMargins; -@property (nonatomic, strong, readonly) MASViewAttribute *centerYWithinMargins; - -#endif - -- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block; -- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block; -- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block; - -@end - -#define MAS_ATTR_FORWARD(attr) \ -- (MASViewAttribute *)attr { \ - return [self mas_##attr]; \ -} - -@implementation MAS_VIEW (MASShorthandAdditions) - -MAS_ATTR_FORWARD(top); -MAS_ATTR_FORWARD(left); -MAS_ATTR_FORWARD(bottom); -MAS_ATTR_FORWARD(right); -MAS_ATTR_FORWARD(leading); -MAS_ATTR_FORWARD(trailing); -MAS_ATTR_FORWARD(width); -MAS_ATTR_FORWARD(height); -MAS_ATTR_FORWARD(centerX); -MAS_ATTR_FORWARD(centerY); -MAS_ATTR_FORWARD(baseline); - -#if TARGET_OS_IPHONE - -MAS_ATTR_FORWARD(leftMargin); -MAS_ATTR_FORWARD(rightMargin); -MAS_ATTR_FORWARD(topMargin); -MAS_ATTR_FORWARD(bottomMargin); -MAS_ATTR_FORWARD(leadingMargin); -MAS_ATTR_FORWARD(trailingMargin); -MAS_ATTR_FORWARD(centerXWithinMargins); -MAS_ATTR_FORWARD(centerYWithinMargins); - -#endif - -- (MASViewAttribute *(^)(NSLayoutAttribute))attribute { - return [self mas_attribute]; -} - -- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block { - return [self mas_makeConstraints:block]; -} - -- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block { - return [self mas_updateConstraints:block]; -} - -- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block { - return [self mas_remakeConstraints:block]; -} - -@end - -#endif diff --git a/JCFrameLayout/QQ20170331-173628.png b/JCFrameLayout/QQ20170331-173628.png new file mode 100644 index 0000000000000000000000000000000000000000..b5d476c63e5d91634eff1306ac5dfbf380e1ea63 GIT binary patch literal 23106 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 K)f3AriT?%9yP$#q literal 0 HcmV?d00001 diff --git a/JCFrameLayout/ViewController.m b/JCFrameLayout/ViewController.m index 6c5f071..6790bb1 100644 --- a/JCFrameLayout/ViewController.m +++ b/JCFrameLayout/ViewController.m @@ -7,12 +7,13 @@ // #import "ViewController.h" -#import "Masonry.h" - #import "SecondViewController.h" -@interface ViewController () +#import "JCFrameLayout.h" +@interface ViewController () +@property (nonatomic,strong) UITableView *tableView; +@property (nonatomic,strong) NSArray*> *datasource; @end @implementation ViewController @@ -22,13 +23,62 @@ - (void)viewDidLoad { self.view.backgroundColor = [UIColor whiteColor]; + [self.view addSubview:self.tableView]; + + [self.tableView jc_makeLayout:^(JCFrameMake *make) { + make.left.jc_equalTo(0); + make.top.jc_equalTo(0); + make.right.jc_equalTo(0); + make.bottom.jc_equalTo(0); + }]; } +- (UITableView *)tableView{ + if (!_tableView) { + _tableView = [[UITableView alloc]init]; + [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"]; + _tableView.delegate = self; + _tableView.dataSource = self; + } + return _tableView; +} -- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ - SecondViewController *vc = [[SecondViewController alloc]init]; - [self presentViewController:vc animated:YES completion:nil]; +#pragma mark - UITableViewDataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ + return self.datasource.count; } +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; + + NSDictionary *dict = self.datasource[indexPath.item]; + cell.textLabel.text = dict[@"title"]; + + return cell; +} + +#pragma mark - UITableViewDelegate +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + NSDictionary *dict = self.datasource[indexPath.item]; + NSString *cls = dict[@"cls"]; + Class class = NSClassFromString(cls); + UIViewController *vc = [[class alloc]init]; + vc.title = dict[@"title"]; + [self.navigationController pushViewController:vc animated:YES]; +} +- (NSArray *> *)datasource{ + if (!_datasource) { + NSMutableArray *array = [NSMutableArray array]; + + [array addObject:@{@"title":@"左,上,由,下",@"cls":@"ExampleVC1"}]; + [array addObject:@{@"title":@"九宫格(绝对布局)",@"cls":@"ExampleVC2"}]; + [array addObject:@{@"title":@"九宫格(相对布局)",@"cls":@"ExampleVC3"}]; + [array addObject:@{@"title":@"一万个方块(绝对布局)",@"cls":@"ExampleVC4"}]; + [array addObject:@{@"title":@"一万个方块(相对布局)",@"cls":@"ExampleVC5"}]; + + _datasource = [array copy]; + } + return _datasource; +} @end diff --git a/README.md b/README.md index 7bf00e9..82f27cc 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,83 @@ # JCFrameLayout +JCFrameLayout是一个类似Masonry的布局工具,与Masonry不同的是JCFrameLayout采用的是Frame布局而非约束布局,实现了Masonry大部分功能。 + +### 使用方式 +例如一下代码实现效果: +``` +UIView *leftView = [[UIView alloc]init]; + leftView.backgroundColor = radomColor; + [self.view addSubview:leftView]; + leftView.jc_debug_key = @"leftView"; + [leftView jc_makeLayout:^(JCFrameMake *make) { + make.width.jc_equalTo(50); + make.top.jc_equalTo(50 + 64); + make.bottom.jc_equalTo(-50); + make.left.jc_equalTo(0); + }]; + + + UIView *rightView = [[UIView alloc]init]; + rightView.backgroundColor = radomColor; + [self.view addSubview:rightView]; + rightView.jc_debug_key = @"rightView"; + [rightView jc_makeLayout:^(JCFrameMake *make) { + make.width.jc_equalTo(50); + make.top.jc_equalTo(50 + 64); + make.bottom.jc_equalTo(-50); + make.right.jc_equalTo(0); + }]; + + UIView *topView = [[UIView alloc]init]; + topView.backgroundColor = radomColor; + [self.view addSubview:topView]; + topView.jc_debug_key = @"topView"; + [topView jc_makeLayout:^(JCFrameMake *make) { + make.top.jc_equalTo(64); + make.height.jc_equalTo(50); + make.left.jc_equalTo(50); + make.right.jc_equalTo(-50); + }]; + + UIView *bottomView = [[UIView alloc]init]; + bottomView.backgroundColor = radomColor; + [self.view addSubview:bottomView]; + bottomView.jc_debug_key = @"bottomView"; + [bottomView jc_makeLayout:^(JCFrameMake *make) { + make.height.jc_equalTo(50); + make.left.jc_equalTo(50); + make.right.jc_equalTo(-50); + make.bottom.jc_equalTo(0); + }]; + + + UIView *centerView = [[UIView alloc]init]; + centerView.backgroundColor = radomColor; + [self.view addSubview:centerView]; + centerView.jc_debug_key = @"centerView"; + [centerView jc_makeLayout:^(JCFrameMake *make) { + make.left.equalTo(leftView.jc_right); + make.top.equalTo(topView.jc_bottom); + make.right.equalTo(rightView.jc_left); + make.bottom.equalTo(bottomView.jc_top); + }]; + [self.view sendSubviewToBack:centerView]; +``` + ### 历史版本 +#### V2.0.0 +实现多视图的相对布局 +``` +[centerView jc_makeLayout:^(JCFrameMake *make) { + make.left.equalTo(leftView.jc_right); + make.top.equalTo(topView.jc_bottom); + make.right.equalTo(rightView.jc_left); + make.bottom.equalTo(bottomView.jc_top); + }]; +``` + #### V1.1.2 完善了单视图的链式语法,可以实现这样的的效果 @@ -46,3 +121,9 @@ jc_equalTo()时自动将基本类型进行装箱 }]; ``` + +### 期望 + +* 发现Bug请在Issues提出,或者邮件告知我,我将尽快修复 +* 如果觉得有用,请给我个Star + From fe6c540ce7b31961fa0c255db792a8e97d7251a4 Mon Sep 17 00:00:00 2001 From: wangyp2018 Date: Fri, 31 Mar 2017 18:18:53 +0800 Subject: [PATCH 06/14] =?UTF-8?q?pod=20spec=20=E6=A3=80=E6=9F=A5=E9=80=9A?= =?UTF-8?q?=E4=B8=8D=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JCFrameLayout.podspec | 2 +- JCFrameLayout.xcodeproj/project.pbxproj | 2 - .../UserInterfaceState.xcuserstate | Bin 66200 -> 72262 bytes JCFrameLayout/JCFrameLayout/JCFrameExecutor.m | 217 ++++++++++++++++- .../JCFrameLayout/JCFrameExecutorMethods.h | 229 ------------------ 5 files changed, 217 insertions(+), 233 deletions(-) delete mode 100644 JCFrameLayout/JCFrameLayout/JCFrameExecutorMethods.h diff --git a/JCFrameLayout.podspec b/JCFrameLayout.podspec index f1f98cd..c5d28c9 100644 --- a/JCFrameLayout.podspec +++ b/JCFrameLayout.podspec @@ -16,7 +16,7 @@ Pod::Spec.new do |s| # s.name = "JCFrameLayout" - s.version = "1.1.2" + s.version = "2.0.1" s.summary = "一款采用链式语法为视图做Frame布局的工具" # This description is used to generate tags and improve search results. diff --git a/JCFrameLayout.xcodeproj/project.pbxproj b/JCFrameLayout.xcodeproj/project.pbxproj index 485335f..bb596d1 100644 --- a/JCFrameLayout.xcodeproj/project.pbxproj +++ b/JCFrameLayout.xcodeproj/project.pbxproj @@ -39,7 +39,6 @@ 282FD7E61E895B6400E17BFB /* UIView+JCFrameLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+JCFrameLayout.m"; sourceTree = ""; }; 2836F33A1E8CE49400C9BE35 /* JCFrameAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JCFrameAttribute.h; sourceTree = ""; }; 2836F33B1E8CE49400C9BE35 /* JCFrameAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JCFrameAttribute.m; sourceTree = ""; }; - 2836F33D1E8E2FEA00C9BE35 /* JCFrameExecutorMethods.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JCFrameExecutorMethods.h; sourceTree = ""; }; 2836F33F1E8E3DBA00C9BE35 /* SecondViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecondViewController.h; sourceTree = ""; }; 2836F3401E8E3DBA00C9BE35 /* SecondViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SecondViewController.m; sourceTree = ""; }; 2836F3421E8E3DE900C9BE35 /* ExampleVC1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExampleVC1.h; sourceTree = ""; }; @@ -93,7 +92,6 @@ 2836F33B1E8CE49400C9BE35 /* JCFrameAttribute.m */, 28E5EAD31E8B84A000701A93 /* JCFrameExecutor.h */, 28E5EAD41E8B84A000701A93 /* JCFrameExecutor.m */, - 2836F33D1E8E2FEA00C9BE35 /* JCFrameExecutorMethods.h */, 282FD7E31E895B6400E17BFB /* UIView+JCFrame.h */, 282FD7E41E895B6400E17BFB /* UIView+JCFrame.m */, 282FD7E51E895B6400E17BFB /* UIView+JCFrameLayout.h */, diff --git a/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate b/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate index 7a99810f4ead5e026316bd075a31c8f7480b3ef0..477c232869a9aa1016258a1031979cbf0c859d84 100644 GIT binary patch delta 35545 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 #zJPMD-PAp@ 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 @*>$Xt3tRR=CON8 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 Uf2a9gz5dscIsfbb-z!D`2ejqSTmS$7 diff --git a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m index 6e1184b..35e061d 100644 --- a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m +++ b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m @@ -10,7 +10,222 @@ #import "UIView+JCFrame.h" -#import "JCFrameExecutorMethods.h" + +#pragma mark - center 或 size 新值得计算 +/** + 根据relateCenter、multiplier、offset计算新的CGPoint + */ +CGPoint transToNewCenter(CGPoint relateCenter,CGFloat multiplier,id offset){ + CGFloat offsetX = [offset CGPointValue].x; + CGFloat offsetY = [offset CGPointValue].y; + CGFloat newCenterX = relateCenter.x * multiplier + offsetX; + CGFloat newCenterY = relateCenter.y * multiplier + offsetY; + return CGPointMake(newCenterX, newCenterY); +} + +/** + 根据relateCenter、multiplier、offset计算新的CGSize + */ +CGSize transToNewSize(CGSize relateSize,CGFloat multiplier,id offset){ + CGFloat offsetWidth = [offset CGSizeValue].width; + CGFloat offsetHeight = [offset CGSizeValue].height; + CGFloat newWidth = relateSize.width * multiplier + offsetWidth; + CGFloat newHeight = relateSize.height * multiplier + offsetHeight; + return CGSizeMake(newWidth, newHeight); +} + +#pragma mark - 设置布局属性 +void setLeftByLeftFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + //Left可以相对Left ,CenterX ,Right + CGFloat x = 0; + if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) { + x = frame.frameAttr.relateView.jc_x_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) { + x = frame.frameAttr.relateView.jc_centerX_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) { + x = frame.frameAttr.relateView.jc_right_value; + } + x = x * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; + frame.jc_equalTo(x); + view.jc_x_value = x; + }else{ + view.jc_x_value = ((NSNumber*)frame.value).doubleValue; + } +} + +void setRightByRightFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + //right可以相对left,centerX,right + CGFloat x = 0; + if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) { + x = frame.frameAttr.relateView.jc_x_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) { + x = frame.frameAttr.relateView.jc_centerX_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) { + x = frame.frameAttr.relateView.jc_right_value; + } + x = (x - view.jc_width_value) * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; + frame.jc_equalTo(x); + view.jc_x_value = x; + }else{ + view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_width_value/*宽度*/+((NSNumber*)frame.value).doubleValue/*右边距,负数*/; + } + +} + +void setSizeBySizeFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + //size只能相对size + if (frame.frameAttr.relateFrameType == JCFrameTypeSize) { + CGSize newSize = transToNewSize(frame.frameAttr.relateView.jc_size_value, frame.multiplier, frame.offset); + frame.jc_equalTo(newSize); + view.jc_size_value = newSize; + } + } + else{ + view.jc_size_value = ((NSValue*)frame.value).CGSizeValue; + } +} + +void setCenterByCenterFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + //center的相对值只能是center + if(frame.frameAttr.relateFrameType == JCFrameTypeCenter){ + //1. 根据multiplier和offset获取新的center + CGPoint newCenter = transToNewCenter(frame.frameAttr.relateView.jc_center_value,frame.multiplier,frame.offset); + //2. 将新的值回填回去,因为center的value属性赋值 + frame.jc_equalTo(newCenter); + //3. 设置新值 + view.jc_center_value = newCenter; + + } + }else{ + view.jc_center_value = ((NSValue*)frame.value).CGPointValue; + } +} + +void setWidthByWidthFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + if(frame.frameAttr.relateFrameType == JCFrameTypeWidth){ + //view2.width * 倍数 + 偏移量 + CGFloat newWidth = frame.frameAttr.relateView.jc_width_value * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; + //回填 + frame.jc_equalTo(newWidth); + //设置 + view.jc_width_value = newWidth; + } + }else{ + view.jc_width_value = ((NSNumber*)frame.value).doubleValue; + } +} + +void setHeightByHeightFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + //height只能相对height + if(frame.frameAttr.relateFrameType == JCFrameTypeHeight){ + //计算新值 + CGFloat newHeight = frame.frameAttr.relateView.jc_height_value * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; + //回填 + frame.jc_equalTo(newHeight); + //设置 + view.jc_height_value = newHeight; + } + }else{ + view.jc_height_value = ((NSNumber*)frame.value).doubleValue; + } +} + +void setCenterXByCenterXFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + /** + centerX相对值可以有left,centerX,right三个 + */ + CGFloat newCenterX = 0; + if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) {//Left + newCenterX = frame.frameAttr.relateView.jc_x_value; + + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) {//CenterX + newCenterX = frame.frameAttr.relateView.jc_centerX_value; + + }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) {//Right + newCenterX = frame.frameAttr.relateView.jc_right_value; + + } + + newCenterX = newCenterX * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; + frame.jc_equalTo(newCenterX); + view.jc_centerX_value = newCenterX; + }else{ + view.jc_centerX_value = ((NSNumber*)frame.value).doubleValue; + } +} + +void setCenterYByCenterYFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + /** + centerY相对值可以有top,centerY,bottom三个 + */ + CGFloat newCenterY = 0; + if (frame.frameAttr.relateFrameType == JCFrameTypeTop) {//top + newCenterY = frame.frameAttr.relateView.jc_y_value; + + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) {//CenterY + newCenterY = frame.frameAttr.relateView.jc_centerY_value; + + }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) {//bottom + newCenterY = frame.frameAttr.relateView.jc_bottom_value; + } + + newCenterY = newCenterY * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; + + frame.jc_equalTo(newCenterY); + view.jc_centerY_value = newCenterY; + }else{ + view.jc_centerY_value = ((NSNumber*)frame.value).doubleValue; + } +} + +void setTopByTopFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + //top 可以相对 top,centerY,bottom + CGFloat newTop = 0; + if (frame.frameAttr.relateFrameType == JCFrameTypeTop) { + newTop = frame.frameAttr.relateView.jc_y_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) { + newTop = frame.frameAttr.relateView.jc_centerY_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) { + newTop = frame.frameAttr.relateView.jc_bottom_value; + } + newTop = newTop * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; + //回填 + frame.jc_equalTo(newTop); + //设置 + view.jc_y_value = newTop; + }else{ + view.jc_y_value = ((NSNumber*)frame.value).doubleValue; + } +} + +void setBottomByBottomFrame(UIView*view,JCFrame*frame){ + if (frame.hasRelateAttr) { + //bottom可以相对top,centerY,bottom + CGFloat y = 0; + if (frame.frameAttr.relateFrameType == JCFrameTypeTop) { //Top + y = frame.frameAttr.relateView.jc_y_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) { //CenterY + y = frame.frameAttr.relateView.jc_centerY_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) { //Bottom + y = frame.frameAttr.relateView.jc_bottom_value; + } + y = (y - view.jc_height_value) * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; + frame.jc_equalTo(y); + view.jc_y_value = y; + }else{ + view.jc_y_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_height_value/*高度*/ + ((NSNumber*)frame.value).doubleValue/*距离父容器底边距,一般为负数*/; + } +} + #define SET_LEFT {\ JCFrame *left = [self filterFrameIn:frames frameType:(JCFrameTypeLeft)];\ diff --git a/JCFrameLayout/JCFrameLayout/JCFrameExecutorMethods.h b/JCFrameLayout/JCFrameLayout/JCFrameExecutorMethods.h deleted file mode 100644 index 862396f..0000000 --- a/JCFrameLayout/JCFrameLayout/JCFrameExecutorMethods.h +++ /dev/null @@ -1,229 +0,0 @@ -// -// JCFrameExecutorMethods.h -// JCFrameLayout -// -// Created by abc on 17/3/31. -// Copyright © 2017年 jackcat. All rights reserved. -// - -#ifndef JCFrameExecutorMethods_h -#define JCFrameExecutorMethods_h - -#import - -#pragma mark - center 或 size 新值得计算 -/** - 根据relateCenter、multiplier、offset计算新的CGPoint - */ -CGPoint transToNewCenter(CGPoint relateCenter,CGFloat multiplier,id offset){ - CGFloat offsetX = [offset CGPointValue].x; - CGFloat offsetY = [offset CGPointValue].y; - CGFloat newCenterX = relateCenter.x * multiplier + offsetX; - CGFloat newCenterY = relateCenter.y * multiplier + offsetY; - return CGPointMake(newCenterX, newCenterY); -} - -/** - 根据relateCenter、multiplier、offset计算新的CGSize - */ -CGSize transToNewSize(CGSize relateSize,CGFloat multiplier,id offset){ - CGFloat offsetWidth = [offset CGSizeValue].width; - CGFloat offsetHeight = [offset CGSizeValue].height; - CGFloat newWidth = relateSize.width * multiplier + offsetWidth; - CGFloat newHeight = relateSize.height * multiplier + offsetHeight; - return CGSizeMake(newWidth, newHeight); -} - -#pragma mark - 设置布局属性 -void setLeftByLeftFrame(UIView*view,JCFrame*frame){ - if (frame.hasRelateAttr) { - //Left可以相对Left ,CenterX ,Right - CGFloat x = 0; - if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) { - x = frame.frameAttr.relateView.jc_x_value; - }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) { - x = frame.frameAttr.relateView.jc_centerX_value; - }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) { - x = frame.frameAttr.relateView.jc_right_value; - } - x = x * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; - frame.jc_equalTo(x); - view.jc_x_value = x; - }else{ - view.jc_x_value = ((NSNumber*)frame.value).doubleValue; - } -} - -void setRightByRightFrame(UIView*view,JCFrame*frame){ - if (frame.hasRelateAttr) { - //right可以相对left,centerX,right - CGFloat x = 0; - if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) { - x = frame.frameAttr.relateView.jc_x_value; - }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) { - x = frame.frameAttr.relateView.jc_centerX_value; - }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) { - x = frame.frameAttr.relateView.jc_right_value; - } - x = (x - view.jc_width_value) * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; - frame.jc_equalTo(x); - view.jc_x_value = x; - }else{ - view.jc_x_value = view.superview.jc_width_value/*父容器宽度*/-view.jc_width_value/*宽度*/+((NSNumber*)frame.value).doubleValue/*右边距,负数*/; - } - -} - -void setSizeBySizeFrame(UIView*view,JCFrame*frame){ - if (frame.hasRelateAttr) { - //size只能相对size - if (frame.frameAttr.relateFrameType == JCFrameTypeSize) { - CGSize newSize = transToNewSize(frame.frameAttr.relateView.jc_size_value, frame.multiplier, frame.offset); - frame.jc_equalTo(newSize); - view.jc_size_value = newSize; - } - } - else{ - view.jc_size_value = ((NSValue*)frame.value).CGSizeValue; - } -} - -void setCenterByCenterFrame(UIView*view,JCFrame*frame){ - if (frame.hasRelateAttr) { - //center的相对值只能是center - if(frame.frameAttr.relateFrameType == JCFrameTypeCenter){ - //1. 根据multiplier和offset获取新的center - CGPoint newCenter = transToNewCenter(frame.frameAttr.relateView.jc_center_value,frame.multiplier,frame.offset); - //2. 将新的值回填回去,因为center的value属性赋值 - frame.jc_equalTo(newCenter); - //3. 设置新值 - view.jc_center_value = newCenter; - - } - }else{ - view.jc_center_value = ((NSValue*)frame.value).CGPointValue; - } -} - -void setWidthByWidthFrame(UIView*view,JCFrame*frame){ - if (frame.hasRelateAttr) { - if(frame.frameAttr.relateFrameType == JCFrameTypeWidth){ - //view2.width * 倍数 + 偏移量 - CGFloat newWidth = frame.frameAttr.relateView.jc_width_value * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; - //回填 - frame.jc_equalTo(newWidth); - //设置 - view.jc_width_value = newWidth; - } - }else{ - view.jc_width_value = ((NSNumber*)frame.value).doubleValue; - } -} - -void setHeightByHeightFrame(UIView*view,JCFrame*frame){ - if (frame.hasRelateAttr) { - //height只能相对height - if(frame.frameAttr.relateFrameType == JCFrameTypeHeight){ - //计算新值 - CGFloat newHeight = frame.frameAttr.relateView.jc_height_value * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; - //回填 - frame.jc_equalTo(newHeight); - //设置 - view.jc_height_value = newHeight; - } - }else{ - view.jc_height_value = ((NSNumber*)frame.value).doubleValue; - } -} - -void setCenterXByCenterXFrame(UIView*view,JCFrame*frame){ - if (frame.hasRelateAttr) { - /** - centerX相对值可以有left,centerX,right三个 - */ - CGFloat newCenterX = 0; - if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) {//Left - newCenterX = frame.frameAttr.relateView.jc_x_value; - - }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) {//CenterX - newCenterX = frame.frameAttr.relateView.jc_centerX_value; - - }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) {//Right - newCenterX = frame.frameAttr.relateView.jc_right_value; - - } - - newCenterX = newCenterX * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; - frame.jc_equalTo(newCenterX); - view.jc_centerX_value = newCenterX; - }else{ - view.jc_centerX_value = ((NSNumber*)frame.value).doubleValue; - } -} - -void setCenterYByCenterYFrame(UIView*view,JCFrame*frame){ - if (frame.hasRelateAttr) { - /** - centerY相对值可以有top,centerY,bottom三个 - */ - CGFloat newCenterY = 0; - if (frame.frameAttr.relateFrameType == JCFrameTypeTop) {//top - newCenterY = frame.frameAttr.relateView.jc_y_value; - - }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) {//CenterY - newCenterY = frame.frameAttr.relateView.jc_centerY_value; - - }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) {//bottom - newCenterY = frame.frameAttr.relateView.jc_bottom_value; - } - - newCenterY = newCenterY * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; - - frame.jc_equalTo(newCenterY); - view.jc_centerY_value = newCenterY; - }else{ - view.jc_centerY_value = ((NSNumber*)frame.value).doubleValue; - } -} - -void setTopByTopFrame(UIView*view,JCFrame*frame){ - if (frame.hasRelateAttr) { - //top 可以相对 top,centerY,bottom - CGFloat newTop = 0; - if (frame.frameAttr.relateFrameType == JCFrameTypeTop) { - newTop = frame.frameAttr.relateView.jc_y_value; - }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) { - newTop = frame.frameAttr.relateView.jc_centerY_value; - }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) { - newTop = frame.frameAttr.relateView.jc_bottom_value; - } - newTop = newTop * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; - //回填 - frame.jc_equalTo(newTop); - //设置 - view.jc_y_value = newTop; - }else{ - view.jc_y_value = ((NSNumber*)frame.value).doubleValue; - } -} - -void setBottomByBottomFrame(UIView*view,JCFrame*frame){ - if (frame.hasRelateAttr) { - //bottom可以相对top,centerY,bottom - CGFloat y = 0; - if (frame.frameAttr.relateFrameType == JCFrameTypeTop) { //Top - y = frame.frameAttr.relateView.jc_y_value; - }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) { //CenterY - y = frame.frameAttr.relateView.jc_centerY_value; - }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) { //Bottom - y = frame.frameAttr.relateView.jc_bottom_value; - } - y = (y - view.jc_height_value) * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; - frame.jc_equalTo(y); - view.jc_y_value = y; - }else{ - view.jc_y_value = view.superview.jc_height_value/*父容器高度*/ - view.jc_height_value/*高度*/ + ((NSNumber*)frame.value).doubleValue/*距离父容器底边距,一般为负数*/; - } -} - -#endif /* JCFrameExecutorMethods_h */ From 1725e4b115be169dbd08ee61c57ca86ed2f80653 Mon Sep 17 00:00:00 2001 From: wangyp2018 Date: Sat, 1 Apr 2017 17:17:38 +0800 Subject: [PATCH 07/14] =?UTF-8?q?1.=20=E4=BF=AE=E6=94=B9=E4=BA=86bug=202.?= =?UTF-8?q?=20=E6=B7=BB=E5=8A=A0=E6=B5=8B=E8=AF=95=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JCFrameLayout.podspec | 2 +- JCFrameLayout.xcodeproj/project.pbxproj | 6 + .../UserInterfaceState.xcuserstate | Bin 72262 -> 75561 bytes JCFrameLayout/Examples/ExampleVC6.h | 13 ++ JCFrameLayout/Examples/ExampleVC6.m | 53 ++++++ JCFrameLayout/JCFrameLayout/JCFrameExecutor.m | 169 +++++++++++++----- .../JCFrameLayout/UIView+JCFrameLayout.h | 3 + JCFrameLayout/ViewController.m | 7 +- 8 files changed, 205 insertions(+), 48 deletions(-) create mode 100644 JCFrameLayout/Examples/ExampleVC6.h create mode 100644 JCFrameLayout/Examples/ExampleVC6.m diff --git a/JCFrameLayout.podspec b/JCFrameLayout.podspec index c5d28c9..7004ce5 100644 --- a/JCFrameLayout.podspec +++ b/JCFrameLayout.podspec @@ -16,7 +16,7 @@ Pod::Spec.new do |s| # s.name = "JCFrameLayout" - s.version = "2.0.1" + s.version = "2.0.2" s.summary = "一款采用链式语法为视图做Frame布局的工具" # This description is used to generate tags and improve search results. diff --git a/JCFrameLayout.xcodeproj/project.pbxproj b/JCFrameLayout.xcodeproj/project.pbxproj index bb596d1..4cf2880 100644 --- a/JCFrameLayout.xcodeproj/project.pbxproj +++ b/JCFrameLayout.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 2836F3411E8E3DBA00C9BE35 /* SecondViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2836F3401E8E3DBA00C9BE35 /* SecondViewController.m */; }; 2836F3441E8E3DE900C9BE35 /* ExampleVC1.m in Sources */ = {isa = PBXBuildFile; fileRef = 2836F3431E8E3DE900C9BE35 /* ExampleVC1.m */; }; 2836F3471E8E438200C9BE35 /* ExampleVC2.m in Sources */ = {isa = PBXBuildFile; fileRef = 2836F3461E8E438200C9BE35 /* ExampleVC2.m */; }; + 2865622F1E8FA0D100707580 /* ExampleVC6.m in Sources */ = {isa = PBXBuildFile; fileRef = 2865622E1E8FA0D100707580 /* ExampleVC6.m */; }; 28D22AE21E8911C9002245F9 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D22AE11E8911C9002245F9 /* main.m */; }; 28D22AE51E8911C9002245F9 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D22AE41E8911C9002245F9 /* AppDelegate.m */; }; 28D22AE81E8911C9002245F9 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D22AE71E8911C9002245F9 /* ViewController.m */; }; @@ -45,6 +46,8 @@ 2836F3431E8E3DE900C9BE35 /* ExampleVC1.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExampleVC1.m; sourceTree = ""; }; 2836F3451E8E438200C9BE35 /* ExampleVC2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExampleVC2.h; sourceTree = ""; }; 2836F3461E8E438200C9BE35 /* ExampleVC2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExampleVC2.m; sourceTree = ""; }; + 2865622D1E8FA0D100707580 /* ExampleVC6.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExampleVC6.h; sourceTree = ""; }; + 2865622E1E8FA0D100707580 /* ExampleVC6.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExampleVC6.m; sourceTree = ""; }; 28D22ADD1E8911C9002245F9 /* JCFrameLayout.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JCFrameLayout.app; sourceTree = BUILT_PRODUCTS_DIR; }; 28D22AE11E8911C9002245F9 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 28D22AE31E8911C9002245F9 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -115,6 +118,8 @@ 28F35D701E8E470D0028340C /* ExampleVC4.m */, 28F35D721E8E4F2F0028340C /* ExampleVC5.h */, 28F35D731E8E4F2F0028340C /* ExampleVC5.m */, + 2865622D1E8FA0D100707580 /* ExampleVC6.h */, + 2865622E1E8FA0D100707580 /* ExampleVC6.m */, ); path = Examples; sourceTree = ""; @@ -235,6 +240,7 @@ files = ( 2836F3441E8E3DE900C9BE35 /* ExampleVC1.m in Sources */, 28D22AE81E8911C9002245F9 /* ViewController.m in Sources */, + 2865622F1E8FA0D100707580 /* ExampleVC6.m in Sources */, 2836F3471E8E438200C9BE35 /* ExampleVC2.m in Sources */, 28D22AE51E8911C9002245F9 /* AppDelegate.m in Sources */, 28F35D711E8E470D0028340C /* ExampleVC4.m in Sources */, diff --git a/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate b/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate index 477c232869a9aa1016258a1031979cbf0c859d84..e676002f790d4c0dc96dbf73690c5d9db3a9d3a1 100644 GIT binary patch literal 75561 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 D^EVS; diff --git a/JCFrameLayout/Examples/ExampleVC6.h b/JCFrameLayout/Examples/ExampleVC6.h new file mode 100644 index 0000000..ef2b859 --- /dev/null +++ b/JCFrameLayout/Examples/ExampleVC6.h @@ -0,0 +1,13 @@ +// +// ExampleVC6.h +// JCFrameLayout +// +// Created by abc on 17/4/1. +// Copyright © 2017年 jackcat. All rights reserved. +// + +#import + +@interface ExampleVC6 : UIViewController + +@end diff --git a/JCFrameLayout/Examples/ExampleVC6.m b/JCFrameLayout/Examples/ExampleVC6.m new file mode 100644 index 0000000..984c3e7 --- /dev/null +++ b/JCFrameLayout/Examples/ExampleVC6.m @@ -0,0 +1,53 @@ +// +// ExampleVC6.m +// JCFrameLayout +// +// Created by abc on 17/4/1. +// Copyright © 2017年 jackcat. All rights reserved. +// + +#import "ExampleVC6.h" + +#import "JCFrameLayout.h" + +@interface ExampleVC6 () + +@end + +@implementation ExampleVC6 + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor whiteColor]; + + UIView *yellowView = [[UIView alloc]init]; + yellowView.backgroundColor = [UIColor yellowColor]; + [self.view addSubview:yellowView]; + + [yellowView jc_makeLayout:^(JCFrameMake *make) { + make.width.height.jc_equalTo(200); + make.center.equalTo(self.view); + }]; + + UIView *redView = [[UIView alloc]init]; + redView.backgroundColor = [UIColor redColor]; + [yellowView addSubview:redView]; + + [redView jc_makeLayout:^(JCFrameMake *make) { + make.width.height.jc_equalTo(100); + +// make.center.equalTo(yellowView); +// make.centerX.equalTo(yellowView.jc_left); +// make.centerY.equalTo(yellowView.jc_bottom); + +// make.top.equalTo(yellowView.jc_bottom); +// make.right.equalTo(yellowView.jc_right); + + make.left.equalTo(yellowView.jc_right); + make.bottom.equalTo(yellowView.jc_bottom); + + }]; +} + +@end diff --git a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m index 35e061d..86baebf 100644 --- a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m +++ b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m @@ -39,13 +39,25 @@ void setLeftByLeftFrame(UIView*view,JCFrame*frame){ if (frame.hasRelateAttr) { //Left可以相对Left ,CenterX ,Right CGFloat x = 0; - if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) { - x = frame.frameAttr.relateView.jc_x_value; - }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) { - x = frame.frameAttr.relateView.jc_centerX_value; - }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) { - x = frame.frameAttr.relateView.jc_right_value; + //如果相对的是父容器,则计算方式不同 + if (frame.frameAttr.relateView == view.superview) { + if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) { + x = 0; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) { + x = view.superview.jc_width_value / 2; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) { + x = view.superview.jc_width_value; + } + }else{ + if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) { + x = frame.frameAttr.relateView.jc_x_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) { + x = frame.frameAttr.relateView.jc_centerX_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) { + x = frame.frameAttr.relateView.jc_right_value; + } } + x = x * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; frame.jc_equalTo(x); view.jc_x_value = x; @@ -58,13 +70,25 @@ void setRightByRightFrame(UIView*view,JCFrame*frame){ if (frame.hasRelateAttr) { //right可以相对left,centerX,right CGFloat x = 0; - if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) { - x = frame.frameAttr.relateView.jc_x_value; - }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) { - x = frame.frameAttr.relateView.jc_centerX_value; - }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) { - x = frame.frameAttr.relateView.jc_right_value; + //如果相对的是父容器,则计算方式不同 + if (frame.frameAttr.relateView == view.superview) { + if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) { + x = 0; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) { + x = view.superview.jc_width_value / 2; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) { + x = view.superview.jc_width_value; + } + }else{ + if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) { + x = frame.frameAttr.relateView.jc_x_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) { + x = frame.frameAttr.relateView.jc_centerX_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) { + x = frame.frameAttr.relateView.jc_right_value; + } } + x = (x - view.jc_width_value) * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; frame.jc_equalTo(x); view.jc_x_value = x; @@ -92,13 +116,17 @@ void setCenterByCenterFrame(UIView*view,JCFrame*frame){ if (frame.hasRelateAttr) { //center的相对值只能是center if(frame.frameAttr.relateFrameType == JCFrameTypeCenter){ - //1. 根据multiplier和offset获取新的center - CGPoint newCenter = transToNewCenter(frame.frameAttr.relateView.jc_center_value,frame.multiplier,frame.offset); + //1. 计算 + CGPoint newCenter = CGPointZero; + if (frame.frameAttr.relateView == view.superview) { //如果是相对于父容器,则需要特殊处理 + newCenter = CGPointMake(view.superview.jc_width_value / 2, view.superview.jc_height_value / 2); + }else{ + newCenter = transToNewCenter(frame.frameAttr.relateView.jc_center_value,frame.multiplier,frame.offset); + } //2. 将新的值回填回去,因为center的value属性赋值 frame.jc_equalTo(newCenter); //3. 设置新值 view.jc_center_value = newCenter; - } }else{ view.jc_center_value = ((NSValue*)frame.value).CGPointValue; @@ -142,15 +170,30 @@ void setCenterXByCenterXFrame(UIView*view,JCFrame*frame){ centerX相对值可以有left,centerX,right三个 */ CGFloat newCenterX = 0; - if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) {//Left - newCenterX = frame.frameAttr.relateView.jc_x_value; - - }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) {//CenterX - newCenterX = frame.frameAttr.relateView.jc_centerX_value; - - }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) {//Right - newCenterX = frame.frameAttr.relateView.jc_right_value; - + + //如果相对的是父容器,则计算方式不同 + if (frame.frameAttr.relateView == view.superview) { + if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) {//Left + newCenterX = 0; + + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) {//CenterX + newCenterX = view.superview.jc_width_value / 2; + + }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) {//Right + newCenterX = view.superview.jc_width_value; + + } + }else{ + if (frame.frameAttr.relateFrameType == JCFrameTypeLeft) {//Left + newCenterX = frame.frameAttr.relateView.jc_x_value; + + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterX) {//CenterX + newCenterX = frame.frameAttr.relateView.jc_centerX_value; + + }else if (frame.frameAttr.relateFrameType == JCFrameTypeRight) {//Right + newCenterX = frame.frameAttr.relateView.jc_right_value; + + } } newCenterX = newCenterX * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; @@ -167,16 +210,30 @@ void setCenterYByCenterYFrame(UIView*view,JCFrame*frame){ centerY相对值可以有top,centerY,bottom三个 */ CGFloat newCenterY = 0; - if (frame.frameAttr.relateFrameType == JCFrameTypeTop) {//top - newCenterY = frame.frameAttr.relateView.jc_y_value; - - }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) {//CenterY - newCenterY = frame.frameAttr.relateView.jc_centerY_value; - - }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) {//bottom - newCenterY = frame.frameAttr.relateView.jc_bottom_value; + //如果相对的是父容器,则计算方式不同 + if (frame.frameAttr.relateView == view.superview) { + if (frame.frameAttr.relateFrameType == JCFrameTypeTop) {//top + newCenterY = 0; + + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) {//CenterY + newCenterY = view.superview.jc_height_value / 2; + + }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) {//bottom + newCenterY = view.superview.jc_height_value; + } + }else{ + if (frame.frameAttr.relateFrameType == JCFrameTypeTop) {//top + newCenterY = frame.frameAttr.relateView.jc_y_value; + + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) {//CenterY + newCenterY = frame.frameAttr.relateView.jc_centerY_value; + + }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) {//bottom + newCenterY = frame.frameAttr.relateView.jc_bottom_value; + } } + newCenterY = newCenterY * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; frame.jc_equalTo(newCenterY); @@ -190,13 +247,25 @@ void setTopByTopFrame(UIView*view,JCFrame*frame){ if (frame.hasRelateAttr) { //top 可以相对 top,centerY,bottom CGFloat newTop = 0; - if (frame.frameAttr.relateFrameType == JCFrameTypeTop) { - newTop = frame.frameAttr.relateView.jc_y_value; - }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) { - newTop = frame.frameAttr.relateView.jc_centerY_value; - }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) { - newTop = frame.frameAttr.relateView.jc_bottom_value; + //如果相对的是父容器,则计算方式不同 + if (frame.frameAttr.relateView == view.superview) { + if (frame.frameAttr.relateFrameType == JCFrameTypeTop) { + newTop = 0; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) { + newTop = view.superview.jc_height_value / 2; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) { + newTop = view.superview.jc_height_value; + } + }else{ + if (frame.frameAttr.relateFrameType == JCFrameTypeTop) { + newTop = frame.frameAttr.relateView.jc_y_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) { + newTop = frame.frameAttr.relateView.jc_centerY_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) { + newTop = frame.frameAttr.relateView.jc_bottom_value; + } } + newTop = newTop * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; //回填 frame.jc_equalTo(newTop); @@ -211,13 +280,25 @@ void setBottomByBottomFrame(UIView*view,JCFrame*frame){ if (frame.hasRelateAttr) { //bottom可以相对top,centerY,bottom CGFloat y = 0; - if (frame.frameAttr.relateFrameType == JCFrameTypeTop) { //Top - y = frame.frameAttr.relateView.jc_y_value; - }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) { //CenterY - y = frame.frameAttr.relateView.jc_centerY_value; - }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) { //Bottom - y = frame.frameAttr.relateView.jc_bottom_value; + //如果相对的是父容器,则计算方式不同 + if (frame.frameAttr.relateView == view.superview) { + if (frame.frameAttr.relateFrameType == JCFrameTypeTop) { //Top + y = 0; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) { //CenterY + y = view.superview.jc_height_value / 2; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) { //Bottom + y = view.superview.jc_height_value; + } + }else{ + if (frame.frameAttr.relateFrameType == JCFrameTypeTop) { //Top + y = frame.frameAttr.relateView.jc_y_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeCenterY) { //CenterY + y = frame.frameAttr.relateView.jc_centerY_value; + }else if (frame.frameAttr.relateFrameType == JCFrameTypeBottom) { //Bottom + y = frame.frameAttr.relateView.jc_bottom_value; + } } + y = (y - view.jc_height_value) * frame.multiplier + ((NSNumber*)frame.offset).doubleValue; frame.jc_equalTo(y); view.jc_y_value = y; diff --git a/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.h b/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.h index 2d06c56..9dfc540 100644 --- a/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.h +++ b/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.h @@ -10,6 +10,9 @@ #import "JCFrameMake.h" +#define jc_screen_width ([UIScreen mainScreen].bounds.size.width) +#define jc_screen_height ([UIScreen mainScreen].bounds.size.height) + @interface UIView (JCFrameLayout) - (void)jc_makeLayout:(void(^)(JCFrameMake *make))block; diff --git a/JCFrameLayout/ViewController.m b/JCFrameLayout/ViewController.m index 6790bb1..8cad471 100644 --- a/JCFrameLayout/ViewController.m +++ b/JCFrameLayout/ViewController.m @@ -71,11 +71,12 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath if (!_datasource) { NSMutableArray *array = [NSMutableArray array]; - [array addObject:@{@"title":@"左,上,由,下",@"cls":@"ExampleVC1"}]; + [array addObject:@{@"title":@"左,上,右,下",@"cls":@"ExampleVC1"}]; [array addObject:@{@"title":@"九宫格(绝对布局)",@"cls":@"ExampleVC2"}]; [array addObject:@{@"title":@"九宫格(相对布局)",@"cls":@"ExampleVC3"}]; - [array addObject:@{@"title":@"一万个方块(绝对布局)",@"cls":@"ExampleVC4"}]; - [array addObject:@{@"title":@"一万个方块(相对布局)",@"cls":@"ExampleVC5"}]; + [array addObject:@{@"title":@"五千个方块(绝对布局)",@"cls":@"ExampleVC4"}]; + [array addObject:@{@"title":@"五千个方块(相对布局)",@"cls":@"ExampleVC5"}]; + [array addObject:@{@"title":@"调试测试",@"cls":@"ExampleVC6"}]; _datasource = [array copy]; } From 687f221c4a27ad97eac905ae357e282bde2a9a33 Mon Sep 17 00:00:00 2001 From: wangyp2018 Date: Mon, 3 Apr 2017 13:07:07 +0800 Subject: [PATCH 08/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9JCFrameLayout.spec?= =?UTF-8?q?=E7=9A=84=E7=89=88=E6=9C=AC=E5=8F=B7=E4=B8=BA2.0.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JCFrameLayout.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/JCFrameLayout.podspec b/JCFrameLayout.podspec index 7004ce5..c36ecfe 100644 --- a/JCFrameLayout.podspec +++ b/JCFrameLayout.podspec @@ -16,7 +16,7 @@ Pod::Spec.new do |s| # s.name = "JCFrameLayout" - s.version = "2.0.2" + s.version = "2.0.3" s.summary = "一款采用链式语法为视图做Frame布局的工具" # This description is used to generate tags and improve search results. From 34ec21609101885a6db472dd6f7c7bd9683eebc1 Mon Sep 17 00:00:00 2001 From: wangyp2018 Date: Mon, 3 Apr 2017 13:28:57 +0800 Subject: [PATCH 09/14] 1. set the macros jc_screen_width and jc_screen_height upper. 2. move the frameTypes from JCFrameMake.m to UIView+JCFrame.h and rename as jc_settedFrameTypes --- .../UserInterfaceState.xcuserstate | Bin 75561 -> 76061 bytes JCFrameLayout/JCFrameLayout/JCFrameExecutor.h | 3 +- JCFrameLayout/JCFrameLayout/JCFrameExecutor.m | 167 ++++++++++++------ JCFrameLayout/JCFrameLayout/JCFrameMake.m | 12 +- JCFrameLayout/JCFrameLayout/UIView+JCFrame.h | 3 + JCFrameLayout/JCFrameLayout/UIView+JCFrame.m | 13 ++ .../JCFrameLayout/UIView+JCFrameLayout.h | 9 +- .../JCFrameLayout/UIView+JCFrameLayout.m | 10 ++ 8 files changed, 153 insertions(+), 64 deletions(-) diff --git a/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate b/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate index e676002f790d4c0dc96dbf73690c5d9db3a9d3a1..105ea55e34492fdb6bebc369ff1405c3d7cd6e81 100644 GIT binary patch literal 76061 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℞cK+T6(VJ)i5^Hh+en^Nvw@>`e%85+vAkb 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 N@)0ASC;epq{{Y_lF}eT% delta 37912 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 F`yT_eomBt; diff --git a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.h b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.h index f4a62df..dc5fe3b 100644 --- a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.h +++ b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.h @@ -13,7 +13,6 @@ @interface JCFrameExecutor : NSObject -+ (void)executeWithView:(UIView*)view - frameTypes:(JCFrameType)frameTypes; ++ (void)executeWithView:(UIView*)view; @end diff --git a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m index 86baebf..d85d3ec 100644 --- a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m +++ b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m @@ -495,137 +495,137 @@ @implementation JCFrameExecutor // 含有4条边距值 // 25. left and right and top and bottom -+ (void)executeWithView:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (void)executeWithView:(UIView*)view{ // 1. center and size - if ([self layoutByCenterAndSize:view frameTypes:frameTypes]) { + if ([self layoutByCenterAndSize:view]) { return; } // 2. center and width and height - if ([self layoutByCenterAndWidthAndHeight:view frameTypes:frameTypes]) { + if ([self layoutByCenterAndWidthAndHeight:view]) { return; } // 3. centerX and centerY and size - if ([self layoutByCenterXAndCenterYAndSize:view frameTypes:frameTypes]) { + if ([self layoutByCenterXAndCenterYAndSize:view]) { return; } // 4. centerX and top and size - if ([self layoutByCenterXAndTopAndSize:view frameTypes:frameTypes]) { + if ([self layoutByCenterXAndTopAndSize:view]) { return; } // 5. centerX and bottom and size - if ([self layoutByCenterXAndBottomAndSize:view frameTypes:frameTypes]) { + if ([self layoutByCenterXAndBottomAndSize:view]) { return; } // 6. centerY and left and size - if ([self layoutByCenterYAndLeftAndSize:view frameTypes:frameTypes]) { + if ([self layoutByCenterYAndLeftAndSize:view]) { return; } // 7. centerY and right and size - if ([self layoutByCenterYAndRightAndSize:view frameTypes:frameTypes]) { + if ([self layoutByCenterYAndRightAndSize:view]) { return; } // 8. left and top and size - if ([self layoutByLeftAndTopAndSize:view frameTypes:frameTypes]) { + if ([self layoutByLeftAndTopAndSize:view]) { return; } // 9. left and bottom and size - if ([self layoutByLeftAndBottomAndSize:view frameTypes:frameTypes]) { + if ([self layoutByLeftAndBottomAndSize:view]) { return; } // 10. right and top and size - if ([self layoutByRightAndTopAndSize:view frameTypes:frameTypes]) { + if ([self layoutByRightAndTopAndSize:view]) { return; } // 11. right and bottom and size - if ([self layoutByRightAndBottomAndSize:view frameTypes:frameTypes]) { + if ([self layoutByRightAndBottomAndSize:view]) { return; } // 12. centerX and centerY and width and height - if ([self layoutByCenterXAndCenterYAndWidthAndHeight:view frameTypes:frameTypes]) { + if ([self layoutByCenterXAndCenterYAndWidthAndHeight:view]) { return; } // 13. centerX and top and width and height - if ([self layoutByCenterXAndTopAndWidthAndHeight:view frameTypes:frameTypes]) { + if ([self layoutByCenterXAndTopAndWidthAndHeight:view]) { return; } // 14. centerX and bottom and width and height - if ([self layoutByCenterXAndBottomAndWidthAndHeight:view frameTypes:frameTypes]) { + if ([self layoutByCenterXAndBottomAndWidthAndHeight:view]) { return; } // 15. centerY and left and width and height - if ([self layoutByCenterYAndLeftAndWidthAndHeight:view frameTypes:frameTypes]) { + if ([self layoutByCenterYAndLeftAndWidthAndHeight:view]) { return; } // 16. centerY and right and width and height - if ([self layoutByCenterYAndRightAndWidthAndHeight:view frameTypes:frameTypes]) { + if ([self layoutByCenterYAndRightAndWidthAndHeight:view]) { return; } // 含有2条边界值,2个尺寸 // 17. left and top and width and height - if ([self layoutByLeftAndTopAndWidthAndHeight:view frameTypes:frameTypes]) { + if ([self layoutByLeftAndTopAndWidthAndHeight:view]) { return; } // 18. left and bottom and width and height - if ([self layoutByLeftAndBottomAndWidthAndHeight:view frameTypes:frameTypes ]) { + if ([self layoutByLeftAndBottomAndWidthAndHeight:view ]) { return; } // 19. right and top and width and height - if ([self layoutByRightAndTopAndWidthAndHeight:view frameTypes:frameTypes]) { + if ([self layoutByRightAndTopAndWidthAndHeight:view]) { return; } // 20. right and bottom and width and height - if ([self layoutByRightAndBottomAndWidthAndHeight:view frameTypes:frameTypes]) { + if ([self layoutByRightAndBottomAndWidthAndHeight:view]) { return; } // 含有3条边距值,1个尺寸值 // 21. left and right and top and height - if ([self layoutByLeftAndRightAndTopAndHeight:view frameTypes:frameTypes]) { + if ([self layoutByLeftAndRightAndTopAndHeight:view]) { return; } // 22. left and right and bottom and height - if ([self layoutByLeftAndRightAndBottomAndHeight:view frameTypes:frameTypes]) { + if ([self layoutByLeftAndRightAndBottomAndHeight:view]) { return; } // 23. left and top and bottom and width - if ([self layoutByLeftAndTopAndBottomAndWidth:view frameTypes:frameTypes]) { + if ([self layoutByLeftAndTopAndBottomAndWidth:view]) { return; } // 24. right and top and bottom and width - if ([self layoutByRightAndTopAndBottomAndWidth:view frameTypes:frameTypes]) { + if ([self layoutByRightAndTopAndBottomAndWidth:view]) { return; } // 含有4条边距值 // 25. left and right and top and bottom - if ([self layoutByLeftAndRightAndTopAndBottom:view frameTypes:frameTypes]) { + if ([self layoutByLeftAndRightAndTopAndBottom:view]) { return; } @@ -633,8 +633,10 @@ + (void)executeWithView:(UIView*)view frameTypes:(JCFrameType)frameTypes{ #pragma mark - 含有 center 和 size // 1. center and size -+ (BOOL)layoutByCenterAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByCenterAndSize:(UIView*)view{ + JCFrameType frameTypes = view.jc_settedFrameTypes; + if ((frameTypes & JCFrameTypeCenter) &&(frameTypes & JCFrameTypeSize)) { @@ -656,8 +658,10 @@ + (BOOL)layoutByCenterAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{ #pragma mark - 只有 center // 2. center and width and height -+ (BOOL)layoutByCenterAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByCenterAndWidthAndHeight:(UIView*)view{ + JCFrameType frameTypes = view.jc_settedFrameTypes; + if ((frameTypes & JCFrameTypeCenter) &&(frameTypes & JCFrameTypeWidth) &&(frameTypes & JCFrameTypeHeight)) { @@ -684,7 +688,9 @@ + (BOOL)layoutByCenterAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)fr #pragma mark - 只有 size 和 (centerX 或 centerY) // 3. centerX and centerY and size -+ (BOOL)layoutByCenterXAndCenterYAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByCenterXAndCenterYAndSize:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; if ((frameTypes & JCFrameTypeCenterX) &&(frameTypes & JCFrameTypeCenterY) @@ -710,7 +716,10 @@ + (BOOL)layoutByCenterXAndCenterYAndSize:(UIView*)view frameTypes:(JCFrameType)f } // 4. centerX and top and size -+ (BOOL)layoutByCenterXAndTopAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByCenterXAndTopAndSize:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; + if ((frameTypes & JCFrameTypeCenterX) &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeSize)) { @@ -736,7 +745,11 @@ + (BOOL)layoutByCenterXAndTopAndSize:(UIView*)view frameTypes:(JCFrameType)frame } // 5. centerX and bottom and size -+ (BOOL)layoutByCenterXAndBottomAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{NSArray*frames = view.jc_frames; ++ (BOOL)layoutByCenterXAndBottomAndSize:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; + + NSArray*frames = view.jc_frames; if ((frameTypes & JCFrameTypeCenterX) &&(frameTypes & JCFrameTypeBottom) &&(frameTypes & JCFrameTypeSize)) { @@ -758,7 +771,9 @@ + (BOOL)layoutByCenterXAndBottomAndSize:(UIView*)view frameTypes:(JCFrameType)fr } // 6. centerY and left and size -+ (BOOL)layoutByCenterYAndLeftAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByCenterYAndLeftAndSize:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; if ((frameTypes & JCFrameTypeCenterY) &&(frameTypes & JCFrameTypeLeft) @@ -783,7 +798,11 @@ + (BOOL)layoutByCenterYAndLeftAndSize:(UIView*)view frameTypes:(JCFrameType)fram } // 7. centerY and right and size -+ (BOOL)layoutByCenterYAndRightAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{NSArray*frames = view.jc_frames; ++ (BOOL)layoutByCenterYAndRightAndSize:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; + + NSArray*frames = view.jc_frames; if ((frameTypes & JCFrameTypeCenterY) &&(frameTypes & JCFrameTypeRight) @@ -808,7 +827,12 @@ + (BOOL)layoutByCenterYAndRightAndSize:(UIView*)view frameTypes:(JCFrameType)fra #pragma mark - 只有 size // 8. left and top and size -+ (BOOL)layoutByLeftAndTopAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{NSArray*frames = view.jc_frames; ++ (BOOL)layoutByLeftAndTopAndSize:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; + + NSArray*frames = view.jc_frames; + if ((frameTypes & JCFrameTypeLeft) &&(frameTypes & JCFrameTypeTop) &&(frameTypes & JCFrameTypeSize)) { @@ -830,7 +854,11 @@ + (BOOL)layoutByLeftAndTopAndSize:(UIView*)view frameTypes:(JCFrameType)frameTyp } // 9. left and bottom and size -+ (BOOL)layoutByLeftAndBottomAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{NSArray*frames = view.jc_frames; ++ (BOOL)layoutByLeftAndBottomAndSize:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; + + NSArray*frames = view.jc_frames; if ((frameTypes & JCFrameTypeLeft) &&(frameTypes & JCFrameTypeBottom) @@ -853,7 +881,9 @@ + (BOOL)layoutByLeftAndBottomAndSize:(UIView*)view frameTypes:(JCFrameType)frame } // 10. right and top and size -+ (BOOL)layoutByRightAndTopAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByRightAndTopAndSize:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; NSArray*frames = view.jc_frames; @@ -878,7 +908,11 @@ + (BOOL)layoutByRightAndTopAndSize:(UIView*)view frameTypes:(JCFrameType)frameTy } // 11. right and bottom and size -+ (BOOL)layoutByRightAndBottomAndSize:(UIView*)view frameTypes:(JCFrameType)frameTypes{NSArray*frames = view.jc_frames; ++ (BOOL)layoutByRightAndBottomAndSize:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; + + NSArray*frames = view.jc_frames; if ((frameTypes & JCFrameTypeRight) &&(frameTypes & JCFrameTypeBottom) @@ -903,7 +937,10 @@ + (BOOL)layoutByRightAndBottomAndSize:(UIView*)view frameTypes:(JCFrameType)fram #pragma mark - 含有centerX 或 centerY // 12. centerX and centerY and width and height -+ (BOOL)layoutByCenterXAndCenterYAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByCenterXAndCenterYAndWidthAndHeight:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; + NSArray*frames = view.jc_frames; if ((frameTypes & JCFrameTypeCenterX) @@ -933,7 +970,10 @@ + (BOOL)layoutByCenterXAndCenterYAndWidthAndHeight:(UIView*)view frameTypes:(JCF } // 13. centerX and top and width and height -+ (BOOL)layoutByCenterXAndTopAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByCenterXAndTopAndWidthAndHeight:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; + NSArray*frames = view.jc_frames; if ((frameTypes & JCFrameTypeCenterX) @@ -962,7 +1002,9 @@ + (BOOL)layoutByCenterXAndTopAndWidthAndHeight:(UIView*)view frameTypes:(JCFrame } // 14. centerX and bottom and width and height -+ (BOOL)layoutByCenterXAndBottomAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByCenterXAndBottomAndWidthAndHeight:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; NSArray*frames = view.jc_frames; @@ -992,7 +1034,9 @@ + (BOOL)layoutByCenterXAndBottomAndWidthAndHeight:(UIView*)view frameTypes:(JCFr } // 15. centerY and left and width and height -+ (BOOL)layoutByCenterYAndLeftAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByCenterYAndLeftAndWidthAndHeight:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; NSArray*frames = view.jc_frames; @@ -1022,7 +1066,9 @@ + (BOOL)layoutByCenterYAndLeftAndWidthAndHeight:(UIView*)view frameTypes:(JCFram } // 16. centerY and right and width and height -+ (BOOL)layoutByCenterYAndRightAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByCenterYAndRightAndWidthAndHeight:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; NSArray*frames = view.jc_frames; @@ -1053,7 +1099,9 @@ + (BOOL)layoutByCenterYAndRightAndWidthAndHeight:(UIView*)view frameTypes:(JCFra #pragma mark - 含有2条边界值,2个尺寸的组合 // 17. left and top and width and height -+ (BOOL)layoutByLeftAndTopAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByLeftAndTopAndWidthAndHeight:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; NSArray*frames = view.jc_frames; @@ -1083,7 +1131,10 @@ + (BOOL)layoutByLeftAndTopAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameTyp } // 18. left and bottom and width and height -+ (BOOL)layoutByLeftAndBottomAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByLeftAndBottomAndWidthAndHeight:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; + NSArray*frames = view.jc_frames; if ((frameTypes & JCFrameTypeLeft) @@ -1113,7 +1164,9 @@ + (BOOL)layoutByLeftAndBottomAndWidthAndHeight:(UIView*)view frameTypes:(JCFrame } // 19. right and top and width and height -+ (BOOL)layoutByRightAndTopAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByRightAndTopAndWidthAndHeight:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; NSArray*frames = view.jc_frames; @@ -1143,7 +1196,9 @@ + (BOOL)layoutByRightAndTopAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameTy } // 20. right and bottom and width and height -+ (BOOL)layoutByRightAndBottomAndWidthAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByRightAndBottomAndWidthAndHeight:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; NSArray*frames = view.jc_frames; if ((frameTypes & JCFrameTypeRight) @@ -1174,8 +1229,9 @@ + (BOOL)layoutByRightAndBottomAndWidthAndHeight:(UIView*)view frameTypes:(JCFram #pragma mark - 含有3条边距值,1个尺寸值的组合 // 21. left and right and top and height -+ (BOOL)layoutByLeftAndRightAndTopAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByLeftAndRightAndTopAndHeight:(UIView*)view{ + JCFrameType frameTypes = view.jc_settedFrameTypes; NSArray*frames = view.jc_frames; @@ -1203,7 +1259,9 @@ + (BOOL)layoutByLeftAndRightAndTopAndHeight:(UIView*)view frameTypes:(JCFrameTyp } // 22. left and right and bottom and height -+ (BOOL)layoutByLeftAndRightAndBottomAndHeight:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByLeftAndRightAndBottomAndHeight:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; NSArray*frames = view.jc_frames; @@ -1231,7 +1289,9 @@ + (BOOL)layoutByLeftAndRightAndBottomAndHeight:(UIView*)view frameTypes:(JCFrame } // 23. left and top and bottom and width -+ (BOOL)layoutByLeftAndTopAndBottomAndWidth:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByLeftAndTopAndBottomAndWidth:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; NSArray*frames = view.jc_frames; @@ -1259,7 +1319,10 @@ + (BOOL)layoutByLeftAndTopAndBottomAndWidth:(UIView*)view frameTypes:(JCFrameTyp } // 24. right and top and bottom and width -+ (BOOL)layoutByRightAndTopAndBottomAndWidth:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByRightAndTopAndBottomAndWidth:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; + NSArray*frames = view.jc_frames; if ((frameTypes & JCFrameTypeRight) @@ -1288,7 +1351,9 @@ + (BOOL)layoutByRightAndTopAndBottomAndWidth:(UIView*)view frameTypes:(JCFrameTy #pragma mark - 含有4条边距值 // 25. left and right and top and bottom -+ (BOOL)layoutByLeftAndRightAndTopAndBottom:(UIView*)view frameTypes:(JCFrameType)frameTypes{ ++ (BOOL)layoutByLeftAndRightAndTopAndBottom:(UIView*)view{ + + JCFrameType frameTypes = view.jc_settedFrameTypes; NSArray*frames = view.jc_frames; if ((frameTypes & JCFrameTypeLeft) diff --git a/JCFrameLayout/JCFrameLayout/JCFrameMake.m b/JCFrameLayout/JCFrameLayout/JCFrameMake.m index 907b2a8..404da63 100644 --- a/JCFrameLayout/JCFrameLayout/JCFrameMake.m +++ b/JCFrameLayout/JCFrameLayout/JCFrameMake.m @@ -18,11 +18,6 @@ @interface JCFrameMake () **/ @property (nonatomic,weak) UIView *view; -/** - * <#注释#> - **/ -@property (nonatomic,assign) JCFrameType frameTypes; - @end @implementation JCFrameMake @@ -75,7 +70,7 @@ - (JCFrame*)jcFrame:(JCFrame *)jcFrame createFrameWithframeType:(JCFrameType)fra - (JCFrame *)createJCLayoutFrame:(JCFrameType)frameType{ - if (self.frameTypes & frameType) { + if (self.view.jc_settedFrameTypes & frameType) { /** 如果这个frameType已存在,则直接返回,反之创建 */ @@ -88,7 +83,7 @@ - (JCFrame *)createJCLayoutFrame:(JCFrameType)frameType{ }else{ //1.将frameType标记为已存在 - self.frameTypes |= frameType; + self.view.jc_settedFrameTypes |= frameType; //2.创建JCFrameAttribute JCFrameAttribute *frameAttribute = [[JCFrameAttribute alloc]initWithView:self.view frameType:frameType]; @@ -107,8 +102,7 @@ - (JCFrame *)createJCLayoutFrame:(JCFrameType)frameType{ } - (void)executeLayout{ - [JCFrameExecutor executeWithView:self.view - frameTypes:self.frameTypes]; + [JCFrameExecutor executeWithView:self.view]; JCLog(@"--frames = %@",self.view.jc_frames); } diff --git a/JCFrameLayout/JCFrameLayout/UIView+JCFrame.h b/JCFrameLayout/JCFrameLayout/UIView+JCFrame.h index b77136e..e7adc0c 100644 --- a/JCFrameLayout/JCFrameLayout/UIView+JCFrame.h +++ b/JCFrameLayout/JCFrameLayout/UIView+JCFrame.h @@ -57,4 +57,7 @@ - (NSMutableArray *)jc_frames; +- (JCFrameType)jc_settedFrameTypes; +- (void)setJc_settedFrameTypes:(JCFrameType)frameType; + @end diff --git a/JCFrameLayout/JCFrameLayout/UIView+JCFrame.m b/JCFrameLayout/JCFrameLayout/UIView+JCFrame.m index 1808aaf..c3f9541 100644 --- a/JCFrameLayout/JCFrameLayout/UIView+JCFrame.m +++ b/JCFrameLayout/JCFrameLayout/UIView+JCFrame.m @@ -10,6 +10,7 @@ #import static char debugkey; +static char settedFrameTypesKey; @implementation UIView (JCFrame) @@ -142,4 +143,16 @@ - (NSMutableArray *)jc_frames{ } return array; } +- (JCFrameType)jc_settedFrameTypes{ + NSNumber *settedFrameTypes = ((NSNumber*)objc_getAssociatedObject(self, &settedFrameTypesKey)); + if (!settedFrameTypes) { + settedFrameTypes = [NSNumber numberWithInt:0]; + objc_setAssociatedObject(self, &settedFrameTypesKey, settedFrameTypes, OBJC_ASSOCIATION_ASSIGN); + } + return settedFrameTypes.integerValue; +} +- (void)setJc_settedFrameTypes:(JCFrameType)frameType{ + NSNumber *settedFrameTypes = [NSNumber numberWithInt:frameType]; + objc_setAssociatedObject(self, &settedFrameTypesKey, settedFrameTypes, OBJC_ASSOCIATION_ASSIGN); +} @end diff --git a/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.h b/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.h index 9dfc540..24ab49d 100644 --- a/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.h +++ b/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.h @@ -10,11 +10,16 @@ #import "JCFrameMake.h" -#define jc_screen_width ([UIScreen mainScreen].bounds.size.width) -#define jc_screen_height ([UIScreen mainScreen].bounds.size.height) +#define JC_SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width) +#define JC_SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height) @interface UIView (JCFrameLayout) - (void)jc_makeLayout:(void(^)(JCFrameMake *make))block; +/** + 重新布局 + */ +- (void)jc_updateLayout; + @end diff --git a/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.m b/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.m index c2bb3f3..fb1c531 100644 --- a/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.m +++ b/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.m @@ -9,6 +9,8 @@ #import "UIView+JCFrameLayout.h" #import "UIView+JCFrame.h" +#import "JCFrameExecutor.h" + @implementation UIView (JCFrameLayout) - (void)jc_makeLayout:(void (^)(JCFrameMake *))block{ @@ -23,5 +25,13 @@ - (void)jc_makeLayout:(void (^)(JCFrameMake *))block{ } +/** + 重新布局 + */ +- (void)jc_updateLayout{ + [JCFrameExecutor executeWithView:self]; + JCLog(@"--frames = %@",self.view.jc_frames); +} + @end From 9d0707c752c0dc5a6d87f649779b20288db6b1a5 Mon Sep 17 00:00:00 2001 From: wangyp2018 Date: Mon, 3 Apr 2017 14:01:44 +0800 Subject: [PATCH 10/14] =?UTF-8?q?=E8=A7=A3=E5=86=B3center(superview).jc=5F?= =?UTF-8?q?offset=E6=97=A0=E6=95=88=E7=9A=84Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 76061 -> 76517 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 76 ++++++++++++++++++ JCFrameLayout/Examples/ExampleVC6.m | 49 ++++++----- JCFrameLayout/JCFrameLayout/JCFrameExecutor.m | 5 +- JCFrameLayout/JCFrameLayout/UIView+JCFrame.h | 4 +- JCFrameLayout/JCFrameLayout/UIView+JCFrame.m | 4 + .../JCFrameLayout/UIView+JCFrameLayout.m | 5 +- 7 files changed, 118 insertions(+), 25 deletions(-) diff --git a/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate b/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate index 105ea55e34492fdb6bebc369ff1405c3d7cd6e81..2fe9540b9d4618f10d6b2b36cdf3a578d9744c96 100644 GIT binary patch delta 37033 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 Uksx#C{9mr`|G)hIcV_JW0UZgc<^TWy delta 35750 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

!
zS6EkESAN%pt{YwTUG}cVt_NL@x|+J0yIyy-b#-=icYW;Y@A}&Ht?NhksO}Bj`0oAP
z+1>fwW!;y$Z*<@8uI;|t?dZPW4gB5xq}$o;>VDSU*4@+H+x@w_zk8(nXU~|P@jVlJ
zX7$YNS=F-St_04ZeH6
zhrY)?r_b&C$M>)ArSCtV*VpFj@b&oyd_%sGPvlR6PohuKPl``XpI&}?{psze*3S{2
zv7hmuNuQ~oZ+~`tzW4dz=f_`w-@okn;`b%+OYoP|U(SEI_~pu%Ykd)Y*gkw8sgK%c
z?R(Pa>~r`1)Bk(_o_@dn!2aO=-2PMjCH>|7mHop569*;_OdFUvz!^{us0VZd@dHl=
zUJSe%cr);B&~Gq&Fmf2{bR?EU-$k1{a>|W%$Wb
+   
+      
+         
+         
+      
+      
+         
+         
+      
+      
+         
+         
+      
+      
+         
+         
+      
+      
+         
+         
+      
+   
 
diff --git a/JCFrameLayout/Examples/ExampleVC6.m b/JCFrameLayout/Examples/ExampleVC6.m
index 984c3e7..9257938 100644
--- a/JCFrameLayout/Examples/ExampleVC6.m
+++ b/JCFrameLayout/Examples/ExampleVC6.m
@@ -11,7 +11,14 @@
 #import "JCFrameLayout.h"
 
 @interface ExampleVC6 ()
-
+/**
+ *  <#注释#>
+ **/
+@property (nonatomic,strong) UIView *yellowView;
+/**
+ *  <#注释#>
+ **/
+@property (nonatomic,strong) UIView *redView;
 @end
 
 @implementation ExampleVC6
@@ -21,33 +28,31 @@ - (void)viewDidLoad {
     
     self.view.backgroundColor = [UIColor whiteColor];
     
-    UIView *yellowView = [[UIView alloc]init];
-    yellowView.backgroundColor = [UIColor yellowColor];
-    [self.view addSubview:yellowView];
+    _yellowView = [[UIView alloc]init];
+    _yellowView.backgroundColor = [UIColor yellowColor];
+    [self.view addSubview:_yellowView];
     
-    [yellowView jc_makeLayout:^(JCFrameMake *make) {
+    [_yellowView jc_makeLayout:^(JCFrameMake *make) {
         make.width.height.jc_equalTo(200);
         make.center.equalTo(self.view);
     }];
     
-    UIView *redView = [[UIView alloc]init];
-    redView.backgroundColor = [UIColor redColor];
-    [yellowView addSubview:redView];
-    
-    [redView jc_makeLayout:^(JCFrameMake *make) {
-        make.width.height.jc_equalTo(100);
-        
-//        make.center.equalTo(yellowView);
-//        make.centerX.equalTo(yellowView.jc_left);
-//        make.centerY.equalTo(yellowView.jc_bottom);
-        
-//        make.top.equalTo(yellowView.jc_bottom);
-//        make.right.equalTo(yellowView.jc_right);
-        
-        make.left.equalTo(yellowView.jc_right);
-        make.bottom.equalTo(yellowView.jc_bottom);
-        
+//    _redView = [[UIView alloc]init];
+//    _redView.backgroundColor = [UIColor redColor];
+//    [_yellowView addSubview:_redView];
+//    
+//    [_redView jc_makeLayout:^(JCFrameMake *make) {
+//        make.center.equalTo(_yellowView);
+//        make.size.jc_equalTo(CGSizeMake(100, 100));
+//    }];
+}
+
+- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
+    [_yellowView jc_makeLayout:^(JCFrameMake *make) {
+        make.width.height.jc_equalTo(200);
+        make.center.equalTo(self.view).jc_offset(CGPointMake(0, 50));
     }];
+//    [_redView jc_updateLayout];
 }
 
 @end
diff --git a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m
index d85d3ec..e36b759 100644
--- a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m
+++ b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m
@@ -121,8 +121,11 @@ void setCenterByCenterFrame(UIView*view,JCFrame*frame){
             if (frame.frameAttr.relateView == view.superview) { //如果是相对于父容器,则需要特殊处理
                 newCenter = CGPointMake(view.superview.jc_width_value / 2, view.superview.jc_height_value / 2);
             }else{
-                newCenter = transToNewCenter(frame.frameAttr.relateView.jc_center_value,frame.multiplier,frame.offset);
+                newCenter = frame.frameAttr.relateView.jc_center_value;
             }
+            
+            newCenter = transToNewCenter(frame.frameAttr.relateView.jc_center_value,frame.multiplier,frame.offset);
+            
             //2. 将新的值回填回去,因为center的value属性赋值
             frame.jc_equalTo(newCenter);
             //3. 设置新值
diff --git a/JCFrameLayout/JCFrameLayout/UIView+JCFrame.h b/JCFrameLayout/JCFrameLayout/UIView+JCFrame.h
index e7adc0c..8b3a88f 100644
--- a/JCFrameLayout/JCFrameLayout/UIView+JCFrame.h
+++ b/JCFrameLayout/JCFrameLayout/UIView+JCFrame.h
@@ -56,7 +56,9 @@
 @property (nonatomic,copy) NSString *jc_debug_key;
 
 - (NSMutableArray *)jc_frames;
-
+/**
+ 已经设置过得布局属性,通过位运算来组合
+ */
 - (JCFrameType)jc_settedFrameTypes;
 - (void)setJc_settedFrameTypes:(JCFrameType)frameType;
 
diff --git a/JCFrameLayout/JCFrameLayout/UIView+JCFrame.m b/JCFrameLayout/JCFrameLayout/UIView+JCFrame.m
index c3f9541..62f827d 100644
--- a/JCFrameLayout/JCFrameLayout/UIView+JCFrame.m
+++ b/JCFrameLayout/JCFrameLayout/UIView+JCFrame.m
@@ -143,6 +143,10 @@ - (NSMutableArray *)jc_frames{
     }
     return array;
 }
+
+/**
+ 已经设置过得布局属性,通过位运算来组合
+ */
 - (JCFrameType)jc_settedFrameTypes{
     NSNumber *settedFrameTypes = ((NSNumber*)objc_getAssociatedObject(self, &settedFrameTypesKey));
     if (!settedFrameTypes) {
diff --git a/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.m b/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.m
index fb1c531..33b7c76 100644
--- a/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.m
+++ b/JCFrameLayout/JCFrameLayout/UIView+JCFrameLayout.m
@@ -14,8 +14,11 @@
 @implementation UIView (JCFrameLayout)
 
 - (void)jc_makeLayout:(void (^)(JCFrameMake *))block{
+    
     //清空已存在的属性
     [self.jc_frames removeAllObjects];
+    self.jc_settedFrameTypes = 0;
+    
     //创建Frame构建器
     JCFrameMake *make = [[JCFrameMake alloc]initWithView:self];
     //生成frame
@@ -30,7 +33,7 @@ - (void)jc_makeLayout:(void (^)(JCFrameMake *))block{
  */
 - (void)jc_updateLayout{
     [JCFrameExecutor executeWithView:self];
-    JCLog(@"--frames = %@",self.view.jc_frames);
+    JCLog(@"--frames = %@",self.jc_frames);
 }
 
 

From 47c42a8e77ab6d1cfe94075effa85d4a7dff8e5f Mon Sep 17 00:00:00 2001
From: wangyp2018 
Date: Mon, 3 Apr 2017 14:45:49 +0800
Subject: [PATCH 11/14] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9bug=202.=E6=B7=BB?=
 =?UTF-8?q?=E5=8A=A0=E8=B0=83=E8=AF=95Demo?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 JCFrameLayout.xcodeproj/project.pbxproj       |  12 +--
 .../UserInterfaceState.xcuserstate            | Bin 76517 -> 89044 bytes
 .../xcdebugger/Breakpoints_v2.xcbkptlist      |  56 +++----------
 .../Examples/{ExampleVC6.h => DevTest.h}      |   2 +-
 JCFrameLayout/Examples/DevTest.m              |  75 ++++++++++++++++++
 JCFrameLayout/Examples/ExampleVC6.m           |  58 --------------
 JCFrameLayout/JCFrameLayout/JCFrameExecutor.m |   2 +-
 JCFrameLayout/ViewController.m                |   2 +-
 8 files changed, 96 insertions(+), 111 deletions(-)
 rename JCFrameLayout/Examples/{ExampleVC6.h => DevTest.h} (79%)
 create mode 100644 JCFrameLayout/Examples/DevTest.m
 delete mode 100644 JCFrameLayout/Examples/ExampleVC6.m

diff --git a/JCFrameLayout.xcodeproj/project.pbxproj b/JCFrameLayout.xcodeproj/project.pbxproj
index 4cf2880..a71af2f 100644
--- a/JCFrameLayout.xcodeproj/project.pbxproj
+++ b/JCFrameLayout.xcodeproj/project.pbxproj
@@ -15,7 +15,7 @@
 		2836F3411E8E3DBA00C9BE35 /* SecondViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2836F3401E8E3DBA00C9BE35 /* SecondViewController.m */; };
 		2836F3441E8E3DE900C9BE35 /* ExampleVC1.m in Sources */ = {isa = PBXBuildFile; fileRef = 2836F3431E8E3DE900C9BE35 /* ExampleVC1.m */; };
 		2836F3471E8E438200C9BE35 /* ExampleVC2.m in Sources */ = {isa = PBXBuildFile; fileRef = 2836F3461E8E438200C9BE35 /* ExampleVC2.m */; };
-		2865622F1E8FA0D100707580 /* ExampleVC6.m in Sources */ = {isa = PBXBuildFile; fileRef = 2865622E1E8FA0D100707580 /* ExampleVC6.m */; };
+		2865622F1E8FA0D100707580 /* DevTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 2865622E1E8FA0D100707580 /* DevTest.m */; };
 		28D22AE21E8911C9002245F9 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D22AE11E8911C9002245F9 /* main.m */; };
 		28D22AE51E8911C9002245F9 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D22AE41E8911C9002245F9 /* AppDelegate.m */; };
 		28D22AE81E8911C9002245F9 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D22AE71E8911C9002245F9 /* ViewController.m */; };
@@ -46,8 +46,8 @@
 		2836F3431E8E3DE900C9BE35 /* ExampleVC1.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExampleVC1.m; sourceTree = ""; };
 		2836F3451E8E438200C9BE35 /* ExampleVC2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExampleVC2.h; sourceTree = ""; };
 		2836F3461E8E438200C9BE35 /* ExampleVC2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExampleVC2.m; sourceTree = ""; };
-		2865622D1E8FA0D100707580 /* ExampleVC6.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExampleVC6.h; sourceTree = ""; };
-		2865622E1E8FA0D100707580 /* ExampleVC6.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExampleVC6.m; sourceTree = ""; };
+		2865622D1E8FA0D100707580 /* DevTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DevTest.h; sourceTree = ""; };
+		2865622E1E8FA0D100707580 /* DevTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DevTest.m; sourceTree = ""; };
 		28D22ADD1E8911C9002245F9 /* JCFrameLayout.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JCFrameLayout.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		28D22AE11E8911C9002245F9 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
 		28D22AE31E8911C9002245F9 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
@@ -118,8 +118,8 @@
 				28F35D701E8E470D0028340C /* ExampleVC4.m */,
 				28F35D721E8E4F2F0028340C /* ExampleVC5.h */,
 				28F35D731E8E4F2F0028340C /* ExampleVC5.m */,
-				2865622D1E8FA0D100707580 /* ExampleVC6.h */,
-				2865622E1E8FA0D100707580 /* ExampleVC6.m */,
+				2865622D1E8FA0D100707580 /* DevTest.h */,
+				2865622E1E8FA0D100707580 /* DevTest.m */,
 			);
 			path = Examples;
 			sourceTree = "";
@@ -240,7 +240,7 @@
 			files = (
 				2836F3441E8E3DE900C9BE35 /* ExampleVC1.m in Sources */,
 				28D22AE81E8911C9002245F9 /* ViewController.m in Sources */,
-				2865622F1E8FA0D100707580 /* ExampleVC6.m in Sources */,
+				2865622F1E8FA0D100707580 /* DevTest.m in Sources */,
 				2836F3471E8E438200C9BE35 /* ExampleVC2.m in Sources */,
 				28D22AE51E8911C9002245F9 /* AppDelegate.m in Sources */,
 				28F35D711E8E470D0028340C /* ExampleVC4.m in Sources */,
diff --git a/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate b/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate
index 2fe9540b9d4618f10d6b2b36cdf3a578d9744c96..fdc1d97bbd7519ab1a43085e79830523c85c2cf4 100644
GIT binary patch
literal 89044
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

delta 36775
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	@Y+39)HglWz+Z(2Alo^G4&6i*wb-%Wp<
z37&z?AZE}rxEb}#{h7aK9?!JSTF$!7ddzyy`puTlo}E2EdujIS+=98abL;0e&262N
n&ZW$y&SlIUnCqPDn;V)N`@c^7c?%Z&KW^^(fBgSDH~xPB??GDl

diff --git a/JCFrameLayout.xcodeproj/xcuserdata/abc.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/JCFrameLayout.xcodeproj/xcuserdata/abc.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
index a356f4b..83572fc 100644
--- a/JCFrameLayout.xcodeproj/xcuserdata/abc.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
+++ b/JCFrameLayout.xcodeproj/xcuserdata/abc.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
@@ -3,38 +3,6 @@
    type = "1"
    version = "2.0">
    
-      
-         
-         
-      
-      
-         
-         
-      
       
          
       
       
+         BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
          
+            scope = "0"
+            stopOnStyle = "0">
          
       
       
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          
+            filePath = "JCFrameLayout/JCFrameLayout/JCFrameExecutor.m"
+            timestampString = "512892424.799877"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "135"
+            endingLineNumber = "135"
+            landmarkName = "setCenterByCenterFrame()"
+            landmarkType = "9">
          
       
    
diff --git a/JCFrameLayout/Examples/ExampleVC6.h b/JCFrameLayout/Examples/DevTest.h
similarity index 79%
rename from JCFrameLayout/Examples/ExampleVC6.h
rename to JCFrameLayout/Examples/DevTest.h
index ef2b859..2e2a735 100644
--- a/JCFrameLayout/Examples/ExampleVC6.h
+++ b/JCFrameLayout/Examples/DevTest.h
@@ -8,6 +8,6 @@
 
 #import 
 
-@interface ExampleVC6 : UIViewController
+@interface DevTest : UIViewController
 
 @end
diff --git a/JCFrameLayout/Examples/DevTest.m b/JCFrameLayout/Examples/DevTest.m
new file mode 100644
index 0000000..d55e19e
--- /dev/null
+++ b/JCFrameLayout/Examples/DevTest.m
@@ -0,0 +1,75 @@
+//
+//  ExampleVC6.m
+//  JCFrameLayout
+//
+//  Created by abc on 17/4/1.
+//  Copyright © 2017年 jackcat. All rights reserved.
+//
+
+#import "DevTest.h"
+
+#import "JCFrameLayout.h"
+
+@interface DevTest ()
+/**
+ *  <#注释#>
+ **/
+@property (nonatomic,strong) UIView *yellowView;
+/**
+ *  <#注释#>
+ **/
+@property (nonatomic,strong) UIView *redView;
+@end
+
+@implementation DevTest
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    
+    self.view.backgroundColor = [UIColor whiteColor];
+    
+    _yellowView = [[UIView alloc]init];
+    _yellowView.backgroundColor = [UIColor yellowColor];
+    [self.view addSubview:_yellowView];
+    
+    [_yellowView jc_makeLayout:^(JCFrameMake *make) {
+        make.width.height.jc_equalTo(200);
+        make.center.equalTo(self.view);
+    }];
+    
+    [_yellowView addObserver:self forKeyPath:@"frame" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:nil];
+
+    _redView = [[UIView alloc]init];
+    _redView.backgroundColor = [UIColor redColor];
+    [self.view addSubview:_redView];
+    
+    [_redView jc_makeLayout:^(JCFrameMake *make) {
+        make.center.equalTo(_yellowView);
+        make.size.jc_equalTo(CGSizeMake(100, 100));
+    }];
+}
+
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
+    if (object == self.yellowView && [keyPath isEqualToString: @"frame"]) {
+        NSLog(@"--change = %@",change);
+    }else{
+        NSLog(@"--non--change = %@",change);
+    }
+}
+
+- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
+//    [UIView animateWithDuration:1 animations:^{
+//        [_yellowView jc_makeLayout:^(JCFrameMake *make) {
+//            make.width.height.jc_equalTo(200);
+//            make.center.equalTo(self.view).jc_offset(CGPointMake(0, 50));
+//        }];
+//        [_redView jc_updateLayout];
+//    }];
+//    _yellowView.jc_x_value = 110;
+//    _yellowView.jc_y_value = 110;
+//    _yellowView.jc_width_value = 200;
+//    _yellowView.jc_height_value = 200;
+//    _yellowView.center = CGPointMake(100, 100);
+}
+
+@end
diff --git a/JCFrameLayout/Examples/ExampleVC6.m b/JCFrameLayout/Examples/ExampleVC6.m
deleted file mode 100644
index 9257938..0000000
--- a/JCFrameLayout/Examples/ExampleVC6.m
+++ /dev/null
@@ -1,58 +0,0 @@
-//
-//  ExampleVC6.m
-//  JCFrameLayout
-//
-//  Created by abc on 17/4/1.
-//  Copyright © 2017年 jackcat. All rights reserved.
-//
-
-#import "ExampleVC6.h"
-
-#import "JCFrameLayout.h"
-
-@interface ExampleVC6 ()
-/**
- *  <#注释#>
- **/
-@property (nonatomic,strong) UIView *yellowView;
-/**
- *  <#注释#>
- **/
-@property (nonatomic,strong) UIView *redView;
-@end
-
-@implementation ExampleVC6
-
-- (void)viewDidLoad {
-    [super viewDidLoad];
-    
-    self.view.backgroundColor = [UIColor whiteColor];
-    
-    _yellowView = [[UIView alloc]init];
-    _yellowView.backgroundColor = [UIColor yellowColor];
-    [self.view addSubview:_yellowView];
-    
-    [_yellowView jc_makeLayout:^(JCFrameMake *make) {
-        make.width.height.jc_equalTo(200);
-        make.center.equalTo(self.view);
-    }];
-    
-//    _redView = [[UIView alloc]init];
-//    _redView.backgroundColor = [UIColor redColor];
-//    [_yellowView addSubview:_redView];
-//    
-//    [_redView jc_makeLayout:^(JCFrameMake *make) {
-//        make.center.equalTo(_yellowView);
-//        make.size.jc_equalTo(CGSizeMake(100, 100));
-//    }];
-}
-
-- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
-    [_yellowView jc_makeLayout:^(JCFrameMake *make) {
-        make.width.height.jc_equalTo(200);
-        make.center.equalTo(self.view).jc_offset(CGPointMake(0, 50));
-    }];
-//    [_redView jc_updateLayout];
-}
-
-@end
diff --git a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m
index e36b759..5074635 100644
--- a/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m
+++ b/JCFrameLayout/JCFrameLayout/JCFrameExecutor.m
@@ -124,7 +124,7 @@ void setCenterByCenterFrame(UIView*view,JCFrame*frame){
                 newCenter = frame.frameAttr.relateView.jc_center_value;
             }
             
-            newCenter = transToNewCenter(frame.frameAttr.relateView.jc_center_value,frame.multiplier,frame.offset);
+            newCenter = transToNewCenter(newCenter,frame.multiplier,frame.offset);
             
             //2. 将新的值回填回去,因为center的value属性赋值
             frame.jc_equalTo(newCenter);
diff --git a/JCFrameLayout/ViewController.m b/JCFrameLayout/ViewController.m
index 8cad471..f2c31bf 100644
--- a/JCFrameLayout/ViewController.m
+++ b/JCFrameLayout/ViewController.m
@@ -76,7 +76,7 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
         [array addObject:@{@"title":@"九宫格(相对布局)",@"cls":@"ExampleVC3"}];
         [array addObject:@{@"title":@"五千个方块(绝对布局)",@"cls":@"ExampleVC4"}];
         [array addObject:@{@"title":@"五千个方块(相对布局)",@"cls":@"ExampleVC5"}];
-        [array addObject:@{@"title":@"调试测试",@"cls":@"ExampleVC6"}];
+        [array addObject:@{@"title":@"开发过程测试使用(非Demo)",@"cls":@"DevTest"}];
         
         _datasource = [array copy];
     }

From adf3672f8a61b28b93785547a70816a4d9649e30 Mon Sep 17 00:00:00 2001
From: wangyp2018 
Date: Tue, 4 Apr 2017 19:13:55 +0800
Subject: [PATCH 12/14] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BC=80=E5=8F=91?=
 =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=96=87=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../UserInterfaceState.xcuserstate            | Bin 89044 -> 89847 bytes
 JCFrameLayout/Examples/ExampleVC2.m           |  18 +++++++++++------
 JCFrameLayout/Examples/ExampleVC3.m           |  19 +++++++++++-------
 3 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate b/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate
index fdc1d97bbd7519ab1a43085e79830523c85c2cf4..69897d45d9e5eb77083c6cc7ef4e4705af2ad8d5 100644
GIT binary patch
literal 89847
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

diff --git a/JCFrameLayout/Examples/ExampleVC2.m b/JCFrameLayout/Examples/ExampleVC2.m
index 1b6cdc2..fcb5fc2 100644
--- a/JCFrameLayout/Examples/ExampleVC2.m
+++ b/JCFrameLayout/Examples/ExampleVC2.m
@@ -24,23 +24,29 @@ - (void)viewDidLoad {
 
     self.view.backgroundColor = [UIColor whiteColor];
     
+    //列数
     int column = 3;
-    
+    //内间距
     CGFloat padding = 20;
-    
-    CGFloat width = ([UIScreen mainScreen].bounds.size.width - padding * (column + 1))/column;
+    //每个方块尺寸
+    CGFloat width = (JC_SCREEN_WIDTH - padding * (column + 1))/column;
     CGFloat height = width;
     
-    for (int i = 0; i<9; i++) {
-        int row = i / column;
-        int col = i % column;
+    for (int i = 0; i< 9; i++) {
         
+        //计算X左边
+        int col = i % column;
         CGFloat x = col * (width + padding) + padding;
+        
+        //计算Y左边
+        int row = i / column;
         CGFloat y = row * (height + padding) + padding + 64;
         
         UIView *view = [[UIView alloc]init];
         [self.view addSubview:view];
         view.backgroundColor = radomColor;
+        
+        //使用JCFrameLayout进行布局
         [view jc_makeLayout:^(JCFrameMake *make) {
             make.width.jc_equalTo(width);
             make.height.jc_equalTo(height);
diff --git a/JCFrameLayout/Examples/ExampleVC3.m b/JCFrameLayout/Examples/ExampleVC3.m
index 9ac8a3e..6ff9e27 100644
--- a/JCFrameLayout/Examples/ExampleVC3.m
+++ b/JCFrameLayout/Examples/ExampleVC3.m
@@ -23,17 +23,19 @@ - (void)viewDidLoad {
 
     self.view.backgroundColor = [UIColor whiteColor];
     
+    //列数
     int column = 3;
-    int count = 9;
-    
+    //内间距
     CGFloat padding = 20;
-    
-    CGFloat width = ([UIScreen mainScreen].bounds.size.width - padding * (column + 1))/column;
+    //每个方块尺寸
+    CGFloat width = (JC_SCREEN_WIDTH - padding * (column + 1))/column;
     CGFloat height = width;
         
-    for (int idx = 0; idx
Date: Wed, 5 Apr 2017 16:27:52 +0800
Subject: [PATCH 13/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9README?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../UserInterfaceState.xcuserstate            | Bin 89847 -> 89855 bytes
 README.md                                     | 171 ++++++++++++++++--
 images/image1.png                             | Bin 0 -> 9786 bytes
 3 files changed, 157 insertions(+), 14 deletions(-)
 create mode 100644 images/image1.png

diff --git a/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate b/JCFrameLayout.xcodeproj/project.xcworkspace/xcuserdata/abc.xcuserdatad/UserInterfaceState.xcuserstate
index 69897d45d9e5eb77083c6cc7ef4e4705af2ad8d5..2db6ed0a6205b0db92b935ffc5813ec1c4c7671e 100644
GIT binary patch
literal 89855
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

literal 89847
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
+
+### 手动安装
+
+1. 下载JCFrameLayout项目
+2. 将JCFrameLayout文件夹拖入到项目中
+3. 引文头文件 `#import "JCFrameLayout.h"`
+
+# 系统要求
+
+iOS8 以上系统
+
+# 历史版本
+
+### V2.0.0
 
-#### V2.0.0
 实现多视图的相对布局
+
 ```
 [centerView jc_makeLayout:^(JCFrameMake *make) {
         make.left.equalTo(leftView.jc_right);
@@ -78,7 +221,7 @@ UIView *leftView = [[UIView alloc]init];
     }];
 ```
 
-#### V1.1.2
+### V1.1.2
 完善了单视图的链式语法,可以实现这样的的效果
 
 ```
@@ -87,7 +230,7 @@ UIView *leftView = [[UIView alloc]init];
     }];
 ```
 
-#### V1.1.1
+### V1.1.1
 jc_equalTo()时自动将基本类型进行装箱
 
 可以将V1.1.0的代码简化为:
@@ -99,7 +242,7 @@ jc_equalTo()时自动将基本类型进行装箱
     }];
 ```
 
-#### V1.1.0
+### V1.1.0
 增加了center,size两个复合属性的支持
 
 ```
@@ -109,7 +252,7 @@ jc_equalTo()时自动将基本类型进行装箱
 }];
 ```
 
-#### V1.0.0
+### V1.0.0
 实现了单视图的基本布局,支持6个布局属性left,top,width,height,centerX,centerY,可以链式语法还支持不完善,下面是布局的一个例子:
 
 ```
@@ -122,8 +265,8 @@ jc_equalTo()时自动将基本类型进行装箱
 ```
 
 
-### 期望
+# 信息反馈
 
-* 发现Bug请在Issues提出,或者邮件告知我,我将尽快修复
-* 如果觉得有用,请给我个Star
+* 使用中发现Bug请在Issues提出,或者邮件告知我,我将尽快修复
+* 使用中有好的建议也可以在Issues提出,或邮件告知我
 
diff --git a/images/image1.png b/images/image1.png
new file mode 100644
index 0000000000000000000000000000000000000000..f6aa7949b494fbdc679c7b856919a80ecef1a515
GIT binary patch
literal 9786
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
z
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
Q8I0w&p0O_chV$e91El$)lK=n!

literal 0
HcmV?d00001


From fd09271d4a96390598d20618e48a14c61a7a556c Mon Sep 17 00:00:00 2001
From: wangyp2018 
Date: Wed, 5 Apr 2017 16:28:55 +0800
Subject: [PATCH 14/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9README?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 30e1a8e..4fc5d7e 100644
--- a/README.md
+++ b/README.md
@@ -180,7 +180,7 @@ UIView *leftView = [[UIView alloc]init];
 
 相对只能相对于同一个superView或superView进行相,不可跨视图进行。
 
-![](https://github.com/devjackcat/JCFrameLayout/images/image1.png)
+![](https://github.com/devjackcat/JCFrameLayout/blob/master/images/image1.png)
 
 上图中,View1为View2的superView, View2为View3和View4的superView,当需要对View3进行相对布局时,只能相对于View4和View2进行,不能相对于View1进行。