首
先要说的是CALayers是屏幕上的一个具有可见内容的矩形区域,每个视图都有一个根CALayer,其所有的绘制(视觉效果)都是在这个layer上进行的。
CALayer的可以影响其外观的特性有:
2.为子层增加内容(图片),你还可以设置层的边框,代码如下:
sublayer.contents
=
(
id
)[
UIImageimageNamed
:
@
"BattleMapSplashScreen.png"
]
.CGImage;
sublayer.borderColor
=
[
UIColorblackColor
]
.CGColor;
sublayer.borderWidth
=
2.0
;
如果你希望子层也是圆角怎么办?你可能说很容易设置cornerRadius属性就行。实际上你即算是设置了cornerRadius属性,图片仍然不会显示圆角。你还需要设置masksToBounds为YES。但是这样做还是不够的,因为如果是这样,这个层的阴影显示就没有了。简单的实现方法如下(通过两个层来实现):
。
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);
}
CALayer的可以影响其外观的特性有:
- 层的大小尺寸
- 背景色
- 内容
- 是否使用圆角
- 是否使用阴影
- 等等
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];
sublayer.backgroundColor
sublayer.shadowOffset
sublayer.shadowRadius
sublayer.shadowColor
sublayer.shadowOpacity
sublayer.frame
[self.view.layeraddSublayer:sublayer];
2.为子层增加内容(图片),你还可以设置层的边框,代码如下:
sublayer.contents
sublayer.borderColor
sublayer.borderWidth
如果你希望子层也是圆角怎么办?你可能说很容易设置cornerRadius属性就行。实际上你即算是设置了cornerRadius属性,图片仍然不会显示圆角。你还需要设置masksToBounds为YES。但是这样做还是不够的,因为如果是这样,这个层的阴影显示就没有了。简单的实现方法如下(通过两个层来实现):
。
CALayer
sublayer.backgroundColor
sublayer.shadowOffset
sublayer.shadowRadius
sublayer.shadowColor
sublayer.shadowOpacity
sublayer.frame
sublayer.borderColor
sublayer.borderWidth
sublayer.cornerRadius
[ self.view.layeraddSublayer : sublayer ] ;
CALayer
imageLayer.frame
imageLayer.cornerRadius
imageLayer.contents
imageLayer.masksToBounds
[ sublayer addSublayer : imageLayer ] ;
最后,还介绍一下自绘图型的实现,其要点是要设置所绘制层的delegate。比如在我们的例子中使用ViewController作为delegate,那么就需要在ViewController中实现drawLayer:inContext方法,对层进行绘制工作。另外,还需要调用setNeedsDisplay,来通知层需要进行绘制了,于是层才会通过对delegate的drawLayer:inContext方法进行调用。
自制图层就相当于添加一个view和viewcontroller,所以这个委托你也不能少。但是再viewcontroller内你添加一个图层不做事那么就不用添加委托了。系统帮你花出来。
如果你想自制图层 那么委托就需要这样写了:
void
}
(void)drawLayer:(CALayer
}