2019-12-04 13:29:26 +08:00
|
|
|
/*
|
|
|
|
* Copyright [2019] [Doric.Pub]
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
|
|
|
//
|
|
|
|
// Created by pengfei.zhou on 2019/10/23.
|
|
|
|
//
|
|
|
|
|
|
|
|
#import <Foundation/Foundation.h>
|
2019-12-05 10:10:35 +08:00
|
|
|
#import <CoreGraphics/CoreGraphics.h>
|
|
|
|
#import <UIKit/UIKit.h>
|
2019-12-04 13:29:26 +08:00
|
|
|
|
|
|
|
typedef UIEdgeInsets DoricMargin;
|
2019-12-04 19:02:15 +08:00
|
|
|
typedef UIEdgeInsets DoricPadding;
|
2019-12-04 13:29:26 +08:00
|
|
|
|
|
|
|
DoricMargin DoricMarginMake(CGFloat left, CGFloat top, CGFloat right, CGFloat bottom);
|
|
|
|
|
2022-08-25 14:19:08 +08:00
|
|
|
typedef NS_ENUM(NSInteger, DoricMeasureSpecMode) {
|
|
|
|
DoricMeasureUnspecified = 0,
|
|
|
|
DoricMeasureExactly = 1,
|
|
|
|
DoricMeasureAtMost = 2,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct DoricMeasureSpec {
|
|
|
|
DoricMeasureSpecMode mode;
|
|
|
|
CGFloat size;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct DoricMeasureSpec DoricMeasureSpec;
|
2020-04-03 16:36:43 +08:00
|
|
|
|
|
|
|
typedef NS_ENUM(NSInteger, DoricLayoutType) {
|
|
|
|
DoricUndefined = 0,
|
|
|
|
DoricStack = 1,
|
|
|
|
DoricVLayout = 2,
|
|
|
|
DoricHLayout = 3,
|
2022-08-25 14:19:08 +08:00
|
|
|
DoricScroller = 4,
|
2022-09-05 15:52:47 +08:00
|
|
|
DoricFlexLayout = 5,
|
2020-04-03 16:36:43 +08:00
|
|
|
};
|
|
|
|
|
2019-12-04 13:29:26 +08:00
|
|
|
typedef NS_ENUM(NSInteger, DoricLayoutSpec) {
|
2020-04-03 10:19:13 +08:00
|
|
|
DoricLayoutJust = 0,
|
|
|
|
DoricLayoutFit = 1,
|
|
|
|
DoricLayoutMost = 2,
|
2019-12-04 13:29:26 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef NS_ENUM(NSInteger, DoricGravity) {
|
2020-03-27 10:07:53 +08:00
|
|
|
DoricGravitySpecified = 1,
|
|
|
|
DoricGravityStart = 1 << 1,
|
|
|
|
DoricGravityEnd = 1 << 2,
|
|
|
|
DoricGravityShiftX = 0,
|
|
|
|
DoricGravityShiftY = 4,
|
|
|
|
DoricGravityLeft = (DoricGravityStart | DoricGravitySpecified) << DoricGravityShiftX,
|
|
|
|
DoricGravityRight = (DoricGravityEnd | DoricGravitySpecified) << DoricGravityShiftX,
|
2020-04-03 16:36:43 +08:00
|
|
|
DoricGravityTop = (DoricGravityStart | DoricGravitySpecified) << DoricGravityShiftY,
|
2020-04-03 10:19:13 +08:00
|
|
|
DoricGravityBottom = (DoricGravityEnd | DoricGravitySpecified) << DoricGravityShiftY,
|
|
|
|
DoricGravityCenterX = DoricGravitySpecified << DoricGravityShiftX,
|
|
|
|
DoricGravityCenterY = DoricGravitySpecified << DoricGravityShiftY,
|
|
|
|
DoricGravityCenter = DoricGravityCenterX | DoricGravityCenterY,
|
2019-12-04 13:29:26 +08:00
|
|
|
};
|
|
|
|
|
2020-04-03 16:36:43 +08:00
|
|
|
@interface DoricLayout : NSObject
|
2019-12-04 13:29:26 +08:00
|
|
|
@property(nonatomic, assign) DoricLayoutSpec widthSpec;
|
|
|
|
@property(nonatomic, assign) DoricLayoutSpec heightSpec;
|
|
|
|
|
2020-04-03 16:36:43 +08:00
|
|
|
@property(nonatomic, assign) DoricGravity alignment;
|
2019-12-04 13:29:26 +08:00
|
|
|
|
2020-04-03 16:36:43 +08:00
|
|
|
@property(nonatomic, assign) DoricGravity gravity;
|
2019-12-04 13:29:26 +08:00
|
|
|
|
2020-04-03 16:36:43 +08:00
|
|
|
@property(nonatomic, assign) CGFloat width;
|
|
|
|
@property(nonatomic, assign) CGFloat height;
|
2019-12-04 13:29:26 +08:00
|
|
|
|
2020-04-03 16:36:43 +08:00
|
|
|
@property(nonatomic, assign) CGFloat spacing;
|
2019-12-04 13:29:26 +08:00
|
|
|
|
2020-04-03 16:36:43 +08:00
|
|
|
@property(nonatomic, assign) CGFloat marginLeft;
|
|
|
|
@property(nonatomic, assign) CGFloat marginTop;
|
|
|
|
@property(nonatomic, assign) CGFloat marginRight;
|
|
|
|
@property(nonatomic, assign) CGFloat marginBottom;
|
2019-12-04 13:29:26 +08:00
|
|
|
|
2020-04-03 16:36:43 +08:00
|
|
|
@property(nonatomic, assign) CGFloat paddingLeft;
|
|
|
|
@property(nonatomic, assign) CGFloat paddingTop;
|
|
|
|
@property(nonatomic, assign) CGFloat paddingRight;
|
|
|
|
@property(nonatomic, assign) CGFloat paddingBottom;
|
2019-12-04 13:29:26 +08:00
|
|
|
|
2020-04-03 16:36:43 +08:00
|
|
|
@property(nonatomic, assign) NSUInteger weight;
|
2019-12-04 13:29:26 +08:00
|
|
|
|
2020-04-03 16:36:43 +08:00
|
|
|
@property(nonatomic, weak) UIView *view;
|
2019-12-04 13:29:26 +08:00
|
|
|
|
2020-04-03 16:36:43 +08:00
|
|
|
@property(nonatomic, assign) DoricLayoutType layoutType;
|
2019-12-04 13:29:26 +08:00
|
|
|
|
2020-04-03 16:36:43 +08:00
|
|
|
@property(nonatomic, assign) BOOL disabled;
|
2019-12-04 19:02:15 +08:00
|
|
|
|
2020-04-03 17:28:55 +08:00
|
|
|
@property(nonatomic, assign) CGFloat maxWidth;
|
|
|
|
|
|
|
|
@property(nonatomic, assign) CGFloat maxHeight;
|
|
|
|
|
2020-04-11 09:38:27 +08:00
|
|
|
@property(nonatomic, assign) CGFloat minWidth;
|
|
|
|
|
|
|
|
@property(nonatomic, assign) CGFloat minHeight;
|
|
|
|
|
2020-04-08 11:57:38 +08:00
|
|
|
@property(nonatomic, assign) BOOL resolved;
|
|
|
|
|
2020-04-10 11:37:48 +08:00
|
|
|
@property(nonatomic, assign) CGFloat measuredWidth;
|
|
|
|
@property(nonatomic, assign) CGFloat measuredHeight;
|
|
|
|
@property(nonatomic, assign) CGFloat measuredX;
|
|
|
|
@property(nonatomic, assign) CGFloat measuredY;
|
|
|
|
|
2020-04-20 18:52:14 +08:00
|
|
|
@property(nonatomic, assign) BOOL undefined;
|
|
|
|
|
2021-04-07 17:24:33 +08:00
|
|
|
@property(nonatomic, assign) UIEdgeInsets corners;
|
|
|
|
|
2022-08-24 14:19:10 +08:00
|
|
|
@property(nonatomic, assign) CGFloat totalLength;
|
2021-09-09 11:58:37 +08:00
|
|
|
|
2023-03-23 19:52:16 +08:00
|
|
|
@property(nonatomic, copy) NSDictionary *flexConfig;
|
2022-09-05 15:52:47 +08:00
|
|
|
|
2020-04-03 16:36:43 +08:00
|
|
|
- (instancetype)init;
|
2019-12-04 13:29:26 +08:00
|
|
|
|
2020-04-13 11:57:31 +08:00
|
|
|
- (void)measure:(CGSize)targetSize;
|
|
|
|
|
2020-04-03 16:36:43 +08:00
|
|
|
- (void)apply;
|
2020-04-03 18:15:43 +08:00
|
|
|
|
|
|
|
- (void)apply:(CGSize)frameSize;
|
2019-12-04 13:29:26 +08:00
|
|
|
@end
|
|
|
|
|
|
|
|
|
2020-04-03 16:36:43 +08:00
|
|
|
@interface UIView (DoricLayout)
|
|
|
|
@property(nonatomic, strong) DoricLayout *doricLayout;
|
2020-04-10 11:37:48 +08:00
|
|
|
@end
|
2021-11-16 20:47:18 +08:00
|
|
|
|
2022-08-25 14:19:08 +08:00
|
|
|
@interface DoricScrollView : UIScrollView
|
|
|
|
@property(nonatomic, strong) UIView *contentView;
|
|
|
|
@end
|