CATiledLayer рисовать гигантский UIView с помощью кнопок? - PullRequest
2 голосов
/ 27 апреля 2011

У меня есть этот гигант UIView с 600 UIButtons в качестве подпредставлений. Размер UIView составляет около 2000 на 2000 пикселей, и он является подпредставлением для UIScrollView. Я пытаюсь реализовать CATiledLayer в качестве слоя рендеринга для этого гиганта UIView, но я не могу понять, как рендерить плитки. Я нашел много примеров, которые покрывают CATiledLayer мозаичными изображениями, PDF-файлами, ... но я так и не нашел реального примера того, как нарисовать полный UIView с большим количеством подпредставлений. Вы, наверное, спрашиваете, почему я хотел бы придерживаться UIView? Потому что я бы хотел, чтобы пользователи продолжали использовать кнопки для взаимодействия с представлением.

Мне интересно, есть ли у кого-нибудь пример или какой-нибудь псевдо-код о том, как реализовать метод - (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context, учитывая, что есть 1 гигант UIView с большим количеством UIbuttons в качестве его подпредставлений.

1 Ответ

3 голосов
/ 28 апреля 2011

Начиная с iOS 4.0, вы можете использовать drawRect: вместо drawLayer:inContext:. Это вопросы и ответы от Apple объясняют это: http://developer.apple.com/library/ios/#qa/qa1637/_index.html. Важным моментом является то, что drawRect: в 4 теперь поточно-ориентирован, и вы можете использовать графические функции UIKit.

Вам все еще нужно переопределить этот метод, чтобы использовать CATileLayer:

+(Class)layerClass
{
    return [CATiledLayer class];
}

Но теперь вы можете просто использовать drawRect:

-(void)drawRect:(CGRect)rect
{
    //normal drawing routines here.
}

Прямоугольник, который доставляется методу, будет размером ваших плиток, и вам нужно определить, что нужно нарисовать в конкретном прямоугольнике. Сила CATiledLayer в том, что она требует только рисования плиток, которые отображаются на экране. Он также использует фоновые потоки и работает очень быстро.

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

Использование drawRect: только для iOS 4.0 и более поздних версий, оно не будет работать для более старых версий.

...