欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS使用核心動(dòng)畫和粒子發(fā)射器實(shí)現(xiàn)點(diǎn)贊按鈕的方法

 更新時(shí)間:2016年12月04日 10:58:04   投稿:daisy  
這篇文章主要給大家介紹了iOS如何使用核心動(dòng)畫和粒子發(fā)射器實(shí)現(xiàn)點(diǎn)贊按鈕的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒,有需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。

首先放上效果圖,大家可以看一下

實(shí)現(xiàn)的方法如下

一、使用到的類

  1. CAKeyframeAnimation       // 核心動(dòng)畫-關(guān)鍵幀動(dòng)畫
  2. CAEmitterLayer            // 粒子發(fā)射器(其實(shí)就是一個(gè)Layer,其父類是CALayer)
  3. CAEmitterCell             // 粒子
  4. PS:核心動(dòng)畫應(yīng)該不用多說了;
  5. CAEmitterLayer和CAEmitterCell,其實(shí)可以比喻成“炮”和“炮彈”,應(yīng)該不難理解;

二、直接上部分關(guān)鍵代碼 代碼中會(huì)有詳細(xì)的注釋

2.1 .m中需要擁有的屬性

/** weak類型 粒子發(fā)射器 */
@property (nonatomic, weak) CAEmitterLayer *emitterLayer;

2.2 initWithFrame: 方法中

- (instancetype)initWithFrame:(CGRect)frame {
 self = [super initWithFrame:frame];
 if (self) {
 // 配置粒子發(fā)射器方法
 [self setupEmitter];
 }
 return self;
}

2.3 setSelected: 方法中

- (void)setSelected:(BOOL)selected {
 [super setSelected:selected];
 // 開始關(guān)鍵幀動(dòng)畫
 [self keyframeAnimation];
}

2.4 layoutSubviews 方法中

- (void)layoutSubviews{
 [super layoutSubviews];
 /// 設(shè)置粒子發(fā)射器的錨點(diǎn)
 _emitterLayer.position = self.imageView.center; 
}

2.5 setupEmitter 方法中( 配置粒子發(fā)射器方法 )

- (void)setup {
 // 粒子使用CAEmitterCell初始化
 CAEmitterCell *emitterCell = [CAEmitterCell emitterCell];
 // 粒子的名字,在設(shè)置噴射個(gè)數(shù)的時(shí)候會(huì)用到
 emitterCell.name  = @"emitterCell";
 // 粒子的生命周期和生命周期范圍
 emitterCell.lifetime  = 0.7;
 emitterCell.lifetimeRange = 0.3;
 // 粒子的發(fā)射速度和速度的范圍
 emitterCell.velocity  = 30.00;
 emitterCell.velocityRange = 4.00;
 // 粒子的縮放比例和縮放比例的范圍
 emitterCell.scale  = 0.1;
 emitterCell.scaleRange = 0.02;

 // 粒子透明度改變范圍
 emitterCell.alphaRange = 0.10;
 // 粒子透明度在生命周期中改變的速度
 emitterCell.alphaSpeed = -1.0;
 // 設(shè)置粒子的圖片
 emitterCell.contents  = (id)[UIImage imageNamed:@"Sparkle3"].CGImage;

 /// 初始化粒子發(fā)射器
 CAEmitterLayer *layer = [CAEmitterLayer layer];
 // 粒子發(fā)射器的 名稱
 layer.name   = @"emitterLayer";
 // 粒子發(fā)射器的 形狀(可以想象成打仗時(shí),你需要的使用的炮的形狀)
 layer.emitterShape  = kCAEmitterLayerCircle;
 // 粒子發(fā)射器 發(fā)射的模式
 layer.emitterMode  = kCAEmitterLayerOutline;
 // 粒子發(fā)射器 中的粒子 (炮要使用的炮彈)
 layer.emitterCells  = @[emitterCell];
 // 定義粒子細(xì)胞是如何被呈現(xiàn)到layer中的
 layer.renderMode  = kCAEmitterLayerOldestFirst;
 // 不要修剪layer的邊界
 layer.masksToBounds  = NO;
 // z 軸的相對(duì)坐標(biāo) 設(shè)置為-1 可以讓粒子發(fā)射器layer在self.layer下面
 layer.zPosition  = -1;
 // 添加layer
 [self.layer addSublayer:layer];
 _emitterLayer = layer;
}

注意:這里有一點(diǎn)需要詳細(xì)解釋一下, CAEmitterCell 的屬性一般有兩個(gè)參數(shù):一個(gè)平均值和一個(gè)“Range”,比如:

// 粒子的生命周期和生命周期范圍
 emitterCell.lifetime  = 0.7;
 emitterCell.lifetimeRange = 0.3;

這里蘋果的官方文檔是這樣解釋的:

每一個(gè)Layer都有它自己的隨機(jī)數(shù)發(fā)生器,粒子的屬性大部分都被定義為一個(gè)平均值和一個(gè)范圍值,

如粒子的速度,這個(gè)屬性的值分布的區(qū)間為:[ M - R / 2,M + R / 2 ]。

然后 這個(gè)公式里面

      M:均值(拿上面代碼說就是 emitterCell.lifetime)

      R:范圍值(mitterCell.lifetimeRange)

然后我們就可根據(jù)公式算出上面我設(shè)置的粒子的生命周期的范圍是[0.7-0.3/2 , 0.7+0.3/2]

