2011-06-08 8 views
40

मुझे मनमाने ढंग से लम्बाई वाले मनमानी पाठ की टेक्स्ट ऊंचाई की गणना करने के लिए एक CGSize बनाने की आवश्यकता है। UIKit में यह अच्छी विधि है- आकार WithFont: बाधित ToSize: और मेरा पाठ केवल चौड़ाई में बाध्य है, लेकिन ऊंचाई में नहीं है।अधिकतम CGFloat मान के लिए कोई स्थिर है?

इसके लिए, मुझे ऊंचाई के लिए अधिकतम संभव CGFloat सेट करने की आवश्यकता है।

क्या "CGFloatMax" की तरह स्थिर है?

+0

@answers: everyone..considering upvoted वे 4 के भीतर हैं एक दूसरे के सेकंड हां। –

+0

शायद आपको यहां पोस्ट करने के बजाय इस तरह के प्रश्न के लिए दस्तावेज़ों की जांच करने के लिए कम समय लगेगा। –

+1

@ जोश कैसवेल: मुझे लगता है कि बहुत से लोग दस्तावेज मौजूद नहीं हैं (कम से कम कुछ हिस्सों) दस्तावेज मौजूद हैं। इस मामले में, UIKit CGFloat का उपयोग पूरी तरह से करता है, इसलिए प्रश्नकर्ता ने केवल UIKit दस्तावेज़ों में देखा होगा। @ मिखालो इवानोकोव, आपको कोर ग्राफिक्स (सीजी) दस्तावेज़ों की आवश्यकता है: http://developer.apple.com/library/ios/documentation/CoreGraphics/Reference/CoreGraphics_Framework/ ऐप्पल की ऑनलाइन प्रलेखन खोज भी उपयोगी है (जो मेरे पास है एक्सकोड के मुकाबले बेहतर पाया गया है, या इस उद्देश्य के लिए, Google): http://developer.apple.com/library/ios/search/?q=CGFloat+max –

उत्तर

37

CGGeometry परिभाषित करता है:

#define CGFLOAT_MAX FLT_MAX 
+0

टिप्पणी http://stackoverflow.com/a/26188012/378882 उत्तर के रूप में चिह्नित किया जाना चाहिए। – JastinBall

5

CGFloat सिर्फ float है ताकि आप <float.h> से सुरक्षित रूप से FLT_MAX का उपयोग कर सकें।

संपादित करें: जैसा कि अन्य ने अब इंगित किया है कि यह CGFLOAT_MAX जैसा आपके लिए पहले से परिभाषित किया गया है, इसलिए आपको FLT_MAX की बजाय स्थिरता के लिए इसका उपयोग करना चाहिए, भले ही वे 32 बिट प्लेटफ़ॉर्म पर समान हों।

+3

टाइप, सिस्टम के आधार पर प्रकार बदलता है। यह माना जाता है कि आईओएस अभी 32-बिट है, लेकिन किसी को टाइपिफ़ के अंतर्निहित प्रकार को नहीं मानना ​​चाहिए। –

+0

@ जोश: वास्तव में - धन्यवाद - मैंने इसे बाद में संपादित किया है –

+0

CGFloat हमेशा एक फ्लोट नहीं है- 64 बिट के लिए ओएस एक्स पर ऐप्स संकलित करते समय, CGFloat को डबल के रूप में परिभाषित किया जाता है। CGBase.h देखें, लाइन 100 के बारे में। – leecbaker

1

यह एक उत्तर से अधिक टिप्पणी है हालांकि मेरे पास वर्तमान में टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है।

मैं सिर्फ CGFLOAT_MAX उपयोग करने के साथ अनपेक्षित व्यवहार में आए: एक iPhone 5 एस (64 बिट) डिवाइस iOS 7.1.2 चल रहा है और Xcode 5.1.1 का उपयोग करने पर, निम्न कोड:

CGFloat numRot = floorf(CGFLOAT_MAX/360.0); 
NSLog(@"numRot = %.2f", numRot); 

आउटपुट:

numRot = inf 
जबकि

, इस कोड:

CGFloat numRot = floorf(FLT_MAX/360.0); 
NSLog(@"numRot = %.2f", numRot); 

सही ढंग से आउटपुट:

numRot: 945228740662580166143622731901435904.00 

मैं आदेश + CGFLOAT_MAX पर क्लिक किया और Xcode मुझे CoreGraphics पर उतर आए CGBase.h निम्नलिखित मैक्रो परिभाषा के साथ फाइल चौखटे:

# define CGFLOAT_MAX DBL_MAX 

मैं आदेश + CGFloat और Xcode पर क्लिक किया मुझे एक और करने के लिए ले लिया एक ही फाइल में लाइन:

typedef CGFLOAT_TYPE CGFloat; 

तब मैं कमान + CGFLOAT_TYPE पर क्लिक किया और इसे यहाँ #define लाइन के लिए कूद गया:

#if defined(__LP64__) && __LP64__ 
# define CGFLOAT_TYPE double 
... 

तो, किसी कारण से मेरे CGFloat चर को डबल होना चाहिए, हालांकि ऐसा लगता है कि यह एक फ्लोट होता है जब इसे डबल मान असाइन किया जाता है (यानी। CGFLOAT_MAX)। जहां तक ​​मैं this Apple documentation page बता सकता हूं कि एनएसएलओजी के साथ% f का उपयोग करना डबल प्रिंट करना चाहिए - अगर कोई गलत है तो कृपया मुझे सही करें।

यह कहने के लिए कि यदि FLT_MAX आपके मामले के लिए काम करता है, तो आप CGFLOAT_MAX के बजाय इसके लिए इसके साथ रहना चाहेंगे, खासकर यदि आप ऐसी लाइब्रेरी पर भरोसा कर रहे हैं जो विशेष रूप से डबल या CGFloat के बजाय फ़्लोट तर्क स्वीकार करता है।

143

स्विफ्ट 2 का उपयोग करने वालों के लिए, आप का उपयोग करना चाहिए:

CGFloat.max 

स्विफ्ट 3 का उपयोग करने वालों के लिए, आप का उपयोग करना चाहिए:

CGFloat.greatestFiniteMagnitude 

ध्यान दें कि CGFloat.max हटा दिया गया था जब स्विफ्ट 3 बाहर आया के रूप में, documentation में परिलक्षित होता है।

+0

सरल, साफ और ठंडा,) –

+4

स्विफ्ट 3 के रूप में नोट करें यह अब 'CGFloat.greatestFiniteMagnitude' है: "सी मैक्रोज़ FLT_MAX, डीबीएल_एमएक्स, आदि के अनुरूप है। उन मैक्रोज़ का नामकरण थोड़ा भ्रामक है, क्योंकि अनंतता इससे अधिक है मूल्य। " – jemmons

+0

महान, बहुत स्पष्ट! –

1
CGSize size = CGSizeMake(CGFLOAT_MIN, CGFLOAT_MAX); 

चौड़ाई = 0,0000000000000000000000000000000000000117549435, ऊंचाई = 3.40282347E + 38

0

स्विफ्ट 3.0 में, तुम भी CGFloat (FLT_MAX) का उपयोग कर सकते हैं, तो आप zindex, जहां CGFloat जैसे अन्य मामलों में इसका उपयोग करना चाहते खासकर अगर। महानतम अनंतांक सीमा से बाहर होगा।

3

मैं न्यूनतम CGFloat मूल्य का एक स्विफ्ट संस्करण के लिए देख रहा था और यहाँ अगर आप भी उतरा,;) तो यहाँ जवाब है:

CGFloat.leastNormalMagnitude 
संबंधित मुद्दे