2011-02-04 17 views
8

मैं UISegmentedControl में उपयोग की गई छवियों को कैसे स्केल कर सकता हूं? मैं प्रोग्राम किए गए नियंत्रण को प्रोग्रामेटिक रूप से बना रहा हूं:UISegmentedControl छवि स्केलिंग

UISegmentedControl * segmentButton; 
segmentButton = [UISegmentedControl segmentedControlWithItems: 
       [NSArray arrayWithObjects: 
        [UIImage imageNamed:@"option_one.png"], 
        [UIImage imageNamed:@"option_two.png"], 
        nil]]; 
segmentButton.contentMode = UIViewContentModeScaleToFill; 
segmentButton.frame = CGRectMake(10, 10, 200, 32); 
[view addSubview:segmentButton]; 

परिणाम मुझे उम्मीद नहीं है। मूल .png छवियां लगभग 100 पिक्सेल ऊंची हैं, और वे सेगमेंट किए गए नियंत्रण की 32-पिक्सेल ऊंचाई फिट करने के लिए नीचे स्केल किए गए हैं। एक सेगमेंट में बंटे नियंत्रण में यह परिणाम भारी छवियों यह ओवरलैपिंग के साथ तैयार किया जा रहा:

screen shot

मैं नियंत्रण उन छवियों नीचे पैमाने पर करने के लिए कैसे बता सकते हैं?

उत्तर

19

आपको कभी भी एक छोटी सी तस्वीर प्रदर्शित करने के लिए "बड़ी" छवि का उपयोग नहीं करना चाहिए। पूर्ण छवि को स्मृति में लोड किया जाएगा, और केवल 10% पिक्सल प्रदर्शित किए जाएंगे, इसलिए आप कुछ भी नहीं के लिए बहुत मेमोरी का उपयोग करेंगे।

यदि आप वास्तव में इस संसाधन का उपयोग करना चाहते हैं तो आप क्या कर सकते हैं पहले कोड के साथ थंबनेल बनाते हैं, और इस नए जेनरेट किए गए थंबनेल का उपयोग करते हैं।

निम्न विधि एक नई छवि देता है जिसका उपयोग आप अपने UISegmentedControl में कर सकते हैं, और आप बड़े को छोड़ सकते हैं।

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize { 
    UIGraphicsBeginImageContext(newSize); 
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();  
    UIGraphicsEndImageContext(); 
    return newImage; 
} 
अपने कोड के साथ

:

UISegmentedControl * segmentButton; 
segmentButton = [UISegmentedControl segmentedControlWithItems: [NSArray arrayWithObjects: 
        [self imageWithImage:[UIImage imageNamed:@"option_one.png"] scaledToSize:CGSizeMake(32, 32)], 
        [self imageWithImage:[UIImage imageNamed:@"option_two.png"] scaledToSize:CGSizeMake(32, 32)], 
        nil]]; 
segmentButton.contentMode = UIViewContentModeScaleToFill; 
segmentButton.frame = CGRectMake(10, 10, 200, 32); 
[view addSubview:segmentButton]; 
+1

सहमत, अगर छवियों गतिशील हैं, उन्हें पैमाने अन्यथा आपके एप्लिकेशन संसाधनों में विभिन्न आकार प्रदान करते हैं। – petert

+0

समझ में आता है। धन्यवाद! –

+1

सेगमेंटबटन = [[[UISegmentedControl alloc] initWithItems: images] autorelease]; – neoneye

1

swift3 में,

extension UIImage { 
    func scaleImage(scaleToSize: CGSize) -> UIImage { 
     UIGraphicsBeginImageContext(scaleToSize) 

     self.draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: scaleToSize)) 
     let newImage = UIGraphicsGetImageFromCurrentImageContext() 

     UIGraphicsEndImageContext() 
     return newImage! 
    } 
} 
संबंधित मुद्दे