栈式布局容器 JXStackView

码农软件 · 软件分类 · 界面原型设计工具 · 2019-12-03 11:42:02

软件介绍

JXStackView是一个栈式布局容器。

竖直布局:

#import "JXStackView.h"@interface ViewController ()@property (nonatomic, strong) UIScrollView *vScrollView;@property (nonatomic, strong) JXVerticalStackView *vStackView;@property (nonatomic, strong) UIScrollView *hScrollView;@property (nonatomic, strong) JXHorizontalStackView *hStackView;@end@implementation ViewController- (void)viewDidLoad{
[super viewDidLoad];
self.title = @"单击改变size,拖动删除";

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(onRightItem)];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(onLeftItem)];/* 竖直容器 */self.vScrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:self.vScrollView];

self.vStackView = [[JXVerticalStackView alloc] init];
[self.vScrollView addSubview:self.vStackView];// 高度初始化可为0,会自动计算;宽度需传值self.vStackView.frame = CGRectMake(0, 0, self.vScrollView.frame.size.width, 0);// size变化后回调__weak typeof(self) weakSelf = self;
[self.vStackView setDidChangeSize:^(CGSize size) {
weakSelf.vScrollView.contentSize = size;
}];// 添加子viewfor (NSInteger index = 0; index < 5; index ++)
{
[self.vStackView addSubview:[self generateRandomView]];
}
self.vStackView.contentSpacing = 10;
self.vStackView.alignment = JXVerticalStackViewAlignmentCenter;/* 水平容器 */self.hScrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:self.hScrollView];

self.hStackView = [[JXHorizontalStackView alloc] init];
[self.hScrollView addSubview:self.hStackView];// 宽度初始化可为0,会自动计算;高度需传值self.hStackView.frame = CGRectMake(0, 64, 0, 60);// size变化后回调[self.hStackView setDidChangeSize:^(CGSize size) {
weakSelf.hScrollView.contentSize = size;
}];// 添加子viewfor (NSInteger index = 0; index < 5; index ++)
{
[self.hStackView addSubview:[self generateRandomView]];
}
self.hStackView.contentSpacing = 6;
self.hStackView.alignment = JXHorizontalStackViewAlignmentCenter;// 切换self.vScrollView.hidden = NO;
self.hScrollView.hidden = !self.vScrollView.hidden;
}

- (void)onRightItem{if (!self.vScrollView.hidden)
{
[self.vStackView addSubview:[self generateRandomView]];
}else if (!self.hScrollView.hidden)
{
[self.hStackView addSubview:[self generateRandomView]];
}
}

- (void)onLeftItem{
self.vScrollView.hidden = !self.vScrollView.hidden;
self.hScrollView.hidden = !self.vScrollView.hidden;
}

- (UIView *)generateRandomView{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, arc4random_uniform(60) + 30, arc4random_uniform(60) + 30)];
view.backgroundColor = [UIColor colorWithRed:arc4random_uniform(255) / 255.0 green:arc4random_uniform(255) / 255.0 blue:arc4random_uniform(255) / 255.0 alpha:1.0];

view.userInteractionEnabled = YES;
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onSingleTap:)];
[view addGestureRecognizer:singleTap];

UIPanGestureRecognizer *panTap = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(onPanTap:)];
[view addGestureRecognizer:panTap];return view;
}

- (void)onSingleTap:(UITapGestureRecognizer *)tap{
UIView *view = tap.view;CGRect frame = view.frame;
frame.size = CGSizeMake(arc4random_uniform(60) + 30, arc4random_uniform(60) + 30);
view.frame = frame;
}

- (void)onPanTap:(UITapGestureRecognizer *)tap{
UIView *view = tap.view;
[view removeFromSuperview];
}@end

效果图一:

效果图二

本文地址:https://www.codercto.com/soft/d/20331.html

C# 6.0本质论

C# 6.0本质论

[美] Mark Michaelis(马克·米凯利斯)、[美] Eric Lippert(埃里克·利珀特) / 周靖、庞燕 / 人民邮电出版社 / 2017-2-1 / 108

这是C#领域中一部广受好评的名作,作者用一种易于理解的方式详细介绍了C#语言的各个方面。全书共有21章和4个附录(其中哟2个附录从网上下载),介绍了C#语言的数据类型、操作符、方法、类、接口、异常处理等基本概念,深入讨论了泛型、迭代器、反射、线程和互操作性等高级主题,还介绍了LINQ技术,以及与其相关的扩展方法、分部方法、Lambda表达式、标准查询操作符和查询表达式等内容。每章开头的“思维导图”......一起来看看 《C# 6.0本质论》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具