假設(shè)要在context的位置P點(diǎn)上繪制旋轉(zhuǎn)了w 角度的文字text
由于context繪制text的接口沒(méi)有參數(shù)可以設(shè)置文字的旋轉(zhuǎn)角度蓖柔,但有提供context旋轉(zhuǎn)的方法,所以可以通過(guò)context旋轉(zhuǎn)的方式實(shí)現(xiàn)。
1. context旋轉(zhuǎn):把context旋轉(zhuǎn)w角度.?CGContextConcatCTM(context, CGAffineTransformMakeRotation(w));
2.位置P變換:計(jì)算P點(diǎn)在新坐標(biāo)系上的位置P' , 即把向量OP旋轉(zhuǎn) -w, 得到向量OP'.?
OP' = | cos(-w) ?-sin(-w)| ?* OP
? ? ? ? ? ?|sin(-w) ?cos(-w) |
3.text繪制:在新位置P'上繪制文字text. [text?drawAtPoint:pos' withAttributes:attributes]繪制文字
4. context恢復(fù):?把context旋轉(zhuǎn) -w 角度恢復(fù)原坐標(biāo)系?CGContextConcatCTM(context, CGAffineTransformMakeRotation(-w));
相關(guān)參考:
1. 通過(guò)context的操作實(shí)現(xiàn)圖像或圖形變換是一種比較常用的方法纱兑。例如UIImage中圖片的旋轉(zhuǎn),鏡像,裁切等效果是可以使用context實(shí)現(xiàn)的卫键。AVFoundation中對(duì)視頻進(jìn)行旋轉(zhuǎn),鏡像虱朵,裁切等效果也是可以使用context完成的
2. 如果不想進(jìn)行“位置P變換”計(jì)算莉炉,這里也可以例context先平移到P點(diǎn)后,再進(jìn)行旋轉(zhuǎn)碴犬;這樣會(huì)增加context的操作絮宁。具體操作如下:
? ? ?1)context原點(diǎn)平移到P點(diǎn)
? ? 2)context旋轉(zhuǎn)w
? ? 3) 繪制文字
? ?4)context旋轉(zhuǎn) -w
? 5) contex原點(diǎn)平移回原來(lái)的原點(diǎn)O
3. 也可以先用CGAffineTransform相關(guān)的變換函數(shù),先計(jì)算出平移及旋轉(zhuǎn)疊加的變換transform及其反變換transform'. 然后進(jìn)行context操作及繪制文字
1)計(jì)算出平移及旋轉(zhuǎn)的變換transform及其反變換transform'
2) 用transform對(duì)context進(jìn)行變換
3)繪制文字
4) 用transform' 對(duì)context進(jìn)行反變換
4. 對(duì)于三維的旋轉(zhuǎn)效果可以使用 CALayer和CATransform3D服协。