日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

iOS按比例實(shí)現(xiàn)方塊圖

瀏覽:39日期:2022-09-16 15:43:49

本文實(shí)例為大家分享了iOS按比例實(shí)現(xiàn)方塊圖的具體代碼,供大家參考,具體內(nèi)容如下

原理:二分法遞歸實(shí)現(xiàn),就是每次“對半分”,分到只剩兩個

上代碼:SZBlockView

@interface SZBlockView : UIView@property (nonatomic, strong) NSArray *data;//數(shù)據(jù)源@end #import 'SZBlockView.h'#import 'SZItemView.h' @implementation SZBlockView - (instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) {self.backgroundColor = UIColor.whiteColor; } return self;} -(void)setData:(NSArray *)data{ _data = data; [self removeAll]; for (NSString* value in data) {[self addSubNode:[value intValue]]; } [self recalcLayout];} -(void)addSubNode:(int)value{ SZItemView* item = [SZItemView new]; item.value = value; [self addSubview:item];} -(void)removeAll{ //移除所有子視圖 [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];} -(bool)isVertical:(double)w Height:(double) h{ return w / h > 1.618;//黃金比例,可以自己根據(jù)需求修改} -(void)recalcLayout{ if (self.subviews.count < 1) return; [self recalcSquarifiedLayout:0 Finish:self.subviews.count - 1 Area:self.bounds];} -(void)recalcSliceLayout:(NSUInteger)nStart Finish:(NSUInteger)nFinish Area:(CGRect)rect IsVertical:(bool) bIsVertical{ NSAssert(nStart < self.subviews.count, @'nStart >= self.subviews.count'); NSAssert(nFinish < self.subviews.count, @'nFinish >= self.subviews.count'); if (nStart == nFinish) {[self.subviews[nStart] setFrame:rect];return; } double dblTotal = [self getChildrenTotal:nStart Finish:nFinish]; double x = rect.origin.x; double y = rect.origin.y; if (bIsVertical) {for (NSUInteger i = nStart; i <= nFinish; i++){ SZItemView* item = self.subviews[i]; double cx = rect.size.width * item.value / dblTotal; CGRect rectSubNode = item.frame; rectSubNode = rect; rectSubNode.origin.x = x; if (i == nFinish) {rectSubNode.size.width = cx; }else{rectSubNode.size.width = cx-1; }item.frame = rectSubNode;x += cx;} } else {for (NSUInteger i = nStart; i <= nFinish; i++){ SZItemView* item = self.subviews[i]; double cy = rect.size.height * item.value / dblTotal; CGRect rectSubNode = item.frame; rectSubNode = rect; rectSubNode.origin.y = y; if (i==nFinish) {rectSubNode.size.height = cy; }else{rectSubNode.size.height = cy-1; }item.frame = rectSubNode; y += cy;} }} -(void)recalcSquarifiedLayout:(NSUInteger)nStart Finish:(NSUInteger)nFinish Area:(CGRect) rect{ NSAssert(nStart < self.subviews.count, @'nStart >= self.subviews.count'); NSAssert(nFinish < self.subviews.count, @'nFinish >= self.subviews.count'); if (nStart + 2 > nFinish) {return [self recalcSliceLayout:nStart Finish:nFinish Area:rect IsVertical:[self isVertical:rect.size.width Height:rect.size.height]]; } double total = [self getChildrenTotal:nStart Finish:nFinish],total_left = 0.; for (NSUInteger i = nStart; i <= nFinish; i++) {SZItemView* item = self.subviews[i];double pre_dt = total_left - total / 2;total_left += item.value;double dt = total_left - total / 2; if (dt > 0){ if (dt + pre_dt > 0) {total_left -= item.value;i--; } if ([self isVertical:rect.size.width Height:rect.size.height]) {CGRect rectLeft = rect;rectLeft.size.width = rect.size.width * total_left / total - 1;[self recalcSquarifiedLayout:nStart Finish:i Area:rectLeft]; CGRect rectRight = rect;rectRight.origin.x = rectLeft.origin.x + rectLeft.size.width + 1;rectRight.size.width = rect.size.width - rectLeft.size.width - 1;[self recalcSquarifiedLayout:i + 1 Finish:nFinish Area:rectRight]; } else {CGRect rectTop = rect;rectTop.size.height = rect.size.height * total_left / total - 1;[self recalcSquarifiedLayout:nStart Finish:i Area:rectTop]; CGRect rectBottom = rect;rectBottom.origin.y = rectTop.origin.y + rectTop.size.height + 1;rectBottom.size.height = rect.size.height - rectTop.size.height - 1;[self recalcSquarifiedLayout:i + 1 Finish:nFinish Area:rectBottom]; } return;} } // NSAssert(false, @'unreachable');} -(double)getChildrenTotal:(NSUInteger)nStart Finish:(NSUInteger) nFinish{ double dblTotal = 0.; for (NSUInteger i = nStart; i <= nFinish; i++) {SZItemView* item = self.subviews[i];dblTotal += item.value; } return dblTotal;} @end

