圖形圖象及動畫

1雳刺、UIImage顯示靜止圖片的類方法

* +imageNamed: 該方法有緩存機制,如果需要頻繁的加載卸載圖片時裸违,不應該使用該方法
* + imageWithContentOfFile: 該方法加載指定文件名對應的圖片
* + imageWithData:
* + imageWithData:scale: 指定縮放因子對圖片進行縮放
* + imageWithCGImages:根據(jù)指定的CGImageRef對象來創(chuàng)建UIImage
* + imageWithCGImages:scale:orientation:
* + animatedImageNamed:duration: 根據(jù)指定的圖片名在加載系列圖片
* + animatedImageWithImages:duration: 該方法需要傳入一個NSArray作為多張動畫圖片

動畫效果

  • CGAffineTransformMake
CGAffineTransform CGAffineTransformMake (

CGFloat a,

CGFloat b,

CGFloat c,

CGFloat d,

CGFloat tx,

CGFloat ty );

//創(chuàng)建一個給定比例放縮的變換
CGAffineTransformMakeScale (CGFloat sx, CGFloat sy);   

CGAffineTransformMakeScale(-1.0, 1.0);//水平翻轉(zhuǎn)
CGAffineTransformMakeScale(1.0,-1.0);//垂直翻轉(zhuǎn)
//創(chuàng)建一個旋轉(zhuǎn)角度的變化
CGAffineTransform CGAffineTransformMakeRotation ( CGFloat angle); 
//創(chuàng)建一個平移的變化
CGAffineTransform CGAffineTransformMakeTranslation (CGFloat tx,CGFloat ty);
img

六個參數(shù)對應矩陣的前兩列掖桦。

- (void)transformImageView

{

CGAffineTransform t = CGAffineTransformMakeScale(scale * previousScale,

scale * previousScale);

t = CGAffineTransformRotate(t, rotation + previousRotation);

self.imageView.transform = t;

}

// 繪制復雜的圖形,必須啟用路徑


在Canvas(畫布)中使用路徑供汛,可按如下步驟進行

  • 1枪汪、調(diào)用CGContextBeginPath()函數(shù)開始定義路徑
  • 2、 調(diào)用表12.4所示的各種函數(shù)添加子路徑
  • 3紊馏、如果路徑添加完成料饥,調(diào)用CGContextClosePath()函數(shù)關閉路徑
  • 4、調(diào)用CGContextDrawPath()朱监、CGContextEOFillPath()岸啡、CGContextFillPath()、CGContextStrokePath()函數(shù)來填充路徑赫编,或繪制路徑邊框巡蘸,第一個方法可以替代后面幾個,設置特定的模式

在內(nèi)存中繪圖

步驟如下

  • 1擂送、調(diào)用UIGraphicsBeginImageContext(<#CGSize size#>)函數(shù)準備繪圖環(huán)境
  • 2悦荒、UIGraphicsGetCurrentContext()函數(shù)獲取繪圖CGContextRef
  • 3、用前面介紹的繪制集合圖形嘹吨、使用路徑等方式進行繪圖
  • 4搬味、UIGraphicsGetImageFromCurrentImageContext()獲取當前繪制圖形,該方法返回一個UIImage對象
  • 5蟀拷、UIGraphicsEndImageContext()結(jié)束繪圖碰纬,并關閉繪圖環(huán)境

圖形變換

Quartz 2D提供如下坐標變換

  • CGContextTranslateCTM(CGContextRef c, CGFloat tx, CGFloat ty),平移坐標系,把(0问芬,0)位置的坐標原點平移到(tx,ty)
  • CGContextScaleCTM(CGContextRef c, CGFloat sx, CGFloat sy)縮放sx悦析,sy
  • CGContextRotateCTM(CGContextRef c, CGFloat angle),旋轉(zhuǎn)坐標angle弧度
  • CGContextSaveGState(CGContextRef c) //保存當前的繪圖狀態(tài)
    CGContextRestoreGState(CGContextRef c) // 恢復之前保存的繪圖狀態(tài)

使用矩陣變換

  • CGContextConcatCTM(CGContextRef c, CGAffineTransform transform)通過坐標矩陣變換
  • CGAffineTransform CGContextGetCTM(CGContextRef c)獲取坐標系統(tǒng)的變換矩陣,CGAffineTransform t 代表變換矩陣
  • 創(chuàng)建CGAffineTransform可以使用如下函數(shù)進行:
    CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty);位移變換的矩陣
    CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)縮放變換
    CGAffineTransformMakeRotation(CGFloat angle)角度變換
    CGAffineTransformMake(CGFloat a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty),該函數(shù)使用自定義變換矩陣此衅,其中(a,b,c,d)將會組成變換矩陣,變換后實際坐標(xa + yc + tx, xb + yd + ty)
    比如要進行水平鏡像(繞Y軸做對稱變化)强戴,此時變換矩陣為CGAffineTransformMake(-1, 0, 0, 1, 0, 0)