2.6 keyframeAnimation 方法中 (開始關(guān)鍵幀動(dòng)畫)

- (void)animation {
 // 創(chuàng)建關(guān)鍵幀動(dòng)畫 
 CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
 if (self.selected) {
 animation.values = @[@1.5 ,@0.8, @1.0,@1.2,@1.0];
 animation.duration = 0.5;
 // 粒子發(fā)射器 發(fā)射
 [self startFire];
 }else
 {
 animation.values = @[@0.8, @1.0];
 animation.duration = 0.4;
 }
 // 動(dòng)畫模式
 animation.calculationMode = kCAAnimationCubic;
 [self.imageView.layer addAnimation:animation forKey:@"transform.scale"];
}

這段代碼沒什么說的,應(yīng)該很容易理解。

2.7 startFire 方法中 (開炮)

- (void)startFire{
 // 每秒噴射的80個(gè)
 [self.emitterLayer setValue:@1000 forKeyPath:@"emitterCells.emitterCell.birthRate"];
 // 開始
 self.emitterLayer.beginTime = CACurrentMediaTime();
 // 執(zhí)行停止
 [self performSelector:@selector(stopFire) withObject:nil afterDelay:0.1];

}

2.8 stopFire 方法中 (停火)

- (void)stopFire {
 //每秒噴射的個(gè)數(shù)0個(gè) 就意味著關(guān)閉了
 [self.emitterLayer setValue:@0 forKeyPath:@"emitterCells.emitterCell.birthRate"]; 
}

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • iOS中如何引用另一個(gè)工程的方法教程

    iOS中如何引用另一個(gè)工程的方法教程

    在iOS開發(fā)中,引用另一個(gè)工程是大家可能會(huì)遇到的一個(gè)問題,所以這篇文章主要給大家介紹了關(guān)于iOS中如何引用另一個(gè)工程的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對(duì)各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • iOS實(shí)現(xiàn)文字轉(zhuǎn)化成彩色文字圖片

    iOS實(shí)現(xiàn)文字轉(zhuǎn)化成彩色文字圖片

    這篇文章主要為大家詳細(xì)介紹了iOS文字轉(zhuǎn)化成彩色文字圖片的實(shí)現(xiàn)方法,可以實(shí)現(xiàn)不同字體,漸變的效果,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Xcode 10升級(jí)導(dǎo)致項(xiàng)目報(bào)錯(cuò)的常見問題解決

    Xcode 10升級(jí)導(dǎo)致項(xiàng)目報(bào)錯(cuò)的常見問題解決

    這篇文章主要給大家介紹了關(guān)于Xcode 10升級(jí)導(dǎo)致項(xiàng)目報(bào)錯(cuò)的常見問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • iOS實(shí)現(xiàn)抽屜效果

    iOS實(shí)現(xiàn)抽屜效果

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)抽屜效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • IOS開發(fā)之路--C語言構(gòu)造類型

    IOS開發(fā)之路--C語言構(gòu)造類型

    在第一節(jié)中我們就提到C語言的構(gòu)造類型,分為:數(shù)組、結(jié)構(gòu)體、枚舉、共用體,當(dāng)然前面數(shù)組的內(nèi)容已經(jīng)說了很多了,這一節(jié)將會(huì)重點(diǎn)說一下其他三種類型。
    2014-08-08
  • IOS 基礎(chǔ)之設(shè)置 tableview 的分割線

    IOS 基礎(chǔ)之設(shè)置 tableview 的分割線

    這篇文章主要介紹了IOS 基礎(chǔ)之設(shè)置 tableview 的分割線的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • iOS中json解析出現(xiàn)的null,nil,NSNumber的解決辦法

    iOS中json解析出現(xiàn)的null,nil,NSNumber的解決辦法

    在iOS開發(fā)過程中經(jīng)常需要與服務(wù)器進(jìn)行數(shù)據(jù)通訊,Json就是一種常用的高效簡(jiǎn)潔的數(shù)據(jù)格式,通過本文給大家介紹iOS中json解析出現(xiàn)的null,nil,NSNumber的解決辦法,感興趣的朋友參考下
    2016-01-01
  • iOS為UIView設(shè)置陰影效果

    iOS為UIView設(shè)置陰影效果

    現(xiàn)在很多的開發(fā)者們都會(huì)在開發(fā)的時(shí)候加陰影效果,所以這篇文章跟大家分享下iOS為UIView設(shè)置陰影效果的實(shí)現(xiàn)過程,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-09-09
  • iOS實(shí)現(xiàn)點(diǎn)擊狀態(tài)欄自動(dòng)回到頂部效果詳解

    iOS實(shí)現(xiàn)點(diǎn)擊狀態(tài)欄自動(dòng)回到頂部效果詳解

    在IOS開發(fā)過程中,經(jīng)常會(huì)有這種需求,需要通過點(diǎn)擊狀態(tài)欄返回到頂部,給用戶更好的體驗(yàn)效果,下面這篇文章給大家詳細(xì)介紹了實(shí)現(xiàn)過程,有需要的可以參考借鑒。
    2016-09-09
  • iOS仿高德首頁推拉效果實(shí)例代碼

    iOS仿高德首頁推拉效果實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于iOS仿高德首頁推拉效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-11-11

最新評(píng)論