2012-02-23 10 views
5

Próbuję zrozumieć układ współrzędnych kwarcu 2d, obecnie czytam przewodnik referencyjny Apple i starą książkę "Grafika kwarcowa 2d dla mac os x programisty".Nie można zrozumieć transformacji układu współrzędnych grafiki iOS, potrzebuję pomocy

Rozumiem koncepcję przestrzeni użytkownika i przestrzeni urządzenia, w której przestrzeń urządzenia może mieć inny domyślny układ współrzędnych, a współrzędne przestrzeni urządzenia nie mogą być modyfikowane, a my mapujemy przestrzeń użytkownika poprzez modyfikację systemu współrzędnych do przestrzeni urządzenia, aby osiągnąć pożądany rezultat.


  • Pierwsza część problemu

Quartz grafiki 2D dla Mac Book OS X deweloper mówi:

Po transformacji układu współrzędnych, musisz mieć inny układ współrzędnych , aby go porównać. Transformacja zapewnia relatywne mapowanie z jednego układu współrzędnych na drugi. Po uzyskaniu w przekształconym układzie współrzędnych transformacja odwzorowuje grafikę z powrotem na pierwszy układ współrzędnych (). Wygląd tej grafiki w ustalonym układzie współrzędnych zależy od transformacji .

Nie rozumiem tego pogrubienia.

I

Quartz 2D programming guide mówi:

Quartz osiąga niezależność urządzenie z osobna koordynować System-user space-przyporządkowując je do układu współrzędnych wyjścia urządzenie-urządzenie przestrzeń wykorzystujących prąd macierz transformacji lub CTM. Macierz jest konstrukcją matematyczną używaną do wydajnego opisu zbioru powiązanych równań. Bieżąca macierz przekształceń jest konkretnym rodzajem macierzy zwanej transformacją afiniczną, która mapuje punktów z jednej przestrzeni współrzędnych na drugą, stosując obrót, obracanie i operacje skalowania (obliczenia, które się przesuwają, obracają, i zmieniają rozmiar układu współrzędnych) .

Obecna macierz przekształceń ma cel drugorzędny: umożliwia przekształcenie sposobu rysowania obiektów przez . Na przykład, aby narysować pole obrócone o 45 stopni, należy obrócić układ współrzędnych strony (WZT) przed rysowaniem ramki. Kwarcowy ciągnie do urządzenia wyjściowego przy użyciu obróconego układu współrzędnych.

Zamieszanie jest to, że „Quartz zwraca do urządzenia wyjściowego za pomocą obróconego układu współrzędnych.”, Jeśli chcę, aby narysować jeden obiekt (zdjęcie itp) obracane i innych z zewnątrz obrotów potem co się stało? Mamy obrócone wszystkie współrzędne, a wszystko, co zostanie narysowane, jest obracane?

Próbuję różnych eksperymentów, ale nie mogę tego objąć, tworzę obraz, rysując dwie linie, replikując dolny lewy układ współrzędnych w programie photoshop, a następnie dodając do mojego projektu, aby zobaczyć, jak zachowują się współrzędne, dzwoniąc pod numer CGContextRotateCTM(myContext, 45);. metoda drawrect, ale nie zrobiła nic, co obraz, który zawarłem w pliku xib za pomocą budowniczego interfejsu umieszczającego obraz wewnątrz uiimage.

ten kod jest z kwarcowego 2D przewodnika programowego

CGContextRef myContext = UIGraphicsGetCurrentContext(); 
CGRect contextRect = self.bounds; 

CGContextTranslateCTM(myContext, 0, contextRect.size.height); 
CGContextRotateCTM(myContext, 45); //my modification 
CGContextScaleCTM(myContext, 1, -1); 

float w, h; 
w = contextRect.size.width; 
h = contextRect.size.height; 

CGAffineTransform myTextTransform; 
CGContextSelectFont (myContext, "Helvetica-Bold", h/10, kCGEncodingMacRoman); 
CGContextSetCharacterSpacing (myContext, 10); 
CGContextSetTextDrawingMode (myContext, kCGTextFillStroke); 

