下面是范文網(wǎng)小編分享的iOS開發(fā)數(shù)據(jù)存儲NSCoder7篇(ios開發(fā)數(shù)據(jù)存儲),以供參考。
iOS開發(fā)數(shù)據(jù)存儲NSCoder1
時間過得真快,一眨眼我的實習生活就結束了,在這幾天內,我似乎過了半年,又似乎是一瞬間,又好像做了一個很長很長的夢,夢醒的時候我就回到了我的學校。
三年時間,應該說是或多或少有些收獲,可一走出校門后我才了發(fā)現(xiàn)我什么也不是,什么也不會,所學的東西少得可憐,連九牛一毛也可以說都不知.
說真的,很有幸我進入的是**家具實業(yè)有限公司進行實習,也可以說是試聘;在**信息中心進行編程,是用delphi軟件給他們的一分廠的員工進行效益工資和計件工資方面的核算,求出他們的總工資.最后能以報表的形式表現(xiàn)出來,在這方面他們同進要求要個有查詢的功能,也說是說輸入工號可以調出一個員工三個月這內的所有的工資,同時超出三個月的可以自動消除.同時他們的工作流程是單卡流程,一個卡號,批量的進入,然后經本文來源于文秘公文網(wǎng)過員工的加工操作之后,批量的輸出。在這個方面他們有個出材量和購進量之比,也就是說如何去求他們的出材率,出材率越高,就意味著生產出來的好的產品就越多,員工的效益工資就越高。比如他們有四個產品:規(guī)格料、指接、拼板、集成材、他們會對這四個產品進行定價;如生產出一立方米規(guī)格料的價格是3300元、指接是3600元、拼板是4000元、而集成材則是4860元;通過這些定價我們可以很清楚的看出工廠要求員工生產出什么樣的產品。入他們的工序的材料我們稱之為毛料,而產出的東西我們又稱之為毛壞料,公司規(guī)定:如果員工的出材率在76.8%,那么超出的部分就是員工的效益工資,如果低于76.8%,那么員工就沒有效益工資,負數(shù)歸位于零,按零來計算,之后他要求對員工進行效益工資分配,比如有四個工序,送料器,直邊、壓刨、四面刨、他們又給這些工序的員工進行效益比例的分配、比如送料器是13.4%、直邊是9.6%、壓刨是50.4%、四面刨是30.6%,在這里又有主副之分,比例為6和4,同時他要求我們將效益工資進行分配到員工,也就是說員工可以很清楚的要看到自己一天能掙多少錢,做到心中有數(shù),當然這個簡單,我們只須打印出報表就行了。
還有一點就是對計件工資進行核算,在這方面他們也有一定的規(guī)格,比如長度,寬度,厚度在那個范圍內,就有不同的定價;比如寬度小于20mm,定價是160元;如果在20mm和40mm之間,那么定價就可能在90元左右;如果大于40mm時,那么就可能是60元了,進行計價工資統(tǒng)計之后我們就可以進行分配了,在這方面他們的比例也是不如,又會添加新的工序,如改料鋸了,還會有新的分配比例.
剛開始我們做這個程序的時候,大家都比較盲目,只是負責人說了一下,我們就開始進行編了在這個過程之種我們吃了許多的苦,有時候凌晨三四點我們還在加班,可最后做出的作品是輸入速度太慢,我們的主管于是帶領我們到他們一樓的微機室是去看他們以前編寫的程序;不看不知道,一看嚇了我們一大跳,以前我們那有這樣想過呀,只要能做出來,沒有錯誤就行了,可是速度呢?人家一個小時輸入的東西,我們的程序可能需要一個早晨,看完之后主管對我們說:這樣的程序送你,你會用嗎?
那個打擊呀,辛苦了幾天幾夜,最終卻是這樣的一個結果??纱驌魵w打擊,我們又得重新來做!相對而言,我們這次要比以前有經驗了,一次比一次成熟起來了,在經歷了又一個一天一夜的奮戰(zhàn),我們終于又有新希望了,可是心情剛好,那么又傳來了消息,說他們的分配比例又發(fā)生的變動,價格又有了新的調整,這在以前我們也想過這個問題,也想好好的做,可是我們又一想他們的工廠不是要實用嗎?這方面變化的可能性很小,于是為了方期間我將有變量寫進了代碼之中,這一變,無易宣布我要破產。和我在一起的幾個也是這種情況,所以我們這些沒有開發(fā)過軟件的充當軟件高手的新手們又得重新面對新的問題了.
失敗,又一次被打敗!
幾天之后我們又做出了程序,很辛苦,此時我們才明白程序員的不易了,編程是一個見效特別慢的東西,而且對方又看不見,如果一不小心你的程序可能會無法打開,或者是說出現(xiàn)別的什么,那就完了,你幾天的成果就什么也看不見了,本文自文秘公文網(wǎng)不像別的東西,做了,可以讓大家看得見。我的程序在最后的調試時出現(xiàn)了一點小故障,而且工資的分配要對應到每一個員工,可我一時間一點思路也沒有了,就只能對應到職務,所以我失敗了,我的實習生活也就結束了。
當然比表面來看我是失敗了,敗的很慘;可是從某種意義上說我又達到了我的目的,因為只有失敗的人永遠都不會停下思考的腳步,激起了我沉睡的思想,使我一顆盲目的心有了方向,我不能這樣輸了,從那兒倒下去的,我會從那兒站起來的,認認真真的把畢業(yè)設計拿下來了;別人實習了一個月我雖然只有十六天,可在這十六天中我從未停下來過,我是白天干,晚上干,頂著那么大的壓力,我的體會絕不低于他們中的任何一個人,說實話,在一段實習期間,我真的有點撐不住了,我也想到過放棄,也曾有好幾家單位通知我去面試,也有聯(lián)通的第二輪復試,可我都放棄了,我不能就這樣走了。我輸?shù)舻氖羌寄?,不是人?失掉了人格我將失去了所有,失掉技能我還會追回來的!
人生的每一步旅途中,總有著一道無形的欄桿,每一次跨越需要很多的勇氣,也不是每一次跨越都能夠成功,失敗是不可避免的,主要的是要敢于承認失敗,面對失敗,努力去做,解決它,有這個決心,我想人生會成功的,至少可以無憾!這次我想我會很用心的去學習,去做我的畢業(yè)設計!盡量把他做到完美,至少我自己要九十分的滿意我才會交出我的作品。
人生就是經歷著風風雨雨,在風雨中倒下去,然后站起來的時候,那時的彩虹最美麗!
四周的時間能夠和山大的同學一起工作、學習、生活我感到非常的榮幸,同時也感覺到很大的壓力,作為電子商務專業(yè)的學生從事軟件開發(fā)感覺還是有一定的困難,特別是我們還是和山大大三的學生一起,在初來時自己就有一些不自信,但隨著項目的進展,我慢慢的找到了自己的位置,找到自己的目標,雖然自己與好的同學還有差距,這也給了我很大壓力,但是我相信沒有壓力就沒有動力,所以整個實訓過程中我都在不斷地努力。
實訓期間讓我學到很多東西,不僅在理論上讓我對it領域有了全新的認識,在實踐能力上也得到了很大的提高,真正的學到了學以致用,更學到很多做人的道理,對我來說受益匪淺。特別是利用周六上午的時間山大為我們安排的講座讓我們了解it領域一些新的發(fā)展動態(tài)以及一些領先的技術,讓我意識到自己知識的缺少,這激勵我在以后的學習、工作、生活中要不斷了解信息技術發(fā)展動態(tài)以及信息發(fā)展中出現(xiàn)的新的技術。
除此之外,我還學到了如何與人相處,如何和人跟好的交流,我們組成一個團隊大家一起開發(fā)一個項目,大家的交流溝通顯得尤為重要,如何將自己的想法清楚明白的告訴隊友,如何提出自己想法的同時又不傷害其他的隊友的面子,這些在我的實訓生活中都有一些體會。可是說,第一次親身體會理論與實際相結合,讓我大開眼界。也是對以前學習的一個初審吧,相信這次實訓多我以后的學習、工作也將會有很很大的影響,在短短的二十幾天里這些寶貴的經驗將會成為我以后工作的基石。
iOS開發(fā)數(shù)據(jù)存儲NSCoder2
SQLite3是嵌入在iOS中的關系型數(shù)據(jù)庫,對于存儲大規(guī)模的數(shù)據(jù)很有效,SQLite3使得不必將每個對象都加到內存中。
基本操作:
(1)打開或者創(chuàng)建數(shù)據(jù)庫
Sqlite3?*database;
intresult?=?sqlite3_open(“/path/databaseFile”,?&database);
如果/path/databaseFile不存在,則創(chuàng)建它,否則打開它。如果result的值是SQLITE_OK,則表明我們的操作成功。
注意上述語句中數(shù)據(jù)庫文件的地址字符串前面沒有@字符,它是一個C字符串。將NSString字符串轉成C字符串的方法是:
constchar*cString?=?[nsString?UTF8String];
(2)關閉數(shù)據(jù)庫
Sqlite3_close(database);
(3)創(chuàng)建一個表格
char*errorMsg;
constchar*createSQL?=“CREATE?TABLE?IF?NOT?EXISTS?PEOPLE?(ID?INTEGER?PRIMARY?KEY?AUTOINCREMENT,?FIELD_DATA?TEXT)”;
intresult?=?sqlite3_exec(database,?createSQL,?NULL,?NULL,?&errorMsg);
執(zhí)行之后,如果result的值是SQLITE_OK,則表明執(zhí)行成功;否則,錯誤信息存儲在errorMsg中,
Sqlite3_exec這個方法可以執(zhí)行那些沒有返回結果的操作,例如創(chuàng)建、插入、刪除等。
(4)查詢操作
NSString?*query?=?@“SELECT?ID,?FIELD_DATA?FROM?FIELDS?ORDER?BY?ROW”
iOS開發(fā)數(shù)據(jù)存儲NSCoder3
iOS是目前最為流行、最熱門的操作系統(tǒng)之一,在全球有著不可替代的地位,雖然在中國,android的市場占有率與IOS想比較要高的多,但是IOS系統(tǒng)的蘋果手機在中國也屬于高端品牌。從品牌以及系統(tǒng)技術含量做人就要做一個徘徊在牛A和牛C之間的人。上來看,IOS就業(yè)崗位都屬于高端企業(yè)。而且基于IOS系統(tǒng)的app應用程序開發(fā)更是行業(yè)的旗幟。但由于我國IOS開發(fā)起步較晚,人才培養(yǎng)體系還跟不上市場的發(fā)展速度,IOS開發(fā)人才都成為我國企業(yè)必爭的資源。在做人就要做一個徘徊在牛A和牛C之間的人。我們看來,目前很多企業(yè)都有收購的行為,其實被收購的公司并不是因為有技術秘方,也不是被收購的企業(yè)真的市值非常大,更不會因為品牌好,其實收購就是在于人才的收購。
iOS人才缺口大:據(jù)相關數(shù)據(jù)顯示,目前我捐款就像發(fā)-情,一想起來馬上就要。國IOS軟件人才出現(xiàn)了接近四十萬的缺口,而且未來幾年呢IOS軟件開發(fā)人才缺口將過百萬。但是目前IOS最大的人才輸出地也就是培訓機構,遠遠無法滿足,而大學有未開設IOS專業(yè),因此IOS人才欠缺將是持久問只要功夫深,拉屎也認真啊!題。
iOS技術領先: 凡是IOS系統(tǒng)的智能設備,都屬于蘋果公司的終端設備,蘋果公司在品牌營造上本身就是高端品牌。再看IOS系統(tǒng)開發(fā)中的開發(fā)語言是objective Cc,單從objective C只要功夫深,拉屎也認真啊!c來說,技能起點也相對較高,因此具有IOS平臺開發(fā)經驗的比其他的平臺開發(fā)經驗的技術水平要高很多。那么從IOS品牌的高端性和技術水平的要求來看都比同行業(yè)要高,自然在薪資待遇上也會相應的高很多,有數(shù)據(jù)顯示工資就像例假,一月不來你就傻眼。,IOS開發(fā)從業(yè)者比同行其他平臺的開發(fā)從業(yè)者待遇要平均高到20%-30%左右。
我國IOS就業(yè)前景自然不用說,開發(fā)崗位也非常的多,就app應用開發(fā)工程師、游戲開發(fā)工程師、測試工程師、UI設計師每個崗捐款就像發(fā)-情,一想起來馬上就要。位都有大量的欠缺,當然人才只能從培訓機構中補給,但是人才補給相對較慢。因此只要具備IOS相關的技能,擁有一定的項目實戰(zhàn)經驗之后,前途無量。也正因為企業(yè)及開發(fā)者看到了IOS的市場前景,大力推動IOS開發(fā)談判就像口-交,費盡了口舌也就那點收獲。行業(yè),也使得越來越多的學子們加入了IOS培訓行業(yè),希望通過培訓,讓自己的發(fā)展起點更高。
[ios開發(fā)就業(yè)前景]
iOS開發(fā)數(shù)據(jù)存儲NSCoder4
1.“省電,流暢,優(yōu)質應用,響應速度快,用戶體驗好……”也許是眾多用戶眼中的蘋果系統(tǒng),
2.在眾手機商拼CPU主頻,拼4核,8核的年代,蘋果依然堅持雙核,iphone用戶體驗仍然堅挺。
以上兩點IOS是如何優(yōu)化,在續(xù)航,流暢度和響應速度上完勝安卓,答案就是多線程&RunLoop...
RunLoop是IOS事件響應與任務處理最核心機制,它貫穿IOS整個系統(tǒng)運作,
RunLoop不像一般的線程循環(huán)等待任務,傳統(tǒng)的線程循環(huán)等待任務會導致CPU時間被占用,雖然你設置了睡眠時間,但很多時候會出現(xiàn)空轉,
而RunLoop是監(jiān)控事件觸發(fā)處理機制,說白了,在有事件的時候CPU全力生產,當沒有事件產生的時候,線程就掛起等待事件。
可以說,RunLoop是IOS比android省電,流暢,用戶體驗好的主要原因。
iOS開發(fā)數(shù)據(jù)存儲NSCoder5
繪圖操作
前言:在iOS開發(fā)中,系統(tǒng)已經給我們提供了功能強大的控件,可是很多并不能滿足我們的需求,這時候我們需要,自定義一些美觀的控件。所用的知識也就是下面的繪圖。
1.基本的繪圖知識
1.1圖形上下文
1.1圖形上下文(Graphics Context):是一個CGContextRef類型的數(shù)據(jù)
1.2圖形上下文的作用
保存繪圖信息、繪圖狀態(tài)
決定繪制的輸出目標(繪制到什么地方去?)
(輸出目標可以是PDF文件、Bitmap或者顯示器的窗口上)
1.2 - (void)drawRect:(CGRect)rect
作用:就是用來繪圖 什么調用:當控件第一次顯示的時候 rect:當前控件的bounds1.2 繪圖的步驟
1.獲得圖形上下文:
cGContextRef ctx = UIGraphicsGetCurrentContext();
2.拼接路徑
新建一個起點
void CGContextMoveToPoint(CGContextRef c, CGFloat x, CGFloat y)
添加新的線段到某個點
void CGContextAddLineToPoint(CGContextRef c, CGFloat x, CGFloat y)
添加一個矩形
void CGContextAddRect(CGContextRef c, CGRect rect)
添加一個橢圓
void CGContextAddEllipseInRect(CGContextRef context, CGRect rect)
添加一個圓弧
void CGContextAddArc(CGContextRef c, CGFloat x, CGFloat y,
cGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise)
3.添加路徑到上下文
Mode參數(shù)決定繪制的模式
void CGContextDrawPath(CGContextRef c, CGPathDrawingMode mode)
繪制空心路徑
void CGContextStrokePath(CGContextRef c)
繪制實心路徑
void CGContextFillPath(CGContextRef c)
提示:一般以CGContextDraw、CGContextStroke、CGContextFill開頭的函數(shù),都是用來繪制路徑的
4.渲染到View上面
1.3 基本的繪圖實例
1. 繪制線條
獲得圖形上下文:UIGraphicsGetCurrentContext()拼接路徑:UIBezierPath添加路徑到上下文CGContextAddPath(ctx, path.CGPath)渲染到View上面CGContextStrokePath(ctx)- (void)drawLine{ // 一個路徑對象,可以對應多跟線 // 1.獲取跟當前view想關聯(lián)的上下文,系統(tǒng)自動幫我們創(chuàng)建的上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 設置上下文的狀態(tài),應該放在渲染之前就可以 // 創(chuàng)建對應顏色對象,調用set方法 [[UIColor redColor] set]; // 設置上下文的線寬 CGContextSetLineWidth(ctx, 15); // 設置線段的連接樣式 CGContextSetLineJoin(ctx, kCGLineJoinRound); // 設置線段的端點樣式 CGContextSetLineCap(ctx, kCGLineCapRound); // 2.拼接路徑,UIBezierPath,封裝好了一套很好使用的路徑 UIBezierPath *path = [UIBezierPath bezierPath]; // 2.1 設置起點 [path moveToPoint:CGPointMake(10, 125)]; // 2.2 添加一根線到某個點 [path addLineToPoint:CGPointMake(220, 125)]; // 如果只使用一根路徑,默認下一根線的起點在上一根跟線終點 [path addLineToPoint:CGPointMake(200, 150)]; // 3.添加路徑到上下文 CGContextAddPath(ctx, path.CGPath); // 4.渲染到view上面的圖層 CGContextStrokePath(ctx);}
2.繪制曲線
一般通過貝塞爾曲線來繪制圖形:UIBezierPath
-(void)drawLIneQuadCurve{ // 1.獲取上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 2.拼接路徑 UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:CGPointMake(10, 125)]; [path addQuadCurveToPoint:CGPointMake(240, 125) controlPoint:CGPointMake(125, 0)]; // 3.路徑添加到上下文 CGContextAddPath(ctx, path.CGPath); // 4.渲染上下文 //以填充的方式渲染 //CGContextFillPath(ctx); CGContextStrokePath(ctx);}
3.繪制矩形
// 繪制矩形- (void)drawRect{ CGContextRef ctx = UIGraphicsGetCurrentContext(); UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(50, 50, 100, 100) cornerRadius:50]; CGContextAddPath(ctx, path.CGPath); // 設置填充的顏色 [[UIColor redColor] setFill]; [[UIColor greenColor] setStroke]; // 填充:必須封閉的路徑 // 即描邊又填充 // 如果以后只需要描邊,最好不要使用fill CGContextDrawPath(ctx, kCGPathFillStroke); // CGContextFillPath(ctx); CGContextStrokePath(ctx);}
4.繪制圓弧
- (void)drawRect:(CGRect)rect { // 畫圓弧 // center:圓心 // radius:半徑 // clockwise:當前是 yes:順時針 no:逆時針 CGPoint center = CGPointMake(125, 125); UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(125, 125) radius:100 startAngle:0 endAngle:-M_PI_2 clockwise:NO]; // 添加一根線到圓心 [path addLineToPoint:center]; // 關閉路徑:從路徑的終點到起點 // [path closePath]; // 填充,默認會關閉路徑,從路徑的終點到起點 [path fill];}
5.繪制文字
- (void)drawRect:(CGRect)rect{ //=========================繪制文字========================== NSString *name = @會長桂雛菊; // 描述文字的屬性,顏色,字體大小 NSMutableDictionary *attr = [NSMutableDictionary dictionary]; // 字體 attr[NSFontAttributeName] = [UIFont systemFontOfSize:15]; // 顏色 attr[NSForegroundColorAttributeName] = [UIColor redColor]; // 邊框顏色 attr[NSStrokeColorAttributeName] = [UIColor redColor]; // 邊框寬度 attr[NSStrokeWidthAttributeName] = @1; // 陰影 NSShadow *shadow = [[NSShadow alloc] init]; shadow.shadowOffset = CGSizeMake(3, 3); shadow.shadowColor = [UIColor yellowColor]; shadow.shadowBlurRadius = 3; attr[NSShadowAttributeName] = shadow; [name drawInRect:CGRectMake(90, 100, 100, 50) withAttributes:attr];}
6.繪制餅狀圖
在初始化的時候時候,系統(tǒng)通過調用drawRect方法繪圖。但是如果我們要重繪,手動調用drawRect方法是無效的。不過系統(tǒng)為我們準備了重繪的方法:
重繪:setNeedsDisplay
- (void)drawRect:(CGRect)rect { // Drawing code NSArray *datas = @[@25,@25,@50]; CGPoint center = CGPointMake(125, 125); CGFloat r = 100; CGFloat startA = 0; CGFloat angle = 0; CGFloat endA = 0; for (NSNumber *number in datas) { // 遍歷一個數(shù)據(jù),繪制一根扇形 startA = endA; angle = number.intValue / 100.0 * M_PI * 2; endA = startA + angle; // 描述圓弧 UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:r startAngle:startA endAngle:endA clockwise:YES]; [path addLineToPoint:center]; [[self randomColor] set]; [path fill]; }}//當點擊View的時候,重繪- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [self setNeedsDisplay];}//生成隨機的顏色- (UIColor *)randomColor{ 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];}
7.上下文棧
將當前的上下文copy一份,保存到棧頂(那個棧叫做”圖形上下文?!?:
void CGContextSaveGState(CGContextRef c)
將棧頂?shù)纳舷挛某鰲?替換掉當前的上下文:
void CGContextRestoreGState(CGContextRef c)
- (void)drawRect:(CGRect)rect { // Drawing code // 1.獲取上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 2.拼接路徑 UIBezierPath *path = [UIBezierPath bezierPath]; // 橫 [path moveToPoint:CGPointMake(10, 150)]; [path addLineToPoint:CGPointMake(290, 150)]; // 3.把路徑添加到上下文 CGContextAddPath(ctx, path.CGPath); //================================================ // 保存上下文狀態(tài) CGContextSaveGState(ctx); //================================================ // 設置上下文的狀態(tài) CGContextSetLineWidth(ctx, 10); [[UIColor redColor] set]; // 4.渲染上下文,查看上下文的狀態(tài),根據(jù)狀態(tài)去渲染 CGContextStrokePath(ctx); // 豎 path = [UIBezierPath bezierPath]; [path moveToPoint:CGPointMake(150, 10)]; [path addLineToPoint:CGPointMake(150, 290)]; // 3.把路徑添加到上下文 CGContextAddPath(ctx, path.CGPath); // ============================================== // 從上下文狀態(tài)棧里面取出保存的狀態(tài),替換掉當前的狀態(tài) CGContextRestoreGState(ctx); // ============================================= // 4.渲染上下文,查看上下文的狀態(tài),根據(jù)狀態(tài)去渲染 CGContextStrokePath(ctx);}
8.上下文的平移,旋轉,縮放
利用矩陣操作,能讓繪制到上下文中的所有路徑一起發(fā)生變化
縮放
void CGContextScaleCTM(CGContextRef c, CGFloat sx, CGFloat sy)
旋轉
void CGContextRotateCTM(CGContextRef c, CGFloat angle)
平移
void CGContextTranslateCTM(CGContextRef c, CGFloat tx, CGFloat ty)
- (void)drawRect:(CGRect)rect { // 獲取上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 拼接路徑 UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(-100, -50, 200, 100)]; // 矩陣操作:必須要在添加路徑之前進行形變 // 平移上下文 CGContextTranslateCTM(ctx, 100, 100); // 旋轉 CGContextRotateCTM(ctx, M_PI_4); // 縮放 CGContextScaleCTM(ctx, 0.5, 0.5); // 添加路徑到上下文 CGContextAddPath(ctx, path.CGPath); // 渲染上下文 CGContextFillPath(ctx);}
9.圖片加水印
1.開啟一個基于位圖的圖形上下文
void UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale)
size:上下文尺寸 opaque:不透明 Yes 不透明 透明 NO scale:是否縮放上下文,0表示不要縮放2.從上下文中取得圖片(UIImage):
UIImage* UIGraphicsGetImageFromCurrentImageContext()
3.結束基于位圖的圖形上下文:
void UIGraphicsEndImageContext()
- (void)viewDidLoad {開啟一個基于位圖的圖形上下文void UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale) [super viewDidLoad]; UIImage *image = [UIImage imageNamed:@hina]; // 創(chuàng)建位圖上下文 UIGraphicsBeginImageContextWithOptions(image.size, NO, 0); [image drawAtPoint:CGPointZero]; // 文字 NSString *str = @會長桂雛菊; [str drawAtPoint:CGPointMake(0, 0) withAttributes:nil]; // 根據(jù)上下文的內容生成一張圖片 image = UIGraphicsGetImageFromCurrentImageContext(); // 關閉上下文 UIGraphicsEndImageContext(); // 用來網(wǎng)絡中傳輸圖片 NSData *data = UIImagePNGRepresentation(image); [data writeToFile:@/Users/apple/Desktop/image.png atomically:YES];}
10.圖片裁剪
1.將當前上下所繪制的路徑裁剪出來(超出這個裁剪區(qū)域的都不能顯示):
void CGContextClip(CGContextRef c)
思路分析
先畫一個大圓,在設置裁剪區(qū)域,把圖片畫上去,超出裁剪區(qū)域的自動裁剪掉,
* 加載舊圖片,根據(jù)舊圖片,獲取上下文尺寸。
* 確定圓環(huán)寬度 borderW
* 上下文的尺寸 = 新圖片的尺寸
* 確定新的上下文尺寸: newImageW : oldImageW + 2 * borderW newImageH : oldImageH + 2 * borderW,
* 繪制大圓:
1.獲取上下文 2.添加路徑到上下文 3.設置大圓的顏色 = 圓環(huán)的顏色 4.渲染
* 設置裁剪區(qū)域,和圖片尺寸一樣大,只不過,x,y不一樣,x=borderW,y=borderW.
* 繪制舊圖片
* 獲取新圖片
* 關閉上下文
* 抽分類,3個參數(shù),圖片名稱,圓環(huán)寬度,圓環(huán)顏色
+ (UIImage*)imageCircleWithImage:(UIImage *)image borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)borderColor{ // 設置圓環(huán)寬度 CGFloat boardW = borderWidth; CGFloat imageW = image.size.width + 2 * boardW; CGFloat imageH = image.size.height + 2 *boardW; // 只有正方形才能正切圓,選擇一個最短的尺寸,正切。 CGFloat circleW = imageW > imageH ? imageH : imageW; CGRect rect = CGRectMake(0, 0, circleW, circleW); // 2.開啟圖像上下文 UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0); // 3。獲取當前上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 4.畫外圓 UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:rect]; CGContextAddPath(ctx, path.CGPath); [borderColor set]; CGContextFillPath(ctx); // 設置頭像尺寸 rect = CGRectMake(boardW, boardW, image.size.width , image.size.height); // 5.創(chuàng)建裁剪路徑 UIBezierPath *clipPath = [UIBezierPath bezierPathWithOvalInRect:rect]; // 6.裁剪路徑 // 根據(jù)這個路徑進行裁剪,超出路徑以外的部分就不會顯示了 [clipPath addClip]; // 7.畫頭像 [image drawInRect:rect]; // 不能直接在這返回,上下文沒有關閉,會消耗內存. // 8.獲取新圖片 image = UIGraphicsGetImageFromCurrentImageContext(); // 9.關閉上下文 UIGraphicsEndImageContext(); return image;}
11.截取屏幕
view之所以能顯示東西,完全是因為它內部的layer。View內部有個layer(圖層)屬性,drawRect:方法中取得的是一個Layer Graphics Context,因此,繪制的東西其實是繪制到view的layer上去了
- (void)renderInContext:(CGContextRef)ctx;
//截取屏幕+ (UIImage*)imageWithCaptureView:(UIView*)captureView;{ // 1.開啟上下文 UIGraphicsBeginImageContextWithOptions(captureView.bounds.size, NO, 0.0); // 2.獲取當前上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 3.把控制器圖層渲染到上下文 [captureView.layer renderInContext:ctx]; // 4.取出新圖片 UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage;}
iOS開發(fā)數(shù)據(jù)存儲NSCoder6
cocoaPods 是開發(fā) OS X 和 iOS 應用程序的第三方庫的依賴管理工具,如果是正常的開發(fā)不需要使用的第三方的代碼,CocoaPods是不需要的,但是從實際情況上,為了提高開發(fā)效率,CocoaPods算是一個必備的開發(fā)工具之一,一般如果是簡單的引用,CocoaPods的優(yōu)勢不是很明顯,當項目用到的第三方應用程序越來越多的時候,CocoaPods可以根據(jù)定義的依賴關系,統(tǒng)一管理,第三開源庫如果有更新,直接更新Pods文件即可。
cocoaPods基礎
cocoaPods是用 Ruby 寫的,并由若干個 Ruby 包 (gems) 構成的,所以有的時候我們會看到有人說CocoaPods利用依賴管理構建的依賴管理工具,CocoaPods中用到了Ruby管理工作的包(gem),
cocoaPods應該是iOS最常用最有名的類庫管理工具了,絕大部分有名的開源類庫,都支持CocoaPods。CocoaPods是用Ruby實現(xiàn)的,要想使用它首先需要有Ruby的環(huán)境。OS X系統(tǒng)默認的已經可以運行Ruby了,如果安裝CocoaPods只需要在終端中輸入一個命令:
Sudo gem install cocoapods
cocoaPods是以Ruby gem包的形式被安裝的,安裝的時候大概需要十分鐘左右,需要FQ,如果不FQ的花可以通過淘寶的Ruby鏡像訪問CocoaPods。如果gem包版本不夠新,可以更新一下gem:
gem update
如果需要升級CocoaPods可以使用安裝的時候的同樣的命令:
Sudo gem install cocoapods
iOS開發(fā)數(shù)據(jù)存儲NSCoder7
Android系統(tǒng)一共提供了四種數(shù)據(jù)存儲方式,分別是:SharePreference、SQLite、Content Provider和File。由于Android系統(tǒng)中,數(shù)據(jù)基本都是私有的的,都是存放于“data/data/程序包名”目錄下,所以要實現(xiàn)數(shù)據(jù)共享,正確方式是使用Content Provider。
SQLite: SQLite是一個輕量級的數(shù)據(jù)庫,支持基本SQL語法,是常被采用的一種數(shù)據(jù)存儲方式。Android為此數(shù)據(jù)庫提供了一個名為SQLiteDatabase的類,封裝了一些操作數(shù)據(jù)庫的API。
SharedPreference: 除SQLite數(shù)據(jù)庫外,另一種常用的數(shù)據(jù)存儲方式,其本質就是一個xml文件,常用于存儲較簡單的參數(shù)設置。
File: 即常說的文件(I/O)存儲方法,常用語存儲大數(shù)量的數(shù)據(jù),但是缺點是更新數(shù)據(jù)將是一件困難的事情。
contentProvider: Android系統(tǒng)中能實現(xiàn)所有應用程序共享的一種數(shù)據(jù)存儲方式,由于數(shù)據(jù)通常在各應用間的是互相私密的,所以此存儲方式較少使用,但是其又是必不可少的一種存儲方式。例如音頻,視頻,圖片和通訊錄,一般都可以采用此種方式進行存儲。每個Content Provider都會對外提供一個公共的URI(包裝成Uri對象),如果應用程序有數(shù)據(jù)需要共享時,就需要使用Content Provider為這些數(shù)據(jù)定義一個URI,然后其他的應用程序就通過Content Provider傳入這個URI來對數(shù)據(jù)進行操作,
PS: URI由3個部分組成:“ 空值
iNTEGER: 整數(shù)
REAL: 浮點數(shù)
TEXT: 字符串
BLOB: 大數(shù)據(jù)
在SQLite中,并沒有專門設計BOOLEAN和DATE類型,因為BOOLEAN型可以用INTEGER的0和1代替true和false,而DATE類型則可以擁有特定格式的TEXT、REAL和INTEGER的值來代替顯示,為了能方便的操作DATE類型,SQLite提供了一組函數(shù),詳見:www.sqlite.org/lang_datefunc.html。這樣簡單的數(shù)據(jù)類型設計更加符合嵌入式設備的要求。關于SQLite的更多資料,請參看:www.sqlite.org/
在Android系統(tǒng)中提供了android.database.sqlite包,用于進行SQLite數(shù)據(jù)庫的增、刪、改、查工作。其主要方法如下:
BeginTransaction: 開始一個事務。
close(): 關閉連接,釋放資源。
delete(String table, String whereClause, String[] whereArgs): 根據(jù)給定條件,刪除符合條件的記錄。
iOS開發(fā)數(shù)據(jù)存儲NSCoder7篇(ios開發(fā)數(shù)據(jù)存儲)相關文章: