CALayer高清显示
if ([myLayer respondsToSelector:@selector(setContentsScale:)]) {
myLayer.contentsScale =[[UIScreen mainScreen] scale];
}
CALayer高清显示
This is how to draw a CGLayer correctly forall resolutions.
1. When first creating the layer, you need tocalculate the correct bounds by multiplying the dimensions with the scale:
int width =25;
int height =25;
float scale = [self contentScaleFactor];
CGRect bounds =CGRectMake(0,0, width * scale,height * scale);
CGLayer layer =CGLayerCreateWithContext(context, bounds.size, NULL);
CGContextRef layerContext =CGLayerGetContext(layer);
2. You then need to set the correct scale foryour layer context:
CGContextScaleCTM(layerContext, scale, scale);
3. If the current device has a retina display,all drawing made to the layer will now be drawn twice as large.
4. When you finally draw the contents of yourlayer, make sure you use CGContextDrawLayerInRect and supply the unscaledCGRect:
5. CGRect bounds =CGRectMake(0,0, width, height);
CGContextDrawLayerInRect(context, bounds,layerContext);用于CALayer的动画
CALayer有默认动画效果,如果想完全用自已的,先要removeAllAnimations,再加上自设的animation。如果UIView上有一个CALayer,UIView的的内容没有更新,只有CALayer,则只重绘CALayer就可以,调用[layer setNeedsDisplay]。之前CALayer的内容会自动清除。比VC++高级,对于要更新的区域,不用手动擦除旧的