Wyobraź sobie małe czerwone pudełko (instancja CALayer
) narysowane w lewym dolnym rogu jego warstwy nadrzędnej (która jest warstwą główną warstwy hostującej NSView
).Jak zachować CALayer w tej samej pozycji podczas zmiany rozmiaru rodzica NSView?
Po zmianie ramki widoku rodzica czerwone pole powinno pozostać w tej samej pozycji na ekranie. Robię to, dostosowując pozycję względem lewego dolnego rogu widoku rodzica.
Problem polega na tym, że w niektórych przypadkach dochodzi do migotania i widzę czerwoną ramkę, która jest rysowana w lewym dolnym rogu rozszerzonej ramki, zanim zostanie pokazana we właściwej pozycji.
Założę, że zawijanie ramki i zmiana pozycji w jeden CATransaction
spowodowałoby zmianę obu razem, ale to nie zawsze działa (doktorzy mówią, że za pomocą transakcji animacje rozpoczną się w tym samym czasie, ale wciąż wydaje się być czasem stanem wyścigowym).
Jak mogę dostosować ramkę rodzica NSView
, zachowując warstwę podrzędną w jej postrzeganej pozycji?
Przykład i kod:
Własne pomysły:
Ukryj warstwa czerwone pole, zaktualizuj pozycję, pokazać go ponownie
Użyj wiązania, aby powiązać je z prawym rogiem. Problem polega na tym, że to przesunięcie może również ulec zmianie i będę musiał zaktualizować ograniczenie, które może prowadzić do tego samego problemu z migotaniem.