UIProgressView и пользовательские изображения для отслеживания и прогресса (свойства iOS 5) - PullRequest
30 голосов
/ 02 ноября 2011

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

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

Эти новые свойства позволяют настраивать " progress " и " track * 1012".* "image, чтобы вы могли создавать необычные индикаторы выполнения без необходимости свернуть свои собственные.

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

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

Progress Example

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

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

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

The Progress Image progressImage.png

The Tracking Image trackImage.png

1 Ответ

109 голосов
/ 02 ноября 2011

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

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

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

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

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

0123456789

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

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, и вы получите что-то, что выглядит правильно:

Correct progressView

tl; dr:

Размер ваших изображений должен быть изменен.

...