2011-02-04 6 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! 
    } 
}