iOS 堆砌效果
效果图
周末闲时无聊就做了一个这样子的效果。
功能:
1.实现点击每一个view得到该view,通过block的形式回调
2.实现清理历史功能,通过block把view返回,方便做提示框
3.实现双击删除view,并且自动更新UI
4.可传入指定颜色 也可以为空 为空就随机产生颜色
5.可自定义高度,默认30
难点无非就是如何计算每一个小view的位置的。
1.首先你得需要知道上一个得位置,然后根据文字得长度得到宽和高。在通过上一个view得位置加上这个view所需要占得位置,计算出来现在这个view得位置。这里要注意得情况只有一种那就是我现在得这个view如果超出去了,那么就换行。
代码如下:
+ (CGRect)pq_calculatePositionWithMaxSize:(CGSize)maxSize lastFrame:(CGRect)lastFrameselfSize:(CGSize)selfSize{
CGRect newFrame =CGRectMake(CGRectGetMaxX(lastFrame) +5, lastFrame.origin.y, selfSize.width,selfSize.height);
if((newFrame.size.width+ newFrame.origin.x)> maxSize.width) {
newFrame.origin.y+= selfSize.height+5;
newFrame.origin.x=5;
}
return newFrame;
}
通过传入最大的宽度和高度 在传入上一个view的frame 和现在自己将要占的 size大小计算得出自己的frame
如何通过文字的长度得到文字的高度
代码如下:
#define IOS7 [[UIDevicecurrentDevice].systemVersionfloatValue]>=7.0
- (CGSize)reallySizeWithButton:(UIButton*)button{
CGSize backSize;
NSDictionary* fontDic =@{@"NSFontAttrbuteFrame":button.titleLabel.font};
CGSizemaxSize =CGSizeMake(MAXFLOAT,self.maxH);
if(IOS7) {
backSize = [button.titleLabel.textboundingRectWithSize:maxSizeoptions:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeadingattributes:fontDiccontext:nil].size;
}
else{
backSize = [button.titleLabel.textsizeWithFont:button.titleLabel.fontconstrainedToSize:maxSize];
}
return CGSizeMake(backSize.width*1.3,self.maxH);
}
把代码简单的封装了一下。只需要运import "PQPileUpView.h"
调用 + (instancetype)pq_createPileUpWithFrame:(CGRect)frame maxH:(CGFloat)maxHtitles:(NSArray*)titles titlesColor:(NSArray*)colors click:(PQClickBlock)clickBlockclear:(PQClearBlock)clearBlock;
实现一行代码创建