源码0305-画饼图-柱状图-绘制文字和图片
// PieView.m // 05-画饼图 #import "PieView.h" @implementation PieView - (NSArray *)arrRandom { int totoal = 100; NSMutableArray *arrM = [NSMutableArray array]; int temp = 0; // 30 40 30 for (int i = 0; i < arc4random_uniform(10) + 1; i++) { temp = arc4random_uniform(totoal) + 1; // 100 1~100 // 随机出来的临时值等于总值,直接退出循环,因为已经把总数分配完毕,没必要在分配。 [arrM addObject:@(temp)]; // 解决方式:当随机出来的数等于总数直接退出循环。 if (temp == totoal) { break; } totoal -= temp; } // 100 30 1~100 // 70 40 0 ~ 69 1 ~ 70 // 30 25 // 5 if (totoal) { [arrM addObject:@(totoal)]; } return arrM; } // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code NSArray *arr = [self arrRandom]; CGFloat radius = rect.size.width * 0.5; CGPoint center = CGPointMake(radius, radius); CGFloat startA = 0; CGFloat angle = 0; CGFloat endA = 0; for (int i = 0; i < arr.count; i++) { startA = endA; angle = [arr[i] integerValue] / 100.0 * M_PI * 2; endA = startA + angle; UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES]; [path addLineToPoint:center]; [[self colorRandom] set]; [path fill]; } } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self setNeedsDisplay]; } - (UIColor *)colorRandom { // 0 ~ 255 / 255 // OC:0 ~ 1 CGFloat r = arc4random_uniform(256) / 255.0; CGFloat g = arc4random_uniform(256) / 255.0; CGFloat b = arc4random_uniform(256) / 255.0; return [UIColor colorWithRed:r green:g blue:b alpha:1]; } - (void)draw { CGFloat radius = self.bounds.size.width * 0.5; CGPoint center = CGPointMake(radius, radius); CGFloat startA = 0; CGFloat angle = 0; CGFloat endA = 0; // 第一个扇形 angle = 25 / 100.0 * M_PI * 2; endA = startA + angle; UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES]; // 添加一根线到圆心 [path addLineToPoint:center]; // 描边和填充通用 [[UIColor redColor] set]; [path fill]; // 第二个扇形 startA = endA; angle = 25 / 100.0 * M_PI * 2; endA = startA + angle; UIBezierPath *path1 = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES]; // 添加一根线到圆心 [path1 addLineToPoint:center]; // 描边和填充通用 [[UIColor greenColor] set]; [path1 fill]; // 第二个扇形 startA = endA; angle = 50 / 100.0 * M_PI * 2; endA = startA + angle; UIBezierPath *path2 = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES]; // 添加一根线到圆心 [path2 addLineToPoint:center]; // 描边和填充通用 [[UIColor blueColor] set]; [path2 fill]; } @end
// PieView.h // 05-画饼图 #import <UIKit/UIKit.h> @interface PieView : UIView @end
06柱状图
// BarView.m // 06-柱状图 #import "BarView.h" @implementation BarView // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code NSArray *arr = [self arrRandom]; CGFloat x = 0; CGFloat y = 0; CGFloat w = 0; CGFloat h = 0; for (int i = 0; i < arr.count; i++) { w = rect.size.width / (2 * arr.count - 1); x = 2 * w * i; h = [arr[i] floatValue] / 100.0 * rect.size.height; y = rect.size.height - h; UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(x, y, w, h)]; [[self colorRandom] set]; [path fill]; } } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self setNeedsDisplay]; } - (NSArray *)arrRandom { int totoal = 100; NSMutableArray *arrM = [NSMutableArray array]; int temp = 0; // 30 40 30 for (int i = 0; i < arc4random_uniform(10) + 1; i++) { temp = arc4random_uniform(totoal) + 1; // 100 1~100 // 随机出来的临时值等于总值,直接退出循环,因为已经把总数分配完毕,没必要在分配。 [arrM addObject:@(temp)]; // 解决方式:当随机出来的数等于总数直接退出循环。 if (temp == totoal) { break; } totoal -= temp; } // 100 30 1~100 // 70 40 0 ~ 69 1 ~ 70 // 30 25 // 5 if (totoal) { [arrM addObject:@(totoal)]; } return arrM; } - (UIColor *)colorRandom { // 0 ~ 255 / 255 // OC:0 ~ 1 CGFloat r = arc4random_uniform(256) / 255.0; CGFloat g = arc4random_uniform(256) / 255.0; CGFloat b = arc4random_uniform(256) / 255.0; return [UIColor colorWithRed:r green:g blue:b alpha:1]; } @end
07-绘制文字和图片
// ViewController.m // 07-绘制文字和图片 #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UILabel *labelView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSMutableDictionary *textDict = [NSMutableDictionary dictionary]; // 设置文字颜色 textDict[NSForegroundColorAttributeName] = [UIColor redColor]; // 设置文字字体 textDict[NSFontAttributeName] = [UIFont systemFontOfSize:30]; // 设置文字的空心颜色和宽度 textDict[NSStrokeWidthAttributeName] = @3; textDict[NSStrokeColorAttributeName] = [UIColor yellowColor]; // 创建阴影对象 NSShadow *shadow = [[NSShadow alloc] init]; shadow.shadowColor = [UIColor greenColor]; shadow.shadowOffset = CGSizeMake(4, 4); shadow.shadowBlurRadius = 3; textDict[NSShadowAttributeName] = shadow; // 创建富文本字符串 NSAttributedString *strArr = [[NSAttributedString alloc] initWithString:@"asdlsajkldl" attributes:textDict]; _labelView.attributedText = strArr; // 只能计算普通文本框 // [_labelView sizeToFit]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
// DrawView.m // 07-绘制文字和图片 #import "DrawView.h" @implementation DrawView // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code // 超出裁剪区域的内容全部裁剪掉 // 注意:裁剪必须放在绘制之前 UIRectClip(CGRectMake(0, 0, 50, 50)); UIImage *image = [UIImage imageNamed:@"001"]; // 默认绘制的内容尺寸跟图片尺寸一样大 // [image drawAtPoint:CGPointZero]; // [image drawInRect:rect]; // 绘图 [image drawAsPatternInRect:rect]; } - (void)awakeFromNib{ // UIImage *image = [UIImage imageNamed:@"001"]; // // // 默认绘制的内容尺寸跟图片尺寸一样大 // // [image drawAtPoint:CGPointZero]; // // // // [image drawInRect:rect]; // // 绘图 // [image drawAsPatternInRect:self.bounds]; } - (void)drawText { // 绘制文字 NSString *str = @"asfdsfsdfasfdsfsdfasfdsfsdfasfdsfsdfasfdsfsdfasfdsfsdfasfdsfsdfasfdsfsdfasfdsfsdfasfdsfsdfasfdsfsdfasfdsfsdfasfdsfsdf"; // 不会换行 // [str drawAtPoint:CGPointZero withAttributes:nil]; [str drawInRect:self.bounds withAttributes:nil]; } - (void)attrText { // 绘制文字 NSString *str = @"asfdsfsdf"; // 文字的起点 // Attributes:文本属性 NSMutableDictionary *textDict = [NSMutableDictionary dictionary]; // 设置文字颜色 textDict[NSForegroundColorAttributeName] = [UIColor redColor]; // 设置文字字体 textDict[NSFontAttributeName] = [UIFont systemFontOfSize:30]; // 设置文字的空心颜色和宽度 textDict[NSStrokeWidthAttributeName] = @3; textDict[NSStrokeColorAttributeName] = [UIColor yellowColor]; // 创建阴影对象 NSShadow *shadow = [[NSShadow alloc] init]; shadow.shadowColor = [UIColor greenColor]; shadow.shadowOffset = CGSizeMake(4, 4); shadow.shadowBlurRadius = 3; textDict[NSShadowAttributeName] = shadow; // 富文本:给普通的文字添加颜色,字体大小 [str drawAtPoint:CGPointZero withAttributes:textDict]; } @end
本人无商业用途,仅仅是学习做个笔记,特别鸣谢小马哥,学习了IOS,另日语学习内容有需要文本和音频请关注公众号:riyuxuexishuji