2013-04-16 7 views
7

के बीच सीजीआरईटी को सामान्यीकृत करना CGRect मानों को सामान्य करने का सबसे अच्छा तरीका क्या है ताकि वे 0 और 1 (इकाई समन्वय प्रणाली) के बीच हों?0 और 1

+0

@CodaFi यह CGRectIntegral कोई लेना देना नहीं है। यह विभिन्न कैलियर विधियों के साथ काम करने के लिए "इकाई" समन्वय प्रणाली में परिवर्तित होने के बारे में है। –

+0

किसी भी समीक्षक या मोड के लिए, दोनों करीबी वोट पूरी तरह से अमान्य हैं। –

+0

वे हैं। मैंने सवाल बिल्कुल नहीं पढ़ा। हालांकि, मैं दूसरों के बारे में निश्चित नहीं हूं। – CodaFi

उत्तर

14

ऐसा करने का एक बहुत संक्षिप्त तरीके से होगा:

CGAffineTransform t = CGAffineTransformMakeScale(1.0/parentRect.size.width, 1.0/parentRect.size.height); 
CGRect unitRect = CGRectApplyAffineTransform(rect, t); 
+0

यह उत्तर वास्तव में समस्या को अच्छी तरह से काम करने लग रहा था। – ORStudios

9

यह चाल करना चाहिए। आपको केवल मूल दृश्य या परत की चौड़ाई/ऊंचाई से सबकुछ विभाजित करने की आवश्यकता है।

CGFloat parentWidth = parentView.bounds.size.width; 
CGFloat parentHeight = parentView.bounds.size.height; 

CGRect rectToConvert = ...; 

rectToConvert.origin.x /= parentWidth; 
rectToConvert.origin.y /= parentHeight; 
rectToConvert.size.width /= parentWidth; 
rectToConvert.size.height /= parentHeight; 

हम कहते हैं कि इस तरह के रीक्ट और अंक "यूनिट समन्वय प्रणाली" में हैं। आप इसके बारे में Core Animation Programming Guide में और अधिक पढ़ सकते हैं।

+0

आप मूल निर्देशांक को आकार से क्यों विभाजित कर रहे हैं? –

+0

@ सेमस कैम्पबेल शायद क्योंकि इसकी आवश्यकता है? –

+0

ऐसा करने से 0 से 1 के बीच 'CGFloat' वापस आ जाएगा - जो उपयोगकर्ता ने पूछा है .. – rog

0

कैसे इस बारे में: इस बनाता है

CGRect rectToConvert; 
NSAffineTransform *n = [NSAffineTransform transform]; 
[n scaleXBy:rectToConvert.size.width 
     yBy:rectToConvert.size.height]; 
[n invert]; 

CGRect normalizedRect; 
normalizedRect.origin = [n transformPoint:rectToConvert.origin]; 
normalizedRect.size = [n transformSize: rectToConvert.size]; 

CGPoint anyPointINeedToConvert; 
CGPoint convertedPoint = [n transformPoint:anyPointINeedToConvert]; 

मैं सोचता यह थोड़ा स्पष्ट क्या हो रहा है और आप एक स्पष्ट रास्ते में अनुवाद की देखभाल, तो आप उन्हें क्या करना है, तो सुविधा देता है है।

संबंधित मुद्दे