iOS使用QuartZ 畫(huà)圖

通過(guò)兩天的學(xué)習(xí)宇智,研究了一下quartz蔓搞,發(fā)現(xiàn)這是一個(gè)繪圖的好工具∷骈伲可以在屏幕圖層繪制文字喂分,線條,圖形還有折線圖机蔗。


主要是通過(guò)CGContextRef來(lái)實(shí)現(xiàn)蒲祈,下面來(lái)說(shuō)下實(shí)現(xiàn)思路

圖片上方的 進(jìn)度圈

(1)從圓心到圓上畫(huà)線,每5度轉(zhuǎn)化成弧度畫(huà)線萝嘁。共有72條線梆掸,然后通過(guò)實(shí)際走的步數(shù)和目標(biāo)步數(shù)轉(zhuǎn)化比率來(lái)將線渲染成綠色,渲染方式為畫(huà)線 stroke牙言。
//計(jì)算酸钦,通過(guò)實(shí)際步數(shù)和目標(biāo)步數(shù)的比率,計(jì)算得出需要標(biāo)綠的線

CGFloatstepCount = [self.stepCountfloatValue];
CGFloatactualStepCount = [self.targetStepCountfloatValue];
CGFloatstepRate = stepCount / actualStepCount;
NSIntegerstep = stepRate *360;
NSLog(@"%ld",step);
//畫(huà)線
for(NSIntegeri = -90; i <270; i +=5) {
if(i < step -90) {
CGContextSetRGBStrokeColor(context,60.0/255.0f,175.0/255.0f,60.0/255.0f,1);
//實(shí)際步數(shù)
}
else
{
CGContextSetRGBStrokeColor(context,0.5,0.5,0.5,1);
//實(shí)際步數(shù)與目標(biāo)步數(shù)之間的差
}
CGPointaPoints[2];
doubleradian = (double) i *PI/180;
aPoints[0] =CGPointMake(self.circlePoint.x,self.circlePoint.y);
//調(diào)用方法咱枉,通過(guò)圓心卑硫,半徑和弧度來(lái)計(jì)算圓上的點(diǎn)
aPoints[1] = [selfPointOfCircleWithCirclePoint:aPoints[0]andRadian:radian];
CGContextAddLines(context, aPoints,2);
CGContextDrawPath(context,kCGPathStroke);
}
//調(diào)用方法徒恋,通過(guò)圓心,半徑和弧度來(lái)計(jì)算圓上的點(diǎn)
BIGRADIUS 大圓半徑
-(CGPoint)PointOfCircleWithCirclePoint:(CGPoint)circlePoint andRadian:(double) radian
{
CGPointpoint =CGPointMake(circlePoint.x+BIGRADIUS*cos(radian), circlePoint.y+BIGRADIUS*sin(radian));
returnpoint;
}

(2)從圓心出發(fā)拔恰,蓋一個(gè)半徑較小的圓因谎,渲染方式為填充 fill。

//小圓填充
CGContextMoveToPoint(context,self.circlePoint.x,self.circlePoint.y);
CGContextSetRGBFillColor(context,1,1,1,1);
CGContextAddArc(context,self.circlePoint.x,self.circlePoint.y,SMALLRADIUS,0,2*PI,0);
CGContextFillPath(context);

(3)中心小圓上加載一個(gè)view颜懊,上面有image view 和label财岔。

圖片下方的折線圖

主要也是用CGContextRef實(shí)現(xiàn),然后填充河爹。
模擬數(shù)據(jù)匠璧,24小時(shí)對(duì)應(yīng)24個(gè)值,隨機(jī)產(chǎn)生咸这。生成一個(gè)字典夷恍,

