iOS自定义多边形分析图

2017-03-14  本文已影响0人  帅气影中人

View.h文件

#import <UIKit/UIKit.h>


@interface GraphView : UIView


@property(nonatomic,strong)NSDictionary *dataDic;// 接收数据信息

@property(nonatomic,strong)NSArray *nameArr;

@end

View.m文件

#import "GraphView.h"

#define kCount self.dataDic.count // 传入的数据中的个数


@implementation GraphView


- (void)drawRect:(CGRect)rect

{

//一个不透明类型的Quartz 2D绘画环境,相当于一个画布,你可以在上面任意绘画

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetLineWidth(context, 2.0); // 线宽

    CGContextSetStrokeColorWithColor(context, [UIColorgrayColor].CGColor);// 线框颜色

    UIColor *aColor = [UIColorcolorWithRed:1green:0.5blue:0.2alpha:0.2];

    CGContextSetFillColorWithColor(context, aColor.CGColor);// 填充颜色


// 

    CGPoint center = CGPointMake(200, 200);

// 从一个点开始

    CGContextMoveToPoint(context, center.x, center.y + 160.0);


    for(int i = 1; i < kCount; ++i)

    {

        self.nameArr = @[@"Chinese",@"Math",@"English",@"History",@"PE"];

    // 

        CGPoint point = [self getXAndYWithScores:_dataDic[_nameArr[i - 1]] integer:i];

    // 记录上一个点,并连接到这个点;

        CGContextAddLineToPoint(context, center.x + point.x, center.y + point.y);

    }


    CGContextClosePath(context); // 结束一次画图

    CGContextDrawPath(context, kCGPathFillStroke);// 图形内容填充颜色方式(填满)

    CGContextStrokePath(context); // 可不要


// 如果是画两组不同的图形, 重新创建一次 CGContextRef

    CGContextRef context2 = UIGraphicsGetCurrentContext();

    CGContextSetRGBStrokeColor(context2, 28, 132, 250, 1);

    CGContextSetLineWidth(context2, 1.0);

    CGContextSetStrokeColorWithColor(context2, [UIColorlightGrayColor].CGColor);// 线框颜色


// 几条射线,和注释

    for(int i = 1; i <= kCount; i++)

    {

        CGContextMoveToPoint(context2, center.x, center.y);


        CGFloat x = 200.0 * sinf(i * 2.0 * M_PI / kCOunt);

        CGFloat y = 200.0 * cosf(i * 2.0 * M_PI / 5.0);

        CGContextAddLineToPoint(context2, center.x + x, center.y + y);

        

        UILabel *nameLb = [[UILabelalloc]initWithFrame:CGRectMake(0, 0, 80, 30)];

        nameLb.text = self.nameArr[i - 1];

        nameLb.center = CGPointMake(center.x + x, center.y + y);

        [selfaddSubview:nameLb];

    }


    CGContextClosePath(context2);

    CGContextDrawPath(context2, kCGPathFillStroke);

    CGContextStrokePath(context2);


} 


// 

- (CGPoint)getXAndYWithScores:(NSString *)scores integer:(NSInteger)integer

{

    CGFloat x = 160.0 * ([scores floatValue] / 100) * sinf(integer * 2.0 * M_PI / kCount

);// 如果想要多边形, 改动5.0 就行了, 前面相应的地方也修改

    CGFloat y = 160.0 * ([scores floatValue] / 100) * cosf(integer * 2.0 * M_PI / kCount);

    CGPoint point = CGPointMake(x, y);

    return point;

}

调用View

#import "ViewController.h"

#import "GraphView.h"

@interfaceViewController ()

@end


@implementation ViewController


- (void)viewDidLoad {
    [superviewDidLoad];

    // 多线的, 可以根据需求进行调整

    NSDictionary *dataDic = @{@"Chinese":@66,@"Math":@88,@"English":@54,@"History":@90,@"PE":@40};// 随意填写, 数组更加方便

    GraphView *grapview = [[GraphView alloc]initWithFrame:self.view.bounds];

    grapview.dataDic = dataDic;// 传值到 UIView界面

    

    grapview.backgroundColor = [UIColor clearColor];

    [self.view addSubview:grapview];

}

// 6边形的效果


六边形2.png
上一篇下一篇

猜你喜欢

热点阅读