亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS使用核心動畫和粒子發射器實現點贊按鈕的方法

2020-07-26 03:03:17
字體:
來源:轉載
供稿:網友

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

實現的方法如下

一、使用到的類

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

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

2.1 .m中需要擁有的屬性

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

2.2 initWithFrame: 方法中

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

2.3 setSelected: 方法中

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

2.4 layoutSubviews 方法中

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

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

- (void)setup { // 粒子使用CAEmitterCell初始化 CAEmitterCell *emitterCell = [CAEmitterCell emitterCell]; // 粒子的名字,在設置噴射個數的時候會用到 emitterCell.name  = @"emitterCell"; // 粒子的生命周期和生命周期范圍 emitterCell.lifetime  = 0.7; emitterCell.lifetimeRange = 0.3; // 粒子的發射速度和速度的范圍 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; /// 初始化粒子發射器 CAEmitterLayer *layer = [CAEmitterLayer layer]; // 粒子發射器的 名稱 layer.name   = @"emitterLayer"; // 粒子發射器的 形狀(可以想象成打仗時,你需要的使用的炮的形狀) layer.emitterShape  = kCAEmitterLayerCircle; // 粒子發射器 發射的模式 layer.emitterMode  = kCAEmitterLayerOutline; // 粒子發射器 中的粒子 (炮要使用的炮彈) layer.emitterCells  = @[emitterCell]; // 定義粒子細胞是如何被呈現到layer中的 layer.renderMode  = kCAEmitterLayerOldestFirst; // 不要修剪layer的邊界 layer.masksToBounds  = NO; // z 軸的相對坐標 設置為-1 可以讓粒子發射器layer在self.layer下面 layer.zPosition  = -1; // 添加layer [self.layer addSublayer:layer]; _emitterLayer = layer;}

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

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

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

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

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

然后 這個公式里面

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

      R:范圍值(mitterCell.lifetimeRange)

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

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

- (void)animation { // 創建關鍵幀動畫  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; // 粒子發射器 發射 [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(); // 執行停止 [self performSelector:@selector(stopFire) withObject:nil afterDelay:0.1];}

2.8 stopFire 方法中 (?;?

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

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕在线| 久久国产精品久久久久久| 亚洲人免费视频| 亚洲精选中文字幕| 午夜精品视频网站| 在线看欧美日韩| 成人免费福利在线| 日本不卡视频在线播放| 精品久久久久人成| 久久精品99无色码中文字幕| xvideos成人免费中文版| 久久亚洲国产精品| 91高清视频免费观看| 久久久久久久久网站| 亚洲高清一二三区| 一本一道久久a久久精品逆3p| 亚洲国产日韩欧美在线动漫| 欧美性受xxxx白人性爽| 亚洲第一区在线观看| 97视频在线观看亚洲| 日韩女优在线播放| 91影院在线免费观看视频| 久久综合色影院| 国产v综合v亚洲欧美久久| 91沈先生作品| 国产色综合天天综合网| 国产成人短视频| 亚洲欧美一区二区精品久久久| 视频在线一区二区| 中文字幕亚洲情99在线| 国内精品久久久久久中文字幕| 久久国产精品电影| 国产精品久久一区主播| 欧美成人亚洲成人| 57pao成人永久免费视频| 欧美xxxx做受欧美.88| 亚洲福利在线观看| 日本精品在线视频| 91视频国产精品| 国产精品尤物福利片在线观看| 国产欧美一区二区三区视频| 日韩综合视频在线观看| 精品日本高清在线播放| 亚洲一区二区久久久久久久| 久久久最新网址| 亚洲成色999久久网站| 57pao精品| 久久男人av资源网站| 国产黑人绿帽在线第一区| 亚洲成人精品在线| 亚洲一区二区久久久| 久久精品国产久精国产思思| 亚洲成年人影院在线| 亚洲字幕在线观看| 欧美福利视频网站| 日韩精品免费在线| 蜜臀久久99精品久久久无需会员| 亚洲性猛交xxxxwww| 欧美丰满片xxx777| 91久久久久久久久| 懂色aⅴ精品一区二区三区蜜月| 77777亚洲午夜久久多人| 日本久久久久久久久| 欧美尺度大的性做爰视频| 久久国产精品久久国产精品| 国产精品久久久久久久av电影| 久久99精品视频一区97| 久久99视频免费| 欧美孕妇性xx| 中文字幕在线国产精品| 一区二区成人av| 欧美性受xxxx白人性爽| 亚洲人a成www在线影院| 亚洲人av在线影院| 日韩电影在线观看免费| 中文字幕日韩在线观看| 亚洲直播在线一区| 欧美第一黄色网| 成人黄色网免费| 91成人天堂久久成人| 日本亚洲欧洲色| 欧美激情久久久久久| 欧美放荡办公室videos4k| 色午夜这里只有精品| 午夜精品久久久久久久白皮肤| 亚洲第一网中文字幕| 欧美电影院免费观看| 伊人伊成久久人综合网小说| 中文欧美日本在线资源| 国产精品色悠悠| 色偷偷91综合久久噜噜| 91精品国产综合久久久久久蜜臀| 亚洲精品一区二区三区不| 亚洲综合中文字幕68页| 日韩精品视频免费在线观看| 亚洲国产精品悠悠久久琪琪| 成人春色激情网| 97在线日本国产| 日韩在线视频网| 最近2019免费中文字幕视频三| 国产欧美久久久久久| 热久久这里只有精品| 日韩大片免费观看视频播放| 欧美激情免费看| 日本高清不卡的在线| 欧美性生交大片免网| 日韩在线观看免费高清完整版| 国产v综合ⅴ日韩v欧美大片| 夜色77av精品影院| 欧美在线视频一二三| 欧美日韩中文字幕综合视频| 精品国产电影一区| 亚洲精品久久久久久久久久久久| 成人乱人伦精品视频在线观看| 精品国产一区二区三区久久狼5月| 中文字幕亚洲欧美| 国产亚洲欧洲在线| 欧美午夜片欧美片在线观看| 精品久久久久久国产| 中文国产亚洲喷潮| 国产一区二区三区直播精品电影| 亚洲福利精品在线| 国产精品视频专区| 国产亚洲日本欧美韩国| 国产成人精品电影久久久| 国产精品中文字幕在线观看| 亚洲男人天堂久| 国产男人精品视频| 精品国产一区二区三区久久久| 国产精品精品久久久| 精品国产91久久久| 精品欧美国产一区二区三区| 2019亚洲日韩新视频| 97久久久久久| 国产欧美在线视频| 97香蕉超级碰碰久久免费的优势| 欧美大荫蒂xxx| 亚洲人成伊人成综合网久久久| 欧美激情欧美激情| 久久综合亚洲社区| 91精品久久久久久久久青青| 色综合五月天导航| 欧美多人爱爱视频网站| 亚洲精品久久久久久下一站| 亚洲黄色在线观看| 日韩精品极品在线观看播放免费视频| 色综合91久久精品中文字幕| 国产在线播放91| 中文字幕亚洲欧美一区二区三区| 欧美性猛交xxxx富婆弯腰| 欧美成人精品影院| 亚洲精品成人久久电影| 欧美国产日韩二区| 性欧美办公室18xxxxhd| 日韩女优在线播放| 久久九九精品99国产精品| 国产精品嫩草视频| 日韩av中文字幕在线播放| 久久国产精品免费视频| 中文字幕欧美日韩精品| 日韩中文字幕免费| 欧美日韩亚洲一区二区| 亚洲在线观看视频网站| 国产啪精品视频|