Fizyka debugowania to rzecz. Prawdopodobnie nie jest to coś, o czym użytkownicy systemu iOS mają tendencję do myślenia, ponieważ zwykle robią bardzo proste rzeczy dzięki UIKit Dynamics. To wstyd, ponieważ jest to jeden z najlepszych aspektów ostatnich wydań systemu iOS i oferuje naprawdę zabawny sposób na zwiększenie satysfakcji użytkowników.
Więc ... jak debugować fizykę?
Jednym ze sposobów jest wyobrażenie sobie, co się dzieje, a następnie skorelowanie tego z tym, co się dzieje, i znalezienie dysonansu między wyobrażeniem a rzeczywistością, a następnie rozwiązanie problemu poprzez połączenie procesów eliminacji, psychicznego lub rzeczywistego procesu & błąd i odliczenie, dopóki problem nie zostanie ustalony i rozwiązany.
Innym jest wizualne przedstawienie wszystkiego, co zostało stworzone i współdziałające, przedstawiające wystarczającą informację zwrotną, aby szybciej określić charakter i zakres elementów, ich związki i incydenty/zdarzenia oraz rozwiązać problemy z dosłownym wzrokiem.
W tym celu stworzono różne debuggery wizualne i symulatory fizyki od ich wprowadzenia.
Niestety iOS nie ma takiego edytora ekranowego lub "edytora scen" dla UIKit Dynamics, a to, co jest dostępne dla tego rodzaju debugowania wizualnego w Sprite Kit i Scene Kit, jest w najlepszym wypadku szczątkowe.
Jednak istnieją CALayery, które są obecne we wszystkich widokach UIKit, do których można ręcznie utworzyć i narysować CAShapeLayers, aby dokładnie odwzorować wszystkie fizyczne elementy, ich granice i ich kotwice oraz relacje.
CAShapeLayers są "kontenerem" dla CGPaths i mogą mieć różne kolory dla konturu i wypełnienia oraz więcej niż jeden element CGPath w ramach pojedynczego obiektu CAShapeLayer.
I zacytować wielkiego Roba.
„Jeśli dodać CAShapeLayer jako warstwa do widzenia, nie masz do realizacji jakiegokolwiek kodu rysunkowego samemu wystarczy dodać CAShapeLayer i Możesz nawet później zmienić ścieżkę, a następnie automatycznie przerysuje ją dla ciebie .. CAShapeLayer wyciąga cię z chwastów pisania własnych procedur drawRect lub drawLayer. "
Jeśli masz ogromną liczbę elementów współdziałających i chcesz je debugowania, problemy z wydajnością CAShapeLayer za mogłyby wchodzić w grę, w którym momencie można użyć shouldRasterize przekonwertować każdy na bitmapę i uzyskać znaczną poprawę wydajności podczas trafiając w granice stworzone przez "dynamiczne" możliwości CAShapeLayers.
Co więcej, do przedstawiania elementów, takich jak wiązania i połączenia, istnieje prosty proces tworzenia przerywanych linii na elementach CAShapeLayers, po prostu ustawiając właściwości. Oto podstawowe informacje o ustawianiu właściwości CAShapeLayer i sposobie użycia tablicy do utworzenia konturu kreskowanego 5-5-5 z obrysem bloku o szerokości 3, bez wypełnienia.
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
[shapeLayer setBounds:self.bounds];
[shapeLayer setPosition:self.center];
[shapeLayer setFillColor:[[UIColor clearColor] CGColor]];
[shapeLayer setStrokeColor:[[UIColor blackColor] CGColor]];
[shapeLayer setLineWidth:3.0f];
[shapeLayer setLineJoin:kCALineJoinRound];
[shapeLayer setLineDashPattern:
[NSArray arrayWithObjects:[NSNumber numberWithInt:10],
[NSNumber numberWithInt:5],nil]];
Nie jest ekspertem od rysowania, ale dokumentacja sugeruje, że ścieżka powinna być wielokątem.Twój kod dodaje łuk, ale nie zamyka ścieżki. Być może powinieneś wywołać '[maskPath closePath]', aby stworzyć zamkniętą ścieżkę, która może zrobić różnicę? –
Zamyka się automatycznie – WMios
Aby wypełnić "drawRect", tak będzie. Czy jesteś pewien, że twoja 'collisionBoundingPath'? Gdzie jest napisane w dokumentach, że zamyka ścieżkę? –