SZItemView 里面的每一個小的視圖

@interface SZItemView : UIView@property (nonatomic, assign) int value;//傳入要顯示的值@end #import 'SZItemView.h'@interface SZItemView ()@property (nonatomic, strong) UILabel *valueLabel;@end @implementation SZItemView - (instancetype)init{ self = [super init]; if (self) {[self setupUI]; } return self;}-(void)setupUI{ UILabel *valueLabel = [[UILabel alloc] initWithFrame:self.frame]; valueLabel.adjustsFontSizeToFitWidth = YES; self.valueLabel = valueLabel; valueLabel.textAlignment = NSTextAlignmentCenter; valueLabel.textColor = UIColor.whiteColor; [self addSubview:valueLabel];} - (void)setValue:(int)value{ _value = value; self.valueLabel.text = [NSString stringWithFormat:@'%d',value]; self.backgroundColor = UIColor.orangeColor;}- (void)layoutSubviews{//如果用masonry布局此方法可不實(shí)現(xiàn) self.valueLabel.frame = self.bounds; self.valueLabel.adjustsFontSizeToFitWidth = YES;}@end

效果圖:

iOS按比例實(shí)現(xiàn)方塊圖

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: IOS
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产aa精品| 麻豆视频久久| 国产精东传媒成人av电影| 亚洲激情婷婷| 不卡中文字幕| 欧美日韩免费观看视频| 久久精品国产亚洲一区二区三区| 免费精品视频在线| 日韩免费看片| 欧美www视频在线观看| 国产精品一区二区精品视频观看| 丝瓜av网站精品一区二区| 欧美va亚洲va日韩∨a综合色| 国产高潮在线| 色一区二区三区四区| 精品视频黄色| 日韩综合一区| 国产激情久久| 欧美激情aⅴ一区二区三区 | 麻豆成人在线| 日韩精品一区二区三区免费视频| 亚洲视频国产精品| 激情综合亚洲| 欧美午夜不卡| 狠狠操综合网| 深夜福利一区| 国产日韩一区二区三区在线| 136国产福利精品导航网址| 国产一区二区三区天码| 里番精品3d一二三区| 国产专区精品| 久久三级中文| 福利片在线一区二区| 91综合视频| 色综合www| 欧美日韩一二三四| 美国三级日本三级久久99 | 国产日产一区| 日韩av网站在线免费观看| 日韩国产欧美视频| 青青草国产精品亚洲专区无| 91九色综合| 蜜桃精品视频| 日韩久久一区二区三区| 国产一区观看| 久久大逼视频| 久久精品国产亚洲一区二区三区| 国产专区精品| 日韩国产一区二区三区| 女主播福利一区| 欧美综合另类| 日韩精品久久久久久| jizzjizz中国精品麻豆| 国产精品97| 久久国产精品毛片| 男人的天堂亚洲一区| 国产精品资源| 亚洲播播91| 在线精品国产亚洲| 国产精品777777在线播放| 久久97视频| 99成人在线| 日韩一区二区三区精品视频第3页| 日韩国产在线一| 国产中文在线播放| 亚洲高清成人| 亚洲一区有码| 久久永久免费| 国产综合亚洲精品一区二| 久久亚洲影院| 麻豆国产91在线播放| 久久精品观看| 日韩一区二区三免费高清在线观看 | 免费视频久久| 国产精品亚洲片在线播放| 五月激情久久| 日韩午夜黄色| 国产伦理一区| 伊人久久大香线蕉av不卡| 天堂va欧美ⅴa亚洲va一国产| 欧美精品日日操| 日韩一区免费| 日韩黄色大片网站| 午夜亚洲福利| 亚洲成人va| 神马午夜在线视频| 亚州国产精品| 99成人在线视频| 国产精品香蕉| 亚洲欧美日韩国产综合精品二区| 欧美激情日韩| 一区二区三区四区日韩| 四虎成人av| 国产日韩欧美高清免费| 三上悠亚国产精品一区二区三区| 黄色成人在线网址| 高清日韩欧美| 日韩av一区二区在线影视| av亚洲在线观看| 97精品国产99久久久久久免费| 天堂av在线一区| 美女久久久久| 国产精品久久久久久久久久久久久久久 | 国产精选久久| 午夜视频精品| 激情综合婷婷| 91精品日本| 伊人精品在线| 欧美香蕉视频| 久久99免费视频| 午夜亚洲福利| 欧美中文字幕| 激情综合网站| 米奇777超碰欧美日韩亚洲| 国产精品久久久免费| 亚洲精品一级二级三级| 欧美+日本+国产+在线a∨观看| 快播电影网址老女人久久| 久久99蜜桃| 91精品麻豆| 亚洲69av| 亚洲三级视频| 婷婷综合在线| 欧洲av不卡| 国产精品欧美日韩一区| 91精品啪在线观看国产爱臀| 久久一区二区中文字幕| 久久中文字幕av| 亚洲一级在线| 亚洲一区中文| 国内不卡的一区二区三区中文字幕| 亚洲精品乱码| 日韩一区欧美二区| 91精品观看| 亚洲网站视频| 丝瓜av网站精品一区二区| 91精品观看| 中文字幕免费精品| 香蕉久久久久久久av网站| 精品欧美一区二区三区在线观看| 国产一区二区三区国产精品| 日韩国产成人精品| 日韩精品五月天| 亚洲人www| 国产农村妇女精品一二区| 欧美日韩精品免费观看视频完整| 免费一级欧美片在线观看网站 | 亚洲+小说+欧美+激情+另类| av不卡在线看| 视频一区二区不卡| 国产欧美日韩综合一区在线播放| 国产亚洲精品v| 精品国产一区二区三区噜噜噜| 丁香六月综合| 九色porny丨国产首页在线| 亚洲黄色网址| 日韩欧美网址| 免费高潮视频95在线观看网站| 国产精品福利在线观看播放| 精品国产亚洲日本| 巨乳诱惑日韩免费av| 少妇高潮一区二区三区99| 国产免费av一区二区三区| 亚洲专区视频| 播放一区二区| 久久九九精品| 婷婷精品进入| 亚洲作爱视频| 91嫩草亚洲精品| 日本高清不卡一区二区三区视频| 亚洲aa在线| 你懂的国产精品| 国产探花在线精品一区二区| 国产伦精品一区二区三区视频 | 日韩高清不卡在线| 精品五月天堂| 亚洲一区国产| 国产情侣一区| 亚洲成人va| 色婷婷成人网| 精品国产第一福利网站| 亚洲欧美高清| 免费一级欧美在线观看视频| 欧美日韩在线二区| 夜夜精品视频| 久久香蕉精品香蕉| 久久aⅴ国产紧身牛仔裤| 久久精品九色| 亚洲综合图色| 天堂а√在线最新版中文在线| 午夜精品福利影院| av资源亚洲| 国产日韩欧美三级| 黄色国产精品| 岛国av免费在线观看| 日本精品国产| 在线精品小视频| 大香伊人久久精品一区二区| 综合激情网站| 日韩在线欧美|