首先CGImageRef 与 UIImage相互转换
//CGImageRef转换成UIImage
CGImageRef iOffscreen = CGBitmapContextCreateImage(context);
UIImage* image = [UIImage imageWithCGImage: iOffscreen];
//UIImage转换成CGImageRef
UIImage *loadImage=[UIImage imageNamed:@"comicsplash.png"];
CGImageRef cgimage=loadImage.CGImage;
之所以需要转换,渲染这张图片一定是目的了,CGImage和CGImageRef这两个应当是用来重绘图形的类,它们在应用时是按照图像的像素矩阵来绘制图片的。
继续,将图片放入CALayer准备渲染
CALayer *theLayer;
// create the layer and set the bounds and position
theLayer=[CALayer layer];
theLayer.position=CGPointMake(50.0f,50.0f);
theLayer.bounds=CGRectMake(0.0f,0.0f,100.0f,100.0f);
theLayer.contents=theImage;
委托函数
首次加载(首次绘制时调用),也可以手动调用(setNeedsDisplay或者setNeedsDisplayInRect:的消息,或者把图层的needsDisplayOnBoundsChange属性值设置为YES)同样会调用委托函数
//绘制图层内容(图片)
- (void)displayLayer:(CALayer *)theLayer
{
// check the value of the layer's state key
if ([[theLayer valueForKey:@"state"] boolValue])
{
// display the yes image
theLayer.contents=[someHelperObject loadStateYesImage];
}
else {
// display the no image
theLayer.contents=[someHelperObject loadStateNoImage];
}
}
如果你必须重绘图层的内容,而不是通过加载图片
- (void)drawLayer:(CALayer *)theLayer
inContext:(CGContextRef)theContext
{
CGMutablePathRef thePath = CGPathCreateMutable();
CGPathMoveToPoint(thePath,NULL,15.0f,15.f);
CGPathAddCurveToPoint(thePath,
NULL,
15.f,250.0f,
295.0f,250.0f,
295.0f,15.0f);
CGContextBeginPath(theContext);
CGContextAddPath(theContext, thePath );
CGContextSetLineWidth(theContext,
[[theLayer valueForKey:@"lineWidth"] floatValue]);
CGContextStrokePath(theContext);
// release the path
CFRelease(thePath);
}
Layer的 contentsGravity
属性的缩放常量
kCAGravityResize -- 缩放内容图像以填充层边界,可能无视内容的自然比例,这是默认值。
kCAGravityResizeAspect -- 缩放内容图像使其竟可能占满层边界显示,但他仍然保持自然比例。
kCAGravityResizeAspectFill -- 缩放内容图片使其占满层显示,但仍保持自然比例。这可能导致内容超越到层边界之外。
CALayer的contentsGravity允许你在层的边界内定位和缩放层的contents图像。内容图像默认填充整个层的边界,忽略图像自然的宽高比例。
kCAGravityTopLeft 将内容图像定位到层的左上角。
kCAGravityTop 将内容图像定位到层的上边缘的水平居中位置。
kCAGravityTopRight 将内容图像定位到层的右上角。
kCAGravityLeft 将内容图像定位到层的左边缘的垂直居中位置。
kCAGravityCenter 将内容图像定位到层的中心。
kCAGravityRight 将内容图像定位到层的右边缘的垂直居中位置。
kCAGravityBottomLeft 将内容图像定位到层的左下角。
kCAGravityBottom 将内容图像定位到层的下边缘的水平居中位置。
kCAGravityBottomRight 将内容图像定位到层的右下角。
UIView使用layer属性
UIView *viewWaitting = [[[UIView alloc] initWithFrame:CGRect_ViewWaiting_Frame] autorelease];
[viewWaitting setBackgroundColor:[UIColor blackColor]];
[viewWaitting setAlpha:0.8]; //设置透明度
viewWaitting.layer.masksToBounds = YES;
viewWaitting.layer.cornerRadius = 8;//设置圆角弧度