天天看點

CALayer系列、CGContextRef、UIBezierPath、文本屬性Attributes

先上效果圖:

CALayer系列、CGContextRef、UIBezierPath、文本屬性Attributes

CALayer系列.gif

CALayer系列、CGContextRef、UIBezierPath、文本屬性Attributes

CGContextRef、UIBezierPath、文本屬性Attributes.gif

一、CAEmitterLayer 粒子屬性

//設定發射器
   CAEmitterLayer *  _snowEmitter=[[CAEmitterLayer alloc]init];
    //發射器在xy平面的中心位置
    _snowEmitter.emitterPosition=CGPointMake(self.view.frame.size.width/2,self.view.frame.size.height/2);
    //發射器的尺寸大小
    _snowEmitter.emitterSize=CGSizeMake(20, 20);
    //發射器的渲染模式
    /*
     kCAEmitterLayerUnordered //這種模式下,粒子是無序出現的,多個發射源将混合
     kCAEmitterLayerOldestFirst //這種模式下,聲明久的粒子會被渲染在最上層
     kCAEmitterLayerOldestLast //這種模式下,年輕的粒子會被渲染在最上層
     kCAEmitterLayerBackToFront //這種模式下,粒子的渲染按照Z軸的前後順序進行
     kCAEmitterLayerAdditive //這種模式會進行粒子混合
     */
    _snowEmitter.renderMode = kCAEmitterLayerBackToFront;
    
    /*emitterShape
     kCAEmitterLayerPoint //點的形狀,粒子從一個點發出
     kCAEmitterLayerLine  //線的形狀,粒子從一條線發出
     kCAEmitterLayerRectangle //矩形形狀,粒子從一個矩形中發出
     kCAEmitterLayerCuboid //立方體形狀,會影響Z平面的效果
     kCAEmitterLayerCircle //圓形,粒子會在圓形範圍發射
     kCAEmitterLayerSphere //球型
     */
    _snowEmitter.emitterShape = kCAEmitterLayerPoint;
    _snowEmitter.preservesDepth = YES;
    
    /*發射器的發射模式
     kCAEmitterLayerPoints //從發射器中發出
     kCAEmitterLayerOutline //從發射器邊緣發出
     kCAEmitterLayerSurface //從發射器表面發出
     kCAEmitterLayerVolume //從發射器中點發出
     */
    _snowEmitter.emitterMode = kCAEmitterLayerVolume;
    
    /*下面是_snowEmitter的一些屬性
     _snowEmitter.birthRate //粒子的建立速率,預設為1/s
     lifetime 粒子的存活時間。預設為1S
     emitterZPosition 發射器在Z平面的位置
     emitterDepth  發射器的深度,在某些發射模式下會産生立體效果
     emitterShape  發射器的形狀
     emitterMode  發射器的發射模式
     preservesDepth 是否開啟三維空間效果
     velocity 粒子的運動速度
     scale 粒子的縮放大小
     spin 粒子的旋轉位置
     seed 初始化随機的粒子種子
     */
    
    
    //發射單元
    //火焰
    CAEmitterCell * snow = [CAEmitterCell emitterCell];
    //粒子的建立速率
    snow.birthRate = 22;
    //粒子的生存時間
    snow.lifetime = 2.0;
    //粒子的生存時間容差
    snow.lifetimeRange = 1.5;
    //粒子的顔色
    snow.color = [[UIColor whiteColor]CGColor];
    //渲染粒子,可以設定為一個CGImage的對象
    snow.contents = (id)[[UIImage imageNamed:@"snow.png"]CGImage];
    //設定發射單元的名稱
    snow.name = @"snow";
    //粒子的速度
    snow.velocity=160;
    //粒子速度的容差
    snow.velocityRange=80;
    //粒子在xy平面的發射角度
    snow.emissionLongitude= M_PI/2;
    //粒子發射角度的容差
    snow.emissionRange=M_PI/2;
    //縮放速度
    snow.scaleSpeed=0.3;
    //旋轉度
    snow.spin=0.2;
    
    /*下面是snow的一些屬性
     
     xAcceleration/yAcceleration/zAcceleration; x,y,z三個方向的加速度
     contentsRect 渲染的範圍
     
     @property float redRange;
     @property float greenRange;
     @property float blueRange;
     @property float alphaRange;
     粒子在rgb三個色相上的容差和透明度的容差
     
     @property float redSpeed;
     @property float greenSpeed;
     @property float blueSpeed;
     @property float alphaSpeed;
     粒子在RGB三個色相上的變化速度和透明度的變化速度
     
     */
    //粒子單元數組
    _snowEmitter.emitterCells = [NSArray arrayWithObjects:snow,nil];
    [self.view.layer addSublayer:_snowEmitter];           

