-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathJCFrame.m
More file actions
121 lines (100 loc) · 2.96 KB
/
Copy pathJCFrame.m
File metadata and controls
121 lines (100 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
//
// JCFrame.m
// JCFrameLayout
//
// Created by abc on 17/3/27.
// Copyright © 2017年 jackcat. All rights reserved.
//
#import "JCFrame.h"
#import "UIView+JCFrame.h"
@interface JCFrame ()
/**
* <#注释#>
**/
@property (nonatomic,weak) JCFrame *chainParentFrame;
@end
@implementation JCFrame
- (instancetype)initWithView:(UIView*)view frameType:(JCFrameType)frameType{
self = [super init];
if (self) {
self->_frameType = frameType;
self->_view = view;
[self.view.jc_frames addObject:self];
}
return self;
}
- (JCFrame*(^)(id))equalTo{
return ^id(id value){
self->_value = value;
JCFrame *currentFrame = self;
while (currentFrame.chainParentFrame) {
currentFrame.chainParentFrame->_value = value;
currentFrame = currentFrame.chainParentFrame;
}
return self;
};
}
- (JCFrame*(^)(id))jc_equalTo{
return self.equalTo;
}
#pragma mark - support chainable syntax
- (JCFrame *)left{
return [self createJCLayoutFrame:JCFrameTypeLeft];
}
- (JCFrame *)right{
return [self createJCLayoutFrame:JCFrameTypeRight];
}
- (JCFrame *)top{
return [self createJCLayoutFrame:JCFrameTypeTop];
}
- (JCFrame *)bottom{
return [self createJCLayoutFrame:JCFrameTypeBottom];
}
- (JCFrame *)width{
return [self createJCLayoutFrame:JCFrameTypeWidth];
}
- (JCFrame *)height{
return [self createJCLayoutFrame:JCFrameTypeHeight];
}
- (JCFrame *)centerX{
return [self createJCLayoutFrame:JCFrameTypeCenterX];
}
- (JCFrame *)centerY{
return [self createJCLayoutFrame:JCFrameTypeCenterY];
}
- (JCFrame *)center{
return [self createJCLayoutFrame:JCFrameTypeCenter];
}
- (JCFrame*)size{
return [self createJCLayoutFrame:JCFrameTypeSize];
}
- (JCFrame *)createJCLayoutFrame:(JCFrameType)frameType{
if (self.delegate && [self.delegate respondsToSelector:@selector(jcFrame:createFrameWithframeType:)]) {
JCFrame *frame = [self.delegate jcFrame:self createFrameWithframeType:frameType];
frame.chainParentFrame = self;
return frame;
}
return nil;
}
- (NSString *)description{
return [NSString stringWithFormat:@"[JCFrame: %p type=%@]",self,self. typeString];
}
- (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;
}
}
@end