動(dòng)畫有兩大要素,一是改變,可能是位置,也可能是形狀;而是持續(xù)時(shí)間,這個(gè)時(shí)間長(zhǎng)短必須是大于0的,可以是有限的時(shí)間,也可以是無(wú)限制的.在ios里面簡(jiǎn)單的動(dòng)畫無(wú)非無(wú)非是旋轉(zhuǎn),平移和縮放,分別對(duì)應(yīng)不同的方法,下面我們分別介紹下:
準(zhǔn)備工作,我們?cè)陧?yè)面上添加一個(gè)button和一個(gè)UIView,然后給給button添加一個(gè)點(diǎn)擊事件,將添加的動(dòng)畫的屬性以及UIView的變化方法都寫到點(diǎn)擊事件里面
一:平移
[UIView beginAnimations:@"屬性動(dòng)畫" context:nil];
//設(shè)置動(dòng)畫的持續(xù)時(shí)間
[UIView setAnimationDuration:2];
//動(dòng)畫延遲時(shí)間
[UIView setAnimationDelay:1];
//設(shè)置重復(fù)次數(shù)
[UIView setAnimationRepeatCount:3];
//設(shè)置自動(dòng)反轉(zhuǎn)
[UIView setAnimationRepeatAutoreverses:YES];
動(dòng)畫屬性還有很多 大家可以自己去嘗試下
添加完這些屬性后,我們就需要給設(shè)置myView的平移事件了
//第一種方法,這種方法以view的最初的原點(diǎn)為基準(zhǔn)進(jìn)行變換,一旦確
定了平移的幾個(gè)參數(shù)后,變換的效果就唯一,只有第一次點(diǎn)擊按鈕才會(huì)有動(dòng)畫,以后再點(diǎn)擊都不會(huì)再動(dòng)了.
// self.myview.transform = CGAffineTransformMake(1, 0, 0,
1, 25, 50);
//第二種方法,這種方法沒有變換都是以最新的位置的原點(diǎn)為坐標(biāo)原點(diǎn)
進(jìn)行變換,所以每一點(diǎn)擊按鈕都可以在新的位置的基礎(chǔ)上觸發(fā)新的動(dòng)畫.
self.myview.transform =
CGAffineTransformTranslate(self.myview.transform, 30, 30);
屬性設(shè)置完畢后就可以開始動(dòng)畫了
[UIView commitAnimations];
其他的動(dòng)畫屬性設(shè)置是相同的,只不過(guò)是view的變換方法有所改變而已
二:旋轉(zhuǎn)
// self.myview.transform =
CGAffineTransformMakeRotation(M_PI/3);
或者
self.myview.transform =
CGAffineTransformRotate(self.myview.transform, M_PI/3);
三:縮放
self.myview.transform = CGAffineTransformMakeScale(2, 2);
或者
self.myview.transform =
CGAffineTransformScale(self.myview.transform, 1.5, 1.5);
當(dāng)然動(dòng)畫并不是一定需要Animation這個(gè)屬性才可以實(shí)現(xiàn),還有其他方法,舉個(gè)栗子,我們可以通過(guò)添加定時(shí)器,給UIView添加一個(gè)顫抖的效果
代碼如下
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self
selector:@selector(rock:) userInfo:nil repeats:YES];
rock實(shí)現(xiàn)方法
-(void)rock:(NSTimer *)sender{
self.myview.transform = CGAffineTransformMakeRotation(M_PI/18*_i);
_i*= -1;
}```