Skip to content

Commit

Permalink
Merge pull request #44 from evenluo/master
Browse files Browse the repository at this point in the history
typo and code format
  • Loading branch information
qunten committed Feb 3, 2015
2 parents 12be594 + a1a9e7e commit d47c6ea
Showing 1 changed file with 31 additions and 25 deletions.
56 changes: 31 additions & 25 deletions 15-图层性能/15-图层性能.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

为了检测你是否正确地使用了光栅化方式,用Instrument查看一下Color Hits Green和Misses Red项目,是否已光栅化图像被频繁地刷新(这样就说明图层并不是光栅化的好选择,或则你无意间触发了不必要的改变导致了重绘行为)。

##屏幕外渲染
##离屏渲染

Offscreen rendering does not necessarily imply software drawing, but it means that the layer must first be rendered (either by the CPU or GPU) into an offscreen context before being displayed. The layer attributes that trigger offscreen rendering are as follows:

Expand All @@ -49,7 +49,7 @@ Offscreen rendering does not necessarily imply software drawing, but it means th

你想要的只是圆角且沿着矩形边界裁切,同时还不希望引起性能问题。其实你可以用现成的`UIBezierPath`的构造器`+bezierPathWithRoundedRect:cornerRadius:`(见清单15.1).这样做并不会比直接用`cornerRadius`更快,但是它避免了性能问题。

清单15.2`CAShapeLayer`画一个圆角矩形
清单15.1`CAShapeLayer`画一个圆角矩形

```objective-c
#import "ViewController.h"
Expand All @@ -66,6 +66,7 @@ Offscreen rendering does not necessarily imply software drawing, but it means th
- (void)viewDidLoad
{
[super viewDidLoad];

//create shape layer
CAShapeLayer *blueLayer = [CAShapeLayer layer];
blueLayer.frame = CGRectMake(50, 50, 100, 100);
Expand All @@ -91,6 +92,7 @@ Offscreen rendering does not necessarily imply software drawing, but it means th
- (void)viewDidLoad
{
[super viewDidLoad];
//create layer
CALayer *blueLayer = [CALayer layer];
blueLayer.frame = CGRectMake(50, 50, 100, 100);
Expand Down Expand Up @@ -169,32 +171,36 @@ Core Animation非常擅长处理对视觉效果无意义的图层。但是经常

- (void)viewDidLoad
{
[super viewDidLoad];
//set content size
self.scrollView.contentSize = CGSizeMake((WIDTH - 1)*SPACING, (HEIGHT - 1)*SPACING);
//set up perspective transform
CATransform3D transform = CATransform3DIdentity;
transform.m34 = -1.0 / CAMERA_DISTANCE;
self.scrollView.layer.sublayerTransform = transform;
//create layers
for (int z = DEPTH - 1; z >= 0; z--) {
for (int y = 0; y < HEIGHT; y++) {
for (int x = 0; x < WIDTH; x++) {
//create layer
CALayer *layer = [CALayer layer];
layer.frame = CGRectMake(0, 0, SIZE, SIZE);
layer.position = CGPointMake(x*SPACING, y*SPACING);
layer.zPosition = -z*SPACING;
//set background color
layer.backgroundColor = [UIColor colorWithWhite:1-z*(1.0/DEPTH) alpha:1].CGColor;
//attach to scroll view
[self.scrollView.layer addSublayer:layer];
[super viewDidLoad];

//set content size
self.scrollView.contentSize = CGSizeMake((WIDTH - 1)*SPACING, (HEIGHT - 1)*SPACING);

//set up perspective transform
CATransform3D transform = CATransform3DIdentity;
transform.m34 = -1.0 / CAMERA_DISTANCE;
self.scrollView.layer.sublayerTransform = transform;

//create layers
for (int z = DEPTH - 1; z >= 0; z--) {
for (int y = 0; y < HEIGHT; y++) {
for (int x = 0; x < WIDTH; x++) {
//create layer
CALayer *layer = [CALayer layer];
layer.frame = CGRectMake(0, 0, SIZE, SIZE);
layer.position = CGPointMake(x*SPACING, y*SPACING);
layer.zPosition = -z*SPACING;
//set background color
layer.backgroundColor = [UIColor colorWithWhite:1-z*(1.0/DEPTH) alpha:1].CGColor;
//attach to scroll view
[self.scrollView.layer addSublayer:layer];
}
}
}
//log
NSLog(@"displayed: %i", DEPTH*HEIGHT*WIDTH);
}
//log
NSLog(@"displayed: %i", DEPTH*HEIGHT*WIDTH); }
@end
```
Expand Down

0 comments on commit d47c6ea

Please sign in to comment.