Pracowałem nad aplikacją Cocoa Touch i próbowałem poradzić sobie z dotknięciami, określając, która podwarsza warstwy widoku została dotknięta. Kod mojego kontrolera wyglądał następująco:Dlaczego do testowania trafień należy użyć programu presentationLayer firmy CALayer?
CALayer *hitLayer = [self.view.layer hitTest:point];
To nie działało. To zadziała, jeśli wystukałbym dna podwarstw, ale nie na szczytach. Po godzinie wyrywanie włosów i Googling, ale w końcu zorientowali się, że to działa, jeśli ktoś używa warstwy prezentacji, aby wykonać badanie trafienie zamiast warstwy samego:
CALayer *hitLayer = [self.view.layer.presentationLayer hitTest:point];
Tak, mam rozwiązać mój problem , ale moje pytanie brzmi: dlaczego?
Przeczytałem przewodnik po Core Animation i rozumiem, że drzewo prezentacji i drzewo renderowania mogą się różnić od drzewa modelu obiektowego. Ale nie rozumiem, dlaczego drzewo prezentacji miałoby (podobno) inne zachowanie podczas testowania trafień. Czy drzewo prezentacji i model obiektowy nie miałyby takich samych ramek, granic, itp.?
Jaka jest klasa self.view: UIView lub CALayer? –
self.view jest UIView. Poprawiłem powyższy kod, aby użyć "self.view.layer", tak jak powinno być. –