CALayer -display метод не вызывается - PullRequest
0 голосов
/ 30 декабря 2011

Я создаю книжку с картинками для iPad с CoreAnimation. Я сделал что-то вроде класса Sprite (подкласс CALayer), чтобы иметь возможность загружать мои кадры анимации из листа спрайта. Нечто похожее, чем здесь: http://mysterycoconut.com/blog/2011/01/cag1/. Я не использую делегат слоя для установки границ и содержимогоRect (и в моем случае также позиции), но я делаю это непосредственно в методе -display подкласса CALayer.

Я создал манекен, и он работал отлично. Когда я переместил код в свой проект, метод -display моего подкласса больше не вызывался. Я много раз читал документацию по CALayer и Руководству по программированию CoreAnimation и не могу найти никакой информации о том, когда вызывается метод -display. Я только знаю, что он использует шаблон шаблона, это означает, что я не должен вызывать его сам, но вместо этого должен вызываться [layer setNeedsDisplay], который вызывает сам метод -display. Я тоже пытался это сделать, но безуспешно.

Если вам нужно увидеть какой-нибудь код, дайте мне знать.

Есть идеи?

UPDATE

Я нашел причину, по которой метод не вызывался. Это так неловко, что не стоит упоминать: 0. В любом случае, мне все равно было бы интересно узнать, когда именно вызывается метод -display. Я заметил, что мне нужно создать анимацию, чтобы она запускалась. Если бы я только добавил слой в иерархию отображения с помощью [layer addSublayer: myCustomLayer], метод не был вызван.

1 Ответ

1 голос
/ 31 декабря 2011

Вот что я делал неправильно.Я создавал новый указатель слоя вместо того, чтобы использовать тот, который был добавлен в иерархию слоев.

CALayer *layer = nil;

if (animatedLayer == YES)
{
    // Here's the problem, I created a new layer pointer instead of using the one before. 
    AnimatedLayer *layer = [[AnimatedLayer alloc] init];

    // more stuff being done to the AnimatedLayer
}
else
{
    layer = [[CALayer alloc] init];

    // more stuff being done to the CALayer
}

[masterLayer addSublayer:layer];
[layer release];

Такая глупая ошибка, мне потребовались часы для отладки!Мне нужно немного поспать и перестать пить так много кофе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...