Вы нарушаете фундаментальное правило CALayer
/ NSView
, создавая представление на основе слоя и затем пытаясь напрямую манипулировать слоем.
aLayer = [CALayer layer];
[theView setWantsLayer:YES];
[theView setLayer:aLayer];
Когда вы говорите представлению использоватьСлой перед вызовом setLayer:
вид становится «слоистым» - он просто использует слой в качестве буфера, и все рисование, которое вы хотите сделать, должно выполняться обычными drawRect:
и связанными методами.Вам не разрешено непосредственно касаться слоя.Если вы измените порядок этих вызовов:
[theView setLayer:aLayer];
[theView setWantsLayer:YES];
Теперь у вас есть представление «Слой-хостинг», что означает, что представление просто обеспечивает пространство на экране для слоя, в который нужно рисовать.В этом случае вы рисуете прямо в слой.Поскольку содержимое слоя становится содержимым представления, вы не можете добавлять подпредставления или использовать механизмы рисования представления.
Это упоминается в документации -[NSView setWantsLayer:]
;Я также нашел старую ветку какао-разработчика , которая довольно хорошо это объясняет.
Я не уверен, что это решит вашу проблему, но, насколько я вижу, вы делаете все остальное правильно, например, устанавливаете режим заполнения и обновляете значение после завершения анимации.