前言
- 這次分享的是關于界面美化效果方面的代碼迅细。
- 用我們老師的話說丽旅,這個不會給你增加任何的工資,但是能裝逼啊;
- 個人感覺把這個放在啟動界面或者加載界面挺好的波丰。
具體效果如圖:
效果圖
代碼講解:
首先是寫在viewDidLoad
里的:
//背景我們選擇黑色蹬敲,這樣更容易看清楚雪花點
self.view.backgroundColor = [UIColor blackColor];
雪花粒子Layer
:
// 創(chuàng)建粒子Layer
CAEmitterLayer *snowEmitter = [CAEmitterLayer layer];
// 粒子發(fā)射位置
snowEmitter.emitterPosition = CGPointMake(120,-20);
// 發(fā)射源的尺寸大小
snowEmitter.emitterSize = self.view.bounds.size;
// 發(fā)射模式
snowEmitter.emitterMode = kCAEmitterLayerSurface;
// 發(fā)射源的形狀
snowEmitter.emitterShape = kCAEmitterLayerLine;
創(chuàng)建雪花粒子:
// 創(chuàng)建雪花類型的粒子
CAEmitterCell *snowflake = [CAEmitterCell emitterCell];
// 粒子的名字
snowflake.name = @"snow";
// 粒子參數(shù)的速度乘數(shù)因子
snowflake.birthRate = 20.0;
//粒子純在時間平均值(毫秒)
snowflake.lifetime = 60.0;
//粒子純在時間平均值范圍
snowflake.lifetimeRange = 60.0;
// 粒子速度
snowflake.velocity = 10.0;
// 粒子的速度范圍
snowflake.velocityRange = 10;
// 粒子y方向的加速度分量
snowflake.yAcceleration = 2;
// 周圍發(fā)射角度
snowflake.emissionRange = 0.5 * M_PI;
// 粒子旋轉角度范圍
snowflake.spinRange = 0.25 * M_PI;
snowflake.contents = (id)[[UIImage imageNamed:@"snow"] CGImage];
粒子圖片如下:
snow.png
粒子顏色(隨機):
// 設置雪花形狀的粒子的顏色
snowflake.color = [[UIColor whiteColor] CGColor];
//顏色取值范圍
snowflake.redRange = 2.f;
snowflake.greenRange = 2.f;
snowflake.blueRange = 2.f;
粒子大邢景骸:
//大小平均值和平均值范圍
snowflake.scaleRange = 0.6f;
snowflake.scale = 0.7f;
//陰影透明度,默認0
snowEmitter.shadowOpacity = 1.0;
//陰影半徑伴嗡,默認3
snowEmitter.shadowRadius = 0.0;
//shadowOffset陰影偏移 這個跟shadowRadius配合使用
snowEmitter.shadowOffset = CGSizeMake(0.0, 0.0);
// 粒子邊緣的顏色
snowEmitter.shadowColor = [[UIColor whiteColor] CGColor];
// 添加粒子
snowEmitter.emitterCells = @[snowflake];
// 將粒子Layer添加進圖層中
[self.view.layer addSublayer:snowEmitter];
到這里我們的粒子雪花動畫已經(jīng)基本做完了急波,運行即可看到飄落的不同顏色的粒子雪花,如圖:
雪花效果
但是瘪校,只有雪花是否感覺有些單調了呢澄暮?
這時候,我們可以通過添加遮罩層來增加動畫的感覺阱扬。
首先是圖片:
alpha.png
我們先在頂部寫一個屬性:
@property (nonatomic, strong) CALayer *movedMask;
然后在viewDidLoad
里接著寫:
// 形成遮罩
UIImage *image = [UIImage imageNamed:@"alpha"];
_movedMask = [CALayer layer];
_movedMask.frame = (CGRect){CGPointZero, image.size};
_movedMask.contents = (__bridge id)(image.CGImage);
_movedMask.position = self.view.center;
snowEmitter.mask = _movedMask;
因為這個不是重點泣懊,就不逐行解釋了。
拖拽的View
:
UIView *dragView = [[UIView alloc] initWithFrame:(CGRect){CGPointZero, image.size}];
dragView.center = self.view.center;
[self.view addSubview:dragView];
給dragView
添加拖拽手勢:
UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[dragView addGestureRecognizer:recognizer];
在viewDidLoad
外寫上dragView
的拖拽方法
- (void)handlePan:(UIPanGestureRecognizer *)recognizer {
// 拖拽
CGPoint translation = [recognizer translationInView:self.view];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointMake(0, 0) inView:self.view];
// 關閉CoreAnimation實時動畫繪制(核心)
[CATransaction setDisableActions:YES];
_movedMask.position = recognizer.view.center;
}
Core Animation基于一個假設麻惶,說屏幕上的任何東西都可以(或者可能)做動畫馍刮。動畫并不需要你在Core Animation中手動打開,相反需要明確地關閉窃蹋,否則他會一直存在卡啰。
詳細請看:http://www.cnblogs.com/tmacforever/p/4316754.html
最后就完成了静稻!
最終效果
完整代碼github已上傳,歡迎下載:https://github.com/ouranou/snowflake-animation