आवेदन करते समय मुझे इस सवाल का जवाब खोजने के लिए नहीं हैरान था के बाद UIView के आकार जाओ, शायद बहुत सरल कुछ मैं किसी भी तरह की अनदेखी है:CGAffineTransform
एक UIView के वास्तविक आकार पाने के लिए कैसे के बाद मैं करने के लिए एक CGAffineTransform लागू यह?
उदाहरण के लिए।
मेरे यूआईवीव का आकार 300 x 200 है, मैं एक स्केलिंग ट्रांसफॉर्म लागू करता हूं, चलो 2 कारक क्षैतिज और ऊर्ध्वाधर दोनों कहते हैं, इसलिए UIView अब स्क्रीन पर 600 x 400 लेता है, लेकिन यह सीमा है और इसकी परत की सीमाएं अभी भी आकार लौट रही हैं 300 x 200 का ... मुझे UIView का वास्तविक आकार कहां मिल सकता है?
ps। उल्लेख करना भूल गया कि मैं uiview को घुमाने के लिए भी चाहता हूं। अगर मैं केवल स्केलिंग CGSizeApplyAffineTransform को बहुत अच्छा काम करता हूं, लेकिन जब रोटेशन भी होता है, तो यह ठीक से काम नहीं करता है।
संपादित करें: drawnonward मुझे सही दिशा में इशारा किया, मैं सिर्फ एक बिट कोड परिष्कृत संकलित करने के लिए और यहाँ यह है:
UIView* view = (your view being transformed);
CGAffineTransform trans = (view.transform or create a new transformation);
CGRect rect = [view bounds];
CGMutablePathRef path = CGPathCreateMutable();
rect.origin = CGPointZero;
CGPathAddRect(path , &trans , rect);
rect = CGPathGetBoundingBox(path);
CGPathRelease(path);
अब rect.size शामिल परिवर्तन के साथ देखने का आयाम लागू किया
यहाँ सेब डॉक्स से "फ्रेम" के बारे में दस्तावेज़ है: चेतावनी: पहचान है, तो संपत्ति को बदलने नहीं बदलना, इस संपत्ति के मूल्य अपरिभाषित है और इसलिए चाहिए अनदेखा किया जाए। इसलिए, रूपांतरण लागू होने पर फ्रेम प्रश्न से बाहर है। और "सीमा" रिटर्न हमेशा मूल आकार –
दरअसल! Argh, इस समारोह पुस्तकालयों कि मैं हमेशा के बारे में भूल जाते हैं - CGPathGetBoundingBox चाल थी। मैं काम कर कोड के साथ प्रश्न संपादित, बहुत बहुत शुक्रिया आदमी –
भी ध्यान रखें कि केंद्र संपत्ति भी गैर पहचान बदल देती है के साथ, काम करने के लिए माना जाता है। – Olie