Tôi có một CGRect
; tôi có thể chuyển tọa độ của mình thành hệ tọa độ người dùng, tức là góc dưới cùng bên trái lên trên đầu thay vì góc trên cùng bên trái xuống dưới cùng. Có phương pháp nào được xác định trước cho điều này hay tôi cần tính toán theo cách thủ công? Cảm ơn trước.Thay đổi giá trị CGrect cho hệ tọa độ người dùng
Trả lời
Để chuyển đổi hình chữ nhật từ hệ tọa độ có nguồn gốc ở dưới cùng bên trái (hãy gọi nó là hệ thống tọa độ truyền thống để đặt tên) cho hệ thống có nguồn gốc ở trên cùng bên trái (hệ thống tọa độ iPhone) cần phải biết kích thước của chế độ xem trong đó CGRect
là vì khung nhìn là tham chiếu cho hình chữ nhật.
Ví dụ: giả sử bạn có chế độ xem có kích thước 200 x 300 và CGRect
bạn có là CGRectMake(10, 20, 30, 40)
. Kích thước của CGRect
sẽ vẫn giữ nguyên. Tất cả những gì sẽ thay đổi là nguồn gốc - thực tế, chỉ có tọa độ y sẽ thay đổi chứ không phải tọa độ x, bởi vì các hệ thống tọa độ truyền thống và iPhone đều bắt đầu ở bên trái (một ở phía dưới bên trái; cái kia ở trên cùng bên trái).
Vì vậy, chúng tôi sẽ có một cái gì đó như 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;
}
Hình chữ nhật mới, được đo từ hệ thống tọa độ iPhone (trên cùng bên trái), sẽ là: CGRectMake(10, 300 - 20 - 40, 30, 40) = CGRectMake(10, 240, 30, 40)
.
Hy vọng rằng hình ảnh này làm cho nó rõ ràng hơn
+1 Cảm ơn bạn rất nhiều vì câu trả lời của bạn thực sự tốt ... – ajay
Câu trả lời phụ thuộc vào việc bạn sử dụng mà chuyển đổi CGRect. Bạn định làm gì với hình chữ nhật được chuyển đổi? – Anurag
tôi có một giá trị hình chữ nhật dòng trong hệ tọa độ mặc định (người dùng) bây giờ tôi muốn tọa độ trong hệ thống tọa độ sử dụng iphone. – ajay
Vì vậy, bạn có một hình chữ nhật trong một hệ tọa độ nơi nguồn gốc ở phía dưới bên trái, và bạn muốn chuyển đổi nó sang hệ tọa độ iOS? Bạn có thể đăng một ví dụ về hình chữ nhật mà bạn có trong hệ tọa độ mặc định không? – Anurag