直播間小萌圖的實現(xiàn)

使用UIImageView加上CAAnimation實現(xiàn)

小萌圖動畫由三個部分組成:

?1.改變大小動畫

2.改變位置動畫

3.改變透明度動畫

下面是實現(xiàn)方式

新建一個UIImageView類

這里是在init方法里初始化的動畫

- (instancetype)initWithImage:(UIImage*)image withStartPoint:(CGPoint)point withXlength:(NSInteger)xlengthwithYlength:(double)ylength byDuration:(NSInteger)durationTime{

if(self= [superinitWithImage:image]) {

//位置移動動畫

CAKeyframeAnimation*keyAnima_group2=[CAKeyframeAnimationanimationWithKeyPath:@"position"];

//動畫的速度變化 這里為線性 ?勻速的

keyAnima_group2.timingFunction=[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionLinear];

keyAnima_group2.duration= durationTime; //動畫時間

keyAnima_group2.removedOnCompletion=NO;//fillMode生效 必須設(shè)為NO

keyAnima_group2.fillMode=kCAFillModeRemoved;//動畫開始前及結(jié)束后 動畫都移除

//使用路徑來設(shè)置位置動畫

CGPathRefcurvedPath = [selfheartPath:pointwithXlength:xlengthwithYlength:ylength];

keyAnima_group2.path= curvedPath;

CGPathRelease(curvedPath);

//縮放動畫:

CABasicAnimation*theAnimation=[CABasicAnimationanimationWithKeyPath:@"transform.scale"];

theAnimation.duration=durationTime;

theAnimation.fromValue= [NSNumbernumberWithFloat:0.7];

theAnimation.toValue= [NSNumbernumberWithFloat:1.2];

theAnimation.removedOnCompletion=NO;

theAnimation.fillMode=kCAFillModeRemoved;

//透明度動畫

CABasicAnimation*opacityAnimation = [CABasicAnimationanimationWithKeyPath:@"opacity"];

opacityAnimation.fromValue= [NSNumbernumberWithFloat:1.0];

opacityAnimation.toValue= [NSNumbernumberWithFloat:0];

opacityAnimation.duration=durationTime;

opacityAnimation.removedOnCompletion=NO;

opacityAnimation.fillMode=kCAFillModeForwards;//動畫結(jié)束保留結(jié)束狀態(tài) ? 此處設(shè)該值是因為動畫開始后APP切后臺會造成動畫不被移除 保留透明狀態(tài)可解決

[self.layer addAnimation:opacityAnimationforKey:@"animateTransform.opacity"];//額外增加一次動畫 防止動畫結(jié)束的后會在imageView初始化的位置出現(xiàn)

//組合兩個動畫

CAAnimationGroup* g = [CAAnimationGroupanimation];

g.animations=@[keyAnima_group2,theAnimation,opacityAnimation];

g.duration= durationTime;

g.removedOnCompletion=NO;

g.fillMode=kCAFillModeRemoved;

g.beginTime=CACurrentMediaTime();

g.delegate=self;

[self.layeraddAnimation:gforKey:@"g"];

self.animationGroup= g;

}

return self;

}

然后是位移動畫path生成部分

#pragma mark private mothed

- (CGPathRef)heartPath:(CGPoint)point withXlength:(NSInteger)xlengthwithYlength:(double)ylength

{

int y =8+(arc4random() %2);//y軸移動次數(shù)?

int yHeight = point.y/8;//每次y軸移動高度

int direction =arc4random() %4;//用于x軸移動方向判斷

CGMutablePathRefcurvedPath =CGPathCreateMutable();//使用UIBezierPath芋绸,路徑數(shù)值不正常膜廊,超出父視圖范圍蒿柳,有興趣的可以試試

CGPathMoveToPoint(curvedPath,NULL, point.x, point.y);//起始位置

for(inti =0;i<y;i++){

if(point.y-yHeight-yHeight*i <=0) {//超過Y軸最大范圍就停止

break;

}

xNSIntegerxWidth = (arc4random() % xlength);//每次x軸移動距離

if(direction%2==0) {//方向隨機

xWidth = -xWidth;

}

CGPathAddLineToPoint(curvedPath,NULL,point.x+xWidth, point.y-yHeight-yHeight*i);

}

return curvedPath;

}

然后在animation delegate里移除layer層動畫

- (void)animationDidStop:(CAAnimation*)anim finished:(BOOL)flag {

if(flag) {

[self.layer removeAllAnimations];

}

}

外面調(diào)用時

intimageNum = (arc4random() %7);

UIImage*image = [UIImageimageNamed:[NSStringstringWithFormat:@"小萌圖-%d",imageNum]];//隨機圖片

heartImageView*animation = [[heartImageView alloc]initWithImage:image withStartPoint:CGPointMake(CGRectGetWidth(self.frame) /2,CGRectGetHeight(self.frame) - image.size.height/2) withXlength:10 withYlength:50 byDuration:3];

[self addSubview:animation];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末硕蛹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子藻肄,更是在濱河造成了極大的恐慌木柬,老刑警劉巖缰雇,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件入偷,死亡現(xiàn)場離奇詭異,居然都是意外死亡械哟,警方通過查閱死者的電腦和手機疏之,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暇咆,“玉大人锋爪,你說我怎么就攤上這事“忠担” “怎么了其骄?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長扯旷。 經(jīng)常有香客問我拯爽,道長,這世上最難降的妖魔是什么钧忽? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任毯炮,我火速辦了婚禮,結(jié)果婚禮上耸黑,老公的妹妹穿的比我還像新娘桃煎。我一直安慰自己,他們只是感情好大刊,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布为迈。 她就那樣靜靜地躺著,像睡著了一般缺菌。 火紅的嫁衣襯著肌膚如雪曲尸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天男翰,我揣著相機與錄音,去河邊找鬼纽乱。 笑死蛾绎,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播租冠,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鹏倘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了顽爹?” 一聲冷哼從身側(cè)響起纤泵,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎镜粤,沒想到半個月后捏题,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡肉渴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年公荧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片同规。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡循狰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出券勺,到底是詐尸還是另有隱情绪钥,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布关炼,位于F島的核電站程腹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏盗扒。R本人自食惡果不足惜跪楞,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望侣灶。 院中可真熱鬧甸祭,春花似錦、人聲如沸褥影。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凡怎。三九已至校焦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間统倒,已是汗流浹背寨典。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留房匆,地道東北人耸成。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓报亩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親井氢。 傳聞我的和親對象是個殘疾皇子弦追,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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