Core Image 濾鏡

三個核心API

  • CIContext:所有的圖片處理都在它的管理下完成
  • CIFilter:代表過濾器,在創(chuàng)建CIFilter時需要傳入不同的參數(shù)即可創(chuàng)建不同類型的過濾器
  • CIImage:代表處理的圖片
    使用例子
    1.創(chuàng)建CIContext對象挡鞍。有三種創(chuàng)建方式
// 第一種創(chuàng)建方式:基于CPU的CIContext對象
    CIContext *ctx = [CIContext contextWithOptions:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],kCIContextUseSoftwareRenderer, nil]];
    // 第二種創(chuàng)建方式:基于GPU的CIContext對象
    ctx = [CIContext contextWithOptions:nil];
    // 第三種方式:基于OpenGL優(yōu)化的對象
    EAGLContext *eaglctx = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

2.創(chuàng)建CIFilter過濾器骑歹,CIFilter提供了filterWithName:類方法來創(chuàng)建CIFilter對象,該方法需要傳入過濾器的名字
濾鏡名字查詢

NSArray *names = [CIFilter filterNamesInCategory:kCICategoryBuiltIn];
NSLog(@"%@",names);

通過打印可以獲取濾鏡的所有名字
3.創(chuàng)建CIImage對象
4.調(diào)用CIFilter的setValue方法為inputImage屬性復制

  [filter setValue:image forKey:kCIInputImageKey];
   [filter setValue:[CIColor colorWithRed:100/255 green:0.4 blue:1] forKey:kCIInputColorKey];

5.根據(jù)需要墨微,為不同的濾鏡設置不同的過濾參數(shù)
6.調(diào)用CIFilter的outputImage方法獲取處理后的圖片

Core Animation動畫基礎

使用core animaton創(chuàng)建動畫陵刹,不僅簡單而且具有更好的性能,原因如下:

  • core animaton動畫在單獨的線程完成,不會阻塞主線程
  • core animaton動畫只會重繪界面上變化的部分(局部刷新)

Core Animation動畫還涉及如下API

  • CAAnimation:它是所有動畫的基類
  • CATransition:
  • CAPropertyAnimation:屬性動畫
  • CABasicAnimation: CAPropertyAnimation的子類
  • CAKeyframeAnimation:
  • CAAnimationGroup:
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末衰琐,一起剝皮案震驚了整個濱河市也糊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌羡宙,老刑警劉巖狸剃,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異狗热,居然都是意外死亡钞馁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門匿刮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來僧凰,“玉大人,你說我怎么就攤上這事熟丸⊙荡耄” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵光羞,是天一觀的道長绩鸣。 經(jīng)常有香客問我,道長纱兑,這世上最難降的妖魔是什么呀闻? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮潜慎,結(jié)果婚禮上捡多,老公的妹妹穿的比我還像新娘。我一直安慰自己铐炫,他們只是感情好垒手,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著驳遵,像睡著了一般淫奔。 火紅的嫁衣襯著肌膚如雪山涡。 梳的紋絲不亂的頭發(fā)上堤结,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機與錄音鸭丛,去河邊找鬼竞穷。 笑死,一個胖子當著我的面吹牛鳞溉,可吹牛的內(nèi)容都是我干的瘾带。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼熟菲,長吁一口氣:“原來是場噩夢啊……” “哼看政!你這毒婦竟也來了朴恳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤允蚣,失蹤者是張志新(化名)和其女友劉穎于颖,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嚷兔,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡森渐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了冒晰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片同衣。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖壶运,靈堂內(nèi)的尸體忽然破棺而出耐齐,到底是詐尸還是另有隱情,我是刑警寧澤前弯,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布蚪缀,位于F島的核電站,受9級特大地震影響恕出,放射性物質(zhì)發(fā)生泄漏询枚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一浙巫、第九天 我趴在偏房一處隱蔽的房頂上張望金蜀。 院中可真熱鬧,春花似錦的畴、人聲如沸渊抄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽护桦。三九已至,卻和暖如春煎娇,著一層夾襖步出監(jiān)牢的瞬間二庵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工缓呛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留催享,地道東北人。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓哟绊,卻偏偏與公主長得像因妙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

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