最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

一、使用到的類

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

二、直接上部分關鍵代碼 代碼中會有詳細的注釋

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];
 // 開始關鍵幀動畫
 [self keyframeAnimation];
}

2.4 layoutSubviews 方法中

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

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

- (void)setup {
 // 粒子使用CAEmitterCell初始化
 CAEmitterCell *emitterCell = [CAEmitterCell emitterCell];
 // 粒子的名字,在設置噴射個數(shù)的時候會用到
 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;
 // 設置粒子的圖片
 emitterCell.contents  = (id)[UIImage imageNamed:@"Sparkle3"].CGImage;

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

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

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

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

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

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

然后 這個公式里面

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

      R:范圍值(mitterCell.lifetimeRange)

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

2.6 keyframeAnimation 方法中 (開始關鍵幀動畫)

- (void)animation {
 // 創(chuà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;
 }
 // 動畫模式
 animation.calculationMode = kCAAnimationCubic;
 [self.imageView.layer addAnimation:animation forKey:@"transform.scale"];
}

這段代碼沒什么說的,應該很容易理解。

2.7 startFire 方法中 (開炮)

- (void)startFire{
 // 每秒噴射的80個
 [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 {
 //每秒噴射的個數(shù)0個 就意味著關閉了
 [self.emitterLayer setValue:@0 forKeyPath:@"emitterCells.emitterCell.birthRate"]; 
}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關文章

  • IOS 中CALayer繪制圖片的實例詳解

    IOS 中CALayer繪制圖片的實例詳解

    這篇文章主要介紹了IOS 中CALayer繪制圖片的實例詳解的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • iOS利用NSAttributedString實現(xiàn)圖文混排效果示例

    iOS利用NSAttributedString實現(xiàn)圖文混排效果示例

    iOS7以后,因為TextKit的強大,可以用NSAttributedString很方便的實現(xiàn)圖文混排(主要是利用了NSTextAttachment),所以下面這篇文章主要給大家介紹了關于iOS利用NSAttributedString實現(xiàn)圖文混排效果的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • iOS 下的圖片處理與性能優(yōu)化詳解

    iOS 下的圖片處理與性能優(yōu)化詳解

    這篇文章主要介紹了iOS 下的圖片處理與性能優(yōu)化詳解,幫助大家更好的理解和學習使用ios開發(fā),感興趣的朋友可以了解下
    2021-04-04
  • swift 單例的實現(xiàn)方法及實例

    swift 單例的實現(xiàn)方法及實例

    這篇文章主要介紹了swift 單例的實現(xiàn)方法及實例的相關資料,需要的朋友可以參考下
    2017-07-07
  • 詳解iOS應用中自定義UIBarButtonItem導航按鈕的創(chuàng)建方法

    詳解iOS應用中自定義UIBarButtonItem導航按鈕的創(chuàng)建方法

    這篇文章主要介紹了iOS應用中自定義UIBarButtonItem導航按鈕的創(chuàng)建方法,文中舉了一個自定義圖片的UIBarButtonItem實例,比較具有代表性,需要的朋友可以參考下
    2016-04-04
  • iOS實現(xiàn)毫秒倒計時的方法詳解

    iOS實現(xiàn)毫秒倒計時的方法詳解

    倒計時在我們日常開發(fā)中必不可少,最近在公司的一個項目中就遇到了這個需求,本文著重介紹的是利用iOS實現(xiàn)毫秒倒計時的方法,文中給出了詳細的示例代碼,需要的朋友可以參考借鑒,下面來一起學習學習吧。
    2017-04-04
  • 詳解iOS App開發(fā)中Cookie的管理方法

    詳解iOS App開發(fā)中Cookie的管理方法

    iOS中主要靠NSHTTPCookieStorage和NSHTTPCookie來管理Cookie,下面我們就來詳解iOS App開發(fā)中Cookie的管理方法,在最后一部分會單獨整理出如何清除Cookie的方法.
    2016-07-07
  • IOS中Json解析實例方法詳解(四種方法)

    IOS中Json解析實例方法詳解(四種方法)

    本文將介紹TouchJson、 SBJson 、JSONKit 和 iOS5所支持的原生的json方法,解析國家氣象局API。通過本文給大家介紹IOS中Json解析的四種方法,非常不錯,具有參考借鑒價值,感興趣的朋友一起學習吧
    2016-06-06
  • iOS中獲取系統(tǒng)相冊中的圖片實例

    iOS中獲取系統(tǒng)相冊中的圖片實例

    這篇文章主要介紹了iOS中獲取系統(tǒng)相冊中的圖片實例,具有一定的參考價值沒有需要的朋友可以了解一下。
    2016-11-11
  • iOS如何跳轉到App Store下載評分頁面示例代碼

    iOS如何跳轉到App Store下載評分頁面示例代碼

    最近在工作中遇到一個需求,需要跳轉到App Store下載評分,通過查找相關的資料最終解決了,下面這篇文章主要給大家介紹了關于iOS如何跳轉到App Store下載評分頁面的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-12-12

最新評論

万荣县| 和平区| 长沙市| 织金县| 喀什市| 南丰县| 加查县| 嵊泗县| 钟祥市| 界首市| 大石桥市| 神农架林区| 会泽县| 隆化县| 尉氏县| 东光县| 丁青县| 化德县| 奉节县| 张家港市| 宿州市| 广河县| 安泽县| 丁青县| 福州市| 礼泉县| 巴中市| 乌拉特中旗| 镇雄县| 鄯善县| 泰和县| 瓦房店市| 青川县| 科尔| 怀远县| 拉孜县| 长岛县| 石棉县| 三原县| 瑞昌市| 双流县|