Как настроить управление iPhone UISlider во время выполнения - где разместить код обновления цвета? - PullRequest
0 голосов
/ 20 февраля 2010

Я добавил элемент управления UISlider в приложение для iPhone View и подключил текстовое поле, которое получает значения из ползунка. Чтобы соответствовать цветам пользовательского интерфейса в приложении, мне нужно изменить цвет ползунка.

Немного погуглив, я смог найти 2 образца, которые делают это (http://blog.hill -it.be / post / 2009/03/23 / Pimp-My-UISlider и http://developer.apple.com/iphone/library/samplecode/UICatalog/index.html) но я застрял, потому что я не уверен, откуда я должен вызывать код.

У меня есть метод, который должен возвращать пользовательский объект UISlider, но как мне переопределить тот, который я создал через конструктор интерфейса, который живет в моих sliderViewController.m и sliderViewController.h?

- (UISlider *)createCustomSlider
{
  CGRect frame = CGRectMake(174, 12.0, 120.0, 7.0);
  UISlider customSlider = [[UISlider alloc] initWithFrame:frame];
  [customSlider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged];
  // in case the parent view draws with a custom color or gradient, use a transparent color
  customSlider.backgroundColor = [UIColor clearColor];  
  UIImage *stetchLeftTrack = [[UIImage imageNamed:@"orangeslide.png"]
                            stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0];
  UIImage *stetchRightTrack = [[UIImage imageNamed:@"yellowslide.png"]
                             stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0];
  [customSlider setThumbImage: [UIImage imageNamed:@"slider_ball.png"]     forState:UIControlStateNormal];
  [customSlider setMinimumTrackImage:stetchLeftTrack forState:UIControlStateNormal];
  [customSlider setMaximumTrackImage:stetchRightTrack forState:UIControlStateNormal];
  customSlider.minimumValue = 0.0;
  customSlider.maximumValue = 100.0;
  customSlider.continuous = YES;
  customSlider.value = 50.0;

  return customSlider;
}

С .NET у меня обычно был бы некоторый код, сгенерированный редактором WinForms, который я затем мог бы переопределить, создав новый объект и присвоив существующей ссылке.

1 Ответ

1 голос
/ 20 февраля 2010

Вы не должны делать это таким образом. У вас есть три варианта:

  1. Вместо того, чтобы ваш метод возвращал новый объект UISlider, измените существующий экземпляр UISlider, созданный вами в IB.
  2. Напишите пользовательский подкласс UISlider и поместите свой код настройки в его метод awakeFromNib. Сделайте этот класс классом экземпляра слайдера в IB.
  3. Полностью удалите ползунок из NIB и создайте его программно, как вы делаете в своем методе. Затем добавьте его как подпредставление в ваш mainView.
...