CGContextSetRGBFillColor (myContext, 0, 1, 0, .5); 
CGContextSetRGBStrokeColor (myContext, 0, 0, 1, 1); 
myTextTransform = CGAffineTransformMakeRotation(0); 
CGContextSetTextMatrix (myContext, myTextTransform); 
CGContextShowTextAtPoint (myContext, 0, 50, "Quartz 2D", 9); 

ale ten kod jest modyfikowanie tekstu rysowane na ekranie obraz nie dodałem?


  • druga część problemu

Jest to również z Quartz 2D przewodnika programowego:

... zastosowanie transformacji, który tłumaczy pochodzenie do górny lewy róg kontekstu PDF i skaluje współrzędną y o -1.

Użycie przekształcenia skalowania w celu zanegowania współrzędnej y zmienia niektóre konwencje w rysunku kwarcu. Na przykład, jeśli wywołasz CGContextDrawImage, aby narysować obraz w kontekście, obraz jest zmodyfikowany przez transformację, gdy jest wciągany do miejsca docelowego. ...

Już robię to -1 rzeczy, ale nie ma wpływu na obraz i to -1 rzeczy nadal nie jest dla mnie jasne.

Przeczytałem ten dokument kilka razy, próbowałem wyszukiwania w google, ale bez użytecznych samouczek, a także nie najnowsze książki są dostępne tylko książki napisane w 2004, 2005, 2006. Czy ktoś może pomóc w tej sprawie lub może odnieść mi przydatne zasoby do naucz się tego dogłębnie.

Desperacko czekając na odpowiedzi, naprawdę potrzebujesz pomocy. Dziękuję.

Odpowiedz

0

Czy używasz podklasy UIImageView i przesłonięcia funkcji drawRect? Nie jest to obsługiwane (patrz dokumentacja) i prawdopodobnie dlatego zmiany nie mają wpływu na twój obraz.

Jeśli chcesz zrobić wiele przemian i zamówienie kodem rysunku następnie należy używać podklasy UIView i rysunek obraz ręcznie przy użyciu CGContextDrawImage()

Wszelkie transformacje są stosowane do operacji odbywa się po transformacji rysunek. Zobaczysz próbki kodu w dokumentach, w których zapisany jest stan grafiki, zastosowana transformacja, wykonane kilka rysunków, a następnie kontekst zostanie przywrócony. W ten sposób rysujesz niektóre elementy obrócone, a niektóre nie.

Mam nadzieję, że druga część pytania stanie się jasna, gdy rysujesz obraz za pomocą kodu CG, a nie poprzez widok obrazu.

+0

używam UIView podklasy iw jego drawRect Piszę cały kod. po prostu chcę zobaczyć widoczne zachowanie współrzędnych i transformacji, dlatego dodaję obraz narysowany dwiema liniami przedstawiającymi dolne lewe współrzędne, które są domyślnie kwarcowe 2d. W pliku Xib umieszczam ten obraz w uiimage. Modyfikuję ten widok nie uiimage z podklasą, w której robię cały kod, więc cały widok jest podklasą klasy draw2d którą stworzyłem. dzięki za odpowiedź. – Pamy

+0

Co masz na myśli przez "w pliku xib umieszczam obraz w UIImage"? Czytam to pytanie podczas tworzenia uiimageview, ponieważ nie można utworzyć UIImage w pliku xib. Nie rozumiem, jak to skonfigurowałeś, czy możesz umieścić kilka zrzutów ekranu w swoim pytaniu? – jrturton

+0

i draged and droped uiimageview i że ustawiam obraz współrzędnych i nic więcej nie zrobiłem, po zrobieniu tego i zapisaniu kodu transformacji wszystko, czego oczekiwałem, że obraz również się obróci i będę wyraźnie widzieć, gdzie współrzędne są teraz, więc mogę łatwo zrozumieć kod. – Pamy

Powiązane problemy