2011-04-10 13 views
5

मैं एक UIScrollView जो या तो अभिविन्यास में इस्तेमाल किया जा सकता और subviews के एक नंबर शामिल साथ काम कर रहा हूँ: मैं पूरी पुस्तक को देखने के एक स्क्रीन शॉट पर कब्जा करने की कोशिश कर रहा हूँकैप्चर UIScrollView बंद स्क्रीन सामग्री

// in viewDidLoad 

mainScrollView = (UIScrollView *)self.view; 

mainScrollView.contentSize = CGSizeMake(1024, 1432); 

इसके सभी सबव्यूज़ के साथ, जिसमें स्क्रीन पर वर्तमान में दिखाई नहीं दे रहा है। निम्नलिखित कैप्चर केवल क्या पकड़े जाने के समय में स्क्रीन पर दिखाई दे रहा है:

: एक ही रास्ता मैं ठीक हो सकता है कि मुझे सक्षम पूरे स्क्रॉल दृश्य कैप्चर करने के

// make screenshot 

UIGraphicsBeginImageContext(mainScrollView.bounds.size); 

[mainScrollView.layer renderInContext:UIGraphicsGetCurrentContext()]; 

UIImage *screenImg = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 



// save screenshot in docs dir 

NSData *pngData = UIImagePNGRepresentation(screenImg); 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

NSString *documentsDir = [paths objectAtIndex:0]; 

[pngData writeToFile:[documentsDir stringByAppendingPathComponent:@"screen1.png"] 

       options:NSDataWritingAtomic error:nil]; 

स्क्रीन शॉट लेने से पहले निम्नलिखित जोड़ना था

// capture off-screen content 

mainScrollView.frame = CGRectMake(0, 0, 1024, 1432); 

यह कैप्चर ठीक है और इसमें सभी सबव्यू शामिल हैं। समस्या यह है कि एक बार जब मैंने स्क्रीन शॉट बनाया है, तो मेरा स्क्रोल व्यू अप्रतिबंधित हो जाता है, इसलिए मैं अब स्क्रॉल नहीं कर सकता (या पोर्ट्रेट मोड में पैन किनारे पर)। अगर मैं डिवाइस को घुमाता हूं, तो समस्या स्वयं को सुधारने लगती है और मैं सामान्य रूप से स्क्रॉल और पैन कर सकता हूं। मुझे यकीन है कि मुझे स्क्रीन स्क्रॉल लेने के बाद सामान्य रूप से सीधे काम करने के लिए मेरे स्क्रॉल व्यू को प्राप्त करने के लिए कुछ बहुत आसान याद आ रही है। किसी भी सुझाव की बहुत सराहना की!

+0

मुझे यह प्रासंगिक होना चाहिए, यह एक आईपैड ऐप है, मुझे जोड़ना चाहिए। – beev

उत्तर

3

समस्या यह है कि आप फ्रेम आकार को सामग्री आकार के बराबर सेट कर रहे हैं। जब फ्रेम आकार सामग्री आकार के बराबर या अधिक होता है तो आप स्क्रॉल नहीं कर सकते हैं। आपको स्क्रीन शॉट समाप्त होने पर पहचानने का तरीका ढूंढना होगा और फ्रेम आकार को पिछले आकार में बदलना होगा। तो:

CGRect oldFrame = mainScrollView.frame; 

// do your logic to screenshot 

mainScrollView.frame = oldFrame; 
+0

यह तय किया गया। बहुत बहुत धन्यवाद! – beev

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