2009-07-13 5 views
0

У меня возникают проблемы с настройкой альфа-значения объекта подкласса UIView. Какие-либо предложения?Проблема UIView alpha

У меня есть проект UIView, свойство alpha которого я манипулирую, чтобы контролировать яркость. Я использую элемент управления UISlider, чтобы установить значение альфа собственности в подклассе UIView следующим образом:

-(id)initWithFrame:(CGRect)rect andParent:(id)theParent { 

self = [super initWithFrame: rect]; 

if (self !=nil) { 

    [self setParent:theParent]; 

    theSlider = [[UISlider alloc] initWithFrame: CGRectMake(35.0,400.0,250,0)]; 
    theSlider.minimumValue = 0.2; 
    theSlider.maximumValue = 1.0; 
    theSlider.value = 1.0; 
    theSlider.continuous = YES; 

    UIImage *maximumValueImage = [UIImage imageNamed:@"BrightSun.png"]; 
    UIImage *minimumValueImage = [UIImage imageNamed:@"DimSun.png"]; 

    theSlider.maximumValueImage = maximumValueImage; 
    theSlider.minimumValueImage = minimumValueImage; 

    theSlider.hidden = NO; 
    [theSlider addTarget:parent action: @selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged]; 

    [self addSubview:theSlider]; 

} 

return self; 
} 

Метод sliderValueChanged в родительском объекте изменяет значение альфа другого UIView подкласса объекта, OverlayView. Родительский объект является подклассом UIViewController, myViewController. Ползунок живет во втором подклассе UIView с именем SliderView.

- (void) sliderValueChanged: (id)sender { 
    //min = 0.2 
    //max = 1.0 
    UISlider *control = (UISlider *)sender; 
    float theValue = control.value; 
    theValue = -1.0 * (theValue - 1.0) + 0.01; 
    self.overlayView.alpha = theValue; 
} 

Это похоже на работу. Проблема возникает, когда я пытаюсь переключить свойство .hidden в UISlider. Когда я изменить свойство .hidden ДА,

theSlider.hidden = YES; 

Ползунок исчезает, но альфа-значение объекта OverlayView сбрасывается в 0.0. Значение ползунка не изменяется. Я хочу, чтобы альфа-свойство OverlayView было установлено
. Метод sliderValueChanged остается неизменным при изменении скрытого свойства объекта UISlider.

Любые предложения относительно того, что я делаю неправильно? Благодарю.

ответ

0

Ну, сначала начните с добавления точки останова, чтобы увидеть, вызван ли метод sliderValueChanged: когда вы скрываете свой слайдер, который, кажется, имеет место, при этом значение ползунка сбрасывается до 0 при его скрытии. (похоже, что происходит, его угадайте, не могу сказать, не глядя и не перешагнув код). Если то, что я упомянул, имеет место, тогда просто условие есть в методе (if (! Slider.HIDDEN)

+0

? Спасибо. Я уже дал, что я пытаюсь. Метод sliderValueChanged: работает, как ожидалось. Ползунок сохраняет свое значение. sl iderValueChanged: очень просто. - (недействительными) sliderValueChanged: (ID) отправителя { \t \t // мин = 0,2 \t // макс = 1,0 \t \t UISlider * Контроль = (UISlider *) отправителя; \t \t float theValue = control.value; \t \t \t \t \t theValue = -1.0 * (theValue - 1.0) + 0.01; \t \t self.overlayView.alpha = theValue; \t \t Что-то примечание: код работает как ожидается при запуске в симуляторе iPhone. Проблема возникает при выполнении на устройстве. – 2009-07-13 18:51:22

0

Обновление. Я внес изменения в класс OverlayView. OverlayView является подклассом UIView. Я переопределил drawRect : (CGRect) метод прямоугольник следующим образом:..

-(void)drawRect:(CGRect)rect { 
    [super drawRect:rect]; 
} 

Теперь все работает я невежественный, почему это исправляет проблему Является DrawRect: не вызывается подклассов UIView, если они не были перезаписаны

+0

Если это то, что разрешил ваш ответ, отметьте его как ответ (это нормально, чтобы ответить на ваш собственный Q). – Sam

 Смежные вопросы

  • Нет связанных вопросов^_^