2013-05-16 3 views
1

아주 잘 작동하지 :사용자 정의 UISlider 이미지는이 코드

UISlider *slider = [[UISlider alloc]initWithFrame:sliderFrame]; 
    [slider setThumbImage:[UIImage imageNamed:@"sliderThumb"] forState:UIControlStateNormal]; 
    UIImage *sliderLeftTrackImage = [[UIImage imageNamed: @"sliderMin"] stretchableImageWithLeftCapWidth: 9 topCapHeight: 0]; 
    UIImage *sliderRightTrackImage = [[UIImage imageNamed: @"sliderMax"] stretchableImageWithLeftCapWidth: 9 topCapHeight: 0]; 
    [slider setMinimumTrackImage: sliderLeftTrackImage forState: UIControlStateNormal]; 
    [slider setMaximumTrackImage: sliderRightTrackImage forState: UIControlStateNormal]; 

sliderMin 및 sliderMax 이미지가 모두 210x34 (슬라이더 프레임과 동일한 크기)입니다. sliderMin은 파란색이고 sliderMax는 빨간색입니다. 슬라이더가 왼쪽으로 끝나면 빨간 막대가 올바르게 보입니다. 그러나 엄지 손가락을 오른쪽으로 몇 픽셀 이동 한 후에는 전체 막대가 파란색으로 바뀝니다 (sliderMin 이미지). 분명히 슬라이더의 왼쪽에 파란색 막대 만보아야합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

3

먼저 사용 중지 된 API를 사용하고 있습니다. iOS 4.3 (이유는?)을 지원해야하는 경우가 아니면 stretchableImageWithLeftCapWidth:topCapHeight: 대신 resizableImageWithCapInsets:resizingMode:을 사용해야합니다.

UIImage *sliderLeftTrackImage = [[UIImage imageNamed: @"sliderMin"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 9, 0, 9)]; 
UIImage *sliderRightTrackImage = [[UIImage imageNamed: @"sliderMax"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 9, 0, 9)]; 

이제 이미지 크기가 잘못되었습니다. 크기를 조정할 수있는 이미지를 만들 때 이미지에는 필요한 고정 된 끝이 있어야하고 중간에 1 픽셀 씩 나머지 부분을 채우기 위해 바둑판 모양으로 배열되어야합니다. 따라서 슬라이더 이미지는 너비가 19 픽셀 (210이 아님) 여야합니다. 망막 버전은 38 픽셀 너비가 있어야합니다 (각 끝에 18 개는 가운데에 2 픽셀로 고정되어 바둑판 식으로 배열됩니다).

+0

사실 내 경우에 이렇게하면 이미지 크기를 사용할 수 있습니다 : resizableImageWithCapInsets : UIEdgeInsetsZero. – soleil

+0

그러면 크기를 조정할 수있는 이미지가 없습니다. 크기를 조정할 수있는 이미지의 전체적인 점은 중간에 끝과 아주 작은 부분 만 제공한다는 것입니다. 인세 트없이 전체 크기의 이미지를 만들면 무의미 해집니다. 그런 다음 슬라이더가 트랙 이미지의 크기를 조절합니다. 이것은 바람직하지 않은 결과를 초래할 수 있습니다. – rmaddy

+0

우수 답변! –