//每小時(shí)步數(shù)
@property(nonatomic,strong)NSDictionary*stepDict;
(1)首先畫(huà)出坐標(biāo)系
代碼實(shí)現(xiàn)如下圖
//畫(huà)布
CGContextRefcontext =UIGraphicsGetCurrentContext();
CGColorRefcolor = [UIColorgrayColor].CGColor;
//線寬
CGFloatbackLineWidth =0.5f;
//投影
//CGFloat backMiterLimit = 0.f;
//線的屬性
CGContextSetLineWidth(context, backLineWidth);
CGContextSetLineJoin(context,kCGLineJoinRound);
CGContextSetLineCap(context,kCGLineCapRound);
CGContextSetBlendMode(context,kCGBlendModeNormal);
CGContextSetStrokeColorWithColor(context, color);
NSIntegertempY =y;
//橫線
for(NSIntegeri =0; i <4; i++) {
CGPointbPoint =CGPointMake(30, tempY -50);
CGPointePoint =CGPointMake(x-30, tempY -50);
CGContextMoveToPoint(context, bPoint.x,bPoint.y);
CGContextAddLineToPoint(context, ePoint.x,ePoint.y);
tempY -=_vInterVal;
}
//豎線
CGContextMoveToPoint(context,30,y-50);
CGContextAddLineToPoint(context,30, tempY +_vInterVal-50);
//高度賦值
_height=y-50- (tempY +_vInterVal-50);
//x軸上的坐標(biāo)點(diǎn)
NSIntegertempX =0;
for(NSIntegeri =0; i <5; i++) {
tempX = i*_hInterval+10;
CGRectrect =CGRectMake(tempX,y-50,50,50);
NSString*hourStr = [NSStringstringWithFormat:@"%2ld:00",i*6];
[selfdrawTheTextWithContext:contextandHourStr:hourStrandRect:rect];
}
//渲染
CGContextStrokePath(context);
(2)畫(huà)折線圖,主要設(shè)立CGContextMoveToPoint媳维,然后CGContextAddLineToPoint酿雪,通過(guò)字典的個(gè)數(shù)來(lái)繪制連續(xù)的線,一直CGContextAddLineToPoint侄刽,直到最后一個(gè)指黎。
//畫(huà)折線
CGColorRef pointlineColor = [UIColor colorWithRed:60.0/255.0fgreen:175.0/255.0fblue:60.0/255.0falpha:1].CGColor;
CGFloat pointLineWidth =0.5f;
//設(shè)置線的屬性
CGContextSetLineWidth(context, pointLineWidth);
CGContextSetLineJoin(context, kCGLineJoinRound);
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetBlendMode(context, kCGBlendModeNormal);
CGContextSetStrokeColorWithColor(context, pointlineColor);
CGContextSetRGBFillColor(context,204.0/255.0f,255.0/255.0f,200.0/255.0f,1);
_hInterval = (x -60) /24;
//起始點(diǎn)
CGContextMoveToPoint(context,30, y -50);
CGFloat endX =30;
for(NSInteger i =0; i <24; i++) {
NSString * key = [NSString stringWithFormat:@"%02ld:00",i];
//調(diào)用方法,取y值
CGFloat endY = [selfcalcTheOriginYWithKey:key];
//連線
CGContextAddLineToPoint(context, endX, endY);
//計(jì)算x值
endX += _hInterval;
}
//結(jié)束點(diǎn)
CGContextAddLineToPoint(context,  x-30, y -50);
//填充
CGContextFillPath(context);
//通過(guò)key取得字典中的valve州丹,然后轉(zhuǎn)化為y軸上的值
-(CGFloat)calcTheOriginYWithKey:(NSString*)key
{
CGFloatoriginY =y-50- [[self.stepDictobjectForKey:key]floatValue] /600*_height;
returnoriginY;

over

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末醋安,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子墓毒,更是在濱河造成了極大的恐慌吓揪,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件所计,死亡現(xiàn)場(chǎng)離奇詭異柠辞,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)主胧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門钾腺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人讥裤,你說(shuō)我怎么就攤上這事∫霰ǎ” “怎么了己英?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)吴旋。 經(jīng)常有香客問(wèn)我损肛,道長(zhǎng)厢破,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任治拿,我火速辦了婚禮摩泪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘劫谅。我一直安慰自己见坑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布捏检。 她就那樣靜靜地躺著荞驴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贯城。 梳的紋絲不亂的頭發(fā)上熊楼,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音能犯,去河邊找鬼鲫骗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛踩晶,可吹牛的內(nèi)容都是我干的执泰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼合瓢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼坦胶!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起晴楔,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤顿苇,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后税弃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體纪岁,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年则果,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了幔翰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡西壮,死狀恐怖遗增,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情款青,我是刑警寧澤做修,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響饰及,放射性物質(zhì)發(fā)生泄漏蔗坯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一燎含、第九天 我趴在偏房一處隱蔽的房頂上張望宾濒。 院中可真熱鬧,春花似錦屏箍、人聲如沸绘梦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谚咬。三九已至,卻和暖如春尚粘,著一層夾襖步出監(jiān)牢的瞬間择卦,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工郎嫁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秉继,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓泽铛,卻偏偏與公主長(zhǎng)得像尚辑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盔腔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容