複制

二、CAGradientLayer是用于色彩梯度展示的layer圖層

/*CAGradientLayer的一些屬性
     //顔色數組,設定我們需要過的的顔色,必須是CGColor對象
    @property(nullable, copy) NSArray *colors;
   
     //顔色開始進行過渡的位置
     這個數組中的元素是NSNumber類型,單調遞增的,并且在0——1之間
     例如,如果我們設定兩個顔色進行過渡,這個數組中寫入0.5,則第一個顔色會在達到layer一半的時候開始向第二個顔色過渡
    @property(nullable, copy) NSArray<NSNumber *> *locations;
   
     //下面兩個參數用于設定渲染顔色的起點和終點 取值範圍均為0——1
     預設起點為(0.5 ,0) 終點為(0.5 ,1),顔色的過渡範圍就是沿y軸從上向下
    @property CGPoint startPoint;
    @property CGPoint endPoint;
   
     //渲染風格 iOS中隻支援一種預設的kCAGradientLayerAxial,我們無需手動設定
    @property(copy) NSString *type;
    */           

複制

三、富文本Attributes屬性

/*
     
     NSKernAttributeName(文字間距) : @8
     NSFontAttributeName(字型設定)
     NSForegroundColorAttributeName(字型顔色)
     NSParagraphStyleAttributeName(段落樣式)
     NSBackgroundColorAttributeName(背景顔色)
     NSStrokeColorAttributeName(字型邊框顔色)和NSStrokeWidthAttributeName(字型邊框的寬度),字型邊框的寬度是按照和字型的大小進行比例設定的.這兩個屬性設定完成之後會出現兩種效果,如果NSStrokeWidthAttributeName為負數,那麼字型為描邊,如果NSStrokeWidthAttributeName為正整數,字型的效果就成了空心字.值得注意的是,這兩個屬性必須要配合着使用,隻設定一方面是不能實作效果的。
     NSStrikethroughStyleAttributeName(删除線):@(NSUnderlineStyleSingle)
     NSUnderlineStyleAttributeName(下劃線) :@(NSUnderlineStyleSingle)
     NSUnderlineColorAttributeName  設定下劃線顔色
     NSVerticalGlyphFormAttributeName(文字排版方向) :@0 ;0表示橫排 ,1代表豎排  (沒看到效果)
     NSObliquenessAttributeName(文字傾斜) : @5;
     NSExpansionAttributeName(文字扁平化) :@1;
     NSShadowAttributeName(文字陰影) :shadow
     NSShadowAttributeName對應的是NSShadow對象,單一使用不會有任何效果,需要配合着NSVerticalGlyphFormAttributeName(文字排版方向)、NSObliquenessAttributeName(文字傾斜)、NSExpansionAttributeName(文字扁平化)配合使用
     NSWritingDirectionAttributeName(設定文字書寫方向):@(NSWritingDirectionRightToLeft) (沒看到效果)
     NSLinkAttributeName  設定連結屬性,點選後調用浏覽器打開指定URL位址
     NSAttachmentAttributeName          設定文本附件,取值為NSTextAttachment對象,常用于文字圖檔混排

     */           

複制

還有CAReplicatorLayer、CAShapeLayer、CATextLayer、CGContextRef、UIBezierPath 用法就不在這裡說了,詳情可以去Demo中檢視或者去參考http://www.jianshu.com/p/3f191880a567 、http://www.jianshu.com/p/6c9aa9c5dd68