W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
????初始化圖層,處理圖層,打包通過(guò)IPC發(fā)給渲染引擎,轉(zhuǎn)化成OpenGL幾何圖形,這些是一個(gè)圖層的大致資源開(kāi)銷(xiāo)。事實(shí)上,一次性能夠在屏幕上顯示的最大圖層數(shù)量也是有限的。
????確切的限制數(shù)量取決于iOS設(shè)備,圖層類(lèi)型,圖層內(nèi)容和屬性等。但是總得說(shuō)來(lái)可以容納上百或上千個(gè),下面我們將演示即使圖層本身并沒(méi)有做什么也會(huì)遇到的性能問(wèn)題。
????在對(duì)圖層做任何優(yōu)化之前,你需要確定你不是在創(chuàng)建一些不可見(jiàn)的圖層,圖層在以下幾種情況下回事不可見(jiàn)的:
????Core Animation非常擅長(zhǎng)處理對(duì)視覺(jué)效果無(wú)意義的圖層。但是經(jīng)常性地,你自己的代碼會(huì)比Core Animation更早地想知道一個(gè)圖層是否是有用的。理想狀況下,在圖層對(duì)象在創(chuàng)建之前就想知道,以避免創(chuàng)建和配置不必要圖層的額外工作。
????舉個(gè)例子。清單15.3 的代碼展示了一個(gè)簡(jiǎn)單的滾動(dòng)3D圖層矩陣。這看上去很酷,尤其是圖層在移動(dòng)的時(shí)候(見(jiàn)圖15.1),但是繪制他們并不是很麻煩,因?yàn)檫@些圖層就是一些簡(jiǎn)單的矩形色塊。
清單15.3 繪制3D圖層矩陣
#import "ViewController.h"
#import
#define WIDTH 10
#define HEIGHT 10
#define DEPTH 10
#define SIZE 100
#define SPACING 150
#define CAMERA_DISTANCE 500
@interface ViewController ()
?
@property (nonatomic, strong) IBOutlet UIScrollView *scrollView;
@end
@implementation ViewController
- (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];
}
}
}
?
//log
NSLog(@"displayed: %i", DEPTH*HEIGHT*WIDTH);
}
@end
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: