2011-12-30 2 views
0

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

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

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

Любые идеи?

UPDATE

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

+1

Не беспокойтесь о смущении - если у вас возникла проблема, кто-то еще в конце концов тоже, и вы отправляете ответ, это поможет им. – jrturton

+0

Ну, решение моей проблемы не имело ничего общего с моей оригинальной проблемой, поэтому я подумал, что это никому не будет интересно. В любом случае, я отправлю ответ с моей глупой ошибкой. – strave

ответ

1

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

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]; 

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

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