IOS 開發筆記-基礎 UI(4)按鈕的使用(transform屬性)和學習案例,iostransform

來源:互聯網
上載者:User

IOS 開發筆記-基礎 UI(4)按鈕的使用(transform屬性)和學習案例,iostransform
利用transform屬性可以修改控制項的位移(位置)、縮放、旋轉。經常用在動畫裡,比如旋轉角度,動畫縮放,平移等 先學幾個 xcode 開發的小技巧:故事板的viewcontroll,可以直接拖拽複製,且不同項目裡的圖片素材也可以相互拖拽複製使用,但是圖片的拖拽複製要按option 健進行,否則就是剪下了。那麼我們在開發到類似的一些項目的時候,不用每次都重寫弄介面,那麼可以直接拖拽拷貝故事板,圖片拖拽要按住 option 鍵同時拽到 images.xcassets 目錄下即可正常顯式,且拖拽到新的項目中的故事板,預設是 autolayout 的,還要注意原來的連線!最好徹底退出模擬器和 xcode,再重新開啟。 在開發中,如果需要對控制項位置,大小,旋轉進行改變,最好使用 transform,可以省去很大的麻煩,比如在遇到 autolayout 的時候,frame 就不行,但是 transform 可以改變,且 transform屬性修改控制項的位置,大小,旋轉,不需要計算形變之後的結果,它是一個相對自己的累加過程,不需要知道初試的位置和結束的位置,簡化了很多的計算量。 遇到新的屬性和方法,學會查看標頭檔建立一個transform屬性

CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx,  CGFloat ty) ;
AffineTransform類表示 2D 仿射變換,它執行從 2D 座標到其他 2D 座標的線性映射
MakeTranslation(名詞的 translation)作用是:基於對象的初始的位置做的形變!不是累加的形變。如:
- (IBAction)move:(UIButton *)button{    self.headImage.transform = CGAffineTransformMakeTranslation(0, -100);}

點擊方向鍵,只向上移動100之後不再變化,點擊多次,只是第一次的時候y變化-100。


CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);

形變,縮放功能,sx,和 sy 分別管理的橫向和豎向的縮放,也就是拉長,還是拉寬的管理,且1.0不變化,小玉1.0小,大於1.0變大。

CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)

名詞的 rotation,就要家 make,做變化,蘋果和體貼的設計。同理,這樣的設定,只變化一次。累計變化需要三個參數的動詞方法。

(注意:angle是弧度制,也就是π,並不是角度制,且類似縮放,弧度是正數是順時針旋轉,負數是逆時針旋轉)

 在某個transform的基礎上進行疊加(可以對上述方法進行改變,變成累加的)

CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty);

動詞的 translate,不用帶 make, 多一個參數,下面的也是如此。

作用是在某個 transform參數的基礎之上做的形變,實際效果就是一個位移的累加過程。

CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);

此時也多了第一個 參數,少了 make,直接做動詞。那麼就是可以一直變化,不再是相對初試對象位置的改變。

CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);

同理,rotate 是動詞,去掉 make,那麼後面肯定多了一個參數,相對某個 transform 參數的基礎來變。

清空之前設定的transform屬性
view.transform = CGAffineTransformIdentity;
熟悉蘋果開發的規律!以及一些命名原則和方法的參數設定的習慣。
- (IBAction)zoom:(UIButton *)button {    //加上首尾式動畫    [UIView beginAnimations:nil context:nil];    [UIView setAnimationDuration:2.0];    //縮小按鈕    if (0 == button.tag) {        self.headImage.transform = CGAffineTransformScale(self.headImage.transform, 0.5, 0.5);    }    else    {        //放大按鈕        self.headImage.transform = CGAffineTransformScale(self.headImage.transform, 1.5, 1.5);    }        [UIView commitAnimations];}- (IBAction)rotate:(UIButton *)button {    [UIView beginAnimations:nil context:nil];    [UIView setAnimationDuration:2.0];    //順時針180度,右旋轉按鈕    if (1 == button.tag) {       self.headImage.transform = CGAffineTransformRotate(self.headImage.transform, M_PI_2);    }    else    {        //逆時針180度,左旋轉按鈕        self.headImage.transform = CGAffineTransformRotate(self.headImage.transform, -M_PI_2);    }        [UIView commitAnimations];}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.