iOS中UIView 的旋轉(zhuǎn)與縮放以及同時(shí)應(yīng)用兩種效果

  1. UIView的縮放
    CGAffineTransform 提供了兩個(gè)方法用于縮放,分別是CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)和CGAffineTransform CGAffineTransformScale(CGAffineTransform t,CGFloat sx, CGFloat sy)。
    1.1 CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
    這個(gè)方法可以方便的對(duì)view的長(zhǎng)和寬進(jìn)行縮放,不改變view的中心點(diǎn)。注意!中心點(diǎn)不變指的是物理位置不變,不是坐標(biāo),因?yàn)樽鴺?biāo)系此時(shí)已經(jīng)發(fā)生改變。
    例如:對(duì)view進(jìn)行0.5等比縮放:
    view.transform = CGAffineTransformMakeScale(0.5, 0.5);
    1.2 CGAffineTransformScale(CGAffineTransform t,CGFloat sx, CGFloat sy)
    這個(gè)方法同樣是view的長(zhǎng)和寬進(jìn)行縮放,效果類似CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)不同的是這個(gè)方法可以疊加其他CGAffineTransform效果(比如旋轉(zhuǎn))
    例如:對(duì)view進(jìn)行0.5等比縮放:
    view.transform = CGAffineTransformScale(view.transform, 0.5, 0.5);
  2. UIView的旋轉(zhuǎn)
    CGAffineTransform 提供了兩個(gè)方法用于旋轉(zhuǎn),分別是CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)和CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)。
    2.1 CGAffineTransformMakeRotation(CGFloat angle)
    這個(gè)方法可以方便的對(duì)view進(jìn)行旋轉(zhuǎn),不改變view的中心點(diǎn)。注意!中心點(diǎn)不變指的是物理位置不變,不是坐標(biāo),因?yàn)樽鴺?biāo)系此時(shí)已經(jīng)發(fā)生改變。
    例如:對(duì)view進(jìn)行45度旋轉(zhuǎn):
    view.transform = CGAffineTransformMakeRotation (M_PI_2);
    2.2 CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)
    這個(gè)方法同樣是對(duì)view進(jìn)行旋轉(zhuǎn),效果類似 CGAffineTransformMakeRotation(CGFloat angle)不同的是這個(gè)方法可以疊加其他CGAffineTransform效果(比如縮放)
    例如:對(duì)view進(jìn)行45度旋轉(zhuǎn):
    view.transform = CGAffineTransformRotate (view.transform, M_PI_2);
    我們考慮這樣一種需求:對(duì)UIView同時(shí)進(jìn)行縮放和旋轉(zhuǎn)(以0.5倍等比縮放和45度旋轉(zhuǎn)為例)。在我自己的實(shí)踐中,最開始的想法很簡(jiǎn)單,CGAffineTransformMakeScale(0.5, 0.5)進(jìn)行縮放,接著使用CGAffineTransformMakeRotation (M_PI_2)進(jìn)行旋轉(zhuǎn),問題馬上出來了,view并不會(huì)在縮放的同時(shí)進(jìn)行旋轉(zhuǎn),而是只應(yīng)用了最后的旋轉(zhuǎn)效果。一番研究之后,找到了可行的解決方案,即:
    分別使用CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)和CGAffineTransform CGAffineTransformScale(CGAffineTransform t,CGFloat sx, CGFloat sy)替換上面的兩個(gè)方法,具體代碼如下:
    view.transform = CGAffineTransformScale(view.transform, 0.5, 0.5);
    view.transform = CGAffineTransformRotate (view.transform, M_PI_2);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容