Подтвердить что ты не робот

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

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

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

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

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

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

Progress Example

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

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

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

The Progress ImageprogressImage.png

The Tracking ImagetrackImage.png

4b9b3361

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

Correct progressView

ТЛ; др:

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