2011-02-04 21 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; 
} 

:swift3で

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

segmentButton = [[[UISegmentedControl alloc] initWithItems:images] autorelease]; – neoneye

1

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! 
    } 
} 
関連する問題