iOS 堆砌效果

作者: Codepgq | 来源:发表于2016-07-17 13:24 被阅读487次

效果图


周末闲时无聊就做了一个这样子的效果。

功能:

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;

实现一行代码创建

详情地址


demo地址 

相关文章

网友评论

    本文标题:iOS 堆砌效果

    本文链接:https://www.haomeiwen.com/subject/imazlttx.html