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

您的位置:首頁技術文章
文章詳情頁

iOS按比例實現方塊圖

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

本文實例為大家分享了iOS按比例實現方塊圖的具體代碼,供大家參考,具體內容如下

原理:二分法遞歸實現,就是每次“對半分”,分到只剩兩個

上代碼:SZBlockView

@interface SZBlockView : UIView@property (nonatomic, strong) NSArray *data;//數據源@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;//黃金比例,可以自己根據需求修改} -(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布局此方法可不實現 self.valueLabel.frame = self.bounds; self.valueLabel.adjustsFontSizeToFitWidth = YES;}@end

效果圖:

iOS按比例實現方塊圖

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: IOS
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精品三区四区| 成人日韩av| 99国产精品99久久久久久粉嫩| 国产美女高潮在线观看| 日韩一区自拍| 免费成人性网站| 视频在线在亚洲| 国产精品一区高清| 91亚洲自偷观看高清| 激情五月综合| 亚洲aa在线| 岛国精品一区| 午夜久久美女| 国产日产精品_国产精品毛片| 欧美国产中文高清| 99久精品视频在线观看视频| 日韩不卡手机在线v区| 久久精品二区亚洲w码| 精品精品99| 国产精品毛片一区二区三区| 国产日本精品| 亚洲一级网站| 欧美黄页在线免费观看| 在线观看免费一区二区| 国产精品美女久久久久久不卡| 午夜精品久久久久久久久久蜜桃| 亚洲欧洲国产精品一区| 人人香蕉久久| 国产欧美日韩在线一区二区| 国产一区二区中文| 水蜜桃精品av一区二区| 亚洲aa在线| 亚洲欧美综合| 国产精品成人3p一区二区三区| 精品一区毛片| 日韩精品一区二区三区免费观影 | 最新中文字幕在线播放| 亚洲免费观看高清完整版在线观| 日韩免费福利视频| 国产精品毛片aⅴ一区二区三区| 美女国产一区| 好吊视频一区二区三区四区| 群体交乱之放荡娇妻一区二区| 综合欧美亚洲| 亚洲欧美日本国产专区一区| 日韩在线看片| 国产一区二区视频在线看| 视频一区中文字幕精品| aa国产精品| 亚洲制服少妇| 国产精品美女久久久| 精品一区三区| 亚洲欧美日韩国产综合精品二区| 亚洲午夜久久久久久尤物 | 国内精品伊人| 欧美好骚综合网| 日韩精品一区二区三区av| 亚洲欧美日本国产| 日韩精品三区四区| 久久99蜜桃| 日韩综合精品| 欧美片第1页| 国产精品极品国产中出| 好吊日精品视频| 久久97视频| 欧美日韩精品一区二区视频| 国内亚洲精品| 免费观看日韩电影| 日韩精品电影一区亚洲| 国产精品啊v在线| 97在线精品| 免费黄色成人| 日韩国产高清在线| 日韩一区电影| 日韩精品水蜜桃| 日韩av一二三| 国产精品porn| 久久婷婷激情| 中文字幕视频精品一区二区三区 | 国产亚洲一区二区手机在线观看 | 日韩中文av| 高潮一区二区| 综合视频一区| 久久久精品网| 欧美一级网站| 午夜欧美理论片| 久久久久久亚洲精品美女| 女人av一区| 美女视频网站久久| 免费精品视频| 一区二区三区四区日本视频| 免费观看在线综合色| 日本免费久久| 国产精品qvod| 老司机久久99久久精品播放免费| 日韩激情一区二区| 久久天堂成人| 欧美国产另类| 亚洲va久久| 免费中文字幕日韩欧美| 亚洲天堂1区| 国产传媒在线| 麻豆精品av| 91精品尤物| 日韩精品一级中文字幕精品视频免费观看| 日韩精品专区| 精品成av人一区二区三区 | 99热精品久久| 精品一区二区三区四区五区| 亚洲视频国产精品| 国产精品毛片一区二区三区| 精品成人免费一区二区在线播放| 粉嫩av一区二区三区四区五区 | 亚洲一区网站| 99re国产精品| 久久久夜夜夜| 一区二区三区四区日本视频| 精品香蕉视频| 国产美女高潮在线| 日韩欧美不卡| 日本精品影院| 人人草在线视频| 91精品久久久久久久久久不卡| 亚洲播播91| japanese国产精品| 国产午夜精品一区二区三区欧美 | 高清av一区| 日韩不卡免费高清视频| 亚洲天堂黄色| 久久亚洲视频| 97成人在线| 国产精品久久久久av蜜臀| 久久爱www成人| 麻豆精品在线观看| 日韩在线欧美| 美女精品在线| 国产精品1区在线| 国产白浆在线免费观看| 欧美福利专区| 国产乱码精品一区二区三区亚洲人| 91嫩草精品| 日韩在线精品| 天海翼精品一区二区三区| 国产精品.xx视频.xxtv| 日本精品不卡| 奇米狠狠一区二区三区| 毛片在线网站| 日韩专区在线视频| 国产精品羞羞答答在线观看| 国产一区二区三区四区五区| 自拍日韩欧美| 久久av导航| 老司机精品久久| 超碰在线99| 国产精品中文字幕制服诱惑| 日韩精品欧美| 久久爱www.| 亚洲精一区二区三区| 日韩在线精品| 国产精品久久久久久久免费软件 | 久久精品国产久精国产爱| 精品一区在线| 亚洲国产成人二区| 日本精品久久| 亚洲欧美日韩国产一区二区| www.51av欧美视频| 欧美日韩亚洲一区| 亚洲在线成人| 亚洲电影在线一区二区三区| 精品国产鲁一鲁****| 奇米狠狠一区二区三区| 日本大胆欧美人术艺术动态| 欧美日中文字幕| 日韩欧美一区免费| 日韩av在线播放网址| 国产毛片精品| 日韩极品在线观看| 亚洲永久精品唐人导航网址| 黄色日韩在线| 国产91久久精品一区二区| 狠狠躁少妇一区二区三区| 国产精品黄网站| 国产欧美视频在线| 国产毛片久久久| 国产精品调教| 国产乱人伦丫前精品视频| 久久狠狠亚洲综合| 国产精品日本一区二区三区在线| 亚洲精品第一| 国产亚洲人成a在线v网站| 亚洲精品欧美| 亚洲+小说+欧美+激情+另类| 亚洲欧洲日韩精品在线| 日韩动漫一区| 麻豆精品新av中文字幕| 97国产成人高清在线观看| 国产在线|日韩| 国产午夜精品一区二区三区欧美| 亚洲综合日韩| 国产精品一区二区精品|