2010-11-21 4 views
5

моя ситуация: я создал UIScrollView с UIView, внутри которого вызывается класс Graph, который рисует хороший граф в контексте. Теперь я обнаружил, что телефон не будет отображать UIView, если ширина его больше 8192 пикселей. Фактически, согласно документам Apple, если я хочу, чтобы он был больше 1024 пикселей, я должен реализовать CATiledLayer.UIScrollView и CATiledLayer с нуля

Но после многократного чтения и поиска по-прежнему сложно понять основы CATiledLayer для этой задачи - я как-то потерял между Quartz vs. Cocoa и уровнями и подслоями против представлений и подзонов.

В идеале я хотел бы оставить класс Graph нетронутым, просто полностью нарисовать контекст, разделить его на фрагменты и прокрутить их. Скроллвью следует просто прокручивать по горизонтали, без масштабирования или вертикальной прокрутки. Это возможно? Если да, то как мне продолжать? Возможно, кто-то может дать мне схему, только некоторые маркеры или псевдокоды, как я должен реструктурировать scrollview, uiview и класс графа, чтобы использовать тайлинг.

Благодарим вас за любой ответ.

ответ

4

Прошел месяц с тех пор, как вы спросили, но это все еще может быть полезно. Я только начал использовать CATiledLayer сегодня вечером. Я думаю, что идея позади CATiledLayer, кажется, что вы добавляете его к виду:

CATiledLayer *tiled = [CATiledLayer layer]; 
[self.view.layer addSublayer:tiled]; 

и установить делегат, реализуя только один метод:

MyTLDelegate *myDelegate = [[MyTLDelegate alloc] init]; 
tiled.delegate = myDelegate; 
// I haven't checked if CATiledLayer retains myDelegate, check this! 

... 
@implementation MyTLDelegate { 

-(void)drawLayer:(CATiledLayer *)layer inContext:(CGContextRef)ctx 
{ 
    CGRect dirtyRect = CGContextGetClipBoundingBox(ctx); 
    // draw! 
} 

Это в основном все, что нужно это, вы можете просто рисовать, как будто все координатное пространство здесь. Поэтому вам нужно лишь немного изменить свой класс Graph, чтобы он мог выступать в роли делегата CATiledLayer. В моем случае это было потрачено 20 минут, что увеличило количество пользователей на несколько порядков. (по сравнению с утомительной прокруткой, масштабированием и перерисовкой)

пс. это только псевдо-код, который вы просили, вам может понадобиться дополнительный клей, чтобы добиться успеха, например. для качества и/или размеров каркаса.

Смежные вопросы