2011-03-30 13 views
6

Mam CGRect; czy mogę przenieść jego współrzędne, aby znaleźć się w układzie współrzędnych użytkownika, tj. w lewym dolnym rogu do góry zamiast w lewym górnym rogu do dołu. Czy istnieje jakaś wcześniej zdefiniowana metoda lub czy muszę ją obliczać ręcznie? Z góry dziękuję.Zmiana C Prawidłowa wartość na układ współrzędnych użytkownika

+0

Odpowiedź zależy od użytkowania, które przekształcane CGRect. Co zamierzasz zrobić z przekształconym prostokątem? – Anurag

+0

Mam wartość prostokąta linii w domyślnym układzie współrzędnych (użytkownik) teraz chcę współrzędne w systemie współrzędnych użycia iphone. – ajay

+0

Masz zatem prostokąt w układzie współrzędnych, którego pochodzenie znajduje się w lewym dolnym rogu i chcesz przekonwertować go na układ współrzędnych systemu iOS? Czy możesz podać przykład prostokąta, który masz w domyślnym układzie współrzędnych? – Anurag

Odpowiedz

12

Aby przekonwertować prostokąt z układu współrzędnych, który ma swoje źródło w lewym dolnym rogu (nazwijmy go tradycyjnym układem współrzędnych, aby nadać mu nazwę), system, w którym początek znajduje się w lewym górnym rogu (układ współrzędnych telefonu iPhone), trzeba znać rozmiar widoku, w którym znajduje się CGRect, ponieważ widok jest odniesieniem do prostokąta.

Załóżmy na przykład, że masz widok o rozmiarze 200 x 300, a numer CGRect to CGRectMake(10, 20, 30, 40). Rozmiar modelu CGRect pozostanie niezmieniony. Wszystko, co się zmieni, to pochodzenie - w rzeczywistości zmieni się tylko współrzędna y, a nie współrzędna x, ponieważ zarówno tradycyjne, jak i układy współrzędnych iPhone'a zaczynają się po lewej stronie (jedna w lewym dolnym rogu, druga w lewym górnym rogu).

Tak więc będziemy mieli coś w rodzaju CGRectMake(10, y, 30, 40).

- (CGRect)rectangle:(CGRect)oldRect fromTraditionalToiPhoneCoordinatesWithReferenceViewOfSize:(CGSize)aSize 
    { 
     CGFloat oldY = oldRect.origin.y; // This is the old y measured from the bottom left. 
     CGFloat newY = aSize.height - oldY - oldRect.size.height; 

     CGRect newRect = oldRect; 
     newRect.origin.y = newY; 

     return newRect; 
    } 

Nowy prostokąt, mierzona od iPhone (lewy górny róg) układu współrzędnych, to: CGRectMake(10, 300 - 20 - 40, 30, 40) = CGRectMake(10, 240, 30, 40).

Mam nadzieję, że to sprawia, że ​​obraz jest wyraźniejszy Hopefully this image makes it clearer

+0

+1 Dziękuję bardzo za odpowiedź jest naprawdę dobra ... – ajay

Powiązane problemy