UIScrollView и CATiledLayer с нуля - PullRequest
       33

UIScrollView и CATiledLayer с нуля

5 голосов
/ 21 ноября 2010

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

Но после прочтения и поиска в Google мне все еще трудно понять основы CATiledLayer для этой задачи - я каким-то образом теряюсь между Кварцем против Какао и слоями и подслоями против представлений и подпредставлений.

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

Большое спасибо заранее за любой ответ.

1 Ответ

4 голосов
/ 03 января 2011

Прошёл месяц с тех пор, как вы спросили, но это всё ещё может быть полезно.Я только начал использовать 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 минут, что улучшило пользовательский опыт на несколько порядков.(по сравнению с утомительной прокруткой, масштабированием и перерисовкой)

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

...