因工作需要,高仿【喵播】的Demo核心功能基本完成锌半。直播端音視頻采集禽车、推流、內(nèi)置音樂(lè)播放器系統(tǒng)刊殉,播放端的視頻拉流播放殉摔、直播聊天室即時(shí)通信等功能已經(jīng)完成。不過(guò)今天不是要講這些看似高大上的東西记焊,今天還是繼續(xù)說(shuō)說(shuō)直播APP中的一些細(xì)枝末節(jié)逸月,哈哈,不要著急遍膜,等忙過(guò)這段時(shí)間我會(huì)系統(tǒng)的寫(xiě)一篇關(guān)于
iOS直播APP
的文章碗硬,不想錯(cuò)過(guò)的小伙伴瓤湘,敬請(qǐng)關(guān)注!6魑病弛说!。
今天要說(shuō)的是直播APP的點(diǎn)贊動(dòng)畫(huà)翰意,看下圖木人,這是我仿【喵播】做的界面,點(diǎn)擊屏幕會(huì)有心型動(dòng)畫(huà)飄出冀偶;這些動(dòng)畫(huà)圖片都是從喵播APP抓下來(lái)的醒第,如果你還不知道怎么抓一個(gè)APP的圖片素材,文章后面有介紹蔫磨,絕對(duì)夠驚喜淘讥。
下面進(jìn)入正題:
點(diǎn)贊動(dòng)畫(huà)的實(shí)現(xiàn)邏輯:
1、點(diǎn)擊屏幕觸發(fā)點(diǎn)擊事件堤如,生成一個(gè)imageView并給其添加一張隨機(jī)的圖片
2蒲列、給imageView設(shè)置有一個(gè)初始frame值
3、開(kāi)始動(dòng)畫(huà)搀罢,設(shè)置動(dòng)畫(huà)執(zhí)行
4蝗岖、給這個(gè)imageView設(shè)置一個(gè)終點(diǎn)frame值
5、結(jié)束動(dòng)畫(huà)
6榔至、銷(xiāo)毀imageView
這是動(dòng)畫(huà)的大致實(shí)現(xiàn)邏輯抵赢,有很多細(xì)節(jié)和參數(shù)配置問(wèn)題,代碼注釋的很清楚唧取,直接看代碼就OK了:
- 給view添加點(diǎn)擊事件:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// 點(diǎn)贊
[self praiseAnimation];
}
- 動(dòng)畫(huà)核心代碼:
#pragma mark - 點(diǎn)贊動(dòng)畫(huà)
- (void)praiseAnimation {
UIImageView *imageView = [[UIImageView alloc] init];
CGRect frame = self.view.frame;
// 初始frame铅鲤,即設(shè)置了動(dòng)畫(huà)的起點(diǎn)
imageView.frame = CGRectMake(frame.size.width - 40, frame.size.height - 65, 30, 30);
// 初始化imageView透明度為0
imageView.alpha = 0;
imageView.backgroundColor = [UIColor clearColor];
imageView.clipsToBounds = YES;
// 用0.2秒的時(shí)間將imageView的透明度變成1.0,同時(shí)將其放大1.3倍枫弟,再縮放至1.1倍邢享,這里參數(shù)根據(jù)需求設(shè)置
[UIView animateWithDuration:0.2 animations:^{
imageView.alpha = 1.0;
imageView.frame = CGRectMake(frame.size.width - 40, frame.size.height - 90, 30, 30);
CGAffineTransform transfrom = CGAffineTransformMakeScale(1.3, 1.3);
imageView.transform = CGAffineTransformScale(transfrom, 1, 1);
}];
[self.view addSubview:imageView];
// 隨機(jī)產(chǎn)生一個(gè)動(dòng)畫(huà)結(jié)束點(diǎn)的X值
CGFloat finishX = frame.size.width - round(random() % 200);
// 動(dòng)畫(huà)結(jié)束點(diǎn)的Y值
CGFloat finishY = 200;
// imageView在運(yùn)動(dòng)過(guò)程中的縮放比例
CGFloat scale = round(random() % 2) + 0.7;
// 生成一個(gè)作為速度參數(shù)的隨機(jī)數(shù)
CGFloat speed = 1 / round(random() % 900) + 0.6;
// 動(dòng)畫(huà)執(zhí)行時(shí)間
NSTimeInterval duration = 4 * speed;
// 如果得到的時(shí)間是無(wú)窮大,就重新附一個(gè)值(這里要特別注意淡诗,請(qǐng)看下面的特別提醒)
if (duration == INFINITY) duration = 2.412346;
// 隨機(jī)生成一個(gè)0~7的數(shù)骇塘,以便下面拼接圖片名
int imageName = round(random() % 8);
// 開(kāi)始動(dòng)畫(huà)
[UIView beginAnimations:nil context:(__bridge void *_Nullable)(imageView)];
// 設(shè)置動(dòng)畫(huà)時(shí)間
[UIView setAnimationDuration:duration];
// 拼接圖片名字
imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"good%d_30x30_.png",imageName]];
// 設(shè)置imageView的結(jié)束frame
imageView.frame = CGRectMake( finishX, finishY, 30 * scale, 30 * scale);
// 設(shè)置漸漸消失的效果,這里的時(shí)間最好和動(dòng)畫(huà)時(shí)間一致
[UIView animateWithDuration:duration animations:^{
imageView.alpha = 0;
}];
// 結(jié)束動(dòng)畫(huà)韩容,調(diào)用onAnimationComplete:finished:context:函數(shù)
[UIView setAnimationDidStopSelector:@selector(onAnimationComplete:finished:context:)];
// 設(shè)置動(dòng)畫(huà)代理
[UIView setAnimationDelegate:self];
[UIView commitAnimations];
}
- 動(dòng)畫(huà)完成后執(zhí)行:
/// 動(dòng)畫(huà)完后銷(xiāo)毀iamgeView
- (void)onAnimationComplete:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context{
UIImageView *imageView = (__bridge UIImageView *)(context);
[imageView removeFromSuperview];
imageView = nil;
}
至此就完成了簡(jiǎn)單的點(diǎn)贊功能款违,很簡(jiǎn)單吧!
特別提醒:
// 生成一個(gè)作為速度參數(shù)的隨機(jī)數(shù)
CGFloat speed = 1 / round(random() % 900) + 0.6;
// 動(dòng)畫(huà)執(zhí)行時(shí)間
NSTimeInterval duration = 4 * speed;
NSLog(@"時(shí)間--%f",duration);
執(zhí)行上面這段代碼群凶,打印結(jié)果插爹,發(fā)現(xiàn)偶爾會(huì)打印出inf
,inf
是無(wú)窮大的意思,出現(xiàn)這個(gè)值座掘,也就意味著你屏幕上會(huì)有一個(gè)圖片停在那不動(dòng)递惋,這就尷尬啦柔滔!
所以要加上這句判斷:
// 如果得到的時(shí)間是無(wú)窮大溢陪,就重新附一個(gè)值(這里要特別注意萍虽,請(qǐng)看下面的特別提醒)
if (duration == INFINITY) duration = 2.412346;
```
下面絕對(duì)的大**彩蛋**:
**抓取APP素材的方法:**
1、下載安裝[iOS images Extractor](https://pan.baidu.com/s/1dE1zgEd)到你的Mac上
2形真、在iTunes的AppStore上下載你需要抓取素材的APP
3杉编、進(jìn)入iTunes的`我的應(yīng)用`,找到你剛下載的APP咆霜,右擊選擇`在Finder中顯示`
![B498B849-4B22-451F-89F4-9253186BE581.png](http://upload-images.jianshu.io/upload_images/1707533-6282076d2484ecb7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* Finder中顯示的APP ipa文件
![87A0C97F-E041-4A4B-9A34-DC69EE91809A.png](http://upload-images.jianshu.io/upload_images/1707533-4812307815b0bc0d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
4邓馒、打開(kāi)[iOS images Extractor](https://pan.baidu.com/s/1dE1zgEd),直接將APP ipa拖進(jìn)去蛾坯,點(diǎn)擊start等幾秒光酣,OK完成了。
![2E845738-9BA5-4B17-8B6D-15716B02D111.png](http://upload-images.jianshu.io/upload_images/1707533-13d44b0e7f9c584b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
5脉课、在 `下載`文件中找到APP素材(文件保存路徑你可以自己設(shè)置救军,不再贅述)
![CC37D6CF-E395-48F9-A3A9-2D0E707317D9.png](http://upload-images.jianshu.io/upload_images/1707533-072b482cec78c8c5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
是不是夠驚喜,用[iOS images Extractor](https://pan.baidu.com/s/1dE1zgEd)抓取APP內(nèi)的圖片就是這么簡(jiǎn)單倘零,在也不同擔(dān)心以后寫(xiě)Demo界面丑到不能看了唱遭。哈哈,今天就說(shuō)這么多呈驶,喜歡的點(diǎn)贊加關(guān)注吧?皆蟆!袖瞻!