UIProgressView и настраиваемые изображения отслеживания и прогресса (свойства iOS 5)

Я экспериментирую с некоторыми новыми свойствами в iOS 5, касающимися UIProgressView. Они есть:

@property(nonatomic, retain) UIImage *progressImage;
@property(nonatomic, retain) UIImage *trackImage;

Эти новые свойства позволяют настраивать изображения «прогресс» и «отслеживать», чтобы вы могли создавать причудливые индикаторы выполнения без необходимости создавать свои собственные.

Однако я не могу понять, как Apple «растягивает» изображения прогресса, потому что документация немного ненадежна / ИЛИ существует какой-то стандарт, о котором я не знаю. Несмотря на это, я спрашиваю, может ли кто-нибудь помочь мне понять, как добиться надлежащего прогресса и отслеживания изображений.

Я получаю такие результаты, когда загружаю свои собственные изображения, независимо от того, какие размеры я пытаюсь:

Пример прогресса

Мои измерения следующие:

  • Длина UIProgressView: 226 единиц
  • trackingImage.png: 10px
  • ProgressImage.png: 7px

Наконец, вот мои пользовательские изображения:

Изображение прогрессаprogressImage.png

Изображение для отслеживанияtrackImage.png


person Sean    schedule 02.11.2011    source источник


Ответы (1)


Вот что происходит:

Изображения, которые вы предоставляете UIProgressView, в основном вставляются в UIImageViews, а UIImageView растягивает изображение, чтобы заполнить пространство.

Если вы просто сделаете:

[progressView setTrackImage:[UIImage imageNamed:@"track.png"]];

Тогда вы получите странные результаты, потому что он пытается растянуть изображение шириной 10 пикселей, чтобы заполнить (например) представление изображения шириной 100 пикселей. Это означает (примерно), что каждый пиксель изображения будет повторяться 10 раз. Итак, если бы пиксели на нашем изображении были:

0123456789

Затем, помещая это изображение прямо в представление изображения шириной 100 пикселей, оно будет растягиваться примерно так:

000000000011111111112222222222333333333344444444445555555555...

Это то, что происходит с вами.

Вот что вы на самом деле хотите:

01234567812345678123456781234567812345678...123456789

Другими словами, вы хотите, чтобы у изображения был левый край в 1 точку, который никогда не растягивался, центр был мозаичным, а правый край в 1 точку также никогда не растягивался. Для этого вам нужно изменить размер изображения:

UIImage *track = [[UIImage imageNamed:@"track"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 1, 0, 1)];
[progressView setTrackImage:track];

Если вы хотите, чтобы это также располагалось соответствующим образом по вертикали, то отступы краев должны быть {1, 1, 1, 1} (при условии, что вам нужна граница в 1 точку).

Сделайте то же самое с progressImage, и вы получите что-то, что выглядит правильно:

Правильный вид прогресса

tl;dr:

Ваши изображения должны иметь изменяемый размер.

person Dave DeLong    schedule 02.11.2011
comment
Судя по приборам, это утечка. Я использую дугу. У кого-нибудь еще такая же проблема? Похоже, это может быть ошибка UIProgressView. - person rob; 09.02.2012
comment
по какой-то причине это только делает изображение дорожки изменяемым, а не фактическое изображение прогресса, но я настроен одинаково. - person Seany242; 24.05.2012
comment
@ Seany242 Seany242 да, вам также нужно сделать progressImage изображение с изменяемым размером. - person Dave DeLong; 24.05.2012
comment
это одно и то же изображение, просто разные цвета. Я дважды проверил и заменил переменные setTrackImage: и setProgressImage: (загрузить и отследить, оба uiimages настроены одинаково из одного и того же изображения), и в обоих случаях изображение прогресса не работало, но изображение отслеживания работало. ...? - person Seany242; 24.05.2012
comment
@ Seany242 звучит как отличный повод для нового вопроса - person Dave DeLong; 24.05.2012
comment
хорошая идея. новый вопрос здесь: - person Seany242; 25.05.2012
comment
И если вы хотите использовать изображение дорожки с определенным размером. Не изменяемый размер? Как я могу установить синюю линию прогресса по умолчанию? - person Camus; 21.09.2012
comment
Это потрясающее объяснение масштабирования пикселей. 10/10 - person Alexander Molloy; 11.02.2017