2009-09-15 10 views
6

पर फ़्लैटन यूआईवीव्स सबव्यूव्स मेरे पास एक UIView है जिसमें कई UIImageViews को सबव्यूव के रूप में देखा गया है। इनमें से प्रत्येक सबव्यू में अलग-अलग एफ़िन ट्रांसफॉर्म लागू होते हैं। मैं अपने UIView के स्क्रीन कैप्चर में कितना रकम लेना चाहता हूं, इसे यूआईएममेज, या कुछ अन्य छवि प्रतिनिधित्व के रूप में कैप्चर करना चाहता हूं।यूआईएममेज आईफोन 3.0

विधि मैं पहले से ही की कोशिश की है, के साथ एक CGContext परतों प्रतिपादन:

[view.layer renderInContext:UIGraphicsGetCurrentContext()]; 

स्थिति या मेरे subviews के अन्य परिवर्तनों affine की रक्षा नहीं करता है।

मैं वास्तव में सही दिशा में एक किक की सराहना करता हूं।

उत्तर

11

इस प्रयास करें:

UIGraphicsBeginImageContext(self.view.frame.size); 
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
+1

आप इसे जाना। मुझे self.view.size को self.view.frame.size में बदलना था और renderInContext का उपयोग करना था। मुझे यकीन नहीं है कि मुझे यह कैसे याद आया, मुझे लगता है कि ऐप्पल के दस्तावेज़ों का मुख्य वाक्यांश "परत के समन्वय स्थान में प्रस्तुतकर्ता" है। धन्यवाद! – SooDesuNe

+4

आईओएस 4 के साथ शुरुआत, आपको UIGraphicsBeginImageContextWithOptions (आकार, NO, 0.0) – steipete

+0

का उपयोग करना चाहिए, यदि आप इसे अपारदर्शी बनाना चाहते हैं तो इसके बजाय 'YES' का उपयोग करें। यदि आपको अल्फा की आवश्यकता नहीं है तो प्रदर्शन में सहायता करता है। –

0

यहाँ एक स्विफ्ट 2.x संस्करण है:

// This flattens <allViews> into single UIImage 
func flattenViews(allViews: [UIView]) -> UIImage? { 
    // Return nil if <allViews> empty 
    if (allViews.isEmpty) { 
     return nil 
    } 

    // If here, compose image out of views in <allViews> 
    // Create graphics context 
    UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, UIScreen.mainScreen().scale) 
    let context = UIGraphicsGetCurrentContext() 
    CGContextSetInterpolationQuality(context, CGInterpolationQuality.High) 

    // Draw each view into context 
    for curView in allViews { 
     curView.drawViewHierarchyInRect(curView.frame, afterScreenUpdates: false) 
    } 

    // Extract image & end context 
    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    // Return image 
    return image 
} 
संबंधित मुद्दे