CALayer

先要说的是CALayers是屏幕上的一个具有可见内容的矩形区域,每个视图都有一个根CALayer,其所有的绘制(视觉效果)都是在这个layer上进行的。
CALayer的可以影响其外观的特性有:
  • 层的大小尺寸
  • 背景色
  • 内容
  • 是否使用圆角
  • 是否使用阴影
  • 等等
1.添加一个带阴影效果的子层,加入下列代码:
2  
CALayer  *sublayer  [CALayerlayer];
sublayer.backgroundColor 
[UIColorblueColor].CGColor;
sublayer.shadowOffset 
CGSizeMake(0,3);
sublayer.shadowRadius 
5.0;
sublayer.shadowColor 
[UIColorblackColor].CGColor;
sublayer.shadowOpacity 
0.8;
sublayer.frame 
CGRectMake(30,30, 128, 192);
[self.view.layeraddSublayer:sublayer];

2.为子层增加内容(图片),你还可以设置层的边框,代码如下:
  
3
sublayer.contents  = ( id )[ UIImageimageNamed : @ "BattleMapSplashScreen.png" ] .CGImage;
sublayer.borderColor  = [ UIColorblackColor ] .CGColor;
sublayer.borderWidth  = 2.0 ;
如果你希望子层也是圆角怎么办?你可能说很容易设置cornerRadius属性就行。实际上你即算是设置了cornerRadius属性,图片仍然不会显示圆角。你还需要设置masksToBounds为YES。但是这样做还是不够的,因为如果是这样,这个层的阴影显示就没有了。简单的实现方法如下(通过两个层来实现):

4

CALayer  * sublayer  = [ CALayerlayer ] ;
sublayer.backgroundColor  = [ UIColorblueColor ] .CGColor;
sublayer.shadowOffset  =  CGSizeMake ( 0,3 ) ;
sublayer.shadowRadius  = 5.0 ;
sublayer.shadowColor  = [ UIColorblackColor ] .CGColor;
sublayer.shadowOpacity  = 0.8 ;
sublayer.frame  =  CGRectMake ( 30,30, 128, 192 ) ;
sublayer.borderColor  = [ UIColorblackColor ] .CGColor;
sublayer.borderWidth  = 2.0 ;
sublayer.cornerRadius  = 10.0 ;
[ self.view.layeraddSublayer : sublayer ] ;

CALayer  * imageLayer  = [ CALayerlayer ] ;
imageLayer.frame  =  sublayer.bounds;
imageLayer.cornerRadius  = 10.0 ;
imageLayer.contents  = ( id )[ UIImageimageNamed : @ "BattleMapSplashScreen.png" ] .CGImage;
imageLayer.masksToBounds  = YES ;
[ sublayer addSublayer : imageLayer ] ;
最后,还介绍一下自绘图型的实现,其要点是要设置所绘制层的delegate。比如在我们的例子中使用ViewController作为delegate,那么就需要在ViewController中实现drawLayer:inContext方法,对层进行绘制工作。另外,还需要调用setNeedsDisplay,来通知层需要进行绘制了,于是层才会通过对delegate的drawLayer:inContext方法进行调用。
自制图层就相当于添加一个view和viewcontroller,所以这个委托你也不能少。但是再viewcontroller内你添加一个图层不做事那么就不用添加委托了。系统帮你花出来。

如果你想自制图层 那么委托就需要这样写了:
void 
MyDrawColoredPattern  (void*info,CGContextRef context){
 

 
  CGColorRefdotColor  =[UIColor colorWithHue:0saturation:0 brightness:0.07 alpha:1.0].CGColor;
 
  CGColorRefshadowColor  =[UIColor colorWithRed:1green:1 blue:1alpha:0.1].CGColor;
 

 
  CGContextSetFillColorWit hColor(context,dotColor);
 
  CGContextSetShadowWithCo lor(context,CGSizeMake(0, 1),1, shadowColor);
 

 
  CGContextAddArc(context, 3, 3, 4, 0, radians(360), 0);
 
  CGContextFillPath(context);
 

 
  CGContextAddArc(context, 16, 16, 4, 0, radians(360), 0);
 
  CGContextFillPath(context);
 

}

(void)drawLayer:(CALayer 
*)layer inContext:(CGContextRef)context  {
 

 
  CGColorRefbgColor  =[UIColor colorWithHue:0.6saturation:1.0 brightness:1.0 alpha:1.0].CGColor;
 
  CGContextSetFillColorWit hColor(context,bgColor);
 
  CGContextFillRect(context, layer.bounds);
 

 
  staticconstCGPatternCallbacks callbacks  ={0,  &MyDrawColoredPattern,  NULL};
 

 
  CGContextSaveGState(context);
 
  CGColorSpaceRefpatternSpace  CGColorSpaceCreatePatter n(NULL);
 
  CGContextSetFillColorSpa ce(context,patternSpace);
 
  CGColorSpaceRelease(patternSpace);
 

 
  CGPatternRefpattern  CGPatternCreate(NULL,
 
                                          layer.bounds,
 
                                          CGAffineTransformIdentit y,
 
                                          24,
 
                                          24,
 
                                          kCGPatternTilingConstant Spacing,
 
                                          true,
 
                                          &callbacks);
 
  CGFloatalpha  =1.0;
 
  CGContextSetFillPattern(context,pattern,  &alpha);
 
  CGPatternRelease(pattern);
 
  CGContextFillRect(context, layer.bounds);
 
  CGContextRestoreGState(context);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值